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

1. はじめに

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

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

Media CDN は、メディア ストリーミング用の GCP のグローバル エッジ ネットワークであり、コア機能は最も一般的なユースケースに対応することを目的としていますが、このコア機能セットでは対応できない要件がある場合もあります。

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

作成するアプリの概要

この Codelab では、Media CDN(CDN)+ サービス拡張機能(Edge のプログラマビリティ)+ Cloud Storage(CDN のソース)を使用して、Edge コンピューティング対応の CDN 配信環境をデプロイする手順を説明します。

1f19151bdd96acb0.png

学習内容

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

必要なもの

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

2. 始める前に

Media CDN の許可リストおよびService Extensions の許可リスト

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

  • Media CDN と Media CDN 用のサービス拡張機能の両方へのアクセスをリクエストするには、Google アカウント チームに連絡して、Media CDN とサービス拡張機能に対するアクセス リクエストをお客様に代わって作成するよう依頼してください。

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 を有効にして以下のコマンドで 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. [ORIGINS] タブをクリックします。
  3. [オリジンを作成] をクリックします。
  4. 「cloud-storage-origin」と入力します。(エッジキャッシュ送信元)の名前を指定します
  5. [Origin address] で、次の操作を行います。
  6. [Google Cloud Storage バケットを選択]を 選択します
  7. 「mediacdn-bucket-$PROJECT_ID」という名前の Cloud Storage バケットを参照します。
  8. [選択] をクリックします。
  9. その他の設定はデフォルトのままにします。
  10. [オリジンを作成] をクリックします。

e6eb0faa94838c4.png

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

エッジ キャッシュ サービスの構成

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

d2f9ac837bc5d45a.png

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

25d3e25000934e59.png

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

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. ご利用のサービスについては [Addresses] 列をご覧ください。

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」モード - [Standard]、ロケーション タイプ - [Region] を選択し、[us-central1(アイオワ)] を選択します。
  5. [CREATE] ボタンをクリックします。

b525b3bc0867dc42.png

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

リポジトリ リソースを作成したら、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 にデプロイできるサービス拡張機能(Proxy-Wasm)プラグインを作成およびビルドする方法を説明します。

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

サービス拡張機能について簡単に復習しましょう。WasmAction、WasmPlugin、WasmPluginVersion の 3 つの主要なリソースがあります。

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

以下の図を参照して、これらのリソースの関係をより深く理解してください。

22b3548b3a61c379.png

Service Extension プラグインの作成とビルド

  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 に公開する

次に、Proxy-Wasm プラグインを、前に作成した Artifact Registry リポジトリに公開して、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 ファイルを開き、先に作成した WasmPlugin リソースを参照する特定のルートの routeActionwasmAction を追加します。
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... ... ... 

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

$ 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-plugin リソースが作成されるたびに 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 のメイン バージョンを空の文字列 "" に更新します。

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 Edge Cache サービス、EdgeCache 構成、Service Extensions プラグインを削除します。以下の削除手順を順番に行います。

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 Extension プラグインを作成し、Media CDN に関連付ける方法
  • Service Extension プラグインが想定どおりに動作していることを確認する方法
  • (省略可)特定のプラグイン バージョンの更新、参照、ロールバック、削除など、Service Extension プラグインを管理する方法

次のステップ

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

参考資料

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