Media CDN מציע העברת תוכן, העברה של נתונים מהמטמון, הגנה על המקור, הרשאת בקשות ושילוב עם פלטפורמות של Google Cloudמאזני עומסים חיצוניים של אפליקציות, רישום ביומן ומעקב.
Media CDN מספק כמה משאבי API בארכיטקטורת REST:
-
EdgeCacheService, שאחראי על הגדרות שפונות ללקוח (TLS, כתובות IP), ניתוב, הגדרות CDN (מצבי מטמון, ערכי TTL, חתימה) ומדיניות אבטחה. -
EdgeCacheOrigin, שאחראי על הגדרה לכל מקור שמבוסס על HTTP, וגם על תנאים לניסיון חוזר אם התוכן לא זמין או לא ניתן להגיע אליו. לדוגמה, כחלק מהגדרה של כלי מיותר לאריזת סרטונים. - (Optional)
EdgeCacheKeyset, which contains a set of public keys used for validating that client requests were signed by your infrastructure / CMS.EdgeCacheKeysetsמשויכים לEdgeCacheService, ואפשר להשתמש בהם בכמה שירותים.
בדוגמה הבאה מוצגים המשאבים האלה, שבה אפשר לראות את התנועה שמסתיימת ב-EdgeCacheService ואת הניתוב ל-EdgeCacheOrigins שונים.
EdgeCacheService
שמסיים את התנועה, בודק בקשות חתומות עם EdgeCacheKeyset אופציונלי, ומנתב בקשות לשלושה EdgeCacheOrigins שונים.הרשאות
צריכות להיות לכם הרשאות לניהול זהויות והרשאות גישה (IAM) שנדרשות ליצירת משאבי Media CDN. ל-Media CDN יש את התפקידים המוגדרים מראש הבאים ב-IAM:
roles/networkservices.edgeCacheAdminroles/networkservices.edgeCacheUserroles/networkservices.edgeCacheViewer
הפעלת השירותים הנדרשים
כדי להגדיר ולפרוס שירותים של Media CDN, צריך להפעיל בפרויקט את Network Services API ואת Certificate Manager API.
המסוף
מפעילים את Network Services API.
מפעילים את Certificate Manager API.
gcloud
מפעילים את Network Services API:
gcloud services enable networkservices.googleapis.comמפעילים את Certificate Manager API:
gcloud services enable certificatemanager.googleapis.com
מידע נוסף על הפעלה והשבתה של שירותים זמין במאמר שימוש בשירות.
הגדרה לדוגמה
ברשימת המשאבים הבאה מתוארת הגדרה מייצגת של Media CDN:
An
EdgeCacheOrigin:- מקור שמבוסס על Cloud Storage ומנסה שוב אחזור מטמון ממקור חלופי (AWS S3) אם האובייקט לא נמצא ב-Cloud Storage (לדוגמה, HTTP 404) או אם נתקלים בשגיאה מסוג 5xx.
One
EdgeCacheKeyset, שכולל:- שני מפתחות ציבוריים מסוג Ed25519, שמשמשים לאימות בקשות חתומות.
- במסגרת הגדרת הדוגמה, אפשר להחליף מפתחות מדי חודש ולשמור שני מפתחות בייצור.
אחד
EdgeCacheServiceעם שני מסלולים, כולל:- נתיב למניפסטים שמשויך למקור Cloud Storage, עם ערכי TTL קצרים של מטמון.
- מסלול לקטעי וידאו, שמוגן על ידי בקשות חתומות ומשויך למקור Cloud Storage, מוגדר לשמירת כל התגובות במטמון.
IPv4, IPv6, רישום ביומן מופעל (ברירת מחדל) ואישור SSL מנוהל מוגדר
בדוגמה הבאה אפשר לראות את הפלט של gcloud עבור ההגדרה הזו:
gcloud edge-cache origins describe prod-media-origin
id: "2295067926314745283" creationTimestamp: "2019-11-13T09:53:48.757-08:00" name: "prod-media-origin" description: "" originAddress: "gs://bucket_name/" failoverOrigin: "s3-origin" retryConditions: [HTTP_5XX, NOT_FOUND] originProtocol: HTTP2 timeouts: connectTimeout: 5s maxAttemptsTimeout: 10 responseTimeout: 6s
id: "2295067926314745283" creationTimestamp: "2019-11-13T09:53:48.757-08:00" name: "s3-origin" description: "" originAddress: "media.example.com.s3.amazonaws.com" retryConditions: [HTTP_5XX, NOT_FOUND] originProtocol: HTTP2
gcloud edge-cache keysets describe prod-keyset
id: "2295067926314745283"
creationTimestamp: "2019-11-13T09:53:48.757-08:00"
name: "prod-keyset"
publicKeys:
- name: "sept-2020-key"
value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w="
- name: "aug-2020-key"
value: "3nQa82ScYgDDAxJrKCqumSEg60VNODGR5dGAveJWsw4="
gcloud edge-cache services describe prod-media-service
name: "prod-media-service"
edgeSslCertificates:
- "media-example-com-cert"
- "video-serving-example-com-cert"
requireTls: true
routing:
hostRules:
- description: "prod hostnames"
hosts:
- "media.example.com"
- "video-serving.example.net"
pathMatcher: "routes"
pathMatchers:
- name: "routes"
routeRules:
- priority: 1
description: "prod video segments"
origin: "prod-media-origin"
matchRules:
- pathTemplateMatch: "/**.ts" # HLS segments
- pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
routeAction:
cdnPolicy:
cacheMode: "FORCE_CACHE_ALL"
clientTtl: 3600s
defaultTtl: 86400s
signedRequestMode: REQUIRE_SIGNATURES
signedRequestKeySet: "prod-keyset"
headerAction:
responseHeadersToAdd:
- headerName: cache-status
headerValue: "{cdn_cache_status}"
- headerName: proxy-status
headerValue: "{proxy_status}"
- priority: 2
description: "prod manifest endpoints"
origin: "prod-media-origin"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS playlists
- pathTemplateMatch: "/**.mpd" # DASH manifests
routeAction:
urlRewrite:
pathPrefixRewrite: "/output/manifests"
cdnPolicy:
cacheMode: "CACHE_ALL_STATIC"
clientTtl: 10s
defaultTtl: 30s
maxTtl: 120s
headerAction:
responseHeadersToAdd:
- headerName: cache-status
headerValue: "{cdn_cache_status}"
- headerName: proxy-status
headerValue: "{proxy_status}"
- priority: 3 # catch all routes should be the lowest priority route
description: "catch all route"
origin: "prod-media-origin"
matchRules:
- prefixMatch: /
headerAction:
responseHeadersToAdd:
- headerName: cache-status
headerValue: "{cdn_cache_status}"
- headerName: proxy-status
headerValue: "{proxy_status}"
אפשרויות הגדרה של Media CDN
כדי להגדיר את Media CDN, אפשר להשתמש בכלים הבאים:
- מסוףGoogle Cloud
- קובצי YAML או JSON מיובאים
- ממשקי ה-API ישירות
שימוש במסוף Google Cloud
הוראות להגדרת Media CDN בGoogle Cloud Console מפורטות במדריך למתחילים.
ייבוא וייצוא של הגדרות
באמצעות ה-CLI של gcloud אפשר לייצא ולייבא הגדרות מקובצי YAML או JSON, וכך לשלב עם מערכות של פיתוח רציף (continuous delivery) או באמצעות כלים של תשתית כקוד. אתם יכולים לשכפל הגדרות, לבדוק שירות מבודד בסביבת פיתוח לפני שאתם מעדכנים את סביבת הייצור, ולצלם תמונת מצב של ההגדרות כדי לשמור אותן בניהול גרסאות.
שדות פלט בלבד לא מיובאים, והם נכללים באופן מרומז בהחרגה כשמייבאים הגדרה. פרטים נוספים:
- כתובות ה-IP לא מיובאות, כי הן מוקצות לכל שירות. שירותים לא יכולים לחלוק כתובות IP.
-
selfLinkשל המשאב, שמבוסס על שם המשאב. - ה-
idשל המשאב, שנוצר באופן אוטומטי.
כדי לייצא שירות, EdgeCacheOrigin או EdgeCacheKeyset, משתמשים בפקודת המשנה export לכל משאב. לדוגמה, כדי לייצא הגדרת שירות:
gcloud edge-cache services export SERVICE_NAME \
--destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.
באופן דומה, אפשר לייבא הגדרת שירות קיימת, כשירות חדש או כעדכון במקום לשירות קיים:
gcloud edge-cache services import new-staging-service \
--source=my-service.yaml
שימוש בפעולות אסינכרוניות של API
כברירת מחדל, פקודות gcloud שיוצרות, מעדכנות או מוחקות משאב הן חוסמות, והן מוחזרות רק אחרי שהמשימה הושלמה (גם אם היא הצליחה וגם אם היא נכשלה). כברירת מחדל, ה-API בארכיטקטורת REST הוא אסינכרוני.
במקרים מסוימים, כדאי לשלוח את הבקשות האלה באופן אסינכרוני. אפשר לספק את הדגל --async, שגורם לפקודה לחזור מיד עם מזהה פעולה. אפשר להשתמש במזהה הזה כדי לבדוק ולשאול אם המשימה הצליחה, אם היא החזירה שגיאה ומה הייתה הודעת השגיאה.
בודקים פעולה ספציפית (לפי המזהה שלה) כדי להבין את השגיאה בפירוט. לדוגמה, אם מגדירים logConfig.sampleRate בלי להגדיר גם את logConfig.enable = true, צפו לשגיאה הבאה:
gcloud edge-cache operations describe operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6
done: true error: message: "Logs sample rate must not be specified without enabling logging." name: projects/my-project/locations/global/operations/operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6
כדי לראות את כל הפעולות האחרונות, את הסטטוס שלהן ואת השלמתן, אפשר להריץ את הפקודה הבאה:
gcloud edge-cache operations list
END_TIME ID TARGET DONE
operation-1611095421009-5b9486244bf21-cc6b5924-628b8e2a True
operation-1611096056610-5b94888273fe6-2da85286-8c810f8e True
operation-1611095551517-5b9486a0c251e-c2e1bbbb-de4aa8a5 True