ラボ: Media CDN でのサービス拡張機能

1. はじめに

最終更新日: 2024 年 5 月 1 日

コンテンツ配信ネットワーク(CDN)は、頻繁にアクセスされるコンテンツをエンドユーザーの近くにキャッシュ保存し、クライアントの近くで接続を終了し、オリジンへの接続を再利用し、最新のネットワーキング プロトコルとカスタマイズを採用することで、ユーザーのパフォーマンスを向上させます。

メディア ストリーミング用の GCP のグローバル エッジ ネットワークである Media CDN には、多くの組み込み機能(コア機能)が用意されています。コア機能は最も一般的なユースケースに対応するように設計されていますが、このコア機能セットでは対応できない要件がある場合もあります。

Media CDN の Service Extensions(エッジ プログラマビリティとも呼ばれます)を使用すると、エッジで独自のコードを実行して Media CDN の動作をカスタマイズできます。これにより、キャッシュキーの正規化、カスタム トークン認証とトークンの取り消し、カスタム ログフィールドの追加、A/B テスト、カスタム エラーページなど、さまざまなユースケースが実現します。

作成するアプリの概要

このコードラボでは、Media CDN(CDN)+ Service Extensions(エッジ プログラマビリティ)+ Cloud Storage(CDN のソース)を使用して、Edge Compute 対応の CDN 配信環境をデプロイする手順について説明します。

1f19151bdd96acb0.png

学習内容

  • 送信元として設定された Cloud Storage バケットを使用して Media CDN を設定する方法
  • カスタム HTTP 認証を使用して Service Extensions プラグインを作成し、Media CDN に関連付ける方法
  • Service Extension プラグインが想定どおりに動作していることを確認する方法
  • (省略可)特定のプラグイン バージョンの更新、参照、ロールバック、削除など、Service Extension プラグインの管理方法

必要なもの

  • ネットワーキングと HTTP に関する基本的な知識
  • Unix / Linux コマンドラインに関する基本的な知識

2. 始める前に

Media CDN 許可リストと Service Extensions 許可リストのリクエスト

始める前に、プロジェクトが Media CDN と Media CDN 用 Service Extensions の両方の限定公開プレビューの許可リストに追加されていることを確認する必要があります。

  • Media CDN と Media CDN 用 Service Extensions の両方へのアクセスをリクエストするには、Google アカウント チームにお問い合わせください。Media CDN と Service Extensions のアクセス リクエストを作成します。

3. 設定と要件

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

1dec6f9683153af0.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

de496bb88f9a0b10.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

始める前に

IAM のロールとアクセス権

Media CDN リソースと Artifact Registry リソースの作成に必要な Identity and Access Management(IAM)権限は次のとおりです。

  • roles/networkservices.edgeCacheAdmin
  • roles/networkservices.edgeCacheUser
  • roles/networkservices.edgeCacheViewer
  • roles/artifactregistry.repoAdmin

Cloud Shell で、project_idproject_numlocationrepository の環境変数が設定されていることを確認します。

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 を有効にする

次のコマンドを使用して、Media CDN API と Service Extensions API を有効にします。

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 バケットを作成する

Media CDN コンテンツは、Cloud Storage バケット、サードパーティの保管場所、一般公開されている HTTP(HTTPS) エンドポイントなどの場所から配信できます。

この Codelab では、コンテンツを Cloud Storage バケットに保存します。

gsutil mb コマンドを使用してバケットを作成します。

gsutil mb gs://mediacdn-bucket-$PROJECT_ID

必要に応じて、次のように GUI を使用して Cloud Storage バケットを作成できます。

  1. Google Cloud コンソールで [Cloud Storage] ページに移動します。
  2. [CREATE] ボタンをクリックします。
  3. バケットの名前を入力します。- 例: 「mediacdn-bucket-$PROJECT_ID」。
  4. 残りの設定はデフォルトのままにします。
  5. [作成] ボタンをクリックします。

50475e01c5a3adbe.png

