1. מבוא
עדכון אחרון: 1 במאי 2024
רשתות להעברת תוכן (CDN) משפרות את ביצועי המשתמשים על ידי שמירת תוכן שמתבצעת אליו גישה לעיתים קרובות במטמון קרוב יותר למשתמשי הקצה, סגירת חיבורים קרוב יותר ללקוחות, שימוש חוזר בחיבורים למקור ואימוץ של פרוטוקולי רשת מודרניים והתאמות אישיות.
Media CDN, רשת קצה גלובלית של GCP לסטרימינג של מדיה, מספקת הרבה יכולות מובנות או 'בסיסיות'. היכולות הבסיסיות נועדו לתת מענה לתרחישי השימוש הנפוצים ביותר, אבל יכול להיות שיהיו לכם גם דרישות שלא מקבלות מענה על ידי קבוצת התכונות הבסיסית הזו.
Service Extensions לשירות Media CDN, שנקראים גם Edge Programmability, מאפשרים להריץ קוד משלכם ב-Edge כדי להתאים אישית את ההתנהגות של Media CDN. האפשרות הזו פותחת תרחישי שימוש נוספים, החל מנרמול של מפתח מטמון, אימות של אסימון מותאם אישית וביטול אסימון, שדות יומן מותאמים אישית נוספים, בדיקות A/B ודף שגיאה מותאם אישית.
מה תפַתחו
בשיעור ה-Lab הזה נסביר איך לפרוס סביבת מסירת תוכן של CDN עם תמיכה ב-Edge Compute באמצעות Media CDN (CDN) + Service Extensions (Edge Programmability) + Cloud Storage (מקור ה-CDN).

מה תלמדו
- איך מגדירים Media CDN באמצעות קטגוריה של Cloud Storage שהוגדרה כמקור
- איך יוצרים תוסף Service Extension עם אימות HTTP מותאם אישית ומשייכים אותו ל-Media CDN
- איך לוודא שהפלאגין Service Extension פועל כמו שצריך
- (אופציונלי) איך לנהל פלאגין של Service Extension, למשל לעדכן, להפנות, לבטל עדכון ולמחוק גרסה ספציפית של פלאגין
מה תצטרכו
- ידע בסיסי ברשתות ו-HTTP
- ידע בסיסי בשורת הפקודה של Unix/Linux
2. לפני שמתחילים
בקשה להוספה לרשימת ההיתרים של Media CDN ולרשימת ההיתרים של Service Extensions
לפני שמתחילים, צריך לוודא שהפרויקט שלכם נוסף לרשימת ההיתרים של התצוגה המקדימה הפרטית גם ל-Media CDN וגם ל-Service Extensions for Media CDN.
- כדי לבקש גישה גם ל-Media CDN וגם ל-Service Extensions for Media CDN, צריך לפנות לצוות חשבון Google כדי ליצור בשמך בקשת גישה ל-Media CDN ול-Service Extensions
3. הגדרה ודרישות
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Lab הזה רק באמצעות דפדפן.
לפני שמתחילים
תפקידים וגישה ב-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
מפעילים את Media CDN ואת Service Extensions APIs באמצעות הפקודות שמוצגות למטה.
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
אפשר גם ליצור קטגוריה של Cloud Storage באמצעות ממשק המשתמש הגרפי, באופן הבא:
- במסוף Google Cloud, עוברים לדף Cloud Storage.
- לוחצים על הלחצן יצירה.
- מזינים שם לקטגוריה. - כלומר, mediacdn-bucket-$PROJECT_ID.
- משאירים את שאר ההגדרות כברירת מחדל.
- לוחצים על הלחצן יצירה.

5. העלאת אובייקט בדיקה לקטגוריה של Cloud Storage
עכשיו נעלה אובייקט לקטגוריה של Cloud Storage.
- יוצרים קובץ ב-Cloud Shell ואז מעלים אותו לקטגוריה באמצעות gsutil
echo media-cdn-service-extensions-test > file.txt gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
- הענקת גישה ל-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 מורכבת משני משאבים עיקריים:
- EdgeCacheService, שאחראי על הגדרות שפונות ללקוח (TLS, כתובות IP), ניתוב, הגדרות CDN (מצבי מטמון, ערכי TTL, חתימה) ומדיניות אבטחה.
- EdgeCacheOrigin, שאחראי על הגדרת כל מקור מבוסס HTTP, וגם על תנאים לניסיון חוזר כשהתוכן לא זמין או לא נגיש.
הגדרת המקור למטמון הקצה
עכשיו ניצור מקור שמפנה לקטגוריה של Cloud Storage שיצרתם.
- במסוף Google Cloud, עוברים לדף Media CDN.
- לוחצים על הכרטיסייה מקורות.
- לוחצים על CREATE ORIGIN (יצירת מקור).
- מזינים 'cloud-storage-origin' כשם של המקור למטמון הקצה.
- בקטע 'כתובת המקור':
- בוחרים באפשרות 'בחירת קטגוריה של Cloud Storage'.
- לוחצים על 'עיון' כדי לעבור לקטגוריה של Cloud Storage בשם mediacdn-bucket-$PROJECT_ID.
- לוחצים על 'בחירה'.
- משאירים את שאר ההגדרות כברירת מחדל.
- לוחצים על CREATE ORIGIN (יצירת מקור).

