Media CDN 提供內容傳遞、快取卸載、來源遮蔽、要求授權,以及與 Google Cloud外部應用程式負載平衡器、記錄和監控平台整合的功能。
Media CDN 提供多項 REST API 資源:
EdgeCacheService,負責面向用戶端的設定 (TLS、IP 位址)、轉送、CDN 設定 (快取模式、TTL、簽署) 和安全性政策。EdgeCacheOrigin,負責任何 HTTP 型來源的來源設定,以及內容無法使用或無法連線時的重試條件。舉例來說,可以做為備援影片封裝程式設定的一部分。- (選用)
EdgeCacheKeyset,其中包含一組公開金鑰,用於驗證用戶端要求是否由您的基礎架構 / CMS 簽署。EdgeCacheKeysets與EdgeCacheService相關聯,且可跨多項服務使用。
以下範例代表這些資源,顯示 EdgeCacheService 終止流量,並將流量路由至不同的 EdgeCacheOrigins。
EdgeCacheService、檢查已簽署要求的選用 EdgeCacheKeyset,以及將要求轉送至三個不同的 EdgeCacheOrigins。權限
您必須具備建立 Media CDN 資源所需的 Identity and Access Management 權限。Media CDN 具有下列預先定義的 IAM 角色:
roles/networkservices.edgeCacheAdminroles/networkservices.edgeCacheUserroles/networkservices.edgeCacheViewer
啟用必要服務
如要設定及部署 Media CDN 服務,您需要為專案啟用 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 設定:
EdgeCacheOrigin:- 如果物件不在 Cloud Storage 中 (例如 HTTP 404),或發生 5xx 錯誤,系統會針對替代來源 (AWS S3) 重試快取擷取作業。
一個
EdgeCacheKeyset,其中包含:- 兩把 Ed25519 公開金鑰,用於驗證已簽署的要求。
- 在範例設定中,您可以每月輪替金鑰,並在正式環境中保留兩個金鑰。
一個
EdgeCacheService包含兩條路線,包括:- 資訊清單的路徑,與 Cloud Storage 來源相關聯,且快取存留時間較短。
- 影片片段的路徑,受已簽署要求保護,且與 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 控制台
如需在Google Cloud 控制台中設定 Media CDN 的操作說明,請參閱快速入門導覽課程。
匯入及匯出設定
您可以使用 gcloud CLI 從 YAML 或 JSON 檔案匯出及匯入設定,以便與持續推送軟體更新系統整合,或使用基礎架構即程式碼工具。您可以複製設定、在暫存環境中測試獨立服務,然後再更新正式環境,以及將設定快照匯入版本管控系統。
系統不會匯入僅供輸出的欄位,匯入設定時也會隱含排除這些欄位。具體情況如下:
- IP 位址不會匯入,因為每個服務都有專屬的 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 指令會封鎖,且只會在工作完成後傳回 (無論成功或失敗)。REST API 預設為非同步。
在某些情況下,您可能想以非同步方式提出這些要求。您可以提供 --async 旗標,讓指令立即傳回作業 ID。您可以使用這個 ID 檢查及輪詢,確認工作是否成功、是否傳回錯誤,以及錯誤訊息為何。
您可以檢查個別作業 (依 ID),詳細瞭解錯誤。舉例來說,如果您設定 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