使用 CloudFront 持續部署安全地測試 CDN 組態變更 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 CloudFront 持續部署安全地測試 CDN 組態變更

透過 Amazon CloudFront 持續部署,您可以先使用一部分生產流量進行測試,以安全地將變更部署到 CDN 組態。您可以使用臨時分佈持續部署政策,將真實 (生產) 檢視者的部份流量傳送至新的 CDN 組態,並驗證其是否如預期般運作。您可以即時監控新組態的效能,並在準備就緒時提升新組態,以便透過主要分佈為所有流量提供服務。

下圖顯示使用 CloudFront 持續部署的好處。若沒有此部署,您就必須使用模擬流量測試 CDN 組態變更。透過持續部署,您可以使用生產流量子集來測試變更,然後在準備就緒時將變更提升至主要分佈。

將生產流量傳送至預備分發的 CloudFront 持續部署圖形。

使用 CloudFront 持續部署的工作流程

下列高階工作流程說明如何透過 CloudFront 持續部署安全地測試和部署組態變更。

  1. 選擇您要做為主要分佈的分佈。主要分佈是目前為生產流量提供服務的分佈。

  2. 從主要分佈中,建立臨時分佈。臨時分佈一開始會是主要分佈的副本。

  3. 持續部署政策內建立流量組態,並將其連接至主要分佈。這會決定如何將流量 CloudFront 路由至預備分發。如需詳細了解臨時分佈的路由請求,請參閱 將請求路由至臨時分佈

  4. 更新臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈

  5. 監控臨時分佈,以判斷組態變更是否如預期般運作。如需監控臨時分佈的詳細資訊,請參閱 監控臨時分佈

    當您監控臨時分佈時,您可以:

    • 再次更新臨時分佈的組態,以持續測試組態變更。

    • 更新持續部署政策 (流量組態),以傳送更多或更少流量至臨時分佈。

  6. 臨時分佈的效能符合您的需求時,請將臨時分佈的組態提升為主要分佈,如此會將臨時分佈的組態複製到主要分佈。這也會停用連續部署原則,這表示將所有流量 CloudFront 路由傳送至主要散發。

您可以建置自動化來監控臨時分佈的效能 (步驟 5),並在符合特定條件時自動提升組態 (步驟 6)。

提升組態之後,您可以在下次測試組態變更時,重複使用相同的臨時分佈。

如需有關在 CloudFront 主控台、或 CloudFront API 中使用預備發行版和持續部署原則的 AWS CLI詳細資訊,請參閱下一節。

使用臨時分佈和持續部署政策

您可以使用 AWS Command Line Interface (AWS CLI) 或使用 CloudFront API 在 CloudFront 主控台中建立、更新和修改預備分發和持續部署政策。

Console

若要使用暫存發行版和連續部署原則 AWS Management Console,請使用下列程序。

建立臨時分佈和持續部署政策 (主控台)
  1. 登入 AWS Management Console 並開啟 CloudFront 主控台,位於https://console.aws.amazon.com/cloudfront/v4/home

  2. 在導覽窗格中,選擇 Distributions (分佈)

  3. 選擇您要做為主要分佈的分佈。主要分佈目前為生產流量提供服務,也就是您從中建立臨時分佈的地方。

  4. Continuous deployment (持續部署) 區段中,選擇 Create staging distribution (建立臨時分佈)。這項操作會開啟 Create staging distribution (建立臨時分佈) 精靈。

  5. Create staging distribution (建立臨時分佈) 精靈中,執行下列動作:

    1. (選用) 輸入臨時分佈的描述。

    2. 選擇下一步

    3. 修改臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈

      修改完臨時分佈的組態後,請選擇 Next (下一步)。

    4. 使用控制台指定 Traffic configuration (流量組態)。這會決定如何將流量 CloudFront 路由至預備分發。(將流量組態CloudFront 儲存在連續部署原則中。)

      如需 Traffic configuration (流量組態) 選項的詳細資訊,請參閱 將請求路由至臨時分佈

      完成 Traffic configuration (流量組態) 時,請選擇 Next (下一步)。

    5. 檢閱包含流量組態的臨時分佈組態,然後選擇 Create staging distribution (建立臨時分佈)。

