

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implantando aplicativos sem servidor gradualmente com AWS SAM
<a name="automating-updates-to-serverless-apps"></a>

AWS Serverless Application Model (AWS SAM) vem embutido [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)para fornecer AWS Lambda implantações graduais. Com apenas algumas linhas de configuração, AWS SAM faz o seguinte para você:
+ Implanta novas versões da sua função do Lambda e cria automaticamente aliases que apontam para a nova versão.
+ Mude gradualmente o tráfego do cliente para a nova versão até que você esteja satisfeito com o funcionamento esperado. Se uma atualização não funcionar corretamente, você poderá reverter as alterações.
+ Define funções de teste pré-tráfego e pós-tráfego para verificar se o código recém-implantado está configurado corretamente e se seu aplicativo opera conforme o esperado.
+ Reverte automaticamente a implantação se CloudWatch os alarmes forem acionados.

**nota**  
Se você habilitar implantações graduais por meio do seu AWS SAM modelo, um CodeDeploy recurso será criado automaticamente para você. Você pode visualizar o CodeDeploy recurso diretamente por meio do Console de gerenciamento da AWS.

**Exemplo**

O exemplo a seguir demonstra o uso da função Lambda CodeDeploy para transferir gradualmente os clientes para sua versão recém-implantada da função Lambda:

```
Resources:
MyLambdaFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs20.x
    CodeUri: s3://bucket/code.zip

    AutoPublishAlias: live

    DeploymentPreference:
      Type: Canary10Percent10Minutes 
      Alarms:
        # A list of alarms that you want to monitor
        - !Ref AliasErrorMetricGreaterThanZeroAlarm
        - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm
      Hooks:
        # Validation Lambda functions that are run before & after traffic shifting
        PreTraffic: !Ref PreTrafficLambdaFunction
        PostTraffic: !Ref PostTrafficLambdaFunction
```

Essas revisões do AWS SAM modelo fazem o seguinte:
+ `AutoPublishAlias`: Ao adicionar essa propriedade e especificar um nome de alias,: AWS SAM
  + Detecta quando um novo código está sendo implantado, com base em alterações no URI do Amazon S3 da função do Lambda.
  + Cria e publica uma versão atualizada dessa função com o código mais recente.
  + Cria um alias com um nome fornecido por você (a menos que já exista um alias) e aponta para a versão atualizada da função do Lambda. As invocações de função devem usar o qualificador de alias para aproveitar isso. Se você não estiver familiarizado com o controle de versão e os aliases da função do Lambda, consulte [AWS Lambda Controle de versão e aliases de funções](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
+ `Deployment Preference Type`: No exemplo anterior, 10% do seu tráfego de clientes é imediatamente transferido para sua nova versão. Após 10 minutos, todo o tráfego é transferido para a nova versão. No entanto, se seus testes de pré-tráfego ou pós-tráfego falharem, ou se um CloudWatch alarme for acionado, CodeDeploy reverte sua implantação. É possível especificar como o tráfego deve ser transferido entre versões das seguintes maneiras:
  + `Canary`: o tráfego é deslocado em dois incrementos. É possível escolher entre opções de canário predefinidas. As opções especificam a porcentagem de tráfego que é transferida para a versão atualizada da função do Lambda no primeiro incremento e o intervalo, em minutos, antes que o tráfego restante seja transferido no segundo incremento. 
  + `Linear`: o tráfego é deslocado em incrementos iguais com um número igual de minutos entre cada incremento. Você pode escolher entre opções lineares predefinidas que especificam a porcentagem de tráfego deslocado em cada incremento e o número de minutos entre cada incremento. 
  + `AllAtOnce`: todo o tráfego é deslocado da função do Lambda original para a versão da função do Lambda atualizada de uma única vez. 

  A tabela a seguir descreve outras opções de mudança de tráfego que estão disponíveis além da usada no exemplo.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html)
+ `Alarms`: são CloudWatch alarmes acionados por quaisquer erros gerados pela implantação. Quando encontrados, eles revertem automaticamente sua implantação. Por exemplo, se o código atualizado que você está implantando causar erros no aplicativo. Outro exemplo é se alguma CloudWatch métrica personalizada especificada por você [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-metrics.html)violou o limite de alarme.
+ `Hooks`: são funções de teste pré e pós-tráfego que executam verificações antes do início da mudança de tráfego para a nova versão e após a conclusão da mudança de tráfego.
  + `PreTraffic`: Antes do início da mudança de tráfego, CodeDeploy invoca a função Lambda do gancho de pré-tráfego. Essa função Lambda deve retornar CodeDeploy e indicar sucesso ou falha. Se a função falhar, ela aborta e reporta uma falha para o. CloudFormation Se a função for bem-sucedida, CodeDeploy prossiga com a mudança de tráfego.
  + `PostTraffic`: após a conclusão da mudança de tráfego, CodeDeploy invoca a função Lambda do gancho pós-tráfego. Isso é semelhante ao gancho pré-tráfego, em que a função deve retornar para CodeDeploy relatar um sucesso ou uma falha. Use ganchos de pós-tráfego para executar testes de integração ou outras ações de validação.

  Para obter mais informações, consulte [Referência do SAM para implantações seguras](https://github.com/aws/serverless-application-model/blob/master/docs/safe_lambda_deployments.rst). 

## Implantação gradual de uma função do Lambda pela primeira vez
<a name="automating-updates-to-serverless-apps-first-time"></a>

 Ao implantar uma função Lambda gradualmente CodeDeploy , é necessária uma versão de função implantada anteriormente para transferir o tráfego. Portanto, sua primeira implantação deve ser realizada em duas etapas: 
+ **Etapa 1**: implante sua função do Lambda e crie aliases automaticamente com o `AutoPublishAlias`.
+ **Etapa 2**: Execute sua implantação gradual com o `DeploymentPreference`.

Executar sua primeira implantação gradual em duas etapas fornece CodeDeploy uma versão anterior da função Lambda da qual transferir o tráfego.

### Etapa 1: Implantação da função do Lambda
<a name="automating-updates-to-serverless-apps-first-time-step1"></a>

```
Resources:
MyLambdaFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs20.x
    CodeUri: s3://bucket/code.zip

    AutoPublishAlias: live
```

### Etapa 2: Execute sua implantação gradual
<a name="automating-updates-to-serverless-apps-first-time-step2"></a>

```
Resources:
MyLambdaFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs20.x
    CodeUri: s3://bucket/code.zip

    AutoPublishAlias: live

    DeploymentPreference:
      Type: Canary10Percent10Minutes 
      Alarms:
        # A list of alarms that you want to monitor
        - !Ref AliasErrorMetricGreaterThanZeroAlarm
        - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm
      Hooks:
        # Validation Lambda functions that are run before and after traffic shifting
        PreTraffic: !Ref PreTrafficLambdaFunction
        PostTraffic: !Ref PostTrafficLambdaFunction
```

## Saiba mais
<a name="automating-updates-to-serverless-apps-learn"></a>

Para ver um exemplo prático de configuração de uma implantação gradual, consulte o [Módulo 5 - Implantações canário](https://s12d.com/sam-ws-en-canaries) no *The Complete AWS SAM Workshop*.