5. テスト オブジェクトを Cloud Storage バケットにアップロードする

次に、Cloud Storage バケットにオブジェクトをアップロードします。

  1. Cloud Shell でファイルを作成し、gsutil を使用してバケットにアップロードします。
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. Media CDN にバケットへのアクセス権を付与する
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. Media CDN を構成する

次に、Media CDN 構成を作成します。

各 Media CDN 構成は、次の 2 つのメイン リソースで構成されています。

  • EdgeCacheService: クライアント側の構成(TLS、IP アドレス指定)、ルーティング、CDN 構成(キャッシュ モード、TTL、署名)、セキュリティ ポリシーを担当します。
  • EdgeCacheOrigin: HTTP ベースのオリジンごとの構成と、コンテンツが利用できない場合やアクセスできない場合の再試行条件を管理します。

エッジ キャッシュ オリジンを構成する

次に、作成した Cloud Storage バケットを指すオリジンを作成します。

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。
  2. [送信元] タブをクリックします。
  3. [オリジンを作成] をクリックします。
  4. エッジ キャッシュ オリジンとして「cloud-storage-origin」という名前を入力します。
  5. [発送元住所] で次の操作を行います。
  6. [Google Cloud Storage バケットを選択] を選択します。
  7. 「mediacdn-bucket-$PROJECT_ID」という名前の Cloud Storage バケットを参照します。
  8. [選択] をクリックします。
  9. 残りの設定はデフォルトのままにします。
  10. [オリジンを作成] をクリックします。

e6eb0faa94838c4.png

新しく作成された EdgeCacheOrigin リソースが、[送信元] ページのプロジェクトの送信元リストに表示されます。

Edge Cache Service を構成する

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。
  2. [サービス] タブをクリックします。
  3. [サービスの作成] をクリックします。
  4. サービスの一意の名前(「media-cdn」など)を入力し、[次へ] をクリックします。

d2f9ac837bc5d45a.png

  1. [ルーティング] セクションで、[ホストルールを追加] をクリックします。
  2. [ホスト] フィールドにワイルドカード「*」を入力します。

25d3e25000934e59.png

  1. [ルートルールを追加] をクリックします。
  2. [優先度] に「1」を指定します。
  3. [一致条件を追加] をクリックし、[パスの一致] で [マッチタイプ] として [プレフィックス一致] を選択し、[パスの一致] フィールドに「/」を指定して、[完了] をクリックします。
  4. [プライマリ アクション] で [Origin から取得] を選択し、プルダウン リストで構成した送信元を選択します。

d1975f366233521a.png

  1. [高度な構成] をクリックして、その他の構成オプションを開きます。
  2. [ルートのアクション] で、[項目を追加] をクリックします。次に、以下の操作を行います。
  3. [タイプ] で [CDN ポリシー] を選択します。
  4. [キャッシュ モード] で、[すべてのキャッシュを強制的に保存] を選択します。
  5. 残りはデフォルトのままにします。
  6. [完了] をクリックします。
  7. [保存] をクリックします。

b7e77d059db84ab6.png

  1. [サービスの作成] をクリックします。

新しく作成された EdgeCacheService リソースが、プロジェクトのサービスの一覧の [サービス] ページに表示されます。

MediaCDN の IP アドレスとテストを取得する

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。
  2. Media CDN に移動
  3. [Services] タブをクリックします。
  4. サービスについては、[アドレス] 列をご覧ください。

4031b6d1eac89041.png

コンテンツをキャッシュに保存するようにサービスが正しく構成されていることをテストするには、curl コマンドライン ツールを使用してリクエストを発行し、レスポンスを確認します。

curl -svo /dev/null "http://MEDIA_CDN_IP_ADDRESS/file.txt"

このコマンドを実行すると、次のような出力が生成されます。

< HTTP/2 200 OK
...
media-cdn-service-extensions-test
...

これで、Cloud Storage を送信元として MediaCDN デプロイを作成できました。

7. Service Extensions 用に Artifact Registry を構成する

