Laboratorium: rozszerzenia usług w Media CDN

1. Wprowadzenie

Ostatnia aktualizacja: 1.05.2024

Sieci dostarczania treści (CDN) zwiększają wydajność użytkowników przez buforowanie często używanych treści bliżej użytkowników, przerywanie połączeń bliżej klientów, ponowne wykorzystywanie połączeń ze źródłem oraz stosowanie nowoczesnych protokołów sieciowych i dostosowań.

Media CDN, globalna sieć brzegowa GCP do strumieniowego przesyłania multimediów, ma wiele wbudowanych Podstawowe funkcje są przeznaczone do obsługi typowych przypadków użycia, ale mogą też obowiązywać wymagania, na które nie ma odpowiedzi w ramach podstawowego zestawu funkcji.

Rozszerzenia usług dla Media CDN, zwane też czasami programowalnością brzegową, umożliwiają uruchamianie własnego kodu na brzegu sieci w celu dostosowania działania Media CDN. Odblokowuje to dodatkowe przypadki użycia – od normalizowania klucza pamięci podręcznej, uwierzytelniania niestandardowego tokena i unieważniania tokena, dodatkowych niestandardowych pól logu, testów A/B i niestandardowej strony błędu.

Co utworzysz

W tym module kodu omówimy kroki wdrażania środowiska wyświetlania CDN obsługującego Edge Compute z Media CDN (CDN) + rozszerzenia usług (programowanie brzegowe) i Cloud Storage (źródło CDN).

1f19151bdd96acb0.png

Czego się nauczysz

  • Jak skonfigurować Media CDN z zasobnikiem Cloud Storage ustawionym jako punkt początkowy
  • Jak utworzyć wtyczkę rozszerzenia usługi z niestandardowym uwierzytelnianiem HTTP i powiązać ją z Media CDN
  • Jak sprawdzić, czy wtyczka rozszerzenia usługi działa zgodnie z oczekiwaniami
  • (opcjonalnie) Jak zarządzać wtyczką rozszerzenia usług, np. aktualizować, odwoływać się do niej, wycofywać ją i usuwać

Czego potrzebujesz

  • Podstawowa znajomość sieci i znajomości protokołu HTTP
  • Podstawowa wiedza na temat wiersza poleceń systemu Unix/Linux.

2. Zanim zaczniesz

Prośba o dodanie listy dozwolonych Media CDN Lista dozwolonych rozszerzeń usług

Zanim zaczniesz, sprawdź, czy Twój projekt został dodany do listy dozwolonych w prywatnej wersji testowej dla Media CDN i rozszerzeń usług dla Media CDN.

  • Aby poprosić o dostęp zarówno do Media CDN, jak i do rozszerzeń usług dla Media CDN, skontaktuj się ze swoim zespołem kont Google w sprawie utworzenia w Twoim imieniu prośby o dostęp do Media CDN oraz rozszerzeń usług.

3. Konfiguracja i wymagania

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:

1dec6f9683153af0.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

de496bb88f9a0b10.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

Zanim zaczniesz

Role Dostęp

Uprawnienia usługi Identity and Access Management (IAM) wymagane do tworzenia zasobów Media CDN i Artifact Registry:

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

W Cloud Shell sprawdź, czy zmienne środowiskowe project_id, project_num, location i repository są skonfigurowane.

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

włączyć interfejsy API,

Włącz Media CDN & Interfejsy API rozszerzeń usług za pomocą poniższych poleceń

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. Tworzenie zasobnika Cloud Storage

Treści Media CDN mogą pochodzić z takich lokalizacji jak zasobnik Cloud Storage, lokalizacja pamięci innej firmy lub dowolny publiczny dostępny punkt końcowy HTTP(HTTPS).

W ramach tego ćwiczenia w programie zapiszemy treść w zasobniku Cloud Storage.

Do utworzenia zasobnika użyjemy polecenia gsutil mb

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

Opcjonalnie możesz utworzyć zasobnik Cloud Storage, korzystając z GUI w ten sposób:

  1. W konsoli Google Cloud otwórz stronę Cloud Storage.
  2. Kliknij przycisk UTWÓRZ.
  3. Wpisz nazwę zasobnika. – np. „mediacdn-bucket-$PROJECT_ID”.
  4. Pozostałe ustawienia pozostaw domyślne.
  5. Kliknij przycisk UTWÓRZ.

50475e01c5a3adbe.png

