Lab: תוספי שירות ב-Media CDN

Lab:
תוספי שירות ב-Media CDN

מידע על Codelab זה

subjectהעדכון האחרון: יולי 8, 2024
account_circleנכתב על ידי Xiaozang Li

1.‏ מבוא

תאריך העדכון האחרון: 1 במאי 2024

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

Media CDN, רשת הקצה הגלובלית של GCP לסטרימינג של מדיה, מספקת הרבה רכיבים מובנים או "מעבדים" יכולות.יכולות הליבה נועדו לטפל בתרחישי השימוש הנפוצים ביותר, אבל יכול להיות שיש גם דרישות שהמערך של תכונות הליבה הזה לא מטפל בהן.

תוספי שירות ל-Media CDN, המכונים לפעמים גם מתכנות Edge, מאפשרים לכם להריץ קוד משלכם בקצה כדי להתאים אישית את ההתנהגות של Media CDN. הפעולה הזו פותחת בפניך תרחישים לדוגמה נוספים, החל מנירמול מפתח מטמון, אימות אסימון בהתאמה אישית וביטול אסימון, שדות נוספים בהתאמה אישית ביומן, בדיקות A/B ודף שגיאה בהתאמה אישית.

מה תפַתחו

בשיעור ה-Lab הזה נעבור על השלבים לפריסה של סביבת העברת CDN שתומכת ב-Edge Compute עם Media CDN (CDN) + תוספי שירות (Edge Programmability) + Cloud Storage (מקור CDN).

1f19151bdd96acb0.png

מה תלמדו

  • איך להגדיר את Media CDN כאשר קטגוריית Cloud Storage מוגדרת כמקור
  • איך ליצור פלאגין של תוסף שירות עם אימות HTTP מותאם אישית ולשייך אותו ל-Media CDN
  • איך לוודא שהפלאגין של תוסף השירות פועל כצפוי
  • (אופציונלי) ניהול פלאגין של תוסף שירות, כמו עדכון, הפניה, החזרה למצב קודם ומחיקה של גרסת פלאגין ספציפית.

מה צריך להכין

  • רשתות בסיסיות וידע על HTTP
  • ידע בסיסי בשורת הפקודה Unix/Linux

2.‏ לפני שמתחילים

בקשות לרשימת ההיתרים של Media CDN ו- רשימת ההיתרים של תוספי שירות

לפני שמתחילים, צריך לוודא שהפרויקט נוסף לרשימת ההיתרים של התצוגה המקדימה הפרטית עבור Media CDN ו-Service extensions for Media CDN.

  • כדי לבקש גישה ל-Media CDN ולתוספי שירות עבור Media CDN, יש לפנות לצוות חשבונות Google כדי ליצור בקשת גישה בשמכם עבור Media CDN ותוספי שירות

3.‏ הגדרה ודרישות

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:

1dec6f9683153af0.png

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

de496bb88f9a0b10.png

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.

לפני שמתחילים

תפקידי IAM הרשאת גישה

אלה ההרשאות של ניהול הזהויות והרשאות הגישה (IAM) שנדרשות כדי ליצור משאבי Media CDN ו-Artifact Registry:

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

ב-Inside 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 ו- ממשקי API של תוספי שירות באמצעות הפקודות הבאות

gcloud services enable networkservices.googleapis.com
gcloud services enable networkactions.googleapis.com
gcloud services enable edgecache.googleapis.com
gcloud services enable artifactregistry.googleapis.com

4.‏ יצירת קטגוריה של Cloud Storage

התוכן של Media CDN יכול להגיע ממיקומים כמו קטגוריה של Cloud Storage, מיקום אחסון של צד שלישי או כל נקודת קצה HTTP(HTTPS) שנגישה לציבור.

ב-Codelab הזה נאחסן תוכן בקטגוריה של Cloud Storage.

נשתמש בפקודה gsutil mb כדי ליצור את הקטגוריה

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

לחלופין, אפשר ליצור קטגוריה של Cloud Storage באמצעות ממשק GUI באופן הבא:

  1. במסוף Google Cloud, נכנסים לדף Cloud Storage.
  2. לוחצים על הלחצן יצירה.
  3. מזינים שם לקטגוריה. - כלומר"mediacdn-bucket-$PROJECT_ID".
  4. משאירים את שאר ההגדרות כברירת מחדל.
  5. לוחצים על הלחצן יצירה.

50475e01c5a3adbe.png

