

# Criar um alias para uma função do Lambda
<a name="configuration-aliases"></a>

É possível criar aliases para sua função do Lambda. Um alias do Lambda é um ponteiro para uma versão da função que pode ser atualizada. Os usuários da função podem acessar a versão da função usando o nome do recurso da Amazon (ARN) do alias. Ao implantar uma nova versão, é possível atualizar o alias para usar a nova versão ou dividir o tráfego entre duas versões.

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

**Para criar um alarme usando o console**

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 uma versão da função para a qual você deseja que o alias indique.

   1. (Opcional) Para configurar o roteamento no alias, expanda **Weighted alias (Alias ponderado)**. Para ter mais informações, consulte [Implemente implantações canárias do Lambda usando um alias ponderado](configuring-alias-routing.md).

   1. Escolha **Salvar**.

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

Para criar um alias usando a AWS Command Line Interface (AWS CLI), use o comando [create-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-alias.html).

```
aws lambda create-alias \
  --function-name my-function \
  --name alias-name \
  --function-version version-number \
  --description " "
```

Para alterar um alias para apontar para uma nova versão da função, use o comando [update-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-alias.html).

```
aws lambda update-alias \
  --function-name my-function \
  --name alias-name \
  --function-version version-number
```

Para excluir um alias, use o comando [delete-alias](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-alias.html).

```
aws lambda delete-alias \
  --function-name my-function \
  --name alias-name
```

 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)
+ [DeleteAlias](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteAlias.html)

------

# Usar aliases do Lambda em políticas de permissões e origens de eventos
<a name="using-aliases"></a>

Cada alias tem um ARN exclusivo. Um alias pode apontar somente para uma versão de função, e não para outro alias. O alias pode ser atualizado para apontar para uma nova versão da função.

Fontes de eventos como Amazon Simple Storage Service (Amazon S3) invocam sua função do Lambda. Essas origens de evento mantêm um mapeamento que identifica a função a ser invocada quando ocorrem eventos. Se você especificar um alias da função do Lambda na configuração de mapeamento, não precisará atualizar o mapeamento quando a versão da função for alterada. Para ter mais informações, consulte [Como o Lambda processa registros de origens de eventos baseadas em fluxos e filas](invocation-eventsourcemapping.md).

Em uma política de recursos, é possível conceder permissões para fontes de eventos para usar sua função do Lambda. Se um ARN de alias for especificado na política, não será necessário atualizar a política quando a versão da função for alterada.

## Políticas de recursos
<a name="versioning-permissions-alias"></a>

É possível usar uma [política baseada em recurso](access-control-resource-based.md) para conceder acesso a um serviço, recurso ou conta à sua função. O escopo dessa permissão depende se você a aplica a um alias, uma versão ou a toda a função. Por exemplo, se você usar um nome de alias (como `helloworld:PROD`), a permissão permite invocar a função `helloworld` usando o ARN do alias (`helloworld:PROD`).

Se você tentar invocar a função sem um alias ou uma versão específica, receberá um erro de permissão. Esse erro de permissão ainda ocorrerá mesmo se você tentar invocar diretamente a versão da função associada ao alias.

Por exemplo, o comando da AWS CLI a seguir concede permissões do Amazon S3 para invocar o alias PROD da função `helloworld` quando o Amazon S3 está agindo em nome de `amzn-s3-demo-bucket`.

```
aws lambda add-permission \
  --function-name helloworld \
  --qualifier PROD \
  --statement-id 1 \
  --principal s3.amazonaws.com \
  --action lambda:InvokeFunction \
  --source-arn arn:aws:s3:::amzn-s3-demo-bucket \
  --source-account 123456789012
```

Para obter mais informações sobre como usar nomes de recursos em políticas, consulte [Ajustar as seções de Recursos e Condições das políticas](lambda-api-permissions-ref.md).

# 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)