1. Giriş
Last Updated: 2024-05-01
İçerik yayınlama ağları (CDN'ler), sık erişilen içerikleri son kullanıcılara daha yakın bir konumda önbelleğe alarak, bağlantıları istemcilere daha yakın bir konumda sonlandırarak, bağlantıları kaynağa yeniden kullanarak ve modern ağ protokollerini ve özelleştirmelerini benimseyerek kullanıcı performansını artırır.
Medya akışı için GCP'nin küresel uç ağı olan Media CDN, birçok yerleşik veya "temel" özellik sunar.Temel özellikler, en yaygın kullanım alanlarını ele almayı amaçlar ancak bu temel özellik seti tarafından ele alınmayan gereksinimleriniz de olabilir.
Bazen Edge Programmability olarak da adlandırılan Media CDN için Hizmet Uzantıları, Media CDN'nin davranışını özelleştirmek amacıyla kendi kodunuzu uçta çalıştırmanıza olanak tanır. 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 alanlarından yararlanabilirsiniz.
Ne oluşturacaksınız?
Bu kod laboratuvarında, Media CDN (CDN) + Service Extensions (Edge Programmability) + Cloud Storage (CDN kaynağı) ile Edge Compute özellikli bir CDN yayın ortamı dağıtma adımlarını inceleyeceğiz.

Neler öğreneceksiniz?
- Media CDN'yi, kaynak olarak ayarlanmış bir Cloud Storage paketiyle kullanma
- Özel HTTP kimlik doğrulaması içeren bir hizmet uzantısı eklentisi oluşturma ve bunu Media CDN ile ilişkilendirme
- Hizmet Uzantısı eklentisinin beklendiği gibi çalıştığını doğrulama
- (İsteğe bağlı) Belirli bir eklenti sürümünü güncelleme, referans verme, geri alma ve silme gibi hizmet uzantısı eklentilerini yönetme
Gerekenler
- Temel ağ iletişimi ve HTTP bilgisi
- Temel düzeyde Unix/Linux komut satırı bilgisi
2. Başlamadan önce
Media CDN izin verilenler listesi ve hizmet uzantıları izin verilenler listesi isteği
Başlamadan önce projenizin hem Media CDN hem de Media CDN için Hizmet Uzantıları'nın özel önizleme izin verilenler listesine eklendiğinden emin olmanız gerekir.
- Hem Media CDN'ye hem de Media CDN için Hizmet Uzantıları'na erişim isteğinde bulunmak üzere lütfen Google Hesap Ekibinizle iletişime geçerek Media CDN ve Hizmet Uzantıları için adınıza erişim isteği oluşturmasını isteyin.
3. Kurulum ve Gereksinimler
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak 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 Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir ekranla karşılaşırsınız:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki çalışmalarınızın tamamını yalnızca bir tarayıcı kullanarak 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şkenlerinizin 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
Aşağıdaki komutları kullanarak Media CDN ve Hizmet Uzantıları API'lerini etkinleştirin.
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
Media CDN içeriği; Cloud Storage paketi, üçüncü taraf depolama konumu veya herkese açık erişilebilen herhangi bir HTTP(HTTPS) uç noktası gibi konumlardan gelebilir.
Bu codelab'de, içeriği 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, aşağıdaki gibi GUI'yi kullanarak bir Cloud Storage paketi oluşturabilirsiniz:
- Google Cloud Console'da Cloud Storage sayfasına gidin.
- OLUŞTUR düğmesini tıklayın.
- Bucket için bir ad girin. - Örneğin, "mediacdn-bucket-$PROJECT_ID".
- Diğer ayarları varsayılan değerlerinde bırakın.
- OLUŞTUR düğmesini tıklayın.

5. Cloud Storage paketine bir test nesnesi yükleme
Şimdi Cloud Storage paketine bir nesne yükleyeceğiz.
- Cloud Shell'de bir dosya oluşturun ve gsutil kullanarak 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. Media CDN'yi yapılandırma
Ardından, bir Media CDN yapılandırması oluşturacağız.
Her Media CDN yapılandırması iki ana kaynaktan oluşur:
- EdgeCacheService: İstemciye yönelik yapılandırmadan (TLS, IP adresleme), yönlendirmeden, CDN yapılandırmasından (önbellek modları, TTL'ler, imzalama) ve güvenlik politikalarından sorumludur.
- EdgeCacheOrigin: İçeriğin kullanılamadığı veya erişilemediği durumlarda yeniden deneme koşullarının yanı sıra HTTP tabanlı herhangi bir kaynak için kaynak başına yapılandırmadan sorumludur.
Bir Edge Cache Origin yapılandırma
Şimdi, yeni oluşturduğunuz Cloud Storage paketini işaret eden bir kaynak oluşturalım.
- Google Cloud Console'da Media CDN sayfasına gidin.
- KAYNAKLAR sekmesini tıklayın.
- CREATE ORIGIN'i (Kaynak Oluştur) tıklayın.
- Edge önbellek kaynağının adı olarak "cloud-storage-origin" girin.
- Kaynak adresi bölümünde:
- "Google Cloud Storage paketi seçin"i seçin.
- "mediacdn-bucket-$PROJECT_ID" adlı Cloud Storage paketine GÖZ ATIN.
- SEÇ'i tıklayın.
- Diğer ayarları varsayılan değerlerinde bırakın.
- CREATE ORIGIN'i (Kaynak Oluştur) tıklayın.

Yeni oluşturulan EdgeCacheOrigin kaynağı, Kaynaklar sayfasında projenizdeki kaynaklar listesinde görünür.
Edge Cache Service yapılandırma
- Google Cloud Console'da Media CDN sayfasına gidin.
- HİZMETLER sekmesini tıklayın.
- CREATE SERVICE'i (HİZMET OLUŞTUR) tıklayın.
- Hizmetiniz için benzersiz bir ad girin (ör. "media-cdn") ve ardından İleri'yi tıklayın.

- Yönlendirme bölümünde ADD HOST RULE'u (Ana makine kuralı ekle) tıklayın.
- Barındırıcılar alanına joker karakter olan "*" işaretini girin.

- YÖNLENDİRME KURALI EKLE'yi tıklayın.
- Öncelik için "1" değerini belirtin.
- EŞLEŞME KOŞULU EKLE'yi tıklayın. Yol eşleşmesi için Eşleme türü olarak "Önek eşleşmesi"ni seçin, Yol eşleşmesi alanında "/" karakterini belirtin ve Bitti'yi tıklayın.
- Birincil işlem bölümünde Bir Kaynaktan Getir'i seçin ve açılır listeden yapılandırdığınız kaynağı seçin.

- Daha fazla yapılandırma seçeneğini genişletmek için GELİŞMİŞ YAPILANDIRMALAR'ı tıklayın.
- Rota işleminde ÖĞE EKLE'yi tıklayın. Ardından şunları yapın:
- Tür için "CDN politikası"nı seçin.
- Önbellek modu için "Tümünü önbelleğe almayı zorunlu kıl"ı seçin.
- Diğer ayarları varsayılan olarak bırakın.
- Bitti'yi tıklayın.
- Kaydet'i tıklayın.

- CREATE SERVICE'i (HİZMET OLUŞTUR) tıklayın.
Yeni oluşturulan EdgeCacheService kaynağı, projenizdeki hizmetlerin listelendiği Hizmetler sayfasında görünür.
MediaCDN IP adresini alma ve test etme
- Google Cloud Console'da Media CDN sayfasına gidin.
- Media CDN'ye gitme
- Hizmetler sekmesini tıklayın.
- Hizmetiniz için Adresler sütununa bakın.

Hizmetinizin içeriği önbelleğe alacak şekilde doğru yapılandırıldığını test etmek için curl komut satırı aracını kullanarak istek gönderin ve yanıtları kontrol edin.
curl -svo /dev/null "http://MEDIA_CDN_IP_ADDRESS/file.txt"
Komut, aşağıdakine benzer bir çıkış üretmelidir:
< HTTP/2 200 OK ... media-cdn-service-extensions-test ...
Artık Cloud Storage'ı kaynak olarak kullanarak 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, derleme yapılarını yönetmek için Google Cloud'un evrensel paket yöneticisidir. Hizmet uzantısı (Proxy-Wasm) eklentileri Artifact Registry'de yayınlanır. Proxy-Wasm eklentileri, Artifact Registry'ye yayınlandıktan sonra Media CDN dağıtımınıza dağıtılabilir.
Depoyu oluşturmak için gcloud artifacts 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, aşağıdaki gibi GUI'yi kullanarak bir depo oluşturabilirsiniz:
- Google Cloud Console'da Artifact Registry sayfasına gidin.
- + DEPO 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)"yı seçin.
- OLUŞTUR düğmesini tıklayın.

Yeni oluşturulan Artifact Registry Repository kaynağı, Depolar sayfasında görünmelidir.
Depo kaynağı oluşturulduktan sonra Cloud Shell docker istemcinizi bu depoyu kullanarak paketleri 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. Media CDN'de Hizmet Uzantılarını Yapılandırma
Şimdi, Rust programlama dilini kullanarak Media CDN'ye dağıtılabilen bir hizmet uzantısı (Proxy-Wasm) eklentisinin nasıl yazılacağını ve oluşturulacağını göstereceğiz.
Bu örnekte, her HTTP isteğinin "secret" değerine sahip bir Authorization başlığı içerdiğini doğrulayan bir Proxy-Wasm eklentisi oluşturacağız. İstek bu başlığı içermiyorsa eklenti, HTTP 403 Forbidden yanıtı oluşturur.
Hizmet uzantılarıyla ilgili kısa bir hatırlatma: Üç temel kaynak vardır: WasmAction, WasmPlugin ve WasmPluginVersion.
- WasmAction kaynağı, Media CDN EdgeCacheService'inize eklenen kaynaktır. WasmAction, bir WasmPlugin kaynağına referans veriyor.
- WasmPlugin kaynağının, etkin WasmPluginVersion'a karşılık gelen bir ana sürümü vardır.
- WasmPluginVersions, Artifact Registry'deki bir container görüntüsüne referans verir. Proxy-wasm eklentilerinizde değişiklik yaptıkça farklı WasmPluginVersion'lar oluşturursunuz.
Bu kaynaklar arasındaki ilişkiyi daha iyi anlamak için lütfen aşağıdaki şemaya bakın.

Hizmet Uzantısı eklentisi yazma ve oluşturma
- 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ği 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 dizinini girin.
Cargo.tomldosyası vesrcdizini görünür.
cd my-wasm-plugin ls
Çıkış:
Cargo.toml src
- Ardından,
Cargo.tomldosyasını düzenleyerek Rust paketinizi yapılandırın. Cargo.toml dosyasındaki[dependencies]satırından sonra aşağıdakileri 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üzenlemelerinizden sonra
Cargo.tomldosyası 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
srcdizinindekilib.rsdosyasına kopyalayın.
- Düzenlemelerinizden sonra
lib.rsdosyası 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.tomlmanifest dosyasını yapılandırdığımıza velib.rsdosyasında Proxy-Wasm kodumuzu yazdığımıza göre artık Proxy-Wasm eklentimizi oluşturabiliriz.
cargo build --release --target wasm32-wasi
Derleme başarıyla tamamlandığında aşağıdaki gibi bir mesaj görürsünüz:
Finished release [optimized] target(s) in 1.01s
Ayrıca, target dizinini doğrulayalım ve oluşturulan dosyaları kontrol edelim:
ls ./target
Aşağıda gösterildiği gibi bir çıkış görürsünüz:
CACHEDIR.TAG release wasm32-wasi
Artifact Registry'de Proxy-Wasm eklentisi yayınlama
Şimdi, Proxy-Wasm eklentimizi daha önce oluşturduğunuz Artifact Registry deposunda yayınlayacağız. Böylece eklenti, Media CDN'ye dağıtılabilecek.
Öncelikle Proxy-Wasm eklentilerini bir container görüntüsünde paketleriz.
- Aynı dizinde (my-wasm-plugin) aşağıdaki içeriklere sahip
Dockerfileadlı bir dosya oluşturun:
FROM scratch
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
- Ardından, kapsayıcı görüntüsünü oluşturun:
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, Proxy-Wasm eklentinizi Artifact Registry'ye yayınlayın veya "push" edin. Kapsayıcı görüntümüzü "prod" etiketiyle etiketleyeceğiz.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod
Şimdi etiketlenmiş "prod" container görüntüsünü depoya aktaralım.
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 kapsayıcı 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örmeniz gerekir:
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
Proxy-Wasm eklentisini Media CDN dağıtımınızla ilişkilendirme
Artık Proxy-Wasm eklentisini Media 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-plugin kaynağı oluştururuz.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
- Ardından 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 eklentimizin ana sürümünü belirtiriz.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
--main-version=my-version-1
Şimdi Proxy-Wasm eklentisinin, Artifact Registry deposunda bulunan Container Image ile başarıyla ilişkilendirildiğini doğrulayalım. Aşağıdakine benzer bir çıkış görmelisiniz:
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ıza referans veren bir WasmAction kaynağı oluştururuz.
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ıyla ilişkilendirildiğini de doğrulayalım. Aşağıdakine benzer bir çıkış görmeniz gerekir:
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'imizin 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 verilen rota için routeAction'a daha önce oluşturulan WasmPlugin kaynağına referans veren bir wasmAction ekleyin.
wasmAction: "my-wasm-action-resource"
- Düzenlemelerinizden sonra my-service.yaml dosyası yaklaşık olarak aşağıdaki gibi 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, güncellenen yapılandırmayı Proxy-Wasm yapılandırmasıyla birlikte
my-service-with-wasm.yamldosyasına kaydederiz.
- Son olarak, üretim Media CDN ortamı için güncellenen yapılandırmayı içe aktarıyoruz:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml
9. Media CDN'de Hizmet Uzantıları Proxy-Wasm eklentisini doğrulama
Hizmetinizin içeriği önbelleğe alacak şekilde doğru yapılandırıldığını test etmek için curl komut satırı aracını kullanarak istek gönderin ve yanıtları kontrol edin.
curl -svo /dev/null "http://IP_ADDRESS/file.txt"
Komut, aşağıdakine benzer bir çıkış üretmelidir:
< HTTP/2 403 Forbidden ... Access forbidden. ...
Şimdi isteği, yetkilendirme başlığı ve gizli değeriyle tekrar gönderin.
curl -svo /dev/null "http://IP_ADDRESS/file.txt" -H "Authorization: secret"
Komut, aşağıdakine benzer bir çıkış üretmelidir:
< 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üncellenen eklentilerinizi Media CDN'ye dağıtmanız gerekir. Aşağıda, bir eklentinin güncellenmiş sürümünü dağıtma adımları açıklanmaktadır.
Örneğin, kodu aşağıdaki gibi değiştirerek kimlik doğrulama için yetkilendirme başlığını başka bir değere göre değerlendirmek üzere örnek eklenti kodunu güncelleyebilirsiniz.
Öncelikle src/lib.rs kaynak dosyasını aşağıdaki 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üncellenen eklentiyi oluşturun, 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ı resmi güncellendikten sonra yeni bir WasmPluginVersion oluşturmamız ve ardından WasmPlugin'in –main-version'ı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
Artık Artifact Registry'den içe aktarılacak kapsayıcı görüntüsünün sürümünü başarıyla güncellediniz ve Media CDN dağıtımınızda yayınladınız.
Önceki bir sürüme geri dönme
Bir eklentinin önceki sürümüne geri dönmek için Wasm eklenti kaynağını önceki bir sürümü referans alacak şekilde güncelleyebilirsiniz.
Öncelikle, mevcut sürümleri listeleriz:
gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource
Aşağıdaki çıkışı görürsünüz:
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 sürüm olan "a2a8ce"ye referans verecek şekilde güncelleriz:
$ gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
--main-version="a2a8ce"
İşlem başarılı olduğunda şu çıkışı görürsünüz:
✓ WASM Plugin [my-wasm-plugin-resource] is now serving version "a2a8ce"
Media CDN, yeni bir Wasm-plugin kaynağı her oluşturulduğunda Docker görüntünüzün görüntü özetini kaydettiğinden geri alma işlemi, son dağıtımdan önce çalışan kodunuzun 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 (özet sha256:08c12... olan sürüm):
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 ve WasmPlugin silme
WasmAction, WasmPlugin ve ilişkili WasmPluginVersions'ı silmek için lütfen aşağıdaki adımları uygulayın.
Öncelikle, Media CDN EdgeCacheService yapılandırmanızdaki WasmAction referansını kaldırın.
Kaldırılacak referans çizgisi:
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, WasmPlugin'inizin ana sürümünü boş bir dize "" olarak 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. Laboratuvar ortamını temizleme
CodeLab'i tamamladıktan sonra laboratuvar kaynaklarını temizlemeyi unutmayın. Aksi takdirde, kaynaklar çalışmaya ve maliyet tahakkuk etmeye devam eder.
Aşağıdaki komutlar Media CDN EdgeCache Hizmeti'ni, EdgeCache Yapılandırması'nı 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ı ister.
12. Tebrikler!
Tebrikler! Media CDN'de Hizmet Uzantıları codelab'ini tamamladınız.
İşlediğimiz konular
- Media CDN'yi, kaynak olarak ayarlanmış bir Cloud Storage paketiyle kullanma
- Özel HTTP kimlik doğrulaması içeren bir hizmet uzantısı eklentisi oluşturma ve bunu Media CDN ile ilişkilendirme
- Hizmet Uzantısı eklentisinin beklendiği gibi çalıştığını doğrulama
- (İsteğe bağlı) Belirli bir eklenti sürümünü güncelleme, referans verme, geri alma ve silme gibi hizmet uzantısı eklentilerini yönetme
Yapabilecekleriniz
Şu codelab'lere göz atın:
Daha fazla bilgi
- Yüksek performanslı hizmet çalışanı yükleme
- İstek Türlerine Göre Hizmet Çalışanı Önbelleğe Alma Stratejileri