5.‏ העלאת אובייקט בדיקה לקטגוריה של Cloud Storage

עכשיו נעלה אובייקט לקטגוריה של Cloud Storage.

  1. יוצרים קובץ ב-Cloud Shell ומעלים אותו לקטגוריה באמצעות gsutil
echo media-cdn-service-extensions-test > file.txt

gsutil cp file.txt gs://mediacdn-bucket-$PROJECT_ID
  1. הענקת גישת Media CDN לקטגוריה
gsutil iam ch \
serviceAccount:service-$PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://mediacdn-bucket-$PROJECT_ID

6.‏ הגדרת CDN של מדיה

לאחר מכן ניצור תצורה של Media CDN.

כל הגדרה של Media 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. BROWSE לקטגוריה של Cloud Storage בשם 'mediacdn-bucket-$PROJECT_ID'.
  8. לוחצים על 'בחירה'.
  9. משאירים את שאר ההגדרות כברירת מחדל.
  10. לוחצים על יצירת מקור.

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 יופיע בדף Services ברשימת השירותים בפרויקט.

אחזור כתובת ה-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.‏ הגדרת Artifact Registry לתוספי שירות

לפני שיוצרים תוספי שירות, צריך להגדיר את Artifact Registry. Artifact Registry הוא מנהל החבילות האוניברסלי של Google Cloud לניהול ארטיפקטים של build. יישומי פלאגין מסוג Service Extension (Proxy-Wasm) מתפרסמים ב-Artifact Registry. אחרי הפרסום ב-Artifact Registry, אפשר לפרוס יישומי פלאגין מסוג Proxy-Wasm בפריסת Media CDN.

נשתמש בפקודה gcloud Artifact repositories create כדי ליצור את המאגר

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

לחלופין, אפשר ליצור מאגר באמצעות ממשק GUI:

  1. במסוף Google Cloud, נכנסים לדף Artifact Registry.
  2. לוחצים על הלחצן + יצירת מאגר.
  3. מזינים שם למאגר. לדוגמה, 'service-extension-$PROJECT_ID'.
  4. פורמט - 'Docker,' מצב - 'רגילה', סוג מיקום - 'אזור', ובוחרים את 'us-central1 (איווה)'
  5. לוחצים על הלחצן יצירה.

b525b3bc0867dc42.png

המשאב החדש שנוצר ב-Artifact Registry Repository אמור להופיע בדף Repositories.

אחרי שיוצרים את המשאב של ה-Repository, מריצים את הפקודה הבאה ב-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

עכשיו נדגים איך לכתוב ולבנות פלאגין שירות (Proxy-Wasm) שאפשר לפרוס ב-Media CDN באמצעות שפת התכנות חלודה.

בדוגמה זו ניצור פלאגין מסוג Proxy-Wasm שמאמת כל בקשת HTTP מכילה כותרת הרשאה עם הערך Secret (סוד). אם הבקשה לא מכילה את הכותרת הזו, הפלאגין יפיק תגובה אסורה מסוג HTTP 403.

רענון מהיר לתוספי שירות – יש שלושה משאבים עיקריים: WasmAction, WasmPlugin ו-WasmPluginVersion.

  • משאב WasmAction הוא מה שמצורף ל-Media CDN EdgeCacheService. WasmAction מפנה למשאב WasmPlugin.
  • למשאב WasmPlugin יש גרסה ראשית שתואמת ל-WasmPluginVersion הפעילה הנוכחית.
  • קובץ WasmPluginVersions מפנה לקובץ אימג' של קונטיינר מ-Artifact Registry. כשעורכים שינויים ביישומי הפלאגין מסוג proxy-wasm, יוצרים גרסאות WasmPluginVersion שונות.

בתרשים הבא אפשר להבין טוב יותר את הקשר בין המשאבים האלה.

22b3548b3a61c379.png

כתיבה ופיתוח של פלאגין של תוסף שירות

  1. מתקינים את הכלי Rust Toolchain ופועלים לפי ההוראות שמפורטות בכתובת https://www.rust-lang.org/tools/install.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. בשלב הבא, מוסיפים את התמיכה ב-Wasm ל-Russt Toolchain באמצעות הרצת הפקודה הבאה:
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. יופיע קובץ my-wasm-plugin וספרייה my-wasm-plugin.
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