5. Przesyłanie obiektu testowego do zasobnika Cloud Storage

Teraz prześlesz obiekt do zasobnika Cloud Storage.

  1. Utwórz plik w Cloud Shell, a następnie prześlij go do zasobnika przy użyciu polecenia gsutil
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. Przyznawanie dostępu Media CDN do zasobnika
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6. Skonfiguruj Media CDN

Następnie utworzymy konfigurację Media CDN.

Każda konfiguracja Media CDN składa się z 2 głównych zasobów:

  • EdgeCacheService jest odpowiedzialny za konfigurację (TLS, adresowanie IP), routing, konfigurację CDN (tryby pamięci podręcznej, wartości TTL, podpisywanie) i zasady zabezpieczeń.
  • EdgeCacheOrigin, który odpowiada za konfigurację źródeł opartych na protokole HTTP, a także za warunki ponawiania prób w poszczególnych źródłach, gdy treść nie jest dostępna lub osiągalna.

Konfigurowanie punktu początkowego tymczasowego przechowywania danych na serwerach brzegowych

Utwórzmy teraz punkt początkowy wskazujący utworzony przed chwilą zasobnik Cloud Storage.

  1. W konsoli Google Cloud otwórz stronę Media CDN.
  2. Kliknij kartę Źródła.
  3. Kliknij UTWÓRZ LOKALIZACJĘ.
  4. Wpisz „cloud-storage-origin” jako nazwę punktu początkowego tymczasowego przechowywania danych na serwerach brzegowych.
  5. W sekcji Adres punktu początkowego:
  6. kliknij „Wybierz zasobnik Google Cloud Storage”.
  7. PRZEGLĄDAJ zasobnik Cloud Storage o nazwie „mediacdn-bucket-$PROJECT_ID”.
  8. kliknij WYBIERZ.
  9. Pozostałe ustawienia pozostaw domyślne.
  10. Kliknij UTWÓRZ LOKALIZACJĘ.

e6eb0faa94838c4.png

Nowo utworzony zasób EdgeCacheOrigin pojawi się na liście źródeł w projekcie na stronie Origin.

Konfigurowanie usługi tymczasowego przechowywania danych na serwerach brzegowych

  1. W konsoli Google Cloud otwórz stronę Media CDN.
  2. Kliknij kartę USŁUGI.
  3. Kliknij UTWÓRZ USŁUGĘ.
  4. Wpisz niepowtarzalną nazwę usługi, np. „media-cdn” a potem kliknij Dalej.

d2f9ac837bc5d45a.png

  1. W sekcji Routing kliknij DODAJ REGUŁĘ HOSTA.
  2. Wpisz symbol wieloznaczny – „*” w polu Hosts (Hosty).

25d3e25000934e59.png

  1. Kliknij DODAJ REGUŁĘ TRASY.
  2. W polu Priorytet wpisz „1”.
  3. Kliknij DODAJ WARUNEK DOPASOWANIA. W przypadku dopasowania ścieżki wybierz „Dopasowanie prefiksu”. jako typ dopasowania wpisz „/” w polu Dopasowanie ścieżki i kliknij Gotowe.
  4. W obszarze Główne działanie wybierz Pobierz z punktu początkowego, a następnie wybierz z listy skonfigurowane źródło.

d1975f366233521a.png

  1. Aby zobaczyć więcej opcji konfiguracji, kliknij KONFIGURACJE ZAAWANSOWANE.
  2. W działaniu trasy kliknij DODAJ ELEMENT. Następnie wykonaj te czynności:
  3. Jako Typ wybierz „Zasada CDN”.
  4. Dla trybu pamięci podręcznej wybierz „Wymuś przechowywanie w pamięci podręcznej wszystkich plików”.
  5. Pozostałe wartości pozostaw domyślne
  6. Kliknij Gotowe.
  7. Kliknij Zapisz.

b7e77d059db84ab6.png

  1. Kliknij UTWÓRZ USŁUGĘ.

Nowo utworzony zasób EdgeCacheService pojawi się na stronie Usługi na liście usług w projekcie.

Pobieranie adresu IP MediaCDN i testowanie

  1. W konsoli Google Cloud otwórz stronę Media CDN.
  2. Przejdź do Media CDN
  3. Kliknij kartę Usługi.
  4. Informacje o usłudze znajdziesz w kolumnie Adresy.

4031b6d1eac89041.png

