

# Implemente implantações canárias do Lambda usando um alias ponderado
<a name="configuring-alias-routing"></a>

É possível usar um alias ponderado para dividir o tráfego entre duas diferentes [versões](configuration-versions.md) da mesma função. Com essa abordagem, você pode testar novas versões de funções com uma pequena porcentagem de tráfego e reverter rapidamente, caso necessário. Esse processo é conhecido como [implantação canária](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/canary-deployments.html). Implantações canárias diferem de implantações azul/verde por exporem a nova versão a apenas uma parte das solicitações, em vez de alternar todo o tráfego de uma só vez.

Você pode apontar um alias para um máximo de duas versões de função do Lambda. As versões devem atender aos seguintes critérios:
+ As duas versões devem ter a mesma [função de execução](lambda-intro-execution-role.md).
+ Ambas as versões devem ter a mesma configuração de [fila de mensagens mortas](invocation-async-retain-records.md#invocation-dlq) ou configuração de nenhuma fila de mensagens mortas.
+ Ambas as versões devem ser publicadas. O alias não pode apontar para `$LATEST`.

**nota**  
O Lambda usa um modelo probabilístico simples para distribuir o tráfego entre as duas versões de função. Em níveis de tráfego baixos, você pode ver uma alta variação entre a porcentagem configurada e real de tráfego em cada versão. Se sua função usa simultaneidade provisionada, você pode evitar[Invocações de transbordamento](monitoring-metrics-types.md#invocation-metrics)configurando um número maior de instâncias de simultaneidade provisionadas durante o tempo em que o roteamento de alias está ativo. 

## Criar um alias ponderado
<a name="create-weighted-alias"></a>

------
#### [ Console ]

**Para configurar o roteamento em um alias usando o console**
**nota**  
Verifique se a função tem pelo menos duas versões publicadas. Para criar versões adicionais, siga as instruções em [Como criar versões de função](configuration-versions.md#configuration-versions-config).

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda.

1. Escolha uma função.

1. Escolha **Aliases** e, em seguida, escolha **Create alias (Criar alias)**.

1. Na página **Create alias (Criar alias)**, faça o seguinte:

   1. Insira um **Name (Nome)** para o alias.

   1. (Opcional) Insira uma **Description (Descrição)** do alias.

   1. Em **Version (Versão)**, escolha a primeira versão da função para a qual você deseja que o alias aponte.

   1. Expanda **Weighted alias (Alias ponderado)**.

   1. Em **Additional version (Versão adicional)**, escolha a segunda versão da função para a qual você deseja que o alias aponte.

   1. Em **Weight (%) (Peso (%))**, insira um valor de peso para a função. *Peso* é a porcentagem do tráfego atribuído a essa versão quando o alias é invocado. A primeira versão recebe o peso residual. Por exemplo, se você especificar 10% para **Additional version (Versão adicional)**, a primeira versão receberá automaticamente a atribuição de 90 por cento.

   1. Escolha **Salvar**.

------
#### [ AWS CLI ]

Use os comandos [create-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-alias.html) e [update-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-alias.html) AWS CLI para configurar os pesos do tráfego entre duas versões de uma função. Ao criar ou atualizar o alias, o peso do tráfego é especificado no parâmetro `routing-config`.

O exemplo a seguir cria um alias de função do Lambda chamado **routing-alias** que aponta para a versão 1 da função. A versão 2 da função recebe 3 por cento do tráfego. Os 97 por cento do tráfego restantes são roteados para a versão 1.

```
aws lambda create-alias \
  --name routing-alias \
  --function-name my-function \
  --function-version 1  \
  --routing-config AdditionalVersionWeights={"2"=0.03}
```

Use o comando `update-alias` para aumentar a porcentagem de tráfego de entrada para a versão 2. No exemplo a seguir, o tráfego é aumentado para 5%.

```
aws lambda update-alias \
  --name routing-alias \
  --function-name my-function \
  --routing-config AdditionalVersionWeights={"2"=0.05}
```

Para rotear todo o tráfego para a versão 2, use o comando `update-alias` para alterar a propriedade `function-version` para apontar o alias para a versão 2. O comando também redefine a configuração de roteamento.

```
aws lambda update-alias \
  --name routing-alias \
  --function-name my-function  \
  --function-version 2 \
  --routing-config AdditionalVersionWeights={}
```

 Os comandos da AWS CLI nas etapas anteriores correspondem às seguintes operações de API do Lambda:
+ [CreateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_CreateAlias.html)
+ [UpdateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateAlias.html)

------

## Determinar qual versão foi invocada
<a name="determining-routing-version"></a>

Ao configurar pesos de tráfego entre duas versões da função, há duas maneiras de determinar a versão da função do Lambda que foi chamada:
+ **CloudWatch Logs**: o Lambda emite automaticamente uma entrada de log `START` que contém o ID da versão invocada em cada invocação da função. Exemplo:

  `START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version: 2` 

  Para invocações de alias, o Lambda usa a dimensão `ExecutedVersion` para filtrar os dados de métrica pela versão invocada. Para obter mais informações, consulte [Exibição de métricas de funções do Lambda](monitoring-metrics-view.md).
+ **Carga de resposta (invocações síncronas)** – As respostas às invocações de função síncrona incluem um cabeçalho `x-amz-executed-version` para indicar qual versão de função foi invocada.

## Criar uma implantação contínua com aliases ponderados
<a name="lambda-rolling-deployments"></a>

Use o AWS CodeDeploy e o AWS Serverless Application Model (AWS SAM) para criar uma implantação contínua que detecta automaticamente alterações no código da função, implanta uma nova versão da função e aumenta gradualmente a quantidade de tráfego que flui para essa nova versão. A quantidade de tráfego e a taxa de aumento são parâmetros que você pode configurar.

Em uma implantação contínua, o AWS SAM executa estas tarefas:
+ Configura sua função do Lambda e cria um alias. A configuração de roteamento do alias ponderado é o recurso subjacente que implementa a implantação contínua.
+ Cria um aplicativo CodeDeploy e um grupo de implantação. O grupo de implantação gerencia a implantação contínua e a reversão, se necessário.
+ Detecta quando você cria uma nova versão da sua função do Lambda.
+ Aciona o CodeDeploy para iniciar a implantação da nova versão.

### Exemplo de modelo AWS SAM
<a name="sam-template"></a>

O exemplo a seguir mostra um [Modelo do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html) para uma implantação contínua simples. 

```
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A sample SAM template for deploying Lambda functions

Resources:
# Details about the myDateTimeFunction Lambda function
  myDateTimeFunction:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      Handler: myDateTimeFunction.handler
      Runtime: nodejs24.x
# Creates an alias named "live" for the function, and automatically publishes when you update the function.
      AutoPublishAlias: live
      DeploymentPreference:
# Specifies the deployment configuration
          Type: Linear10PercentEvery2Minutes
```

Este modelo define uma função do Lambda denominada `myDateTimeFunction` com as propriedades a seguir. 

**AutoPublishAlias **  
A propriedade `AutoPublishAlias` cria um alias chamado `live`. Além disso, o framework AWS SAM detecta automaticamente quando você salva um código novo para a função. O framework publica uma nova versão da função e atualiza o alias do `live` para apontar para a nova versão.

**DeploymentPreference**  
A propriedade `DeploymentPreference` determina a taxa na qual a aplicação do CodeDeploy muda o tráfego da versão original da função do Lambda para a nova versão. O valor `Linear10PercentEvery2Minutes` muda dez por cento adicionais do tráfego para a nova versão a cada dois minutos.   
Para obter uma lista das configurações de implantação predefinidas, consulte [Configurações de implantação](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html). 

Para obter mais informações sobre como criar implantações contínuas com o CodeDeploy e o AWS SAM, consulte o seguinte:
+ [Tutorial: Implantar uma função do Lambda atualizada com o CodeDeploy e o AWS Serverless Application Model](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-lambda-sam.html)
+ [Implantação gradual de aplicações sem servidor com o AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html)