Лабораторная работа: Расширения сервисов в Media CDN.

1. Введение

Последнее обновление: 1 мая 2024 г.

Сети доставки контента (CDN) повышают производительность пользователей за счет кэширования часто используемого контента ближе к конечным пользователям, разрыва соединений ближе к клиентам, повторного использования соединений с источником, а также за счет внедрения современных сетевых протоколов и настроек.

Media CDN, глобальная периферийная сеть GCP для потоковой передачи мультимедиа, предоставляет множество встроенных или «основных» возможностей. Основные возможности предназначены для решения наиболее распространенных случаев использования, но у вас также могут быть требования, которые не удовлетворяются этой основной функцией. набор.

Расширения служб для Media CDN, иногда также называемые Edge Programmability, позволяют запускать собственный код на периферии для настройки поведения Media CDN. Это открывает дополнительные варианты использования, включая нормализацию ключа кэша, пользовательскую аутентификацию токена и отзыв токена, дополнительные настраиваемые поля журнала, A/B-тестирование и настраиваемую страницу ошибок.

Что ты построишь

В этой лабораторной работе с кодом мы рассмотрим шаги по развертыванию среды доставки CDN с поддержкой Edge Compute с Media CDN (CDN) + Service Extensions (Edge Programmability) + Cloud Storage (источник CDN).

1f19151bdd96acb0.png

Что вы узнаете

  • Как настроить Media CDN с сегментом облачного хранилища, установленным в качестве источника
  • Как создать плагин расширения службы с пользовательской аутентификацией HTTP и связать его с Media CDN.
  • Как проверить, что плагин Service Extension работает должным образом
  • (необязательно) Как управлять плагином расширения службы, например обновлять, ссылаться, откатывать и удалять определенную версию плагина.

Что вам понадобится

  • Базовые настройки сети и знание HTTP
  • Базовые знания командной строки Unix/Linux.

2. Прежде чем начать

Запрос белого списка медиа-CDN и белого списка сервисных расширений

Прежде чем начать, вам необходимо убедиться, что ваш проект добавлен в белый список частной предварительной версии как для Media CDN, так и для сервисных расширений для Media CDN.

  • Чтобы запросить доступ как к Media CDN, так и к сервисным расширениям для Media CDN, обратитесь к своей команде по работе с аккаунтом Google, чтобы создать от вашего имени запрос на доступ к Media CDN и сервисным расширениям.

3. Настройка и требования

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

1dec6f9683153af0.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

de496bb88f9a0b10.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.

Прежде чем начать

Роли и доступ IAM

Разрешения управления идентификацией и доступом (IAM), необходимые для создания ресурсов Media CDN и реестра артефактов, следующие:

  • роли/networkservices.edgeCacheAdmin
  • роли/networkservices.edgeCacheUser
  • роли/networkservices.edgeCacheViewer
  • роли/artifactregistry.repoAdmin

В Cloud Shell убедитесь, что переменные среды project_id , project_num , location и репозитория настроены.

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

Включите API-интерфейсы Media CDN и сервисных расширений с помощью приведенных ниже команд.

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. Создайте сегмент облачного хранилища.

Содержимое Media CDN может происходить из таких мест, как сегмент облачного хранилища, стороннее хранилище или любая общедоступная конечная точка HTTP (HTTPS).

В этой лаборатории мы будем хранить контент в сегменте Cloud Storage.

Мы будем использовать команду gsutil mb для создания корзины.

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

При желании вы можете создать корзину Cloud Storage с помощью графического интерфейса следующим образом:

  1. В консоли Google Cloud перейдите на страницу Cloud Storage .
  2. Нажмите кнопку СОЗДАТЬ .
  3. Введите имя сегмента. - т.е. «mediacdn-bucket-$PROJECT_ID».
  4. Остальные настройки оставьте по умолчанию.
  5. Нажмите кнопку СОЗДАТЬ .

50475e01c5a3adbe.png

5. Загрузите тестовый объект в корзину Cloud Storage.

Теперь мы загрузим объект в корзину Cloud Storage.

  1. Создайте файл в облачной оболочке, а затем загрузите его в корзину с помощью 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. Настройте медиа-CDN

Далее мы создадим конфигурацию Media CDN.

