設定總覽

Media CDN 提供內容傳遞、快取卸載、來源遮蔽、要求授權,以及與 Google Cloud外部應用程式負載平衡器、記錄和監控平台整合的功能。

Media CDN 提供多項 REST API 資源:

  • EdgeCacheService,負責面向用戶端的設定 (TLS、IP 位址)、轉送、CDN 設定 (快取模式、TTL、簽署) 和安全性政策
  • EdgeCacheOrigin,負責任何 HTTP 型來源的來源設定,以及內容無法使用或無法連線時的重試條件。舉例來說,可以做為備援影片封裝程式設定的一部分。
  • (選用) EdgeCacheKeyset,其中包含一組公開金鑰,用於驗證用戶端要求是否由您的基礎架構 / CMS 簽署EdgeCacheKeysetsEdgeCacheService 相關聯,且可跨多項服務使用。

以下範例代表這些資源,顯示 EdgeCacheService 終止流量,並將流量路由至不同的 EdgeCacheOrigins

以下是 `EdgeCacheService` 的設定範例,可終止流量、檢查簽署的要求 (可選用 `EdgeCacheKeyset`),並將要求轉送至三個不同的 `EdgeCacheOrigins`。
以下是設定範例,其中包含會終止流量的 EdgeCacheService、檢查已簽署要求的選用 EdgeCacheKeyset,以及將要求轉送至三個不同的 EdgeCacheOrigins

權限

您必須具備建立 Media CDN 資源所需的 Identity and Access Management 權限。Media CDN 具有下列預先定義的 IAM 角色:

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

啟用必要服務

如要設定及部署 Media CDN 服務,您需要為專案啟用 Network Services APICertificate Manager API

控制台

  1. 啟用 Network Services API。

    啟用 API

  2. 啟用 Certificate Manager API。

    啟用 API

gcloud

  1. 啟用 Network Services API:

    gcloud services enable networkservices.googleapis.com
    
  2. 啟用 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 控制台

前往 Media CDN

如需在Google Cloud 控制台中設定 Media CDN 的操作說明,請參閱快速入門導覽課程

匯入及匯出設定

您可以使用 gcloud CLI 從 YAML 或 JSON 檔案匯出及匯入設定,以便與持續推送軟體更新系統整合,或使用基礎架構即程式碼工具。您可以複製設定、在暫存環境中測試獨立服務,然後再更新正式環境,以及將設定快照匯入版本管控系統。

系統不會匯入僅供輸出的欄位,匯入設定時也會隱含排除這些欄位。具體情況如下:

  • IP 位址不會匯入,因為每個服務都有專屬的 IP 位址。 服務無法共用 IP 位址。
  • 資源的 selfLink,以資源名稱為準。
  • 資源的 id,系統會自動產生。

如要匯出服務、EdgeCacheOriginEdgeCacheKeyset,請使用各項資源的 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