在 CloudFront 主控台中完成 [建立暫存分配] 精靈後,請 CloudFront 執行下列動作:

  • 使用您在步驟 5c 中指定的設定,建立臨時分佈

  • 使用您在步驟 5d 中指定的流量組態,建立持續部署政策

  • 將持續部署政策連接至您從中建立臨時分佈的主要分佈

當主要發行版的組態 (使用連結的連續部署原則) 部署至 Edge 位置時,會 CloudFront 開始根據流量組態將指定部分的流量傳送至暫存分發。

更新臨時分佈 (主控台)
  1. 在開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home

  2. 在導覽窗格中,選擇 Distributions (分佈)

  3. 選擇主要分佈。這是目前為生產流量提供服務的分佈,也就是您從中建立臨時分佈的地方。

  4. 選擇 View staging distribution (檢視臨時分佈)。

  5. 使用主控台修改臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈

一旦臨時分佈的組態部署到邊緣節點,即對路由至臨時分佈的傳入流量產生效果。

更新持續部署政策 (主控台)
  1. 在開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home

  2. 在導覽窗格中,選擇 Distributions (分佈)

  3. 選擇主要分佈。這是目前為生產流量提供服務的分佈,也就是您從中建立臨時分佈的地方。

  4. Continuous deployment (持續部署) 區段中,選擇 Edit policy (編輯政策)。

  5. 修改持續部署政策中的流量組態。完成時,請選擇 Save changes (儲存變更)

當具有更新連續部署原則的主要發行版組態部署到邊緣位置時,會根據更新的流量組態, CloudFront 開始將流量傳送至預備分發。

提升臨時分佈組態 (主控台)
  1. 在開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home

  2. 在導覽窗格中,選擇 Distributions (分佈)

  3. 選擇主要分佈。這是目前為生產流量提供服務的分佈,也就是您從中建立臨時分佈的地方。

  4. Continuous deployment (持續部署) 區段中,選擇 Promote (提升)。

  5. 輸入 confirm,然後選擇 Promote (提升)。

級暫存發佈時,會將組態從暫存發佈 CloudFront 複製到主要發行版。 CloudFront 也會停用連續部署原則,並將所有流量路由傳送至主要散發。

提升組態之後,您可以在下次測試組態變更時,重複使用相同的臨時分佈。

CLI

若要使用暫存發行版和連續部署原則 AWS CLI,請使用下列程序。

建立臨時分佈 (CLI)
  1. 同時使用 aws cloudfront get-distributiongrep 命令,針對您要做為主要分佈的分佈,取得其 ETag 值。主要分佈目前為生產流量提供服務,也就是您從中建立臨時分佈的地方。

    以下為命令的範例。在下列範例中,請將 primary_distribution_ID 取代為主要分佈的 ID。

    aws cloudfront get-distribution --id primary_distribution_ID | grep 'ETag'

    請複製 ETag 值,因為您會在以下步驟使用該值。

  2. 使用 aws cloudfront copy-distribution 命令建立臨時分佈。下列範例命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。以下是範例命令:

    • primary_distribution_ID 取代為主要分佈的 ID。

    • primary_distribution_ETag 取代為主要分佈的 ETag 值,也就是您在上一個步驟中取得的值。

    • (可選) 將 CLI_example 取代為所需的呼叫者參考 ID。

    aws cloudfront copy-distribution --primary-distribution-id primary_distribution_ID \ --if-match primary_distribution_ETag \ --staging \ --caller-reference 'CLI_example'

    命令的輸出會顯示有關臨時分佈及其組態的資訊。複製預備分發的 CloudFront 網域名稱,因為您需要執行下列步驟。