Каждая конфигурация Media CDN состоит из двух основных ресурсов:

  • EdgeCacheService , отвечающий за конфигурацию клиентской части (TLS, IP-адресация), маршрутизацию, конфигурацию CDN (режимы кэширования, TTL, подпись) и политики безопасности.
  • EdgeCacheOrigin , отвечающий за настройку каждого источника для любого источника на основе HTTP, а также условия повтора, когда контент недоступен или недоступен.

Настройка источника пограничного кэша

Теперь давайте создадим источник, указывающий на только что созданную вами корзину Cloud Storage.

  1. В консоли Google Cloud перейдите на страницу Media CDN .
  2. Откройте вкладку ПРОИСХОЖДЕНИЯ .
  3. Нажмите СОЗДАТЬ ORIGIN .
  4. Введите «cloud-storage-origin» в качестве имени источника пограничного кэша.
  5. В разделе «Адрес происхождения»:
  6. выберите «Выбрать сегмент Google Cloud Storage».
  7. ПЕРЕХОДИТЕ к сегменту Cloud Storage с именем «mediacdn-bucket-$PROJECT_ID».
  8. нажмите ВЫБРАТЬ.
  9. Остальные настройки оставьте по умолчанию.
  10. Нажмите СОЗДАТЬ ORIGIN .

e6eb0faa94838c4.png

Недавно созданный ресурс EdgeCacheOrigin появится в списке источников вашего проекта на странице Origins.

Настройка службы Edge Cache

  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 появится на странице «Службы» в списке служб вашего проекта.

Получение IP-адреса MediaCDN и тестирование.

  1. В консоли Google Cloud перейдите на страницу Media CDN .
  2. Перейти на Медиа-CDN
  3. Откройте вкладку «Службы» .
  4. Информацию о вашей услуге смотрите в столбце «Адреса» .

4031b6d1eac89041.png

Чтобы проверить, правильно ли настроена ваша служба для кэширования содержимого, используйте инструмент командной строки Curl для отправки запросов и проверки ответов.

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

Команда должна выдать вывод, аналогичный следующему:

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

Теперь вы успешно создали развертывание MediaCDN с Cloud Storage в качестве источника.

7. Настройте реестр артефактов для расширений служб.

Прежде чем создавать расширения служб, нам необходимо настроить реестр артефактов. Artifact Registry — это универсальный менеджер пакетов Google Cloud для управления артефактами сборки. Плагины расширения службы (Proxy-Wasm) публикуются в реестре артефактов. После публикации в реестре артефактов плагины Proxy-Wasm можно развернуть в вашей среде Media CDN.

Мы будем использовать команду создания репозиториев артефактов gcloud для создания репозитория.

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

При желании вы можете создать репозиторий с помощью графического интерфейса следующим образом:

  1. В консоли Google Cloud перейдите на страницу реестра артефактов .
  2. Нажмите кнопку + СОЗДАТЬ РЕПОЗИТАРИЙ .
  3. Введите имя репозитория. т. е. «расширение службы-$PROJECT_ID».
  4. Формат — «Docker», режим — «Стандартный», тип местоположения — «Регион» и выберите «us-central1 (Айова)».
  5. Нажмите кнопку СОЗДАТЬ .

b525b3bc0867dc42.png

Недавно созданный ресурс репозитория реестра артефактов должен появиться на странице репозиториев.

После создания ресурса репозитория выполните следующую команду в Cloud Shell, чтобы настроить клиент Docker Cloud Shell для отправки и получения пакетов с использованием этого репозитория.

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

Выход:

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

8. Настройте сервисные расширения в Media CDN.

Теперь мы продемонстрируем, как написать и создать плагин Service Extension (Proxy-Wasm), который можно развернуть в Media CDN, используя язык программирования Rust .

В этом примере мы создадим плагин Proxy-Wasm, который проверяет, что каждый HTTP-запрос содержит заголовок авторизации со значением «секрет». Если запрос не содержит этот заголовок, плагин сгенерирует ответ HTTP 403 Forbidden.

Краткое описание расширений служб: существует три ключевых ресурса: WasmAction, WasmPlugin и WasmPluginVersion.

  • Ресурс WasmAction — это то, что прикрепляется к вашей Media CDN EdgeCacheService. WasmAction ссылается на ресурс WasmPlugin.
  • Ресурс WasmPlugin имеет основную версию, соответствующую текущей активной версии WasmPluginVersion.
  • WasmPluginVersions ссылается на образ контейнера из реестра артефактов. Внося изменения в плагины proxy-wasm, вы создаете разные версии WasmPluginVersions.