Service Extensions を作成する前に、Artifact Registry を構成する必要があります。Artifact Registry は、ビルド アーティファクトの管理に使用する Google Cloud のユニバーサル パッケージ管理システムです。Service Extension(Proxy-Wasm)プラグインが Artifact Registry に公開されます。Artifact Registry に公開された Proxy-Wasm プラグインは、Media CDN デプロイにデプロイできます。

gcloud artifacts repositories create コマンドを使用してリポジトリを作成します。

gcloud artifacts repositories create service-extension-$PROJECT_ID \
    --repository-format=docker \
    --location=$LOCATION \
    --description="Repo for Service Extension" \
    --async

必要に応じて、次のように GUI を使用してリポジトリを作成できます。

  1. Google Cloud コンソールで、[Artifact Registry] ページに移動します。
  2. [+ リポジトリを作成] ボタンをクリックします。
  3. リポジトリの名前を入力します(例: service-extension-$PROJECT_ID)。
  4. 形式 - 「Docker」、モード - 「標準」、ロケーション タイプ - 「リージョン」、[us-central1(アイオワ)] を選択します。
  5. [CREATE] ボタンをクリックします。

b525b3bc0867dc42.png

新しく作成した Artifact Registry リポジトリ リソースが [リポジトリ] ページに表示されます。

Repository リソースが作成されたら、Cloud Shell で次のコマンドを実行して、このリポジトリを使用してパッケージの push と pull を行うように Cloud Shell docker クライアントを構成します。

gcloud auth configure-docker $LOCATION-docker.pkg.dev

出力:

...
Adding credentials for: us-central1-docker.pkg.dev
Docker configuration file updated.

8. Media CDN で Service Extensions を構成する

ここでは、Rust プログラミング言語を使用して、Media CDN にデプロイできる Service Extension(Proxy-Wasm)プラグインを作成してビルドする方法について説明します。

この例では、各 HTTP リクエストに値が「secret」の Authorization ヘッダーが含まれていることを検証する Proxy-Wasm プラグインを作成します。リクエストにこのヘッダーが含まれていない場合、プラグインは HTTP 403 Forbidden レスポンスを生成します。

Service Extensions の概要: WasmAction、WasmPlugin、WasmPluginVersion の 3 つの主要なリソースがあります。

  • WasmAction リソースは、Media CDN EdgeCacheService に接続されるものです。WasmAction は WasmPlugin リソースを参照します。
  • WasmPlugin リソースには、現在アクティブな WasmPluginVersion に対応する main-version があります。
  • WasmPluginVersions は、Artifact Registry のコンテナ イメージを参照します。proxy-wasm プラグインを変更すると、さまざまな WasmPluginVersion が作成されます。

これらのリソースの関係については、下の図をご覧ください。

22b3548b3a61c379.png

サービス拡張機能プラグインを作成してビルドする

  1. https://www.rust-lang.org/tools/install の手順に沿って、Rust ツールチェーンをインストールします。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. 次に、次のコマンドを実行して、Rust ツールチェーンに Wasm サポートを追加します。
rustup target add wasm32-wasi
  1. my-wasm-plugin という名前の Rust パッケージを作成します。
cargo new --lib my-wasm-plugin

出力:

Created library `my-wasm-plugin` package
  1. ディレクトリ my-wasm-plugin に移動すると、Cargo.toml ファイルと src ディレクトリが表示されます。
cd my-wasm-plugin
ls

出力:

