1. Giriş
Son güncelleme tarihi: 01.05.2024
İçerik Yayınlama Ağları (CDN'ler), sıklıkla erişilen içerikleri son kullanıcılara daha yakın bir yerde önbelleğe alma, istemcilere daha yakın olan bağlantıları sonlandırma, kaynağa olan bağlantıları yeniden kullanma ve modern ağ protokolleri ile özelleştirmelerin benimsenmesi yoluyla kullanıcı performansını artırır.
GCP'nin medya akışı için küresel uç ağı olan Media CDN, birçok yerleşik veya "temel" sağlar Temel özellikler, en yaygın kullanım alanlarına yöneliktir ancak bu temel özellik grubunda ele alınmayan gereksinimleriniz de olabilir.
Bazen Uç Programlanabilirlik olarak da adlandırılan Medya CDN için Hizmet Uzantıları, Medya CDN'nin davranışını özelleştirmek için uçta kendi kodunuzu çalıştırmanızı sağlar. Bu sayede önbellek anahtarını normalleştirme, özel jeton kimlik doğrulaması ve jeton iptali, ek özel günlük alanları, A/B testi ve özel hata sayfası gibi ek kullanım örneklerinden yararlanabilirsiniz.
Oluşturacaklarınız
Bu kod laboratuvarında, Medya CDN (CDN) + Hizmet Uzantıları (Edge Programmability) + Cloud Storage (CDN kaynağı) ile Edge Compute özellikli bir CDN yayınlama ortamı dağıtma adımlarını inceleyeceğiz.
Neler öğreneceksiniz?
- Kaynak olarak ayarlanan bir Cloud Storage Paketi ile Medya CDN'yi ayarlama
- Özel HTTP kimlik doğrulamasıyla Hizmet Uzantısı eklentisi oluşturma ve Medya CDN ile ilişkilendirme
- Hizmet Uzantısı eklentisinin beklendiği gibi çalıştığını doğrulama
- (İsteğe bağlı) Hizmet Uzantısı eklentisini yönetme (ör. belirli bir eklenti sürümünü güncelleme, referans verme, geri çekme ve silme)
Gerekenler
- Temel Ağ İletişimi ve HTTP bilgisi
- Temel Unix/Linux komut satırı bilgisi
2. Başlamadan önce
Medya CDN İzin Verilenler Listesi İsteği ve Hizmet Uzantıları İzin Verilenler Listesi
Başlamadan önce, projenizin Medya CDN ve Hizmet Uzantılarına yönelik özel önizleme izin verilenler listesine eklendiğinden emin olmanız gerekir.
- Medya CDN'si için hem Medya CDN'ye hem de Hizmet Uzantılarına erişim isteğinde bulunmak istiyorsanız lütfen Google Hesap Ekibinizle iletişime geçerek Medya CDN ve Hizmet Uzantıları için sizin adınıza erişim isteği oluşturun
3. Kurulum ve Gereksinimler
Cloud Shell'i başlatma
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
GCP Console'da, sağ üstteki araç çubuğunda yer alan Cloud Shell simgesini tıklayın:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.
Başlamadan önce
IAM Rolleri ve Erişim
Media CDN ve Artifact Registry kaynakları oluşturmak için gereken Identity and Access Management (IAM) izinleri şunlardır:
- roles/networkservices.edgeCacheAdmin
- roles/networkservices.edgeCacheUser
- roles/networkservices.edgeCacheViewer
- roles/artifactregistry.repoAdmin
Cloud Shell'de project_id, project_num, location ve repository ortam değişkenlerinin ayarlandığından emin olun.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] PROJECT_NUM=[YOUR-PROJECT-NUMBER] LOCATION=us-central1 REPOSITORY=service-extension-$PROJECT_ID
API'leri etkinleştirme
Medya CDN'yi etkinleştir ve Aşağıdaki komutlar aracılığıyla Service Extensions API'leri
gcloud services enable networkservices.googleapis.com gcloud services enable networkactions.googleapis.com gcloud services enable edgecache.googleapis.com gcloud services enable artifactregistry.googleapis.com
4. Cloud Storage Paketi Oluşturma
Medya CDN içeriğinin kaynağı Cloud Storage paketi, üçüncü taraf depolama konumu veya herkese açık herhangi bir HTTP(HTTPS) uç noktası olabilir.
Bu codelab'de içerikleri bir Cloud Storage paketinde depolayacağız.
Paketi oluşturmak için gsutil mb komutunu kullanacağız.
gsutil mb gs://mediacdn-bucket-$PROJECT_ID
İsteğe bağlı olarak, GUI'yi aşağıdaki şekilde kullanarak bir Cloud Storage paketi oluşturabilirsiniz:
- Google Cloud Console'da Cloud Storage sayfasına gidin.
- OLUŞTUR düğmesini tıklayın.
- Paket için bir ad girin. - ör. "mediacdn-bucket-$PROJECT_ID".
- Diğer ayarları varsayılan değerlerinde bırakın.
- OLUŞTUR düğmesini tıklayın.
5. Cloud Storage Paketi'ne bir test nesnesi yükleyin
Şimdi Cloud Storage paketine bir nesne yükleyeceğiz.
- Cloud Shell'de bir dosya oluşturup gsutil'i kullanarak bu dosyayı pakete yükleyin.
echo media-cdn-service-extensions-test > file.txt gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
- Pakete Media CDN erişimi verme
gsutil iam ch \ serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID
6. Medya CDN'yi yapılandırma
Sonra bir Medya CDN yapılandırması oluşturacağız.
Her Medya CDN yapılandırması iki ana kaynaktan oluşur:
- İstemciye yönelik yapılandırma (TLS, IP adresi oluşturma), yönlendirme, CDN yapılandırması (önbellek modları, TTL'ler, imzalama) ve güvenlik politikalarından sorumlu EdgeCacheService.
- HTTP tabanlı kaynaklar için kaynak başına yapılandırmadan sorumlu EdgeCacheOrigin. Ayrıca içeriğin kullanılamadığı ya da erişilebilir olmadığı durumlarda yeniden deneme koşulları.
Edge Önbellek Kaynağını Yapılandırma
Şimdi, az önce oluşturduğunuz Cloud Storage paketine işaret eden bir kaynak oluşturalım.
- Google Cloud Console'da Medya CDN sayfasına gidin.
- KAYNAKLAR sekmesini tıklayın.
- KAYNAK OLUŞTUR'u tıklayın.
- "cloud-storage-origin" değerini girin başlangıç noktası olarak belirleyin.
- Kaynak adresi bölümünde:
- "Google Cloud Storage paketi seç"i belirleyin.
- "mediacdn-bucket-$PROJECT_ID" adlı Cloud Storage paketine göz atın.
- SEÇ'i tıklayın.
- Diğer ayarları varsayılan değerlerinde bırakın.
- KAYNAK OLUŞTUR'u tıklayın.
Yeni oluşturulan EdgeCacheOrigin kaynağı, Kaynaklar sayfasındaki projenizdeki kaynaklar listesinde görünür.
Uç Önbellek Hizmetini yapılandırma
- Google Cloud Console'da Medya CDN sayfasına gidin.
- HİZMETLER sekmesini tıklayın.
- HİZMET OLUŞTUR'u tıklayın.
- Hizmetiniz için benzersiz bir ad girin (ör. "media-cdn") , ardından İleri'yi tıklayın.
- Yönlendirme bölümünde Ana Makine KURALI EKLE'yi tıklayın.
- Joker karakter girin - "*" girin.
- ROTA KURALI EKLE'yi tıklayın.
- Öncelik olarak "1" değerini belirtin.
- EŞLEŞME KOŞULU EKLE'yi tıklayın ve Yol eşleşmesi için "Ön ek eşleşmesi"ni seçin. Eşleme türü olarak "/" belirtin seçeneğini belirtin ve ardından Bitti'yi tıklayın.
- Birincil işlem bölümünde Bir Kaynaktan Getir'i seçin ve ardından, açılır listeden yapılandırdığınız kaynağı seçin.
- Daha fazla yapılandırma seçeneği genişletmek için GELİŞMİŞ YAPILANDIRMALAR'ı tıklayın.
- Rota işleminde ÖĞE EKLE'yi tıklayın. Daha sonra şunları yapın:
- Tür alanında "CDN politikası"nı seçin.
- Önbellek modu için "Tümünü önbelleğe almaya zorla"yı seçin.
- Diğerlerini varsayılan ayarda bırakın
- Bitti'yi tıklayın.
- Kaydet'i tıklayın.
- HİZMET OLUŞTUR'u tıklayın.
Yeni oluşturulan EdgeCacheService kaynağı, hizmetler sayfasındaki projenizdeki hizmet listesinde görünür.
MediaCDN IP adresini ve Testini alma
- Google Cloud Console'da Medya CDN sayfasına gidin.
- Medya CDN'ye git
- Hizmetler sekmesini tıklayın.
- Hizmetiniz için Adresler sütununa bakın.
Hizmetinizin içeriği önbelleğe alacak şekilde doğru şekilde yapılandırılıp yapılandırılmadığını test etmek için curl komut satırı aracını kullanarak istekler gönderin ve yanıtları kontrol edin.
curl -svo /dev/null "http://MEDIA_CDN_IP_ADDRESS/file.txt"
Komut şuna benzer bir çıkış üretir:
< HTTP/2 200 OK ... media-cdn-service-extensions-test ...
Cloud Storage'ın kaynak olduğu bir MediaCDN dağıtımını başarıyla oluşturdunuz.
7. Hizmet Uzantıları için Artifact Registry'yi yapılandırma
Hizmet Uzantıları oluşturmadan önce Artifact Registry'yi yapılandırmamız gerekir. Artifact Registry, Google Cloud'un derleme yapılarını yönetmek için kullanabileceği evrensel paket yöneticisidir. Hizmet Uzantısı (Proxy-Wasm) eklentileri, Artifact Registry'de yayınlanır. Artifact Registry'de yayınlanan Proxy-Wasm eklentileri, Media CDN dağıtımınıza dağıtılabilir.
Kod deposunu oluşturmak için gcloud structured Repositories create komutunu kullanacağız
gcloud artifacts repositories create service-extension-$PROJECT_ID \ --repository-format=docker \ --location=$LOCATION \ --description="Repo for Service Extension" \ --async
İsteğe bağlı olarak, GUI'yi aşağıdaki şekilde kullanarak Kod Deposu oluşturabilirsiniz:
- Google Cloud konsolunda Artifact Registry sayfasına gidin.
- + KOD KODU OLUŞTUR düğmesini tıklayın.
- Depo için bir ad girin. örneğin "service-extension-$PROJECT_ID".
- Biçim - ‘Docker,' Mod - "Standart", Konum Türü - "Bölge" ve "us-central1 (Iowa)" seçeneğini belirleyin
- OLUŞTUR düğmesini tıklayın.
Yeni oluşturulan Artifact Registry Deposu kaynağı, Depolar sayfasında görünecektir.
Depo kaynağı oluşturulduktan sonra, Cloud Shell Docker istemcinizi paketleri bu depoyu kullanarak aktarıp çekecek şekilde yapılandırmak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud auth configure-docker $LOCATION-docker.pkg.dev
Çıkış:
... Adding credentials for: us-central1-docker.pkg.dev Docker configuration file updated.
8. Medya CDN'de Hizmet Uzantılarını Yapılandırma
Şimdi, Rust programlama dili kullanılarak Media CDN'ye dağıtılabilen bir Hizmet Uzantısı (Proxy-Wasm) eklentisinin nasıl yazılacağını ve derleneceğini göstereceğiz.
Bu örnekte, her HTTP isteğinin "gizli" değerine sahip bir Yetkilendirme başlığı içerdiğini doğrulayan bir Proxy-Wasm eklentisi oluşturacağız. İstek bu başlığı içermiyorsa eklenti, HTTP 403 Yasak yanıtı oluşturur.
Hizmet Uzantıları ile ilgili kısa bir hatırlatma yapalım. Üç temel kaynak bulunur: WasmAction, Wasmplugin ve WasmFenVersion.
- WasmAction kaynağı, Media CDN EdgeCacheService'inize eklenen öğedir. Bir WasmAction, bir Wasmplugin kaynağına atıfta bulunuyor.
- Bir Wasmplugin kaynağının, mevcut etkin WasmpluginVersion'a karşılık gelen bir ana sürümü vardır.
- Wasm PlugininVersions, Artifact Registry'deki bir container görüntüsüne referans verir. Proxy-Wasm eklentilerinizde değişiklik yaparken farklı Wasm PlugininVersions oluşturursunuz.
Bu kaynaklar arasındaki ilişkiyi daha iyi anlamak için lütfen aşağıdaki diyagrama bakın.
Hizmet Uzantısı eklentisi yazma ve derleme
- https://www.rust-lang.org/tools/install adresindeki talimatları uygulayarak Rust araç zincirini yükleyin.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Ardından aşağıdaki komutu çalıştırarak Rust araç zincirinize Wasm desteğini ekleyin:
rustup target add wasm32-wasi
- my-wasm-plugin adlı bir Rust paketi oluşturun:
cargo new --lib my-wasm-plugin
Çıkış:
Created library `my-wasm-plugin` package
- my-wasm-plugin dizinine girdiğinizde bir
Cargo.toml
dosyası ve birsrc
dizini görürsünüz.
cd my-wasm-plugin ls
Çıkış:
Cargo.toml src
- Ardından,
Cargo.toml
dosyasını düzenleyerek Rust paketinizi yapılandırın. Cargo.toml dosyasındaki[dependencies]
satırının arkasına şunu ekleyin:
proxy-wasm = "0.2"
log = "0.4"
[lib]
crate-type = ["cdylib"]
[profile.release]
lto = true
opt-level = 3
codegen-units = 1
panic = "abort"
strip = "debuginfo"
- Düzenleme yaptıktan sonra
Cargo.toml
dosyası yaklaşık olarak şu şekilde görünmelidir:
[package]
name = "my-wasm-plugin"
version = "0.1.0"
edition = "2021"
[dependencies]
proxy-wasm = "0.2"
log = "0.4"
[lib]
crate-type = ["cdylib"]
[profile.release]
lto = true
opt-level = 3
codegen-units = 1
panic = "abort"
strip = "debuginfo"
- . sample_code dosyasının tüm içeriğini Cloud Shell'deki
src
dizininde bulunanlib.rs
dosyasına kopyalayın.
- Düzenleme yaptıktan sonra
lib.rs
dosyası yaklaşık olarak şu şekilde görünmelidir:
use log::info;
use proxy_wasm::traits::*;
use proxy_wasm::types::*;
...
struct DemoPlugin;
impl HttpContext for DemoPlugin {
fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
if self.get_http_request_header("Authorization") == Some(String::from("secret")) {
info!("Access granted.");
Action::Continue
} else {
self.send_http_response(403, vec![], Some(b"Access forbidden.\n"));
Action::Pause
}
}
}
impl Context for DemoPlugin {}
Cargo.toml
manifest dosyasını yapılandırıp Proxy-Wasm kodumuzulib.rs
dosyasına yazdığınıza göre Proxy-Wasm eklentimizi oluşturabiliriz.
cargo build --release --target wasm32-wasi
Derleme başarıyla tamamlandıktan sonra aşağıdaki gibi bir mesaj görürsünüz:
Finished release [optimized] target(s) in 1.01s
target
dizinini de doğrulayıp dosyaların oluşturulup oluşturulmadığını kontrol edelim:
ls ./target
Çıkış şu şekilde gösterilir:
CACHEDIR.TAG release wasm32-wasi
Artifact Registry'ye Proxy-Wasm eklentisi yayınlama
Şimdi, Media CDN'ye dağıtılabilmesi için Proxy-Wasm eklentimizi daha önce oluşturduğunuz Artifact Registry Deposu'nda yayınlayacağız.
İlk olarak Proxy-Wasm eklentilerini bir container görüntüsünde paketleriz.
- Aynı dizinde my-wasm-plugin adlı dizinde, aşağıdaki içeriklere sahip
Dockerfile
adında bir dosya oluşturun:
FROM scratch
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
- Şimdi container görüntüsünü derleyin:
docker build --no-cache --platform wasm -t my-wasm-plugin .
(yalnızca x86 olmayan işlemciler) Ardından, container görüntüsünü oluşturun:
docker build --no-cache --platform wasm --provenance=false -t my-wasm-plugin .
Çıkış
[+] Building 0.2s (5/5) FINISHED docker:default ...
- Ardından, yayınlayın veya "aktarın" Proxy-Wasm eklentinizi Artifact Registry'ye yükseltin. Kapsayıcı görüntümüzü "prod" kapanış etiketinin hemen öncesine yapıştırın.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod
Şimdi, etiketlenmiş "ürün"ü container görüntüsünü tekrar yükleyebilirsiniz.
docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod
Çıkış:
The push refers to repository ... 8564ddd9910a: Pushed prod: digest: sha256:f3ae4e392eb45393bfd9c200cf8c0c261762f7f39dde5c7cd4b9a8951c6f2812 size: 525
Şimdi Proxy-Wasm eklentisinin container görüntüsünün Artifact Registry'ye başarıyla aktarıldığını doğrulayalım. Aşağıdakine benzer bir çıkış görürsünüz:
gcloud artifacts docker images list $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin --include-tags
Çıkış:
Listing items under project ... IMAGE DIGEST TAGS CREATE_TIME UPDATE_TIME <LOCATION>-docker.pkg.dev/.../my-wasm-plugin sha256:08c12... prod 2021-11-10T23:31:27 2021-11-10T23:31:27
Media CDN dağıtımınızla bir Proxy-Wasm eklentisi ilişkilendirme
Artık Proxy-Wasm eklentisini Medya CDN dağıtımınızla ilişkilendirmeye hazırız.
Proxy-Wasm eklentileri, EdgeCacheService kaynağındaki Media CDN rotalarıyla ilişkilendirilir.
- İlk olarak Proxy-Wasm eklentimiz için bir Wasm eklentisi kaynağı oluşturuyoruz.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
- Sonra, bir WasmpluginVersion oluştururuz.
gcloud alpha service-extensions wasm-plugin-versions create my-version-1 \ --wasm-plugin=my-wasm-plugin-resource \ --image="$LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod"
- Ardından, Proxy-Wasm eklentimiz için ana sürümü belirliyoruz.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \ --main-version=my-version-1
Şimdi Proxy-Wasm eklentisinin Container Görüntüsü ile Artifact Registry Deposu'nda ilişkilendirildiğini doğrulayalım. Aşağıdaki gibi bir çıkış görürsünüz:
gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource
Çıkış:
NAME WASM_IMAGE WASM_IMAGE_DIGEST CONFIG_SIZE CONFIG_IMAGE CONFIG_IMAGE_DIGEST UPDATE_TIME c7cfa2 <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:6d663... ... ... ...
- Ardından, Wasm eklenti kaynağımızı referans alan bir WasmAction kaynağı oluşturuyoruz.
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \ --wasm-plugin=my-wasm-plugin-resource
WasmAction kaynağının Proxy-Wasm eklentisiyle başarılı bir şekilde ilişkilendirildiğini doğrulayın. Aşağıdaki gibi bir çıkış görürsünüz:
gcloud alpha service-extensions wasm-actions list
Çıkış:
NAME WASMPLUGIN my-wasm-action-resource projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource ...
- Şimdi, Media CDN EdgeCacheService'in yapılandırmasını dışa aktarmamız gerekiyor:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
- Ardından, my-service.yaml dosyasını açın ve belirtilen rota için routeAction öğesine, daha önce oluşturulan WasmFin kaynağına referans veren bir WasmAction ekleyin.
wasmAction: "my-wasm-action-resource"
- Düzenlemelerinizi yaptıktan sonra my-service.yaml dosyası yaklaşık olarak şu şekilde görünmelidir:
...
pathMatchers:
- name: routes
routeRules:
- headerAction: {}
matchRules:
- prefixMatch: /
origin: projects/<PROJECT_NUM>/locations/global/edgeCacheOrigins/cloud-storage-origin
priority: '1'
routeAction:
cdnPolicy:
cacheKeyPolicy: {}
cacheMode: FORCE_CACHE_ALL
defaultTtl: 3600s
signedRequestMode: DISABLED
wasmAction: "my-wasm-action-resource"
...
- Ardından, Proxy-Wasm yapılandırmasıyla güncellenmiş yapılandırmayı
my-service-with-wasm.yaml
dosyasına kaydederiz.
- Son olarak, üretim Medya CDN ortamı için güncellenmiş yapılandırmayı içe aktarırız:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml
9. Medya CDN'de Hizmet Uzantıları Proxy-Wasm eklentisini doğrulama
Hizmetinizin içeriği önbelleğe alacak şekilde doğru şekilde yapılandırılıp yapılandırılmadığını test etmek için curl komut satırı aracını kullanarak istekler gönderin ve yanıtları kontrol edin.
curl -svo /dev/null "http://IP_ADDRESS/file.txt"
Komut şuna benzer bir çıkış üretir:
< HTTP/2 403 Forbidden ... Access forbidden. ...
Şimdi, Yetkilendirme başlığı ve gizli anahtar değeri ile isteği tekrar gönderin.
curl -svo /dev/null "http://IP_ADDRESS/file.txt" -H "Authorization: secret"
Komut şuna benzer bir çıkış üretir:
< HTTP/2 200 OK ... media-cdn-service-extensions-test ...
10. İsteğe bağlı: Proxy-Wasm eklentilerini yönetme
Proxy-Wasm eklentisini güncelleme
Proxy-Wasm eklentilerinizde iyileştirmeler yaptıkça veya yeni işlevler ekledikçe güncellenmiş eklentilerinizi Media CDN'ye dağıtmanız gerekir. Aşağıda, eklentinin güncellenmiş bir sürümünü dağıtma adımları açıklanmaktadır.
Örneğin, aşağıdaki gibi kodu değiştirerek Yetkilendirme başlığını başka bir kimlik doğrulama değerine göre değerlendirmek için örnek eklenti kodunu güncelleyebilirsiniz.
İlk olarak, src/lib.rs kaynak dosyasını aşağıda gösterilen kodla güncelleyin:
use log::{info, warn};
use proxy_wasm::traits::*;
use proxy_wasm::types::*;
...
struct DemoPlugin;
impl HttpContext for DemoPlugin {
fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
if self.get_http_request_header("Authorization") == Some(String::from("another_secret")) {
info!("Access granted.");
Action::Continue
} else {
warn!("Access forbidden.");
self.send_http_response(403, vec![], Some(b"Access forbidden.\n"));
Action::Pause
}
}
}
impl Context for DemoPlugin {}
Ardından, güncellenmiş eklentiyi derleyin, paketleyin ve yayınlayın:
cargo build --release --target wasm32-wasi docker build --no-cache --platform wasm -t my-wasm-plugin . docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY/my-wasm-plugin:prod docker push $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod
Artifact Registry'de kapsayıcı görüntüsü güncellendikten sonra, yeni bir WasmpluginVersion oluşturmamız ve ardından Wasm Pluginin'in –main sürümünü yeni sürüme referans verecek şekilde güncellememiz gerekir.
gcloud alpha service-extensions wasm-plugin-versions create my-version-2 \ --wasm-plugin=my-wasm-plugin-resource \ --image="$LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod"
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \ --main-version=my-version-2
Artifact Registry'den içe aktarılacak ve Media CDN dağıtımınıza canlı olarak aktarılacak container görüntüsünün sürümünü başarıyla güncellediniz.
Önceki bir sürüme geri dönme
Bir eklentinin önceki bir sürümüne geri dönmek için Wasm eklenti kaynağını önceki bir sürüme referans verecek şekilde güncelleyebilirsiniz.
İlk olarak, mevcut sürümler listelenir:
gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource
Aşağıdaki çıkışı göreceksiniz:
NAME WASM_IMAGE WASM_IMAGE_DIGEST CONFIG_SIZE CONFIG_IMAGE CONFIG_IMAGE_DIGEST UPDATE_TIME c7cfa2 <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:6d663... ... ... a2a8ce <LOCATION>-docker.pkg.dev/.../my-wasm-plugin@sha256:08c12... ... ...
Ardından, Wasm eklenti kaynağını önceki "a2a8ce" sürümüne referans verecek şekilde güncelleriz:
$ gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \ --main-version="a2a8ce"
İşlem başarılı olduktan sonra şu çıkışı göreceksiniz:
✓ WASM Plugin [my-wasm-plugin-resource] is now serving version "a2a8ce"
Media CDN, yeni bir Wasm eklentisi kaynağı oluşturulduğunda Docker görüntünüzün görüntü özetini kaydettiğinden geri alma işlemi, kodunuzun son kullanıma sunmadan önce çalışan sürümünü kullanır.
gcloud alpha service-extensions wasm-plugins describe my-wasm-plugin-resource \ --expand-config
"a2a8ce" sürümü için bu, sha256:08c12... özetine sahip sürümdür:
name: "my-wasm-plugin-resource" mainVersion: "a2a8ce" mainVersionDetails: image: "<LOCATION>-docker.pkg.dev/<PROJECT>/<REPOSITORY>/my-wasm-plugin" imageDigest: "<LOCATION>-docker.pkg.dev/<PROJECT>/<REPOSITORY>/my-wasm-plugin@sha256:08c121dd7fd1e4d3a116a28300e9fc1fa41b2e9775620ebf3d96cb7119bd9976"
WasmAction Silme ve WasmPlugin
WasmAction, Wasm Pluginin ve ilişkili WasmFenVersions öğelerini silmek için lütfen şu adımları uygulayın.
İlk olarak Media CDN EdgeCacheService yapılandırmanızdaki WasmAction referansını kaldırın.
Kaldırılacak referans çizgi:
wasmAction: "my-wasm-action-resource"
Ardından, düzenlenen EdgeCacheService yapılandırmasını güncelleriz.
gcloud alpha edge-cache services import prod-media-service --source=my-service.yaml
Ardından, WasmEklentilerinizin ana sürümünü boş bir dizeyle (""") güncelleyin.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource --main-version=
""
Son olarak, aşağıdaki silme adımlarını sırayla uygulayın.
gcloud alpha service-extensions wasm-actions delete my-wasm-action-resource gcloud alpha service-extensions wasm-plugin-versions delete my-version \ --wasm-plugin=my-wasm-plugin-resource gcloud alpha service-extensions wasm-plugins delete my-wasm-plugin-resource
11. Lab ortamını temizleyin
CodeLab'i tamamladıktan sonra laboratuvar kaynaklarını temizlemeyi unutmayın. Aksi takdirde bu kaynaklar çalışmaya ve maliyet oluşturmaya devam eder.
Aşağıdaki komutlar Media CDN EdgeCache Hizmeti, EdgeCache Config ve Hizmet Uzantıları Eklentisi'ni siler. Aşağıdaki silme adımlarını sırayla uygulayın.
gcloud edge-cache services delete media-cdn gcloud edge-cache origins delete cloud-storage-origin gcloud alpha service-extensions wasm-actions delete my-wasm-action-resource gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource --main-version="" gcloud alpha service-extensions wasm-plugin-versions delete my-version-1 --wasm-plugin=my-wasm-plugin-resource gcloud alpha service-extensions wasm-plugins delete my-wasm-plugin-resource gcloud artifacts repositories delete service-extension-$PROJECT_ID --location=$LOCATION
Yukarıdaki komutların her biri, kaynağın silinmesini onaylamanızı istemelidir.
12. Tebrikler!
Tebrikler, Medya CDN'de Hizmet Uzantıları codelab'ini tamamladınız.
İşlediklerimiz
- Kaynak olarak ayarlanan bir Cloud Storage Paketi ile Medya CDN'yi ayarlama
- Özel HTTP kimlik doğrulamasıyla Hizmet Uzantısı eklentisi oluşturma ve Medya CDN ile ilişkilendirme
- Hizmet Uzantısı eklentisinin beklendiği gibi çalıştığını doğrulama
- (İsteğe bağlı) Hizmet Uzantısı eklentisini yönetme (ör. belirli bir eklenti sürümünü güncelleme, referans verme, geri çekme ve silme)
Sırada ne var?
Bu codelab'lerden bazılarına göz atın...
Daha fazla bilgi
- Yüksek performanslı hizmet çalışanı yükleme
- İstek Türlerine Dayalı Hizmet Çalışanı Önbelleğe Alma Stratejileri