

# Criar uma implantação da versão canary
<a name="create-canary-deployment"></a>

Crie uma implantação da versão canary ao implantar a API com [configurações do canary](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDeployment.html#canarySettings) como uma entrada adicional para a operação de [criação de implantação](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDeployment.html). 

Você também pode criar uma implantação da versão canary a partir de uma implantação não canary existente fazendo uma solicitação [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) para adicionar as configurações do canary no estágio.

Ao criar uma implantação da versão não canary, você pode especificar um nome de estágio não existente. O API Gateway criará um se o estágio especificado não existir. No entanto, você não pode especificar um nome de estágio não existente ao criar uma implantação da versão canary. Você receberá um erro e o API Gateway não criará qualquer implantação da versão canary. 

 Você pode criar uma implantação do lançamento canary no API Gateway usando o console do API Gateway, a CLI AWS CLI ou um SDK da AWS.

**Topics**
+ [Criar uma implantação canary usando o console do API Gateway](#create-canary-deployment-using-console)
+ [Criar uma implantação do canary usando a AWS CLI](#create-canary-deployment-using-cli)

## Criar uma implantação canary usando o console do API Gateway
<a name="create-canary-deployment-using-console"></a>

Para usar o console do API Gateway para criar uma implantação da versão canary, siga as instruções abaixo:<a name="to-create-canary-release-on-new-deployment"></a>

**Para criar a implantação da versão canary inicial**

1.  Inicie uma sessão no console do API Gateway.

1.  Selecione uma API REST existente ou crie uma API REST.

1.  No painel de navegação principal, selecione **Recursos** e, depois, **Implantar API**. Siga as instruções na tela em **Deploy API** para implantar a API em um novo estágio. 

   Até agora, você implantou a API em um estágio da versão de produção. Em seguida, configure as configurações do canary no estágio e, se necessário, também ative o armazenamento em cache, defina variáveis de estágio ou configure a execução da API ou registros de acesso.

1.  Para habilitar o armazenamento em cache da API ou associar uma ACL da web do AWS WAF ao estágio, na seção **Detalhes do estágio**, escolha **Editar**. Para ter mais informações, consulte [Configurações de cache para APIs REST no API Gateway](api-gateway-caching.md) ou [Associar uma ACL da web do AWS WAF a um estágio da API do API Gateway usando o console do API Gateway](apigateway-control-access-aws-waf.md#apigateway-control-access-aws-waf-console).

1.  Para configurar a execução ou o registro em log do acesso, na guia **Logs e rastreamento**, selecione **Editar** e siga as instruções na tela. Para ter mais informações, consulte [Configurar o registro em log do CloudWatch para APIs REST no API Gateway](set-up-logging.md).

1. Para definir variáveis de estágio, escolha a guia **Variáveis de estágio** e siga as instruções na tela para adicionar ou modificar as variáveis de estágio. Para ter mais informações, consulte [Usar variáveis de estágio para uma API REST no API Gateway](stage-variables.md).

1.  Escolha a guia **Canário** e selecione **Criar canário**. Talvez seja necessário escolher o botão de seta para a direita para mostrar a guia **Canário**.

1.  Em **Configurações de canário**, em **Canário**, insira a porcentagem de solicitações a serem desviadas para o canário.

1. Se desejar, selecione **Cache de estágio** para ativar o armazenamento em cache da versão de canário. O cache não estará disponível para a versão canary até o armazenamento em cache da API ser ativado.

1. Para substituir variáveis de estágio existentes, em **Substituição do canário**, insira um novo valor de variável de estágio.

Depois que a versão canary for inicializada no estágio de implantação, altere a API e teste as alterações. Reimplante a API no mesmo estágio para que a versão atualizada e a versão base possam ser acessadas através do mesmo estágio. As etapas a seguir descrevem como fazer isso: <a name="to-deploy-latest-api-to-canary-release"></a>

**Para implantar a última versão da API em um canary**

1.  Com cada atualização da API, selecione **Implantar API**.

1.  Em **Implantar API**, escolha o estágio que contém um canário na lista suspensa **Estágio de implantação**. 

1.  (Opcional) Insira uma descrição em **Descrição da implantação**. 

1.  Escolha **Deploy** para enviar a última versão da API para a versão canary.

1.  Se desejar, reconfigure as configurações do estágio, registros ou as configurações do canary, conforme descrito em [Para criar a implantação da versão canary inicial](#to-create-canary-release-on-new-deployment).

 Como resultado, a versão canary aponta para a versão mais recente enquanto a versão de produção ainda aponta para a versão inicial da API. As [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) agora têm um novo valor **deploymentId**, enquanto o estágio ainda mantém o valor inicial [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId). Enquanto isso, o console chama [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html).

## Criar uma implantação do canary usando a AWS CLI
<a name="create-canary-deployment-using-cli"></a>

**Como criar uma implantação canário para um novo estágio**

1. Use o comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) indicado abaixo para criar uma implantação com duas variáveis de estágio, mas sem um canário:

   ```
   aws apigateway create-deployment \
       --variables sv0=val0,sv1=val1 \
       --rest-api-id abcd1234 \
       --stage-name 'prod'
   ```

   A saída será exibida da seguinte forma:

   ```
   {
       "id": "du4ot1", 
       "createdDate": 1511379050
   }
   ```

1. Use o comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) indicado abaixo para criar uma implantação canário no estágio `prod`:

   ```
   aws apigateway create-deployment \
       --rest-api-id abcd1234 \
       --canary-settings percentTraffic=10.5,stageVariableOverrides={sv1='val2',sv2='val3'},useStageCache=false \
       --stage-name 'prod'
   ```

   A saída será exibida da seguinte forma:

   ```
   {
       "id": "a6rox0", 
       "createdDate": 1511379433
   }
   ```

   O `id` de implantação resultante identifica a versão de teste da API para a versão canary. Como resultado, o estágio associado é ativado para canary.

1. (Opcional) Use o comando [get-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-stage.html) indicado abaixo para visualizar a representação do estágio:

   ```
   aws apigateway get-stage --rest-api-id acbd1234 --stage-name prod
   ```

   A seguir está uma representação do `Stage` como resultado de um comando:

   ```
   {
       "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": {}
   }
   ```

   Neste exemplo, a versão base da API usará as variáveis de estágio do `{"sv0":val0", "sv1":val1"}`, enquanto a versão de teste usa as variáveis de estágio do `{"sv1":val2", "sv2":val3"}`. A versão de produção e a versão canary usam a mesma variável de estágio do `sv1`, mas com valores diferentes, `val1` e `val2`, respectivamente. A variável de estágio do `sv0` é usada somente na versão de produção e a variável de estágio do `sv2` é usada somente na versão canary. 

Você também pode criar uma implantação da versão canário com base em uma implantação normal atualizando o estágio para ativar um canário.

**Como criar uma implantação de versão canário com base em uma implantação existente**

1. Use o comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) para criar uma implantação sem um canário:

   ```
   aws apigateway create-deployment \
       --variables sv0=val0,sv1=val1 \  
       --rest-api-id abcd1234 \
       --stage-name 'beta'
   ```

1. Use o comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) para atualizar o estágio e habilitar um canário:

   ```
   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"
           }]'
   ```

   A saída será exibida da seguinte forma:

   ```
   {
       "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": {}
   }
   ```

   Como acabamos de habilitar um canário em uma versão existente da API, a versão de produção (`Stage`) e a versão canário (`canarySettings`) apontam para a mesma implantação. Depois de alterar a API e implantá-la nesse estágio novamente, a nova versão ficará na versão canary, enquanto a versão base permanecerá na versão de produção. Isso se manifesta na evolução do estágio quando o `deploymentId` na versão canary é atualizado para a nova implantação do `id` e o `deploymentId` na versão de produção permanece inalterado.