建立持續部署政策 (包含輸入檔案的 CLI)
  1. 使用下列命令建立一個名為 continuous-deployment-policy.yaml 的檔案,其中包含 create-continuous-deployment-policy 命令的所有輸入參數。下列命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。

    aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \ > continuous-deployment-policy.yaml
  2. 開啟您剛才建立且命名為 continuous-deployment-policy.yaml 的檔案。編輯檔案以指定您想要的持續部署政策設定,然後儲存檔案。當您編輯檔案時:

    • StagingDistributionDnsNames 區段:

      • Quantity 的值變更為 1

      • 對於Items,貼上預備分發 (您從上一個步驟儲存的) 的 CloudFront 網域名稱。

    • TrafficConfig 區段:

      • 選擇 Type,可為 SingleWeightSingleHeader

      • 移除其他類型的設定。例如,若您要以權重為基礎的流量組態,請將 Type 設定為 SingleWeight,然後移除 SingleHeaderConfig 設定。

      • 若要使用以權重為基礎的流量組態,請將 Weight 值設定為介於 .01 (百分之一) 到 .15 (百分之十五) 間的十進位數字。

      如需 TrafficConfig 選項的詳細資訊,請參閱 將請求路由至臨時分佈以權重為基礎之組態的工作階段黏性

  3. 使用下列命令,使用 continuous-deployment-policy.yaml 檔案中的輸入參數建立持續部署政策。

    aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml

    複製命令輸出中的 Id 值。這是持續部署政策 ID,您會在接下來的步驟使用。

將持續部署政策連接至主要分佈 (包含輸入檔案的 CLI)
  1. 使用下列命令,將主要分佈的組態儲存至名為 primary-distribution.yaml 的檔案。將 primary_distribution_ID 取代為主要分佈的 ID。

    aws cloudfront get-distribution-config --id primary_distribution_ID --output yaml > primary-distribution.yaml
  2. 開啟您剛才建立且命名為 primary-distribution.yaml 的檔案。編輯檔案,進行下列變更:

    • 將您從上一個步驟複製的持續部署政策 ID 貼到 ContinuousDeploymentPolicyId 欄位。

    • ETag 欄位重新命名為 IfMatch,但不要變更欄位的值。

    完成後儲存檔案。

  3. 使用下列命令來更新主要分佈,以使用持續部署政策。將 primary_distribution_ID 取代為主要分佈的 ID。

    aws cloudfront update-distribution --id primary_distribution_ID --cli-input-yaml file://primary-distribution.yaml

當主要發行版的組態 (使用連結的連續部署原則) 部署至 Edge 位置時,會 CloudFront 開始根據流量組態將指定部分的流量傳送至暫存分發。

更新臨時分佈 (包含輸入檔案的 CLI)
  1. 使用下列命令,將臨時分佈的組態儲存至名為 staging-distribution.yaml 的檔案。將 staging_distribution_ID 取代為暫存分佈的 ID。

    aws cloudfront get-distribution-config --id staging_distribution_ID --output yaml > staging-distribution.yaml
  2. 開啟您剛才建立且命名為 staging-distribution.yaml 的檔案。編輯檔案,進行下列變更:

    • 修改臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈

    • ETag 欄位重新命名為 IfMatch,但不要變更欄位的值。

    完成後儲存檔案。

  3. 使用下列命令來更新臨時分佈的組態。將 staging_distribution_ID 取代為暫存分佈的 ID。

    aws cloudfront update-distribution --id staging_distribution_ID --cli-input-yaml file://staging-distribution.yaml

一旦臨時分佈的組態部署到邊緣節點,即對路由至臨時分佈的傳入流量產生效果。

更新持續部署政策 (包含輸入檔案的 CLI)
  1. 使用下列命令,將持續部署政策的組態儲存至名為 continuous-deployment-policy.yaml 的檔案。將 continuous_deployment_policy_ID 取代為持續部署政策的 ID。下列命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。

    aws cloudfront get-continuous-deployment-policy-config --id continuous_deployment_policy_ID \ --output yaml > continuous-deployment-policy.yaml
  2. 開啟您剛才建立且命名為 continuous-deployment-policy.yaml 的檔案。編輯檔案,進行下列變更:

    • 視需要修改持續部署政策的組態。例如,您可以從以標頭為基礎的流量組態,改為使用以權重為基礎的流量組態,或變更以權重為基礎的組態的流量百分比 (權重)。如需詳細資訊,請參閱 將請求路由至臨時分佈以權重為基礎之組態的工作階段黏性

    • ETag 欄位重新命名為 IfMatch,但不要變更欄位的值。

    完成後儲存檔案。

  3. 使用下列命令來更新持續部署政策。將 continuous_deployment_policy_ID 取代為持續部署政策的 ID。下列命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。

    aws cloudfront update-continuous-deployment-policy --id continuous_deployment_policy_ID \ --cli-input-yaml file://continuous-deployment-policy.yaml

