設定總覽

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

Media CDN 提供多項 REST API 資源:

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

以下範例代表這些資源,顯示 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 API 和 Certificate 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,系統會自動產生。

如要匯出服務、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