本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 CloudFront 持續部署安全地測試 CDN 組態變更
透過 Amazon CloudFront 持續部署,您可以先使用一部分生產流量進行測試,以安全地將變更部署到 CDN 組態。您可以使用臨時分佈和持續部署政策,將真實 (生產) 檢視者的部份流量傳送至新的 CDN 組態,並驗證其是否如預期般運作。您可以即時監控新組態的效能,並在準備就緒時提升新組態,以便透過主要分佈為所有流量提供服務。
下圖顯示使用 CloudFront 持續部署的好處。若沒有此部署,您就必須使用模擬流量測試 CDN 組態變更。透過持續部署,您可以使用生產流量子集來測試變更,然後在準備就緒時將變更提升至主要分佈。
使用 CloudFront 持續部署的工作流程
下列高階工作流程說明如何透過 CloudFront 持續部署安全地測試和部署組態變更。
-
選擇您要做為主要分佈的分佈。主要分佈是目前為生產流量提供服務的分佈。
-
從主要分佈中,建立臨時分佈。臨時分佈一開始會是主要分佈的副本。
-
在持續部署政策內建立流量組態,並將其連接至主要分佈。這會決定如何將流量 CloudFront 路由至預備分發。如需詳細了解臨時分佈的路由請求,請參閱 將請求路由至臨時分佈。
-
更新臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈。
-
監控臨時分佈,以判斷組態變更是否如預期般運作。如需監控臨時分佈的詳細資訊,請參閱 監控臨時分佈。
當您監控臨時分佈時,您可以:
-
臨時分佈的效能符合您的需求時,請將臨時分佈的組態提升為主要分佈,如此會將臨時分佈的組態複製到主要分佈。這也會停用連續部署原則,這表示將所有流量 CloudFront 路由傳送至主要散發。
您可以建置自動化來監控臨時分佈的效能 (步驟 5),並在符合特定條件時自動提升組態 (步驟 6)。
提升組態之後,您可以在下次測試組態變更時,重複使用相同的臨時分佈。
如需有關在 CloudFront 主控台、或 CloudFront API 中使用預備發行版和持續部署原則的 AWS CLI詳細資訊,請參閱下一節。
使用臨時分佈和持續部署政策
您可以使用 AWS Command Line Interface (AWS CLI) 或使用 CloudFront API 在 CloudFront 主控台中建立、更新和修改預備分發和持續部署政策。
- Console
-
若要使用暫存發行版和連續部署原則 AWS Management Console,請使用下列程序。
建立臨時分佈和持續部署政策 (主控台)
登入 AWS Management Console 並開啟 CloudFront 主控台,位於https://console.aws.amazon.com/cloudfront/v4/home。
-
在導覽窗格中,選擇 Distributions (分佈)。
-
選擇您要做為主要分佈的分佈。主要分佈目前為生產流量提供服務,也就是您從中建立臨時分佈的地方。
-
在 Continuous deployment (持續部署) 區段中,選擇 Create staging distribution (建立臨時分佈)。這項操作會開啟 Create staging distribution (建立臨時分佈) 精靈。
-
在 Create staging distribution (建立臨時分佈) 精靈中,執行下列動作:
-
(選用) 輸入臨時分佈的描述。
-
選擇下一步。
-
修改臨時分佈的組態。如需詳細了解您可以更新的設定,請參閱 更新主要分佈或臨時分佈。
修改完臨時分佈的組態後,請選擇 Next (下一步)。
-
使用控制台指定 Traffic configuration (流量組態)。這會決定如何將流量 CloudFront 路由至預備分發。(將流量組態CloudFront 儲存在連續部署原則中。)
如需 Traffic configuration (流量組態) 選項的詳細資訊,請參閱 將請求路由至臨時分佈。
完成 Traffic configuration (流量組態) 時,請選擇 Next (下一步)。
-
檢閱包含流量組態的臨時分佈組態,然後選擇 Create staging distribution (建立臨時分佈)。
在 CloudFront 主控台中完成 [建立暫存分配] 精靈後,請 CloudFront 執行下列動作:
當主要發行版的組態 (使用連結的連續部署原則) 部署至 Edge 位置時,會 CloudFront 開始根據流量組態將指定部分的流量傳送至暫存分發。
一旦臨時分佈的組態部署到邊緣節點,即對路由至臨時分佈的傳入流量產生效果。
更新持續部署政策 (主控台)
在開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home。
-
在導覽窗格中,選擇 Distributions (分佈)。
-
選擇主要分佈。這是目前為生產流量提供服務的分佈,也就是您從中建立臨時分佈的地方。
-
在 Continuous deployment (持續部署) 區段中,選擇 Edit policy (編輯政策)。
-
修改持續部署政策中的流量組態。完成時,請選擇 Save changes (儲存變更)。
當具有更新連續部署原則的主要發行版組態部署到邊緣位置時,會根據更新的流量組態, CloudFront 開始將流量傳送至預備分發。
升級暫存發佈時,會將組態從暫存發佈 CloudFront 複製到主要發行版。 CloudFront 也會停用連續部署原則,並將所有流量路由傳送至主要散發。
提升組態之後,您可以在下次測試組態變更時,重複使用相同的臨時分佈。
- CLI
-
若要使用暫存發行版和連續部署原則 AWS CLI,請使用下列程序。
建立臨時分佈 (CLI)
-
同時使用 aws cloudfront get-distribution 和 grep 命令,針對您要做為主要分佈的分佈,取得其 ETag
值。主要分佈目前為生產流量提供服務,也就是您從中建立臨時分佈的地方。
以下為命令的範例。在下列範例中,請將 primary_distribution_ID
取代為主要分佈的 ID。
aws cloudfront get-distribution --id primary_distribution_ID
| grep 'ETag'
請複製 ETag
值,因為您會在以下步驟使用該值。
-
使用 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)
-
使用下列命令建立一個名為 continuous-deployment-policy.yaml
的檔案,其中包含 create-continuous-deployment-policy 命令的所有輸入參數。下列命令使用逸出字元 (\) 和換行符號以提高可讀性,但您應在命令中省略這些字元。
aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \
> continuous-deployment-policy.yaml
-
開啟您剛才建立且命名為 continuous-deployment-policy.yaml
的檔案。編輯檔案以指定您想要的持續部署政策設定,然後儲存檔案。當您編輯檔案時:
-
使用下列命令,使用 continuous-deployment-policy.yaml
檔案中的輸入參數建立持續部署政策。
aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml
複製命令輸出中的 Id
值。這是持續部署政策 ID,您會在接下來的步驟使用。
將持續部署政策連接至主要分佈 (包含輸入檔案的 CLI)
-
使用下列命令,將主要分佈的組態儲存至名為 primary-distribution.yaml
的檔案。將 primary_distribution_ID
取代為主要分佈的 ID。
aws cloudfront get-distribution-config --id primary_distribution_ID
--output yaml > primary-distribution.yaml
-
開啟您剛才建立且命名為 primary-distribution.yaml
的檔案。編輯檔案,進行下列變更:
完成後儲存檔案。
-
使用下列命令來更新主要分佈,以使用持續部署政策。將 primary_distribution_ID
取代為主要分佈的 ID。
aws cloudfront update-distribution --id primary_distribution_ID
--cli-input-yaml file://primary-distribution.yaml
當主要發行版的組態 (使用連結的連續部署原則) 部署至 Edge 位置時,會 CloudFront 開始根據流量組態將指定部分的流量傳送至暫存分發。
更新臨時分佈 (包含輸入檔案的 CLI)
-
使用下列命令,將臨時分佈的組態儲存至名為 staging-distribution.yaml
的檔案。將 staging_distribution_ID
取代為暫存分佈的 ID。
aws cloudfront get-distribution-config --id staging_distribution_ID
--output yaml > staging-distribution.yaml
-
開啟您剛才建立且命名為 staging-distribution.yaml
的檔案。編輯檔案,進行下列變更:
完成後儲存檔案。
-
使用下列命令來更新臨時分佈的組態。將 staging_distribution_ID
取代為暫存分佈的 ID。
aws cloudfront update-distribution --id staging_distribution_ID
--cli-input-yaml file://staging-distribution.yaml
一旦臨時分佈的組態部署到邊緣節點,即對路由至臨時分佈的傳入流量產生效果。
更新持續部署政策 (包含輸入檔案的 CLI)
-
使用下列命令,將持續部署政策的組態儲存至名為 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
-
開啟您剛才建立且命名為 continuous-deployment-policy.yaml
的檔案。編輯檔案,進行下列變更:
完成後儲存檔案。
-
使用下列命令來更新持續部署政策。將 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_ETag
和 staging_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-id
和primary-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 WAF 網路 ACL
如果您為分發啟用連續發佈,則適用下列考量 AWS WAF:
您必須先刪除生產發行版的持續部署原則,才能執行前述工作。這也會刪除暫存分配。如需詳細資訊,請參閱 使用 AWS WAF 保護。
CloudFront 將所有請求發送到主要分發的情況
在某些情況下 (例如資源使用率高的期間) CloudFront 可能會將所有要求傳送至主要發行版,而不論連續部署原則中指定的內容為何。
CloudFront 無論連續部署原則中指定的內容為何,都會在尖峰流量時段將所有要求傳送至主要分發。尖峰流量指的是CloudFront 服務上的流量,而不是分佈中的流量。
HTTP/3
您無法搭配使用支援 HTTP/3 的分佈與持續部署。