當具有更新連續部署原則的主要發行版組態部署到邊緣位置時,會根據更新的流量組態, CloudFront 開始將流量傳送至預備分發。

提升臨時分佈組態 (CLI)
  • 使用 aws cloudfront update-distribution-with-staging-config 命令,將臨時分佈的組態提升為主要分佈。下列範例命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。以下是範例命令:

    • primary_distribution_ID 取代為主要分佈的 ID。

    • staging_distribution_ID 取代為臨時分佈的 ID。

    • primary_distribution_ETagstaging_distribution_ETag 取代為主要分佈和臨時分佈的 ETag 值。請確認主要分佈的值是第一個,如範例所示。

    aws cloudfront update-distribution-with-staging-config --id primary_distribution_ID \ --staging-distribution-id staging_distribution_ID \ --if-match 'primary_distribution_ETag,staging_distribution_ETag'

級暫存發佈時,會將組態從暫存發佈 CloudFront 複製到主要發行版。 CloudFront 也會停用連續部署原則,並將所有流量路由傳送至主要散發。

提升組態之後,您可以在下次測試組態變更時,重複使用相同的臨時分佈。

API

若要使用 CloudFront API 建立預備分發和持續部署原則,請使用下列 API 作業:

如需詳細了解您在這些 API 呼叫中指定的欄位,請參閱以下內容:

建立暫存散發和持續部署原則之後,請使用 UpdateDistribution(在主要發行版上) 將持續部署原則附加至主要發行版。

若要更新暫存發佈的組態,請使用 UpdateDistribution(在暫存發佈上) 來修改暫存發佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈

若要將暫存發行版的組態升級為主要發行版,請使用UpdateDistributionWithStagingConfig

如需有關您在這些 API 呼叫中指定之欄位的詳細資訊,請參閱 AWS SDK 或其他 API 用戶端的 API 參考文件。

監控臨時分佈

若要監視預備分發的效能,您可以使用為所有發行版 CloudFront 提供的相同度量、記錄和報告。例如:

  • 您可以在 CloudFront主控台中檢視預設 CloudFront分佈量度 (例如總要求和錯誤率),也可以額外付費開啟其他度量 (例如按狀態碼分類的快取命中率和錯誤率)。您也可以根據這些指標建立警示。

  • 您可以檢視標準日誌即時日誌,深入了解臨時分佈接收到的請求。標準記錄檔包含下列兩個欄位,可協助您識別要求在將要求路由傳送至預備分發之前最初傳 CloudFront 送到的主要散佈:primary-distribution-idprimary-distribution-dns-name

  • 您可以在 CloudFront主控台中檢視和下載報告,例如快取統計資料報表。

了解持續部署的運作方式

下列主題說明 CloudFront 持續部署的運作方式。

將請求路由至臨時分佈

當您使用 CloudFront 持續部署時,您不需要變更檢視器要求的任何相關內容。檢視者無法使用 DNS 名稱、IP 地址或 CNAME,將請求直接傳送至臨時分佈。相反地,檢視者會將要求傳送至主要 (生產) 發佈,並根據連續部署原則中的流量組態設定,將部分要求 CloudFront 路由至預備分發。有兩種類型的流量組態:

以權重為基礎的

以權重為基礎的組態會將指定百分比的檢視者請求路由至臨時分佈。當您使用權重型組態時,您也可以啟用工作階段黏著性,這有助於確保 CloudFront 將來自相同檢視器的要求視為單一工作階段的一部分。如需詳細資訊,請參閱 以權重為基礎之組態的工作階段黏性

