Media CDN サービスを設定する

このクイックスタートでは、Cloud Storage バケットの前に Media CDN サービスを設定する方法について説明します。この構成は、テストで使用するか、本番環境のベースとして使用できます。


このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、[ガイドを表示] をクリックしてください。

ガイドを表示


このチュートリアルでは、次の手順について説明します。

  1. コンテンツを保存する Cloud Storage バケットを作成します。
  2. 必要なサービスを有効にします。
  3. Media CDN をバケットに接続する EdgeCacheOrigin 送信元を作成する
  4. EdgeCacheService リソースを作成して、送信元のコンテンツに対するリクエストのルーティングとキャッシュを構成します。
  5. レスポンスがキャッシュに保存されるかどうかをテストする。

始める前に

次の準備ができていることを確認します。

  • 現在のプロジェクトの Media CDN へのアクセス権

  • Google Cloud CLI がインストールされている。バージョン 345.0.0 以降を使用します。

    必要に応じて、gcloud version を使用してバージョンを確認し、gcloud components update を使用してインストール済みの gcloud CLI を更新します。

    gcloud CLI には、新規と既存の両方のメディア CDN 構成を管理するための gcloud edge-cache サブコマンド グループが用意されています。

  • Media CDN リソースの作成に必要な Identity and Access Management(IAM)権限。Media CDN には、次の IAM 事前定義ロールがあります。

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

Cloud Storage バケットを作成する

メディア CDN コンテンツは、Cloud Storage バケット、サードパーティのストレージ ロケーション、ロードバランサなどのロケーションから送信できます。

このクイックスタートでは、Cloud Storage バケットにコンテンツを保存します。

  1. 一般公開されている Cloud Storage バケットを作成し、my-bucket という名前を付けます。

    Cloud Storage バケットを一般公開しない場合は、バケットにアクセスする権限を Media CDN に付与する必要があります。詳細については、限定公開の Cloud Storage バケットの使用をご覧ください。

  2. バケットにファイルをアップロードします。

必要なサービスを有効にする

Media CDN サービスを構成してデプロイするには、プロジェクトで Network Services APICertificate Manager API の両方を有効にする必要があります。

Console

  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
    

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

EdgeCacheOrigin リソースの作成

Cloud Storage バケットを参照する送信元を作成します。

コンソール

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. [送信元] タブをクリックします。

  3. [オリジンを作成] をクリックします。

  4. 送信元の名前を cloud-storage-origin として入力します。

  5. 省略可: ルールの説明を入力します。

  6. [元のアドレス] で、[Google Cloud Storage バケットを選択] を選択して my-bucket という名前の Cloud Storage バケットを参照し、[選択] をクリックします。

    外部の送信元がある場合は、[FQDN または IP アドレスを指定] を選択してから、FQDN または IP アドレスを入力します。

  7. [オリジンを作成] をクリックします。

約 10 分後、新しく作成された EdgeCacheOrigin リソースが [送信元] ページのプロジェクトの送信元のリストに表示されます。

送信元のアドレスを更新するには、送信元をクリックしてから [編集] をクリックします。

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

resource "google_network_services_edge_cache_origin" "default" {
  name           = "cloud-storage-origin"
  origin_address = "gs://my-bucket-${random_id.unique_suffix.hex}"
}

EdgeCacheService リソースの作成

EdgeCacheService リソースは、ルーティング、証明書、キャッシュの設定を構成し、EdgeCacheOrigin リソースを指すことができます。

次のことを行う基本的な EdgeCacheService リソースを作成します。

  • 構成された送信元からのすべてのレスポンスを 1 時間キャッシュに保存する
  • キャッシュ ステータス(HITMISS など)を返す x-cache-status レスポンス ヘッダーを設定します。

必要に応じて、このサービスのドメイン名を登録します。

コンソール

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. [Services] タブをクリックします。

  3. [サービスを作成] をクリックします。

  4. サービスの一意の名前(my-service など)を入力し、[次へ] をクリックします。

  5. [ルーティング] セクションで [ホストルールを追加] をクリックし、1 つ以上のホスト ドメイン名を入力します。

  6. [ホスト] にホストのドメイン名(例: web.example.com)を入力します。

  7. [ルートルールを追加] をクリックします。

    1. [優先度] には 1 を指定します。
    2. [Add match condition] をクリックし、[パスの一致] に / を指定して [完了] をクリックします。
    3. [Origin から取得] を選択し、構成した送信元を選択します。
    4. [アドオンのアクション] をクリックします。
    5. [ヘッダー アクション] で [項目を追加] をクリックします。次に、以下の操作を行います。
      1. [タイプ] で [追加するレスポンス ヘッダー] を選択します。
      2. [ヘッダーを追加] をクリックします。
      3. [名前] に x-cache-status を指定し、[] に {cdn_cache_status} を指定します。
      4. [完了] をクリックします。
    6. [ルート アクション] で [項目を追加] をクリックします。次に、以下の操作を行います。
      1. [タイプ] で [CDN ポリシー] を選択します。
      2. [キャッシュ モード] で [FORCE_CACHE_ALL] を選択します。
      3. [完了] をクリックします。
    7. [保存] をクリックします。
  8. [サービスを作成] をクリックします。

