このクイックスタートでは、Cloud Storage バケットの前に Media CDN サービスを設定する方法について説明します。この構成は、テストで使用するか、本番環境のベースとして使用できます。
このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。
このチュートリアルでは、次の手順について説明します。
- コンテンツを保存する Cloud Storage バケットを作成します。
- 必要なサービスを有効にします。
- Media CDN をバケットに接続する
EdgeCacheOrigin
送信元を作成する EdgeCacheService
リソースを作成して、オリジンのコンテンツのリクエスト ルーティングとキャッシュ保存を構成します。- レスポンスがキャッシュに保存されるかどうかをテストする。
始める前に
次の準備ができていることを確認します。
現在のプロジェクトの Media CDN へのアクセス権。
Google Cloud CLI がインストールされている。バージョン 345.0.0 以降を使用します。
必要に応じて、
gcloud version
を使用してバージョンを確認し、gcloud components update
を使用してインストールされている gcloud CLI を更新します。gcloud CLI には、新規と既存の両方の Media CDN 構成を管理するための
gcloud edge-cache
サブコマンド グループが用意されています。Media CDN リソースの作成に必要な Identity and Access Management(IAM)権限。
Cloud Storage バケットを作成する
Media CDN コンテンツは、Cloud Storage バケット、サードパーティのストレージ ロケーション、ロードバランサなどのロケーションから取得できます。
このクイックスタートでは、コンテンツを Cloud Storage バケットに保存します。
一般公開可能な Cloud Storage バケットを作成し、
my-bucket
という名前を付けます。Cloud Storage バケットを一般公開にしたくない場合は、バケットにアクセスする権限を Media CDN に付与する必要があります。詳細については、限定公開の Cloud Storage バケットの使用をご覧ください。
ファイルをバケットにアップロードします。
必要なサービスを有効にする
Media CDN サービスを構成してデプロイするには、プロジェクトで Network Services API と Certificate Manager API の両方を有効にする必要があります。
Console
gcloud
Network Services API を有効にします。
gcloud services enable networkservices.googleapis.com
Certificate Manager API を有効にします。
gcloud services enable certificatemanager.googleapis.com
サービスの有効化と無効化の詳細については、Service Usage のドキュメントをご覧ください。
EdgeCacheOrigin
リソースを作成する
Cloud Storage バケットを指すオリジンを作成します。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[送信元] タブをクリックします。
[オリジンを作成] をクリックします。
オリジンの名前を
cloud-storage-origin
と入力します。省略可: ルールの説明を入力します。
[元のアドレス] で、[Google Cloud Storage バケットを選択] を選択して
my-bucket
という名前の Cloud Storage バケットを参照し、[選択] をクリックします。外部オリジンがある場合は、[FQDN または IP アドレスを指定] を選択し、FQDN または IP アドレスを入力します。
[オリジンを作成] をクリックします。
約 10 分後、新しく作成した EdgeCacheOrigin
リソースが、[Origins] ページのプロジェクトの送信元リストに表示されます。
送信元アドレスを更新するには、送信元をクリックして
編集をクリックします。gcloud
gcloud edge-cache origins create
コマンドを使用します。
gcloud edge-cache origins create ORIGIN \
--origin-address="ADDRESS"
次のように置き換えます。
ORIGIN
: 新しいオリジンの名前ADDRESS
: バケットの名前。gs://my-bucket
外部オリジンがある場合は、
ADDRESS
を FQDN または IP アドレスに置き換えます。
新しく作成した配信元を表示するには、gcloud edge-cache origins list
コマンドを使用します。
送信元アドレスを更新するには、gcloud edge-cache origins update
コマンドを使用します。
API
edgeCacheOrigins.create
メソッドを使用します。
POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheOrigins?edgeCacheOriginId=ORIGIN_ID { "name": "ORIGIN_ID", "originAddress: "ADDRESS" }
次のように置き換えます。
PARENT
:projects/PROJECT/locations/global
形式の親リソースORIGIN_ID
: 新しいオリジンの短い名前ADDRESS
: バケットの名前。gs://my-bucket
外部オリジンがある場合は、
ADDRESS
を FQDN または IP アドレスに置き換えます。
新しく作成したオリジンを表示するには、edgeCacheOrigins.list
メソッドを使用します。
送信元アドレスを更新するには、edgeCacheOrigins.patch
メソッドを使用します。
Terraform
EdgeCacheService
リソースを作成する
EdgeCacheService
リソースは、ルーティング、証明書、キャッシュ保存の設定を構成し、EdgeCacheOrigin
リソースを指すことができます。
次の処理を行う基本的な EdgeCacheService
リソースを作成します。
- 構成された配信元からのすべてのレスポンスを 1 時間キャッシュに保存します
- キャッシュ ステータス(
HIT
やMISS
など)を返すx-cache-status
レスポンス ヘッダーを設定します。
必要に応じて、このサービスのドメイン名を登録します。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[Services] タブをクリックします。
[サービスを作成] をクリックします。
サービスの一意の名前(例:
my-service
)を入力し、[次へ] をクリックします。[ルーティング] セクションで、[ホストルールを追加] をクリックし、1 つ以上のホスト ドメイン名を入力します。
[ホスト] にホストのドメイン名(例:
web.example.com
)を入力します。[ルートのルールを追加] をクリックします。
- [優先度] には
1
を指定します。 - [Add match condition] をクリックし、[パスの一致] に
/
を指定して [完了] をクリックします。 - [Origin から取得] を選択し、構成した送信元を選択します。
- [アドオンのアクション] をクリックします。
- [ヘッダーのアクション] で、[項目を追加] をクリックします。次に、以下の操作を行います。
- [タイプ] で、[追加するレスポンス ヘッダー] を選択します。
- [ヘッダーを追加] をクリックします。
- [名前] に
x-cache-status
を指定し、[値] に{cdn_cache_status}
を指定します。 - [完了] をクリックします。
- [ルートのアクション] で、[項目を追加] をクリックします。次に、以下の操作を行います。
- [タイプ] で [CDN ポリシー] を選択します。
- [キャッシュ モード] で、[FORCE_CACHE_ALL] を選択します。
- [完了] をクリックします。
- [保存] をクリックします。
- [優先度] には
[サービスを作成] をクリックします。
新しく作成された EdgeCacheService
リソースが、プロジェクトのサービスの一覧の [サービス] ページに表示されます。
gcloud
Cloud Shell で、テキスト エディタを使用して
my-service.yaml
という名前のローカル ファイルを作成します。このようなファイルは次のことを示します。
- ルーティングの仕組み - まずホストを照合し、次にパスを照合する
- キャッシュ保存の仕組み - キャッシュ モードと TTL に基づく
- リクエストとレスポンスの変更方法(
cdn_cache_status
変数をレスポンス ヘッダーに挿入するなど)
次のサンプル コンテンツをファイルに貼り付けて保存します。
name: SERVICE routing: hostRules: - hosts: - DOMAIN pathMatcher: routes pathMatchers: - name: routes routeRules: - priority: 1 matchRules: - prefixMatch: / origin: ORIGIN routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s headerAction: responseHeadersToAdd: - headerName: "x-cache-status" headerValue: "{cdn_cache_status}"
次のように置き換えます。
SERVICE
: Service の名前。DOMAIN
: 新しいサービスのドメインドメイン名を指定すると、Media CDN は他のホストに対して
404
エラーを返します。ORIGIN
: 関連するオリジンの名前
YAML ファイルで
gcloud edge-cache services import
コマンドを使用します。gcloud edge-cache services import SERVICE \ --source=my-service.yaml
プロジェクトの
EdgeCacheService
リソースのリストに新しく作成したサービスを表示するには、gcloud edge-cache services list
コマンドを使用します。
API
edgeCacheServices.create
メソッドを使用します。
POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheServices?edgeCacheServiceId=SERVICE_ID { "name": "SERVICE_ID", "routing": { "hostRules": [ { "hosts": ["DOMAIN"], "pathMatcher": "routes" } ], "pathMatchers": [ { "name": "routes", "routeRules": [ { "priority": "1", "matchRules": [ { "prefixMatch": "/" } ], "origin": "ORIGIN", "routeAction": { "cdnPolicy": { "cacheMode": "CACHE_ALL_STATIC", "defaultTtl": "3600s" } } "headerAction": { "responseHeadersToAdd": [ { "headerName": "x-cache-status", "headerValue": "{cdn_cache_status}" } ] }, } ] } ] } }
次のように置き換えます。
PARENT
:projects/PROJECT/locations/global
形式の親リソースSERVICE_ID
: サービスの名前。DOMAIN
: 新しいサービスのドメインドメイン名を指定すると、Media CDN は他のホストに対して
404
エラーを返します。ORIGIN_NAME
: 関連するオリジンの名前
プロジェクトの EdgeCacheService
リソースのリストに新しく作成したサービスを表示するには、edgeCacheServices.list
メソッドを使用します。
Terraform
最初のサービスの作成には数分かかることがあります。Media CDN は専用の IP アドレスをプロビジョニングし、構成を数千のエッジ ロケーションに push します。サービスの後続の更新(ルート構成や照合パラメータの変更など)は高速になります。
IP アドレスを取得する
新しく作成したサービスの IP アドレスを表示する手順は次のとおりです。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[Services] タブをクリックします。
サービスの IP アドレスについては、[アドレス] セルをご覧ください。
セルが空の場合は、ブラウザを更新します。
gcloud
gcloud edge-cache services describe
コマンドを使用します。
gcloud edge-cache services describe SERVICE
SERVICE は、サービスの名前に置き換えます。
出力には、サービスに割り当てられた IP アドレスが表示されます。
ipv4Addresses:
IPV4_ADDRESS
ipv6Addresses:
IPV6_ADDRESS
name: projects/my-project/locations/global/edgeCacheServices/SERVICE
...
API
edgeCacheServices.get
メソッドを使用します。
GET https://networkservices.googleapis.com/v1/SERVICE_NAME
SERVICE_NAME
は、サービスのフルネームに置き換えます。形式は次のようにします。
projects/PROJECT/locations/global/edgeCacheServices/SERVICE_ID
SERVICE_ID
は、サービスの短い名前に置き換えます。
取得した詳細には、サービスに割り当てられた IP アドレスが含まれます。
ipv4Addresses:
IPV4_ADDRESS
ipv6Addresses:
IPV6_ADDRESS
レスポンスがキャッシュに保存されているかどうかをテストする
サービスをテストする前に、Media CDN が取得できるように、キャッシュに保存可能なコンテンツが送信元に保存されていることを確認してください。
コンテンツをキャッシュに保存するようにサービスが正しく構成されていることをテストするには、curl
コマンドライン ツールを使用してリクエストを発行し、レスポンスを確認します。curl
は、 Google Cloud コンソールの Cloud Shell でも使用できます。
ドメインで EdgeCacheService
を使用する場合は、EdgeCacheService
の IP アドレスをドメイン レコードに割り当てることができます。手順については、Cloud DNS を使用してドメインを設定するをご覧ください。ドメインを設定したら、次の curl
コマンドを使用してコンテンツにアクセスします。
curl -svo /dev/null "http://DOMAIN_NAME/FILE_NAME"
プロビジョニングされた IP アドレスを指すように DNS を構成していない場合は、resolve
オプションを使用して、curl
が使用するアドレスをオーバーライドします。
curl -svo /dev/null --resolve DOMAIN_NAME:80:IP_ADDRESS "http://DOMAIN_NAME/FILE_NAME"
次のように置き換えます。
DOMAIN_NAME
: サービスの作成時に指定したホストドメインIP_ADDRESS
: サービスのリストの [アドレス] 列に表示されるサービスの IP アドレスFILE_NAME
: バケットにアップロードしたファイルの名前
例:
curl -svo /dev/null --resolve web.example.com:80:34.104.37.129 "http://web.example.com/file.mp4"
このコマンドの初回実行時の出力は、次のようになります。ステータスは miss
になります。これは、Media CDN にはリクエストされた送信元から取得済みのデータがないためです。
< HTTP/2 200 OK
...
< x-cache-status: den;miss
...
同じリクエストを何度か送信すると、次の例のような出力が生成され、ステータスは hit
になります。
< HTTP/2 200 OK
...
< x-cache-status: den;hit
...
ステータス hit
が表示されない場合は、次の点を確認してください。
- レスポンスはキャッシュに保存できます。
- 構成されたキャッシュ モードでは、コンテンツのキャッシュ保存が許可されています。
- 送信元がキャッシュ保存を禁止するキャッシュ ディレクティブを設定していない。詳細については、キャッシュ構成をご覧ください。
これで、コンテンツをグローバルに提供できる基本的な EdgeCacheService
リソースをテストしました。本番環境グレードのサービスには、SSL(TLS)証明書、複数のオリジン、Google Cloud Armor セキュリティ ポリシーが必要になる場合があります。
オプション: クリーンアップ
今後使用しないリソースは削除します。
コンソール
Google Cloud コンソールで、[Media CDN] ページに移動します。
[Services] タブをクリックします。
サービスを選択して [削除] をクリックします。
[送信元] タブをクリックします。
送信元を選択して [削除] をクリックします。
gcloud
作成したリソースを一覧表示するには、
gcloud edge-cache origins list
コマンドとgcloud edge-cache services list
コマンドを使用します。Pod を削除するには、
gcloud edge-cache services delete
コマンドを使用します。gcloud edge-cache services delete SERVICE
SERVICE
は、サービスの名前に置き換えます。Pod を削除するには、
gcloud edge-cache origins delete
コマンドを使用します。gcloud edge-cache origins delete ORIGIN
ORIGIN
は、オリジンの名前に置き換えます。
API
作成したリソースを一覧表示するには、
edgeCacheServices.list
メソッドとedgeCacheOrigins.list
メソッドを使用します。サービスを削除するには、
edgeCacheServices.delete
メソッドを使用します。DELETE https://networkservices.googleapis.com/v1/SERVICE_NAME
SERVICE_NAME
は、サービスのフルネームに置き換えます。形式は次のようにします。projects/PROJECT/locations/global/edgeCacheServices/SERVICE_ID
SERVICE_ID
は、サービスの短い名前に置き換えます。オリジンを削除するには、
edgeCacheOrigins.delete
メソッドを使用します。DELETE https://networkservices.googleapis.com/v1/ORIGIN
ORIGIN
は、オリジンのフルネームに置き換えます。形式は次のようにします。projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
ORIGIN_ID
は、オリジンの短縮名に置き換えます。
作成したリソースのうち、Cloud Storage バケットなど、今後使用する予定のないリソースについても、このプロセスを繰り返します。
次のステップ
EdgeCacheService
に SSL(TLS)証明書を発行して関連付ける。- Cloud Logging でリクエストログを表示する。
- 署名付きリクエストを構成して、コンテンツを保護します。
- キャッシュ ヒット率を向上させるためにキャッシュキーと TTL を最適化する
- 高度なルート照合を構成し、追加のオリジンを作成します。