建立 Canary Release 部署
部署將 Canary 設定做為部署建立操作額外輸入的 API 時,請建立 Canary Release 部署。
您也可以提出在階段上新增 Canary 設定的 stage:update 請求,以從現有非 Canary 部署建立 Canary Release 部署。
建立非 Canary Release 部署時,您可以指定非現有階段名稱。如果指定的階段不存在,則 API Gateway 會建立階段。不過,建立 Canary Release 部署時,您無法指定任何非現有階段名稱。您將會收到錯誤,而且 API Gateway 不會建立 Canary Release 部署。
您可以使用 API Gateway 主控台、AWS CLI 或 AWS 軟體開發套件,在 API Gateway 中建立 Canary 版本部署。
使用 API Gateway 主控台建立 Canary 部署
若要使用 API Gateway 主控台來建立 Canary Release 部署,請遵循下面的說明:
建立初始 Canary Release 部署
-
登入 API Gateway 主控台。
-
選擇現有 REST API,或建立新的 REST API。
-
在主導覽窗格中,選擇資源,然後選擇部署 API。請遵循 Deploy API (部署 API) 中的畫面說明,將 API 部署至新階段。
到目前為止,您已將 API 部署至生產版本階段。接著,您在階段上設定 Canary 設定,如果需要,也可以啟用快取、設定階段變數,或設定 API 執行或存取日誌。
-
若要啟用 API 快取,或將 AWS WAF Web ACL 與階段建立關聯,請在階段詳細資訊區段中選擇編輯。如需詳細資訊,請參閱 API Gateway 中 REST API 的快取設定 或 使用 API Gateway 主控台建立 AWS WAF Web ACL 與 API Gateway API 階段的關聯 。
-
若要設定執行或存取記錄,請在日誌和追蹤區段中選擇編輯,並依照畫面上的指示進行。如需更多詳細資訊,請參閱 在 API Gateway 中設定 REST API 的 CloudWatch 記錄功能。
-
若要設定階段變數,請選擇階段變數索引標籤,並依照畫面上的指示新增或修改階段變數。如需更多詳細資訊,請參閱 在 API Gateway 中使用 REST API 的階段變數。
-
選擇 Canary 索引標籤,然後選擇建立 Canary。您可能需要選擇向右箭頭按鈕才能顯示 Canary 索引標籤。
-
在 Canary 設定下,針對 Canary 輸入要轉移至 Canary 的請求百分比。
-
如有需要,請選取階段快取以開啟 Canary 版本的快取功能。除非啟用 API 快取,否則快取不適用於 Canary Release。
-
若要覆寫現有的階段變數,請針對 Canary 覆寫輸入新的階段變數值。
在部署階段初始化 Canary Release 之後,您變更 API 而且想要測試變更。您可以將 API 重新部署至相同階段,以透過相同的階段存取更新過的版本和基本版本。下列步驟說明如何執行這項操作。
將最新的 API 版本部署至 Canary
-
每次 API 更新時,選擇部署 API。
-
在部署 API 中,從部署階段下拉式清單中選擇包含 Canary 的階段。
-
(選用) 在部署描述中輸入描述。
-
選擇 Deploy (部署),將最新的 API 版本推送至 Canary Release。
-
如有需要,請重新設定階段設定、日誌或 Canary 設定,如「建立初始 Canary Release 部署」中所述。
因此,Canary Release 會指向最新版本,而生產版本仍然指向 API 的初始版本。canarySettings 現在有新的 deploymentId 值,而階段仍然使用的是初始 deploymentId 值。在幕後,主控台會呼叫 stage:update。
使用 AWS CLI 建立 Canary 部署
若要為新階段建立 Canary 部署
-
使用以下 create-deployment 命令建立包含兩個階段變數但沒有 Canary 的部署:
aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'prod'輸出將如下所示:
{ "id": "du4ot1", "createdDate": 1511379050 } -
使用以下 create-deployment 命令在
prod階段上建立 Canary 部署:aws apigateway create-deployment \ --rest-api-id abcd1234 \ --canary-settings percentTraffic=10.5,stageVariableOverrides={sv1='val2',sv2='val3'},useStageCache=false \ --stage-name 'prod'輸出將如下所示:
{ "id": "a6rox0", "createdDate": 1511379433 }產生的部署
id識別 Canary Release 的 API 測試版本。因此,相關聯的階段是已啟用 Canary。 -
(選用) 使用以下 get-stage 命令來檢視階段表示:
aws apigateway get-stage --rest-api-id acbd1234 --stage-name prod以下顯示
Stage作為命令輸出的呈現:{ "stageName": "prod", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "du4ot1", "lastUpdatedDate": 1511379433, "createdDate": 1511379050, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "a6rox0", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }在此範例中,API 基本版本會使用階段變數
{"sv0":val0", "sv1":val1"},而測試版本使用階段變數{"sv1":val2", "sv2":val3"}。生產版本和 Canary Release 使用相同的階段變數sv1,但分別具有不同的值val1和val2。階段變數sv0單獨用於生產版本,而階段變數sv2用於 Canary Release 中。
您也可以更新階段以啟用 Canary,藉此從現有的一般部署建立 Canary 發行部署。
若要從現有部署建立 Canary 發行部署
-
使用 create-deployment 命令建立沒有 Canary 的部署:
aws apigateway create-deployment \ --variables sv0=val0,sv1=val1 \ --rest-api-id abcd1234 \ --stage-name 'beta' -
使用 update-stage 命令更新階段以啟用 Canary:
aws apigateway update-stage \ --rest-api-id abcd1234 \ --stage-name 'beta' \ --patch-operations '[{ "op": "replace", "value": "0.0", "path": "/canarySettings/percentTraffic" }, { "op": "copy", "from": "/canarySettings/stageVariableOverrides", "path": "/variables" }, { "op": "copy", "from": "/canarySettings/deploymentId", "path": "/deploymentId" }]'輸出將如下所示:
{ "stageName": "beta", "variables": { "sv0": "val0", "sv1": "val1" }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "deploymentId": "cifeiw", "lastUpdatedDate": 1511381930, "createdDate": 1511380879, "canarySettings": { "percentTraffic": 10.5, "deploymentId": "cifeiw", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" } }, "methodSettings": {} }因為您在現有 API 版本上啟用 Canary,所以生產發行 (
Stage) 和 Canary 發行 (canarySettings) 會指向相同的部署。在您變更 API 並將它再次部署至此階段之後,新的版本將會在 Canary Release 中,而基本版本仍然在生產版本中。Canary Release 中的deploymentId更新為新部署id而生產版本中的deploymentId保持不變時,這是在階段發展中體現。