Aby sprawdzić, czy usługa jest prawidłowo skonfigurowana do buforowania treści, użyj narzędzia wiersza poleceń curl do wysyłania żądań i sprawdzania odpowiedzi.

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

Polecenie powinno wyświetlić dane wyjściowe podobne do tych:

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

Udało Ci się utworzyć wdrożenie MediaCDN z Cloud Storage jako punktem początkowym.

7. Konfigurowanie Artifact Registry pod kątem rozszerzeń usług

Przed utworzeniem rozszerzeń usług musimy skonfigurować Artifact Registry. Artifact Registry to uniwersalny menedżer pakietów Google Cloud do zarządzania artefaktami kompilacji. Wtyczki rozszerzenia usługi (Proxy-Wasm) są publikowane w Artifact Registry. Po opublikowaniu w Artifact Registry wtyczki Proxy-Wasm można wdrożyć we wdrożeniu Media CDN.

Do utworzenia repozytorium użyjemy polecenia gcloud APIs instances create.

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

Opcjonalnie możesz utworzyć repozytorium przy użyciu graficznego interfejsu użytkownika w ten sposób:

  1. W konsoli Google Cloud otwórz stronę Artifact Registry.
  2. Kliknij przycisk + UTWÓRZ REPOZYTORIUM.
  3. Wpisz nazwę repozytorium. np. „service-extension-$PROJECT_ID”.
  4. Format – „Docker”, Tryb – „Standardowy”, „Typ lokalizacji” – „Region” i wybrać „us-central1 (Iowa)”
  5. Kliknij przycisk UTWÓRZ.

b525b3bc0867dc42.png

Nowo utworzony zasób repozytorium Artifact Registry powinien pojawić się na stronie Repozytoria.

Po utworzeniu zasobu repozytorium uruchom następujące polecenie w Cloud Shell, aby skonfigurować klienta Dockera Cloud Shell do wypychania i pobierania pakietów przy użyciu tego repozytorium.

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

Dane wyjściowe:

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

8. Konfigurowanie rozszerzeń usług w Media CDN

Teraz zademonstrujemy, jak utworzyć i utworzyć wtyczkę rozszerzenia usługi (Proxy-Wasm), którą można wdrożyć w Media CDN za pomocą języka programowania Rusta.

W tym przykładzie utworzymy wtyczkę Proxy-Wasm, która sprawdza, czy każde żądanie HTTP zawiera nagłówek autoryzacji z wartością „secret”. Jeśli żądanie nie zawiera tego nagłówka, wtyczka generuje odpowiedź HTTP 403 (Zabroniony).

Krótkie przypomnienie dotyczące rozszerzeń usług – istnieją trzy kluczowe zasoby: WasmAction, WasmPlugin i wamPluginVersion.

  • Zasób WasmAction jest dołączany do usługi Media CDN EdgeCacheService. WasmAction odwołuje się do zasobu WasmPlugin.
  • Zasób WasmPlugin ma wersję główną, która odpowiada bieżącej aktywnej wersji WasmPluginVersion.
  • WasmPluginVersions odwołuje się do obrazu kontenera z Artifact Registry. Podczas wprowadzania zmian we wtyczkach proxy-wasm tworzysz różne wersje WasmPluginVersion.

Aby lepiej zrozumieć relacje między tymi zasobami, zapoznaj się z tym schematem.

22b3548b3a61c379.png

Pisanie i tworzenie wtyczki rozszerzenia usługi

  1. Zainstaluj łańcuch narzędzi Rust, wykonując instrukcje podane na stronie https://www.rust-lang.org/tools/install.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. Następnie dodaj obsługę Wasm do łańcucha narzędzi Rust, uruchamiając to polecenie:
rustup target add wasm32-wasi
  1. Utwórz pakiet Rust o nazwie my-wasm-plugin:
cargo new --lib my-wasm-plugin

Dane wyjściowe:

Created library `my-wasm-plugin` package
  1. Wejdź do katalogu my-wasm-plugin. Powinny być tam widoczne pliki Cargo.toml i katalog src.
cd my-wasm-plugin
ls

Dane wyjściowe:

Cargo.toml  src
  1. Następnie skonfiguruj pakiet Rust, edytując plik Cargo.toml. Po wierszu [dependencies] w pliku Cargo.toml dodaj:
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. Po wprowadzeniu zmian plik Cargo.toml powinien wyglądać mniej więcej tak:
[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. . Skopiuj pełną zawartość pliku sample_code do pliku lib.rs w katalogu src w Cloud Shell.
  1. Po wprowadzeniu zmian plik lib.rs powinien wyglądać mniej więcej tak:
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. Po skonfigurowaniu pliku manifestu Cargo.toml i zapisaniu kodu Proxy-Wasm w pliku lib.rs możemy utworzyć wtyczkę Proxy-Wasm.
cargo build --release --target wasm32-wasi

Gdy kompilacja się zakończy, pojawi się następujący komunikat:

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

Sprawdźmy też katalog target i sprawdźmy, czy pliki zostały utworzone:

ls ./target

Zostaną wyświetlone dane wyjściowe, które będą wyglądać tak:

CACHEDIR.TAG release wasm32-wasi

Publikowanie wtyczki Proxy-Wasm w Artifact Registry

Teraz opublikujemy naszą wtyczkę Proxy-Wasm w utworzonym wcześniej repozytorium Artifact Registry, aby można było ją wdrożyć w Media CDN.

Najpierw umieszczamy wtyczki Proxy-Wasm w obrazie kontenera.

  1. W tym samym katalogu my-wasm-plugin utwórz plik o nazwie Dockerfile z następującą zawartością:
FROM scratch 
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
  1. Następnie utwórz obraz kontenera:
docker build --no-cache --platform wasm -t my-wasm-plugin .

(tylko procesory inne niż x86) Następnie utwórz obraz kontenera:

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

Wyniki

[+] Building 0.2s (5/5) FINISHED                                     docker:default
...
  1. Następnie opublikuj ją lub przekaż wtyczki Proxy-Wasm do Artifact Registry. Do obrazu kontenera dodamy tag „prod” .
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin:prod

Teraz przejdziemy do przekazania tagu „prod” do repozytorium.

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

Dane wyjściowe:

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

Sprawdźmy, czy obraz kontenera wtyczki Proxy-Wasm został przesłany do Artifact Registry. Powinny być widoczne podobne dane wyjściowe:

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

Dane wyjściowe:

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

Powiązanie wtyczki Proxy-Wasm z wdrożeniem Media CDN

Teraz możemy powiązać wtyczkę Proxy-Wasm z Twoim wdrożeniem Media CDN.

Wtyczki Proxy-Wasm są powiązane z trasami Media CDN w zasobie EdgeCacheService.

  1. Najpierw tworzymy zasób wtyczki Wasm dla naszej wtyczki Proxy-Wasm.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
  1. Następnie tworzymy wersję 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. Następnie określamy główną wersję naszej wtyczki Proxy-Wasm.
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-1

Sprawdźmy, czy wtyczka Proxy-Wasm została powiązana z obrazem kontenera w repozytorium Artifact Registry. Powinny być widoczne podobne dane wyjściowe:

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

Dane wyjściowe:

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. Następnie tworzymy zasób WasmAction odwołujący się do naszego zasobu wtyczki Wasm.
gcloud alpha service-extensions wasm-actions create my-wasm-action-resource \
    --wasm-plugin=my-wasm-plugin-resource

Sprawdźmy też, czy zasób WasmAction został prawidłowo powiązany z wtyczką Proxy-Wasm. Powinny być widoczne podobne dane wyjściowe:

gcloud alpha service-extensions wasm-actions list

Dane wyjściowe:

NAME                                     WASMPLUGIN                                            
my-wasm-action-resource                  projects/805782461588/locations/global/wasmPlugins/myenvoyfilter-resource
...
  1. Teraz musimy wyeksportować konfigurację usługi Media CDN EdgeCacheService:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
  1. Następnie otwórz plik my-service.yaml i dodaj wasmAction do routeAction dla danej trasy, która odwołuje się do utworzonego wcześniej zasobu WasmPlugin.
wasmAction: "my-wasm-action-resource"
  1. Po wprowadzeniu zmian plik my-service.yaml powinien wyglądać mniej więcej tak:
...

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. Następnie zapisujemy zaktualizowaną konfigurację z konfiguracją serwera proxy w pliku my-service-with-wasm.yaml.
  1. Na koniec importujemy zaktualizowaną konfigurację środowiska produkcyjnego Media CDN:
$ gcloud alpha edge-cache services import media-cdn --source=my-service-with-wasm.yaml

9. Sprawdzanie poprawności wtyczki Proxy-Wasm rozszerzeń usług w Media CDN

Aby sprawdzić, czy usługa jest prawidłowo skonfigurowana do buforowania treści, użyj narzędzia wiersza poleceń curl do wysyłania żądań i sprawdzania odpowiedzi.

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

Polecenie powinno wyświetlić dane wyjściowe podobne do tych:

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

Następnie wyślij żądanie ponownie, podając nagłówek autoryzacji i wartość obiektu tajnego.

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

Polecenie powinno wyświetlić dane wyjściowe podobne do tych:

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

10. Opcjonalnie: zarządzanie wtyczkami Proxy-Wasm

Aktualizowanie wtyczki Proxy-Wasm

Gdy wprowadzasz ulepszenia lub dodajesz nowe funkcje do wtyczek Proxy-Wasm, musisz wdrażać zaktualizowane wtyczki w Media CDN. Poniżej opisujemy czynności, jakie należy wykonać, aby wdrożyć zaktualizowaną wersję wtyczki.

Możesz na przykład zaktualizować przykładowy kod wtyczki, aby porównać nagłówek autoryzacji z inną wartością uwierzytelniania, modyfikując kod w następujący sposób.

Najpierw zaktualizuj plik źródłowy src/lib.rs przy użyciu poniższego kodu:

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

Następnie skompiluj, spakuj i opublikuj zaktualizowaną wtyczkę:

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

Po zaktualizowaniu obrazu kontenera w Artifact Registry musimy utworzyć nową wersję WasmPluginVersion, a następnie zaktualizować –main-wersję wtyczki WasmPlugin, tak aby odwoływała się do nowej wersji.

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

Udało Ci się zaktualizować wersję obrazu kontenera, aby zaimportować ją z Artifact Registry i przekazać do wdrożenia Media CDN.

Przywracanie poprzedniej wersji

Aby przywrócić poprzednią wersję wtyczki, możesz zaktualizować zasób wtyczki Wasm, aby odwoływał się do poprzedniej wersji.

Najpierw podajemy dostępne wersje:

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

Powinny się wyświetlić dane wyjściowe:

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

Następnie aktualizujemy zasób wtyczki Wasm, aby odwoływał się do poprzedniej wersji – „a2a8ce”:

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

Gdy operacja się powiedzie, powinny pojawić się te dane wyjściowe:

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

Media CDN zapisuje skrót obrazu obrazu Dockera za każdym razem, gdy tworzony jest nowy zasób wtyczki Wasm, przy przywracaniu będzie używana wersja kodu prowadzona przed ostatnim wdrożeniem.

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

W przypadku wersji „a2a8ce” jest to wersja z skrótem 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"

Usuwanie działania WasmAction WasmPlugin

Aby usunąć działanie WasmAction, WasmPlugin i powiązane wersje WasmPluginVersion, wykonaj te czynności.

Najpierw usuń odwołanie do działania WasmAction w konfiguracji Media CDN EdgeCacheService.

Wiersz referencyjny do usunięcia:

wasmAction: "my-wasm-action-resource"

Następnie aktualizujemy zmienioną konfigurację EdgeCacheService.

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

Następnie zaktualizuj główną wersję wtyczki WasmPlugin do pustego ciągu "".

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

Na koniec wykonaj po kolei podane niżej czynności usuwania.

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. Uporządkuj środowisko modułu

Po ukończeniu modułu CodeLab nie zapomnij wyczyścić zasobów. W przeciwnym razie będą one nadal działać i generować koszty.

Następujące polecenia powodują usunięcie usługi Media CDN EdgeCache, konfiguracji EdgeCache i wtyczki rozszerzeń usług. Wykonaj po kolei te czynności.

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

Każde z powyższych poleceń powinno wymagać potwierdzenia usunięcia zasobu.

12. Gratulacje!

Gratulujemy ukończenia ćwiczenia z programowania w usłudze Media CDN w zakresie rozszerzeń usług.

Omówione zagadnienia

  • Jak skonfigurować Media CDN z zasobnikiem Cloud Storage ustawionym jako punkt początkowy
  • Jak utworzyć wtyczkę rozszerzenia usługi z niestandardowym uwierzytelnianiem HTTP i powiązać ją z Media CDN
  • Jak sprawdzić, czy wtyczka rozszerzenia usługi działa zgodnie z oczekiwaniami
  • (opcjonalnie) Jak zarządzać wtyczką rozszerzenia usług, np. aktualizować, odwoływać się do niej, wycofywać ją i usuwać

Co dalej?

Zapoznaj się z tymi ćwiczeniami z programowania...

Więcej informacji

Dokumentacja