Пожалуйста, обратитесь к диаграмме ниже, чтобы лучше понять взаимосвязь между этими ресурсами.

22b3548b3a61c379.png

Напишите и создайте плагин расширения службы.

  1. Установите набор инструментов Rust, следуя инструкциям на странице https://www.rust-lang.org/tools/install .
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. Затем добавьте поддержку Wasm в свою цепочку инструментов Rust, выполнив следующую команду:
rustup target add wasm32-wasi
  1. Создайте пакет Rust под названием my-wasm-plugin :
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. Затем настройте свой пакет Rust, отредактировав файл Cargo.toml . После строки [dependencies] в файле Cargo.toml добавьте следующее:
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 в файл lib.rs в каталоге src в Cloud Shell.
  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 и записали код Proxy-Wasm в файл lib.rs , мы можем создать плагин 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 в реестре артефактов

Теперь мы опубликуем наш плагин Proxy-Wasm в созданном вами ранее репозитории реестра артефактов, чтобы его можно было развернуть в Media CDN.

Сначала мы упаковываем плагины Proxy-Wasm в образ контейнера.

  1. Создайте файл Dockerfile в том же каталоге my-wasm-plugin со следующим содержимым:
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 в реестр артефактов. Мы пометим наш образ контейнера тегом prod.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

Теперь мы продолжим и отправим образ контейнера с тегом «prod» в репозиторий.

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 был успешно отправлен в реестр артефактов. Вы должны увидеть аналогичный вывод:

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 связаны с маршрутами Media CDN в ресурсе EdgeCacheService.

  1. Сначала мы создаем ресурс Wasm-plugin для нашего плагина Proxy-Wasm.
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 был успешно связан с образом контейнера, находящимся в репозитории реестра артефактов. Вы должны увидеть аналогичный результат:

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. Затем мы создаем ресурс WasmAction, ссылающийся на наш ресурс плагина Wasm.
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 и добавьте WasmAction к RouteAction для данного маршрута, который ссылается на ресурс 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. Проверьте плагин Service Extensions Proxy-Wasm на Media CDN.

Чтобы проверить, правильно ли настроена ваша служба для кэширования содержимого, используйте инструмент командной строки Curl для отправки запросов и проверки ответов.

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

Команда должна выдать вывод, аналогичный следующему:

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

Теперь повторите запрос с заголовком авторизации и значением секрета.

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. Ниже мы рассмотрим шаги по развертыванию обновленной версии плагина.

Например, вы можете обновить пример кода плагина, чтобы он сравнивал заголовок авторизации с другим значением для аутентификации, изменив код, как показано ниже.

Сначала обновите исходный файл 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

После обновления образа контейнера в реестре артефактов нам необходимо создать новую версию WasmPluginVersion, а затем обновить –main-версию WasmPlugin, чтобы она ссылалась на новую версию.

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

Теперь вы успешно обновили версию образа контейнера, которая будет импортирована из реестра артефактов, и отправлена ​​в развертывание Media CDN.

Откат к предыдущей версии

Чтобы вернуться к предыдущей версии плагина, вы можете обновить ресурс плагина 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 сохраняет дайджест вашего образа Docker каждый раз, когда создается новый ресурс плагина Wasm, при откате будет использоваться версия вашего кода, которая выполнялась до последнего развертывания.

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 и связанные с ним WasmPluginVersions, выполните следующие действия.

Сначала удалите ссылку на WasmAction в конфигурации Media CDN EdgeCacheService.

Опорная строка, которую нужно удалить :

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 EdgeCache, конфигурацию EdgeCache и плагин расширений службы. Выполните указанные ниже действия по удалению по порядку.

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. Поздравляем!

Поздравляем, вы завершили работу над кодовой лабораторией Service Extensions on Media CDN!

Что мы рассмотрели

  • Как настроить Media CDN с сегментом облачного хранилища, установленным в качестве источника
  • Как создать плагин расширения службы с пользовательской аутентификацией HTTP и связать его с Media CDN.
  • Как проверить, что плагин Service Extension работает должным образом
  • (необязательно) Как управлять плагином расширения службы, например обновлять, ссылаться, откатывать и удалять определенную версию плагина.

Что дальше?

Посмотрите некоторые из этих кодовых лабораторий...

Дальнейшее чтение

Справочная документация