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

1. Введение

Последнее обновление: 01.05.2024

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

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

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

Что вы построите

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

1f19151bdd96acb0.png

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

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

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

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

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

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

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

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

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

Запустить Cloud Shell

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

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

1dec6f9683153af0.png

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

de496bb88f9a0b10.png

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

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

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

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

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

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

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

Контент, распространяемый через CDN-сети для мультимедиа, может поступать из таких мест, как хранилище Cloud Storage, сторонние хранилища или любые общедоступные HTTP-терминалы (HTTPS).

В этом практическом задании мы будем хранить контент в хранилище Cloud Storage.

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

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

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

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

50475e01c5a3adbe.png

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

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

  1. Создайте файл в CloudShell, а затем загрузите его в хранилище с помощью gsutil.
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. Grant Media предоставляет доступ к CDN-хранилищу.
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. Настройка CDN для медиаконтента

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

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

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

Настройка источника кэширования Edge

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

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

e6eb0faa94838c4.png

Вновь созданный ресурс EdgeCacheOrigin отображается в списке источников вашего проекта на странице «Источники».

Настройка службы кэширования Edge

  1. В консоли Google Cloud перейдите на страницу Media CDN .
  2. Нажмите вкладку «УСЛУГИ» .
  3. Нажмите «СОЗДАТЬ СЕРВИС» .
  4. Введите уникальное имя для вашей службы, например, «media-cdn», а затем нажмите «Далее».

d2f9ac837bc5d45a.png

  1. В разделе «Маршрутизация» нажмите «Добавить правило хоста» .
  2. В поле Hosts введите символ подстановки "*".

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. Перейти на Media 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. Настройка реестра артефактов для расширений служб.

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

Для создания репозитория мы воспользуемся командой ` gcloud artifacts repositories create`.

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

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

  1. В консоли Google Cloud перейдите на страницу «Реестр артефактов» .
  2. Нажмите кнопку + СОЗДАТЬ РЕПОЗИТОРИЙ .
  3. Введите имя для репозитория, например, 'service-extension-$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. Настройка расширений служб на CDN для медиаконтента

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

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

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

  • Ресурс WasmAction — это то, что подключается к вашему CDN-серверу Media EdgeCacheService. WasmAction ссылается на ресурс WasmPlugin.
  • Ресурс WasmPlugin имеет параметр main-version, который соответствует текущей активной версии 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 в созданном вами ранее репозитории Artifact Registry, чтобы его можно было развернуть в Media CDN.

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

  1. Создайте в той же директории файл 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 в реестр артефактов. Мы пометим образ контейнера тегом '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 с вашей сетью 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 связан с образом контейнера, находящимся в репозитории 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. Далее мы создаём ресурс 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. Теперь нам нужно экспортировать конфигурацию нашего CDN-сервера Media 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.
...

Теперь отправьте запрос еще раз, добавив заголовок 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

После обновления образа контейнера в реестре артефактов необходимо создать новую версию WasmPluginVersion, а затем обновить параметр –main-version плагина 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

Теперь вы успешно обновили версию образа контейнера для импорта из Artifact Registry и загрузили его в свою сеть 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-plugin, при откате будет использоваться версия вашего кода, которая работала до последнего развертывания.

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 в конфигурации CDN Media 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. Поздравляем!

Поздравляем, вы успешно завершили практический семинар по расширению сервисов на Media CDN!

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

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

Что дальше?

Посмотрите некоторые из этих практических занятий по программированию...

Дополнительная информация

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