新しく作成された EdgeCacheService リソースが、プロジェクトのサービスリストの [サービス] ページに表示されます。

gcloud

  1. Cloud Shell で、テキスト エディタを使用して my-service.yaml という名前のローカル ファイルを作成します。

    このようなファイルは、次のことを示します。

    • ルーティングの仕組み(ホストとパスの照合)
    • キャッシュ モードと TTL に基づくキャッシュの仕組み
    • リクエストとレスポンスを変更する方法(例: cdn_cache_status 変数をレスポンス ヘッダーに挿入する方法)
  2. 次のサンプル コンテンツをファイルに貼り付け、保存します。

    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: 関連する送信元の名前

  3. .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

resource "google_network_services_edge_cache_service" "default" {
  name = "cloud-media-service"
  routing {
    host_rule {
      hosts        = ["googlecloudexample.com"]
      path_matcher = "routes"
    }
    path_matcher {
      name = "routes"
      route_rule {
        description = "a route rule to match against"
        priority    = 1
        match_rule {
          prefix_match = "/"
        }
        origin = google_network_services_edge_cache_origin.default.name
        route_action {
          cdn_policy {
            cache_mode  = "CACHE_ALL_STATIC"
            default_ttl = "3600s"
          }
        }
        header_action {
          response_header_to_add {
            header_name  = "x-cache-status"
            header_value = "{cdn_cache_status}"
          }
        }
      }
    }
  }
}

最初のサービスが作成されるまで数分かかることがあります。Media CDN は専用の IP アドレスをプロビジョニングし、構成を数千のエッジ ロケーションに push します。ルート構成の変更やパラメータの照合など、サービスに対する後続の更新が高速になります。

IP アドレスを取得する

新しく作成したサービスの IP アドレスを表示するには、次の手順を行います。

コンソール

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. [Services] タブをクリックします。

  3. サービスの 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 セキュリティ ポリシーが必要になる場合があります。

オプション: クリーンアップ

今後使用する予定のないリソースを削除します。

コンソール

  1. Google Cloud コンソールで、[Media CDN] ページに移動します。

    Media CDN に移動

  2. [Services] タブをクリックします。

  3. サービスを選択して [削除] をクリックします。

  4. [送信元] タブをクリックします。

  5. 送信元を選択して [削除] をクリックします。

gcloud

  1. 作成したリソースを一覧表示するには、gcloud edge-cache origins list コマンドgcloud edge-cache services list コマンドを使用します。

  2. Pod を削除するには、gcloud edge-cache services delete コマンドを使用します。

    gcloud edge-cache services delete SERVICE
    

    SERVICE は、サービスの名前に置き換えます。

  3. Pod を削除するには、gcloud edge-cache origins delete コマンドを使用します。

    gcloud edge-cache origins delete ORIGIN
    

    ORIGIN は、送信元の名前に置き換えます。

API

  1. 作成したリソースを一覧表示するには、edgeCacheServices.list メソッドedgeCacheOrigins.list メソッドを使用します。

  2. サービスを削除するには、edgeCacheServices.delete メソッドを使用します。

    DELETE https://networkservices.googleapis.com/v1/SERVICE_NAME
    

    SERVICE_NAME は、サービスの完全な名前に置き換えます。形式は次のようにします。

    projects/PROJECT/locations/global/edgeCacheServices/SERVICE_ID
    

    SERVICE_ID は、サービスの略称に置き換えます。

  3. 送信元を削除するには、edgeCacheOrigins.delete メソッドを使用します。

    DELETE https://networkservices.googleapis.com/v1/ORIGIN
    

    ORIGIN は、送信元の完全な名前に置き換えます。形式は次のようにします。

    projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
    

    ORIGIN_ID は、送信元の略称に置き換えます。

作成した他のリソース(Cloud Storage バケットなど)について、この手順を繰り返します。

次のステップ