以標頭為基礎的

當檢視者請求包含特定 HTTP 標頭 (您可以指定該標頭和值),以標頭為基礎的組態會將請求路由至臨時分佈。不包含指定標頭和值的請求則會路由至主要分佈。此組態對於本地測試或您可以控制檢視者請求時非常有用。

注意

路由至臨時分佈的標頭必須包含字首 aws-cf-cd-

以權重為基礎之組態的工作階段黏性

當您使用權重型組態 CloudFront 將流量路由傳送至暫存分佈時,也可以啟用工作階段黏著性,這有助於確保將來自相同檢視器的要求視為單一工作階段。當您啟用工作階段黏著性時,請 CloudFront 設定 Cookie,以便單一工作階段中來自相同檢視器的所有要求都由一個發行版 (主要或暫存) 提供服務。

當您啟用工作階段黏性,您也可以指定閒置時間。如果檢視器在這段時間內處於閒置狀態 (不傳送任何要求),工作階段就會過期,並 CloudFront 將 future 自此檢視器的要求視為新工作階段。您能以秒為單位,將閒置時間設定為 300 (5 分鐘) 到 3600 (一小時)。

在下列情況下,請 CloudFront 重設所有工作階段 (即使是作用中的工作階段),並將所有要求視為新工作階段:

  • 您停用或啟用持續部署政策

  • 您停用或啟用工作階段黏性設定

更新主要分佈或臨時分佈

當主要分佈具有連接的持續部署政策時,主要分佈和臨時分佈皆可使用下列組態變更:

  • 所有快取行為設定,包括預設快取行為

  • 所有原始伺服器設定 (原始伺服器和原始伺服器群組)

  • 自訂錯誤回應 (錯誤頁面)

  • 地理限制

  • 預設根物件

  • 日誌設定

  • 描述 (評論)

您也可以更新發佈組態中參照的外部資源,例如快取政策、回應標頭政策、函數或 Lambda @Edge CloudFront 函數。

主要分佈和臨時分佈不會共用快取

主要分佈和臨時分佈不會共用快取。將第一個要求 CloudFront 傳送至暫存散發時,其快取為空白。當請求抵達臨時分佈時,便會開始快取回應 (如果設定為如此)。

持續部署的配額和其他考量

CloudFront 持續部署需遵守下列配額和其他考量。

配額

  • 每個暫存分配的最大數量 AWS 帳戶:20

  • 每個連續部署原則的數目上限 AWS 帳戶:20

  • 在以權重為基礎的組態中,您可以傳送至臨時分佈的流量百分比上限:15%

  • 工作階段黏性閒置時間的上下限:300–3600 秒

如需詳細資訊,請參閱 配額

注意

使用持續部署且您的主要分發是使用適用於 S3 儲存貯體存取的 OAC 設定時,請更新 S3 儲存貯體政策以允許存取暫存分配。如需 S3 儲存貯體政策範例,請參閱授予原始存取控制許可,以存取 S3 儲存貯體

AWS WAF 網路 ACL

如果您為分發啟用連續發佈,則適用下列考量 AWS WAF:

  • 您無法首次將 AWS WAF Web 存取控制清單 (ACL) 與發行版產生關聯。

  • 您無法取消 AWS WAF Web ACL 與分佈的關聯。

您必須先刪除生產發行版的持續部署原則,才能執行前述工作。這也會刪除暫存分配。如需詳細資訊,請參閱 使用 AWS WAF 保護

CloudFront 將所有請求發送到主要分發的情況

在某些情況下 (例如資源使用率高的期間) CloudFront 可能會將所有要求傳送至主要發行版,而不論連續部署原則中指定的內容為何。

CloudFront 無論連續部署原則中指定的內容為何,都會在尖峰流量時段將所有要求傳送至主要分發。尖峰流量指的是CloudFront 服務上的流量,而不是分佈中的流量。

HTTP/3

您無法搭配使用支援 HTTP/3 的分佈與持續部署。