設定 Media CDN 服務

本快速入門導覽課程說明如何在 Cloud Storage bucket 前方設定 Media CDN 服務。您可以將這項設定用於測試,或做為正式版環境的基礎。


如要直接在 Google Cloud 控制台按照逐步指南操作,請按一下「Guide me」(逐步引導)

逐步引導


本頁面將逐步說明下列程序:

  1. 建立 Cloud Storage bucket 來儲存內容。
  2. 啟用必要服務。
  3. 建立 EdgeCacheOrigin 資源,將 Media CDN 連結至 bucket。
  4. 建立 EdgeCacheService 資源,設定來源中內容的要求路徑和快取。
  5. 測試是否已快取回應。

事前準備

請確認您已備妥以下項目:

建立 Cloud Storage 值區

Media CDN 內容可產生自 Cloud Storage 值區、第三方儲存空間位置或負載平衡器等位置。

在本快速入門導覽課程中,我們會將內容儲存在 Cloud Storage 值區中。

  1. 建立可公開存取的 Cloud Storage bucket,並命名為 my-bucket

    如果您不想讓 Cloud Storage bucket 可公開存取,就必須授予 Media CDN 存取 bucket 的權限。詳情請參閱「使用私有 Cloud Storage 值區」。

  2. 將檔案上傳至 bucket。

啟用必要服務

如要設定及部署 Media CDN 服務,您需要為專案啟用 Network Services APICertificate 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
    

如要進一步瞭解如何啟用及停用服務,請參閱服務使用情形說明文件

建立 EdgeCacheOrigin 資源

建立指向 Cloud Storage bucket 的來源。

主控台

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 按一下「來源」Origins分頁標籤。

  3. 按一下「Create origin」(建立來源)

  4. 輸入來源名稱,例如 cloud-storage-origin

  5. 選用:輸入來源說明。

  6. 針對「Origin address」(來源位址),選擇「Select a Google Cloud Storage bucket」(選取 Google Cloud Storage 值區),再前往名為 my-bucket 的 Cloud Storage 值區,然後按一下「Select」(選取)

    如果使用外部來源,請選擇「指定 FQDN 或 IP 位址」,然後輸入 FQDN 或 IP 位址。

  7. 按一下「Create origin」(建立來源)

大約 10 分鐘後,新建立的 EdgeCacheOrigin 資源會顯示在「來源」Origins頁面的專案來源清單中。

如要更新出發地址,請按一下出發地,然後點選「編輯」

gcloud

使用 gcloud edge-cache origins create 指令

gcloud edge-cache origins create ORIGIN \
    --origin-address="ADDRESS"

更改下列內容:

  • ORIGIN:新來源的名稱
  • ADDRESS:bucket 名稱,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:bucket 名稱,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 資源,執行下列操作:

  • 將設定來源的所有回應快取一小時
  • 設定 x-cache-status 回應標頭,傳回快取狀態 (例如 HITMISS)

(選用) 為這項服務註冊網域名稱

主控台

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 按一下 [Services] (服務) 標籤。

  3. 按一下「Create service」(建立服務)

  4. 輸入服務的專屬名稱 (例如 my-service),然後點選「Next」(下一步)

  5. 在「Routing」(轉送) 區段,按一下「Add host rule」(新增主機規則),然後輸入一或多個主機網域名稱。

  6. 在「Hosts」(主機) 區段,輸入主機網域名稱,例如 web.example.com

  7. 按一下「Add route rule」(新增轉送規則)

    1. 在「Priority」(優先順序) 中指定 1
    2. 按一下「Add match condition」(新增比對條件),針對「Path match」(路徑比對) 指定 /,然後按一下「Done」(完成)
    3. 選取「Fetch from an Origin」(從來源擷取),然後選取您設定的來源。
    4. 按一下「Add-on actions」(外掛程式動作)
    5. 在「Header action」(標頭動作) 部分,按一下「Add an item」(新增項目)。接著,按照下列步驟操作:
      1. 在「Type」(類型) 部分,選取「Response headers to add」(要新增的回應標頭)
      2. 按一下「Add header」(新增標頭)
      3. 將「Name」(名稱) 指定為 x-cache-status,並將「Value」(值) 指定為 {cdn_cache_status}
      4. 按一下 [完成]
    6. 在「Route action」(轉送動作) 部分,「Add an item」(新增項目)。接著,按照下列步驟操作:
      1. 在「Type」(類型) 部分,選取「CDN policy」(CDN 政策)
      2. 在「Cache mode」(快取模式) 部分選取 FORCE_CACHE_ALL
      3. 點選「Done」(完成)
    7. 點選「Save」(儲存)
  8. 按一下「Create service」(建立服務)

新建立的 EdgeCacheService 資源會顯示在專案的服務清單中,也就是「服務」頁面。

gcloud

  1. 在 Cloud Shell 中,使用文字編輯器建立名為 my-service.yaml 的本機檔案。

    這類檔案表示:

    • 轉送運作方式:先比對主機,再比對路徑
    • 快取運作方式 - 根據快取模式和存留時間
    • 如何修改要求和回應,例如將 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:服務名稱
    • 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 default route rule, priority=10 (low)"
        priority    = 10
        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 位址,並將設定推送至數千個邊緣位置。後續更新服務 (例如變更路徑設定或比對參數) 時,速度會更快。

擷取 IP 位址

如要查看新建立服務的 IP 位址,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Media CDN」頁面。

    前往 Media CDN

  2. 按一下 [Services] (服務) 標籤。

  3. 如要查看服務的 IP 位址,請參閱「Addresses」儲存格。

    如果儲存格空白,請重新整理瀏覽器。

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 指令列工具發出要求並檢查回應。您也可以在 Google Cloud 控制台的 Cloud Shell 中使用 curl

如要在網域中使用 EdgeCacheService,可以將 EdgeCacheService 的 IP 位址指派給網域記錄。如需操作說明,請參閱「使用 Cloud DNS 設定網域」。設定網域後,請使用下列curl指令存取內容:

curl -svo /dev/null "http://DOMAIN_NAME/FILE_NAME"

如果沒有設定 DNS 指向佈建的 IP 位址,請使用 resolve 選項覆寫 curl 使用的位址。

curl -svo /dev/null --resolve DOMAIN_NAME:80:IP_ADDRESS "http://DOMAIN_NAME/FILE_NAME"

更改下列內容:

  • DOMAIN_NAME:建立服務時指定的主機網域
  • IP_ADDRESS:服務的 IP 位址,如服務清單中「Addresses」(位址) 欄所示
  • FILE_NAME:您上傳至 bucket 的檔案名稱

範例:

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. 選取服務,然後點選「Delete」(刪除)

  4. 按一下「來源」Origins分頁標籤。

  5. 選取來源,然後點選「Delete」(刪除)

gcloud

  1. 如要列出您建立的資源,請使用 gcloud edge-cache origins list 指令gcloud edge-cache services list 指令

  2. 如要刪除服務,請使用 gcloud edge-cache services delete 指令

    gcloud edge-cache services delete SERVICE
    

    SERVICE 改為服務名稱。

  3. 如要刪除來源,請使用 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 bucket),重複這個程序。

後續步驟