משאב EdgeCacheOrigin שנוצר לאחרונה מופיע ברשימת המקורות בפרויקט בדף Origins (מקורות).
הגדרת שירות Edge Cache
- במסוף Google Cloud, עוברים לדף Media CDN.
- לוחצים על הכרטיסייה שירותים.
- לוחצים על CREATE SERVICE.
- מזינים שם ייחודי לשירות – למשל, media-cdn – ולוחצים על Next (הבא).

- בקטע 'ניתוב', לוחצים על הוספת כלל של מארח.
- מזינים את התו הכללי '*' בשדה 'מארחים'.

- לוחצים על הוספת כלל ניתוב.
- בעמודה 'עדיפות', מציינים '1'.
- לוחצים על הוספת תנאי התאמה. בהתאמה לנתיב, בוחרים באפשרות 'התאמה לקידומת' כסוג ההתאמה, מציינים '/' בשדה 'התאמה לנתיב' ולוחצים על 'סיום'.
- בקטע 'פעולה ראשית', בוחרים באפשרות Fetch from an Origin (אחזור מ-Origin) ואז בוחרים את ה-Origin שהגדרתם ברשימה הנפתחת.

- לוחצים על הגדרות מתקדמות כדי להרחיב את אפשרויות ההגדרה.
- בפעולת הניתוב, לוחצים על הוספת פריט. לאחר מכן, מבצעים את הפעולות הבאות:
- בקטע Type (סוג), בוחרים באפשרות CDN policy (מדיניות CDN).
- במצב מטמון, בוחרים באפשרות 'אילוץ מטמון של הכול'.
- משאירים את שאר ההגדרות כברירת מחדל
- לוחצים על 'סיום'.
- לוחצים על שמירה.

- לוחצים על CREATE SERVICE.
המשאב EdgeCacheService שנוצר מופיע בדף Services ברשימת השירותים בפרויקט.
אחזור כתובת ה-IP של MediaCDN ובדיקה
- במסוף Google Cloud, עוברים לדף Media CDN.
- מעבר אל Media CDN
- לוחצים על הכרטיסייה Services (שירותים).
- בעמודה כתובות מופיעה הכתובת של השירות.

כדי לבדוק שהשירות מוגדר בצורה נכונה לשמירת תוכן במטמון, משתמשים בכלי 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 לתוספי שירות
לפני שיוצרים Service Extensions, צריך להגדיר את Artifact Registry. Artifact Registry הוא מנהל חבילות אוניברסלי של Google Cloud לניהול פריטי מידע שנוצרו בתהליך פיתוח (artifacts) בגרסת build. תוספים של Service Extension (Proxy-Wasm) מתפרסמים ב-Artifact Registry. אחרי שמפרסמים תוספים של Proxy-Wasm ב-Artifact Registry, אפשר לפרוס אותם בפריסת 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
אפשר גם ליצור מאגר באמצעות ממשק המשתמש הגרפי באופן הבא:
- נכנסים לדף Artifact Registry במסוף Google Cloud.
- לוחצים על הלחצן + CREATE REPOSITORY (יצירת מאגר).
- מזינים שם למאגר, למשל service-extension-$PROJECT_ID.
- Format (פורמט) – Docker, Mode (מצב) – Standard, Location Type (סוג מיקום) – Region, ובוחרים באפשרות us-central1 (Iowa).
- לוחצים על הלחצן יצירה.

מאגר המשאבים החדש של Artifact Registry Repository אמור להופיע בדף Repositories (מאגרים).
אחרי שיוצרים את מאגר המשאבים, מריצים את הפקודה הבאה ב-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. הגדרת Service Extensions ב-Media CDN
עכשיו נראה איך לכתוב וליצור פלאגין של Service Extension (Proxy-Wasm) שאפשר לפרוס ב-Media CDN, באמצעות שפת התכנות Rust.
בדוגמה הזו, ניצור תוסף Proxy-Wasm שבודק אם כל בקשת HTTP מכילה כותרת Authorization עם הערך secret. אם הבקשה לא מכילה את הכותרת הזו, הפלאגין ייצור תגובה מסוג HTTP 403 Forbidden.
תזכורת קצרה לגבי תוספים לשירותים – יש שלושה משאבים עיקריים: WasmAction, WasmPlugin ו-WasmPluginVersion.
- משאב WasmAction הוא מה שמצורף ל-Media CDN EdgeCacheService. WasmAction מפנה למשאב WasmPlugin.
- למשאב WasmPlugin יש גרסה ראשית שתואמת ל-WasmPluginVersion הפעיל הנוכחי.
- WasmPluginVersions מפנה לקובץ אימג' של קונטיינר מ-Artifact Registry. כשמבצעים שינויים בתוספים של proxy-wasm, נוצרות גרסאות שונות של WasmPlugin.
כדי להבין טוב יותר את הקשר בין המשאבים האלה, כדאי לעיין בתרשים שלמטה.

