Laboratuvar: Medya CDN'de Hizmet Uzantıları

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.

1f19151bdd96acb0.png

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:

1dec6f9683153af0.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

de496bb88f9a0b10.png

İ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:

  1. Google Cloud Console'da Cloud Storage sayfasına gidin.
  2. OLUŞTUR düğmesini tıklayın.
  3. Paket için bir ad girin. - ör. "mediacdn-bucket-$PROJECT_ID".
  4. Diğer ayarları varsayılan değerlerinde bırakın.
  5. OLUŞTUR düğmesini tıklayın.

50475e01c5a3adbe.png

5. Cloud Storage Paketi'ne bir test nesnesi yükleyin

Şimdi Cloud Storage paketine bir nesne yükleyeceğiz.

  1. 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
  1. 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.

  1. Google Cloud Console'da Medya CDN sayfasına gidin.
  2. KAYNAKLAR sekmesini tıklayın.
  3. KAYNAK OLUŞTUR'u tıklayın.
  4. "cloud-storage-origin" değerini girin başlangıç noktası olarak belirleyin.
  5. Kaynak adresi bölümünde:
  6. "Google Cloud Storage paketi seç"i belirleyin.
  7. "mediacdn-bucket-$PROJECT_ID" adlı Cloud Storage paketine göz atın.
  8. SEÇ'i tıklayın.
  9. Diğer ayarları varsayılan değerlerinde bırakın.
  10. KAYNAK OLUŞTUR'u tıklayın.

e6eb0faa94838c4.png

Yeni oluşturulan EdgeCacheOrigin kaynağı, Kaynaklar sayfasındaki projenizdeki kaynaklar listesinde görünür.

Uç Önbellek Hizmetini yapılandırma

  1. Google Cloud Console'da Medya CDN sayfasına gidin.
  2. HİZMETLER sekmesini tıklayın.
  3. HİZMET OLUŞTUR'u tıklayın.
  4. Hizmetiniz için benzersiz bir ad girin (ör. "media-cdn") , ardından İleri'yi tıklayın.

d2f9ac837bc5d45a.png

  1. Yönlendirme bölümünde Ana Makine KURALI EKLE'yi tıklayın.
  2. Joker karakter girin - "*" girin.

25d3e25000934e59.png

  1. ROTA KURALI EKLE'yi tıklayın.
  2. Öncelik olarak "1" değerini belirtin.
  3. 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.
  4. 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.

d1975f366233521a.png

  1. Daha fazla yapılandırma seçeneği genişletmek için GELİŞMİŞ YAPILANDIRMALAR'ı tıklayın.
  2. Rota işleminde ÖĞE EKLE'yi tıklayın. Daha sonra şunları yapın:
  3. Tür alanında "CDN politikası"nı seçin.
  4. Önbellek modu için "Tümünü önbelleğe almaya zorla"yı seçin.
  5. Diğerlerini varsayılan ayarda bırakın
  6. Bitti'yi tıklayın.
  7. Kaydet'i tıklayın.

b7e77d059db84ab6.png

  1. 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

  1. Google Cloud Console'da Medya CDN sayfasına gidin.
  2. Medya CDN'ye git
  3. Hizmetler sekmesini tıklayın.
  4. Hizmetiniz için Adresler sütununa bakın.

4031b6d1eac89041.png

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:

  1. Google Cloud konsolunda Artifact Registry sayfasına gidin.
  2. + KOD KODU OLUŞTUR düğmesini tıklayın.
  3. Depo için bir ad girin. örneğin "service-extension-$PROJECT_ID".
  4. Biçim - ‘Docker,' Mod - "Standart", Konum Türü - "Bölge" ve "us-central1 (Iowa)" seçeneğini belirleyin
  5. OLUŞTUR düğmesini tıklayın.

b525b3bc0867dc42.png

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.

22b3548b3a61c379.png

Hizmet Uzantısı eklentisi yazma ve derleme

  1. 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
  1. Ardından aşağıdaki komutu çalıştırarak Rust araç zincirinize Wasm desteğini ekleyin:
rustup target add wasm32-wasi
  1. my-wasm-plugin adlı bir Rust paketi oluşturun:
cargo new --lib my-wasm-plugin

Çıkış:

Created library `my-wasm-plugin` package
  1. my-wasm-plugin dizinine girdiğinizde bir Cargo.toml dosyası ve bir src dizini görürsünüz.
cd my-wasm-plugin
ls

Çıkış:

Cargo.toml  src
  1. 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"
  1. 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"
  1. . sample_code dosyasının tüm içeriğini Cloud Shell'deki src dizininde bulunan lib.rs dosyasına kopyalayın.
  1. 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 {}
  1. Cargo.toml manifest dosyasını yapılandırıp Proxy-Wasm kodumuzu lib.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.

  1. 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
  1. Ş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
...
  1. 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.

  1. İlk olarak Proxy-Wasm eklentimiz için bir Wasm eklentisi kaynağı oluşturuyoruz.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
  1. 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"
  1. 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... ... ... 
...
  1. 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
...
  1. Ş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
  1. 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"
  1. 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"
...
  1. Ardından, Proxy-Wasm yapılandırmasıyla güncellenmiş yapılandırmayı my-service-with-wasm.yaml dosyasına kaydederiz.
  1. 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

Referans belgeler