

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

# 提升 Canary Release
<a name="promote-canary-deployment"></a>

當您提升 Canary 版本時，Canary 版本會取代目前的階段設定。提升 Canary Release 並不會停用階段上的 Canary。若要停用 Canary，您必須移除階段上的 Canary 設定。若要提升 Canary，請執行下列操作。
+ 重設具有 Canary [部署 ID](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) 設定之階段的[部署 ID](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId)。這會更新具有 Canary 快照之階段的 API 快照，同時讓測試版本成為生產版本。
+ 使用 Canary 階段變數更新階段變數 (如果有的話)。這會更新具有 Canary API 執行內容之階段的 API 執行內容。沒有這項更新時，如果測試版本使用不同的階段變數或不同的現有階段變數值，則新的 API 版本可能會產生意外的結果。
+ 將 Canary 流量百分比設定為 0.0%。

**Topics**
+ [使用 API Gateway 主控台提升 Canary Release](#promote-canary-release-deployment-console)
+ [使用 提升 Canary Release AWS CLI](#promote-canary-release-cli)

## 使用 API Gateway 主控台提升 Canary Release
<a name="promote-canary-release-deployment-console"></a>

若要使用 API Gateway 主控台來提升 Canary Release 部署，請執行下列操作：

**提升 Canary 版本部署**

1.  登入 API Gateway 主控台，然後在主導覽窗格中選擇現有 API。

1.  在主導覽窗格中，選擇**階段**，然後選擇現有的階段。

1.  選擇 **Canary** 索引標籤。

1.  選擇**提升 Canary**。

1.  確認要進行的變更，然後選擇**提升 Canary**。

在提升之後，生產版本會參考相同的 API 版本 (**deploymentId**) 作為 Canary Release。您可以使用 驗證此項目 AWS CLI。如需範例，請參閱 [使用 提升 Canary Release AWS CLI](#promote-canary-release-cli)。

## 使用 提升 Canary Release AWS CLI
<a name="promote-canary-release-cli"></a>

若要使用 AWS CLI 命令將 Canary Release 提升為生產版本，請呼叫 `update-stage`命令來複製與`deploymentId`階段關聯的 Canary`deploymentId`，將 Canary 流量百分比重設為零 (`0.0`)，以及將任何 Canary 繫結階段變數複製到對應的階段繫結階段變數。

假設我們有 Canary Release 部署，如與以下類似的階段所描述：

```
{
    "_links": {
        ...
    },
    "accessLogSettings": {
        ...
    },
    "cacheClusterEnabled": false,
    "cacheClusterStatus": "NOT_AVAILABLE",
    "canarySettings": {
        "deploymentId": "eh1sby",
        "useStageCache": false,
        "stageVariableOverrides": {
            "sv2": "val3",
            "sv1": "val2"
        },
        "percentTraffic": 10.5
    },
    "createdDate": "2017-11-20T04:42:19Z",
    "deploymentId": "nfcn0x",
    "lastUpdatedDate": "2017-11-22T00:54:28Z",
    "methodSettings": {
        ...
    },
    "stageName": "prod",
    "variables": {
        "sv1": "val1"
    }
}
```

使用下列 [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) 命令來提升 Canary：

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id}  \
    --stage-name '{stage-name}'  \
    --patch-operations '[{                                
        "op": "replace",                                  
        "value": "0.0",                                    
        "path": "/canarySettings/percentTraffic"         
      }, {                                                
        "op": "copy",                                     
        "from": "/canarySettings/stageVariableOverrides", 
        "path": "/variables"                             
      }, {                                                
        "op": "copy",                                     
        "from": "/canarySettings/deploymentId",           
        "path": "/deploymentId"                           
      }]'
```

輸出將如下所示：

```
{
    "_links": {
        ...
    },
    "accessLogSettings": {
        ...
    },
    "cacheClusterEnabled": false,
    "cacheClusterStatus": "NOT_AVAILABLE",
    "canarySettings": {
        "deploymentId": "eh1sby",
        "useStageCache": false,
        "stageVariableOverrides": {
            "sv2": "val3",
            "sv1": "val2"
        },
        "percentTraffic": 0
    },
    "createdDate": "2017-11-20T04:42:19Z",
    "deploymentId": "eh1sby",
    "lastUpdatedDate": "2017-11-22T05:29:47Z",
    "methodSettings": {
        ...
    },
    "stageName": "prod",
    "variables": {
        "sv2": "val3",
        "sv1": "val2"
    }
}
```

將 Canary 版本提升到該階段後，並不會停用 Canary，而該部署仍然是 Canary 版本部署。為了讓該部署成為一般生產版本部署，您必須停用 Canary 設定。如需有關如何停用 Canary Release 部署的詳細資訊，請參閱 [關閉 Canary 版本](delete-canary-deployment.md)。