כתיבה ופיתוח של תוסף Service Extension
- מתקינים את ערכת הכלים של Rust לפי ההוראות שבכתובת https://www.rust-lang.org/tools/install.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- לאחר מכן, מוסיפים תמיכה ב-Wasm לשרשרת הכלים של Rust על ידי הרצת הפקודה הבאה:
rustup target add wasm32-wasi
- יוצרים חבילת Rust בשם my-wasm-plugin:
cargo new --lib my-wasm-plugin
פלט:
Created library `my-wasm-plugin` package
- נכנסים לספרייה my-wasm-plugin. אמורים לראות קובץ
Cargo.tomlוספרייהsrc.
cd my-wasm-plugin ls
פלט:
Cargo.toml src
- לאחר מכן, עורכים את הקובץ
Cargo.tomlכדי להגדיר את חבילת Rust. אחרי השורה[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"
- אחרי העריכות, קובץ
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"
- אחרי העריכות, קובץ
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 {}
- אחרי שהגדרנו את קובץ המניפסט
Cargo.tomlוכתבנו את קוד ה-Proxy-Wasm בקובץlib.rs, אפשר ליצור את הפלאגין Proxy-Wasm.
cargo build --release --target wasm32-wasi
אחרי שה-build יסתיים בהצלחה, תופיע הודעה כמו זו שמוצגת למטה:
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 בקובץ אימג' של קונטיינר.
- יוצרים קובץ בשם
Dockerfileבאותה ספרייה my-wasm-plugin, עם התוכן הבא:
FROM scratch
COPY target/wasm32-wasi/release/my_wasm_plugin.wasm plugin.wasm
- לאחר מכן, יוצרים את קובץ האימג' של הקונטיינר:
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 ...
- לאחר מכן, מפרסמים או "דוחפים" את התוסף Proxy-Wasm ל-Artifact Registry. אנחנו נתייג את קובץ האימג' של קונטיינר בתג 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 נדחף בהצלחה אל Artifact Registry. הפלט אמור להיראות כך:
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.
- קודם יוצרים משאב Wasm-plugin בשביל הפלאגין Proxy-Wasm.
gcloud alpha service-extensions wasm-plugins create my-wasm-plugin-resource
- בשלב הבא, יוצרים 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"
- בשלב הבא, מציינים את הגרסה הראשית של התוסף 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... ... ... ...
- אחר כך, יוצרים משאב 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 ...
- עכשיו צריך לייצא את ההגדרה של Media CDN EdgeCacheService:
gcloud edge-cache services export media-cdn --destination=my-service.yaml
- לאחר מכן, פותחים את הקובץ my-service.yaml ומוסיפים wasmAction ל-routeAction עבור הנתיב הנתון, שמפנה למשאב WasmPlugin שנוצר קודם.
wasmAction: "my-wasm-action-resource"
- אחרי העריכה, הקובץ 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"
...
- לאחר מכן, שומרים את התצורה המעודכנת עם הגדרת Proxy-Wasm בקובץ
my-service-with-wasm.yaml.
- לבסוף, מייבאים את התצורה המעודכנת לסביבת הייצור של 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. בהמשך מוסבר איך פורסים גרסה מעודכנת של תוסף.
לדוגמה, אפשר לעדכן את קוד התוסף לדוגמה כדי להעריך את כותרת ההרשאה מול ערך אחר לאימות, על ידי שינוי הקוד כמו בדוגמה הבאה.
קודם כל, מעדכנים את קובץ המקור 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 חדש ואז לעדכן את –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, והעברתם אותה לשימוש פעיל ב-Deployment (פריסה) של 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-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 בהגדרות של 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. לפנות את סביבת ה-Lab
אחרי שמסיימים את ה-CodeLab, חשוב לזכור למחוק את המשאבים של ה-Lab, אחרת הם ימשיכו לפעול ולצבור עלויות.
הפקודות הבאות ימחקו את שירות Media CDN EdgeCache, את EdgeCache Config ואת התוסף 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. מעולה!
כל הכבוד, סיימתם את ה-Codelab בנושא Service Extensions ב-Media CDN!
מה נכלל
- איך מגדירים Media CDN באמצעות קטגוריה של Cloud Storage שהוגדרה כמקור
- איך יוצרים תוסף Service Extension עם אימות HTTP מותאם אישית ומשייכים אותו ל-Media CDN
- איך לוודא שהפלאגין Service Extension פועל כמו שצריך
- (אופציונלי) איך לנהל פלאגין של Service Extension, למשל לעדכן, להפנות, לבטל עדכון ולמחוק גרסה ספציפית של פלאגין
מה השלב הבא?
כדאי לעיין ב-Codelabs הבאים…
קריאה נוספת
- טעינה של Service Worker עם ביצועים גבוהים
- אסטרטגיות של שמירת נתונים במטמון של Service Worker על סמך סוגי בקשות