Media CDN は、コンテンツ配信、キャッシュ オフロード、送信元シールド、 リクエスト認証、 Google Cloud 外部アプリケーション ロードバランサ、Logging、 Monitoring プラットフォームとの統合を提供します。
Media CDN には、次の REST API リソースがあります。
EdgeCacheService、クライアント側の構成(TLS、IP アドレス指定)、ルーティング、CDN 構成(キャッシュ モード、TTL、署名)、セキュリティ ポリシーを担当します。EdgeCacheOrigin。HTTP ベースの送信元ごとの構成と、コンテンツが利用できない場合や到達できない場合の再試行条件を担当します。たとえば、冗長な動画パケタイザー構成の一部として使用します。- (省略可)
EdgeCacheKeyset。クライアント リクエストがインフラストラクチャ / CMS によって署名されたことを検証するために使用される公開鍵のセットが含まれています。EdgeCacheKeysetsはEdgeCacheServiceに関連付けられており、複数のサービスで使用できます。
これらのリソースは次の例で示されています。この例では、EdgeCacheService がトラフィックを終了し、異なる EdgeCacheOrigins にルーティングしています。
EdgeCacheService を使用してトラフィックを終了し、オプションの EdgeCacheKeyset を使用して署名付きリクエストをチェックし、リクエストをルーティングする構成の例 3 つの異なる 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 を有効にする必要があります。
Console
gcloud
Network Services API を有効にします。
gcloud services enable networkservices.googleapis.comCertificate Manager API を有効にします。
gcloud services enable certificatemanager.googleapis.com
サービスの有効化と無効化の詳細については、 Service Usage のドキュメントをご覧ください。
構成の例
リソースの次のリストは、代表的な Media CDN 構成を示しています。
An
EdgeCacheOrigin:- オブジェクトが Cloud Storage にない場合(HTTP 404 など)、または 5xx エラーが発生した場合、代替送信元(AWS S3)に対してキャッシュ取得を再試行する Cloud Storage ベースの送信元を取得します。
One
EdgeCacheKeyset, which contains:- 署名付きリクエストの検証に使用される 2 つの Ed25519 公開鍵。
- 構成例では、鍵を毎月ローテーションし、2 つの鍵を本番環境に保持できます。
One
EdgeCacheServicewith two routes, including:- マニフェストのルート。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
構成のインポートとエクスポートを行う
gcloud CLI を使用すると、 YAML ファイルまたは JSON ファイルから構成をエクスポートしてインポートできます。これにより、継続的デリバリー システムとの統合や、 Infrastructure as Code ツールを使用できます。構成を複製し、本番環境を更新する前にステージング環境で分離されたサービスをテストし、構成をバージョン管理にスナップショットできます。
出力専用フィールドはインポートされず、構成のインポート時に暗黙的に除外されます。特に、以下の点に注意してください。
- 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.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