אחרי שה-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 Repository שיצרת בעבר, כדי שיהיה אפשר לפרוס אותו ב-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. הבא, פרסום או "push" את הפלאגין Proxy-Wasm ל-Artifact Registry. אנחנו נתייג את קובץ האימג' שלנו בקונטיינר באמצעות המאפיין prod התיוג.
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/my-wasm-plugin: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.

  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 שויך בהצלחה ל-Container Image ונמצא ב-Artifact Registry Repository, אמור להיראות פלט דומה:

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.‏ אימות הפלאגין Proxy-Wasm לתוספי שירות ב-Media CDN

כדי לבדוק שהשירות מוגדר כראוי לשמירת תוכן במטמון, השתמשו בכלי שורת הפקודה curl כדי להנפיק בקשות ולבדוק את התגובות.

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

הפלט של הפקודה אמור להיראות כך:

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

עכשיו עליך לשלוח את הבקשה שוב עם כותרת Authorization וערך הסוד שלה

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

הפלט של הפקודה אמור להיראות כך:

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

10.‏ אופציונלי: ניהול יישומי פלאגין מסוג Proxy-Wasm

עדכון של פלאגין מסוג Proxy-Wasm

במהלך ביצוע שיפורים או הוספה של פונקציונליות חדשה ליישומי הפלאגין מסוג Proxy-Wasm, יהיה צורך לפרוס את יישומי הפלאגין המעודכנים ב-Media CDN. בהמשך מפורטים השלבים לפריסת גרסה מעודכנת של פלאגין.

לדוגמה, אפשר לעדכן את הקוד של הפלאגין לדוגמה כדי להעריך את הכותרת Authorization מול ערך אחר של אימות על ידי שינוי הקוד כמו בדוגמה הבאה.

קודם כול, מעדכנים את קובץ המקור src/lib.rs עם הקוד הבא:

use log::{info, warn};
use proxy_wasm::traits::*;
use proxy_wasm::types::*;

...

struct DemoPlugin;

impl HttpContext for DemoPlugin {
    fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
        if self.get_http_request_header("Authorization") == Some(String::from("another_secret")) {
            info!("Access granted.");
            Action::Continue
        } else {
            warn!("Access forbidden.");
            self.send_http_response(403, vec![], Some(b"Access forbidden.\n"));
            Action::Pause
        }
    }
}

impl Context for DemoPlugin {}

בשלב הבא, בונים, אורזים ומפרסמים את הפלאגין המעודכן:

cargo build --release --target wasm32-wasi
docker build --no-cache --platform wasm -t my-wasm-plugin .
docker tag my-wasm-plugin $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY/my-wasm-plugin:prod
docker push $LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod

אחרי שמעדכנים את קובץ האימג' של הקונטיינר ב-Artifact Registry, צריך ליצור גרסה חדשה של WasmPluginVersion ואז לעדכן את הגרסה הראשית של WasmPlugin כדי להפנות לגרסה החדשה.

gcloud alpha service-extensions wasm-plugin-versions create my-version-2 \
    --wasm-plugin=my-wasm-plugin-resource \
   --image="$LOCATION-docker.pkg.dev/$PROJECT_NUM/$REPOSITORY>/my-wasm-plugin:prod"
gcloud alpha service-extensions wasm-plugins update my-wasm-plugin-resource \
    --main-version=my-version-2

עכשיו, עדכנת בהצלחה את הגרסה של קובץ האימג' בקונטיינר שצריך לייבא מ-Artifact Registry ולהעביר אותו למצב פעיל לפריסת Media CDN.

חזרה לגרסה קודמת

כדי לחזור לגרסה קודמת של פלאגין, אתם יכולים לעדכן את משאב הפלאגין של 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 Service, EdgeCache Config ופלאגין Service תוספי שירות. יש לבצע את שלבי המחיקה הבאים לפי הסדר.

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 של Media CDN!

אילו נושאים דיברנו?

  • איך להגדיר את Media CDN כאשר קטגוריית Cloud Storage מוגדרת כמקור
  • איך ליצור פלאגין של תוסף שירות עם אימות HTTP מותאם אישית ולשייך אותו ל-Media CDN
  • איך לוודא שהפלאגין של תוסף השירות פועל כצפוי
  • (אופציונלי) ניהול פלאגין של תוסף שירות, כמו עדכון, הפניה, החזרה למצב קודם ומחיקה של גרסת פלאגין ספציפית.

מה השלב הבא?

כדאי לנסות כמה מ-Codelabs האלה...

קריאה נוספת

מסמכי עזר