Cargo.toml  src
  1. 次に、Cargo.toml ファイルを編集して Rust パッケージを構成します。Cargo.toml ファイルの [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. 編集後の Cargo.toml ファイルは次のようになります。
[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 ファイルの内容全体をコピーして、Cloud Shell の src ディレクトリにある lib.rs ファイルに貼り付けます。
  1. 編集後の lib.rs ファイルは次のようになります。
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 マニフェスト ファイルを構成し、lib.rs ファイルに Proxy-Wasm コードを記述したので、Proxy-Wasm プラグインをビルドできます。
cargo build --release --target wasm32-wasi

ビルドが正常に完了すると、次のようなメッセージが表示されます。

Finished release [optimized] target(s) in 1.01s

target ディレクトリも確認し、ファイルが作成されていることを確認します。

ls ./target

出力は次のようになります。

CACHEDIR.TAG release wasm32-wasi

Proxy-Wasm プラグインを Artifact Registry に公開する

次に、作成した Artifact Registry リポジトリに Proxy-Wasm プラグインを公開して、Media CDN にデプロイできるようにします。

まず、Proxy-Wasm プラグインをコンテナ イメージにパッケージ化します。

  1. 同じディレクトリ my-wasm-plugin に、次の内容のファイルを Dockerfile という名前で作成します。
FROM scratch 
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
  1. 次に、コンテナ イメージをビルドします。
docker build --no-cache --platform wasm -t my-wasm-plugin .

(x86 以外のプロセッサのみ)次に、コンテナ イメージをビルドします。

docker build --no-cache --platform wasm --provenance=false -t my-wasm-plugin . 

出力

[+] Building 0.2s (5/5) FINISHED                                     docker:default
...
  1. 次に、Proxy-Wasm プラグインを Artifact Registry に公開(プッシュ)します。コンテナ イメージに「prod」タグを付けます。
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

次に、タグ付きの「prod」コンテナ イメージをリポジトリに push します。

docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

出力:

The push refers to repository 
...
8564ddd9910a: Pushed 
prod: digest: sha256:f3ae4e392eb45393bfd9c200cf8c0c261762f7f39dde5c7cd4b9a8951c6f2812 size: 525

Proxy-Wasm プラグインのコンテナ イメージが Artifact Registry に正常に push されたことを確認します。次のような出力が表示されます。

gcloud artifacts docker images list $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin --include-tags

出力:

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 プラグインを Media CDN デプロイに関連付ける

これで、Proxy-Wasm プラグインを Media CDN デプロイに関連付ける準備が整いました。

Proxy-Wasm プラグインは、EdgeCacheService リソースの Media CDN ルートに関連付けられています。

  1. まず、Proxy-Wasm プラグインの Wasm-plugin リソースを作成します。
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
  1. 次に、WasmPluginVersion を作成します。
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. 次に、Proxy-Wasm プラグインのメイン バージョンを指定します。
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-1

次に、Proxy-Wasm プラグインが Artifact Registry リポジトリにあるコンテナ イメージに正常に関連付けられていることを確認します。次のような出力が表示されます。

gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource

出力:

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. 次に、Wasm プラグイン リソースを参照する WasmAction リソースを作成します。
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

WasmAction リソースが Proxy-Wasm プラグインに正常に関連付けられていることも確認します。次のような出力が表示されます。

gcloud alpha service-extensions wasm-actions list

出力:

NAME                                     WASMPLUGIN                                            
my-wasm-action-resource                  projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource
...
  1. 次に、Media CDN EdgeCacheService の構成をエクスポートする必要があります。
gcloud edge-cache services export media-cdn --destination=my-service.yaml
  1. 次に、my-service.yaml ファイルを開き、指定されたルートの routeActionwasmAction を追加します。これは、先ほど作成した WasmPlugin リソースを参照します。
wasmAction: "my-wasm-action-resource"
  1. 編集後の my-service.yaml ファイルは次のようになります。
...

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. 次に、更新された構成と Proxy-Wasm 構成を my-service-with-wasm.yaml ファイルに保存します。
  1. 最後に、本番環境の Media CDN 環境の更新された構成をインポートします。
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. Media CDN で Service Extensions Proxy-Wasm プラグインを検証する

コンテンツをキャッシュに保存するようにサービスが正しく構成されていることをテストするには、curl コマンドライン ツールを使用してリクエストを発行し、レスポンスを確認します。

curl -svo /dev/null "http://IP_ADDRESS/file.txt"

このコマンドを実行すると、次のような出力が生成されます。

< HTTP/2 403 Forbidden
...
Access forbidden.
...

次に、Authorization ヘッダーとその値 secret を使用してリクエストを再度発行します。

curl -svo /dev/null "http://IP_ADDRESS/file.txt" -H "Authorization: secret"

このコマンドを実行すると、次のような出力が生成されます。

< HTTP/2 200 OK
...
media-cdn-service-extensions-test
...

10. 省略可: Proxy-Wasm プラグインの管理

Proxy-Wasm プラグインを更新する

Proxy-Wasm プラグインを改善したり、新しい機能を追加したりする場合は、更新したプラグインを Media CDN にデプロイする必要があります。以下に、プラグインの更新バージョンをデプロイする手順を示します。

たとえば、次のようにコードを変更して、認証用の別の値に対して Authorization ヘッダーを評価するようにサンプル プラグイン コードを更新できます。

まず、src/lib.rs ソースファイルを次のコードで更新します。

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 {}

次に、更新されたプラグインをビルド、パッケージ化、公開します。

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 でコンテナ イメージが更新されたら、新しい WasmPluginVersion を作成し、WasmPlugin の –main-version を更新して新しいバージョンを参照する必要があります。

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 からインポートするコンテナ イメージのバージョンが正常に更新され、Media CDN デプロイにライブ push されました。

以前のバージョンにロールバックする

プラグインの以前のバージョンにロールバックするには、Wasm プラグイン リソースを更新して以前のバージョンを参照します。

まず、利用可能なバージョンを一覧表示します。

gcloud alpha service-extensions wasm-plugin-versions list --wasm-plugin=my-wasm-plugin-resource

次のような出力が表示されます。

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

次に、Wasm プラグイン リソースを更新して、以前のバージョン「a2a8ce」を参照します。

$ gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version="a2a8ce"

オペレーションが成功すると、次の出力が表示されます。

✓ WASM Plugin [my-wasm-plugin-resource] is now serving version "a2a8ce"

Media CDN は、新しい Wasm プラグイン リソースが作成されるたびに Docker イメージのイメージ ダイジェストを保存するため、ロールバックでは、最後のロールアウトの前に実行されていたコードのバージョンが使用されます。

gcloud alpha service-extensions wasm-plugins describe my-wasm-plugin-resource \
  --expand-config

バージョン「a2a8ce」の場合、ダイジェスト sha256:08c12... のバージョンは次のようになります。

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 と WasmPlugin の削除

WasmAction、WasmPlugin、関連する WasmPluginVersion を削除する手順は次のとおりです。

まず、Media CDN EdgeCacheService 構成で WasmAction への参照を削除します。

削除する基準線:

wasmAction: "my-wasm-action-resource"

次に、編集した EdgeCacheService 構成を更新します。

gcloud alpha edge-cache services import prod-media-service --source=my-service.yaml

次に、WasmPlugin の main-version を空の文字列 "" に更新します。

gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource --main-version=
""

最後に、以下の削除手順を順番に実行します。

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. ラボ環境をクリーンアップする

CodeLab を完了したら、ラボのリソースを忘れずにクリーンアップしてください。クリーンアップしないと、リソースが実行され続け、費用が発生します。

次のコマンドは、Media CDN EdgeCache Service、EdgeCache Config、Service Extensions Plugin を削除します。以下の削除手順を順番に実行します。

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

上記の各コマンドでは、リソースの削除を確認するメッセージが表示されます。

12. 完了

お疲れさまでした。これで、Media CDN の Service Extensions の Codelab は終了です。

学習した内容

  • 送信元として設定された Cloud Storage バケットを使用して Media CDN を設定する方法
  • カスタム HTTP 認証を使用して Service Extensions プラグインを作成し、Media CDN に関連付ける方法
  • Service Extension プラグインが想定どおりに動作していることを確認する方法
  • (省略可)特定のプラグイン バージョンの更新、参照、ロールバック、削除など、Service Extension プラグインの管理方法

次のステップ

以下の Codelab をご覧ください。

参考資料

リファレンス ドキュメント