構成ガイド

Media CDN は、コンテンツ配信、キャッシュ オフロード、オリジン シールド、リクエスト承認、Google Cloud の HTTP(S) 負荷分散、ロギング、モニタリング プラットフォームとの統合を提供します。

Media CDN には、いくつかの REST API リソースが用意されています。

  • EdgeCacheService、クライアント向け構成(TLS、IP アドレス指定)、ルーティング、CDN 構成(キャッシュ モード、TTL、署名)、 を担当}セキュリティ ポリシーをご覧ください。
  • EdgeCacheOrigin。HTTP ベースの送信元の送信元ごとの構成と、コンテンツを利用できない場合や到達不能な場合の再試行条件を管理します。たとえば、冗長動画パッケージャ構成の一部として。
  • (省略可)EdgeCacheKeyset。インフラストラクチャ / CMS によってクライアント リクエストが署名されたことを検証するために使用される一連の公開鍵が含まれます。EdgeCacheKeysetsEdgeCacheService に関連付けられ、複数のサービスで使用できます。

これらのリソースは、トラフィックを終端する EdgeCacheService と、別の EdgeCacheOrigins へのルーティングを行う次の例のようになります。

「EdgeCacheService」を使用する構成の例では、トラフィックを終端し、オプションの「EdgeCacheKeyset」を使用して署名付きリクエストをチェックし、3 つの異なる「EdgeCacheOrigins」にリクエストをルーティングします。
EdgeCacheService を含む構成の例(トラフィックを終了し、オプションの EdgeCacheKeyset を使用して署名付きリクエストをチェックし、リクエストをルーティングする) 3 つの異なる 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 の両方をプロジェクトで有効にする必要があります。

Console

  1. Network Services API を有効にします。

    API の有効化

  2. Certificate Manager API を有効にします。

    API の有効化

gcloud

現在のプロジェクトで Network Services API サービスを有効にするには、次のコマンドを実行します。

gcloud services enable networkservices.googleapis.com

Certificate Manager API を有効にするには、次のコマンドを実行します。

gcloud services enable certificatemanager.googleapis.com

サービスの有効化と無効化の詳細については、Service Usage のドキュメントをご覧ください。

構成の例

代表的なメディア CDN の構成は、以下のリソースにより説明されています。

  • An EdgeCacheOrigin:

    • オブジェクトが Cloud Storage にない場合(HTTP 404 など)、または 5xx エラーが発生した場合、代替送信元(AWS S3)に対してキャッシュ取得を再試行する Cloud Storage ベースの送信元を取得します。
  • 1 つの EdgeCacheKeyset。次のものが含まれます。

    • 2 つの Ed25519 公開鍵。署名付きリクエストの検証に使用されます。
    • この構成例では、毎月 2 つの鍵をローテーションして、本番環境で 2 つの鍵を維持できます。
  • 次のような 2 つのルートを持つ 1 つの EdgeCacheService:

    • 短いキャッシュ TTL を持つ、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: cache-id
          headerValue: "{cdn_cache_id}"
    - 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: cache-id
          headerValue: "{cdn_cache_id}"
    - 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: cache-id
          headerValue: "{cdn_cache_id}"

Media CDN の構成オプション

Media CDN を構成するには、次のツールを使用します。

  • Google Cloud Console
  • インポートされた YAML または JSON ファイル
  • API を直接提供

Google Cloud Console を使用する

Media CDN に移動

Google Cloud Console で Media CDN を構成する方法については、クイックスタートをご覧ください。

構成のインポートとエクスポート

gcloud CLI を使用すると、YAML ファイルまたは JSON ファイルから構成をエクスポートまたはインポートできるため、継続的デリバリー システムとの統合や、infrastructure-as-code ツールを使用できます。構成を複製し、本番環境を更新する前にステージング環境で独立したサービスをテストし、バージョン管理に構成のスナップショットを作成できます。

出力専用フィールドはインポートされず、構成のインポート時に暗黙的に除外されます。特に、以下の点に注意してください。

  • IP アドレスは各サービスにのみ使用されるため、インポートされません。 Service は 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.enable = true を設定せずに logConfig.sampleRate を構成すると、次のエラーが返されます。

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