

# Gerenciar versões da função do Lambda
<a name="configuration-versions"></a>

É possível usar versões para gerenciar a implantação das suas funções. Por exemplo, você pode publicar uma nova versão de uma função para testes beta sem afetar os usuários da versão de produção estável. O Lambda cria uma nova versão da sua função sempre que você publicá-la. A nova versão é uma cópia da versão não publicada da função. A versão não publicada é denominada `$LATEST`.

É importante ressaltar que sempre que você implanta seu código de função, você sobrescreve o código atual no `$LATEST`. Para salvar a iteração atual do `$LATEST`, crie uma nova versão da função. Se a `$LATEST` for idêntica a uma versão publicada anterior, você não poderá criar uma nova versão até implantar alterações na `$LATEST`. Essas alterações podem incluir atualizar o código ou modificar as definições de configuração de função.

Depois de publicar uma versão da função, o código, o runtime, a arquitetura, a memória, as camadas e a maioria das outras definições de configuração da função são imutáveis. Isso significa que você não pode alterar essas configurações sem publicar uma nova versão `$LATEST`. Você pode configurar os seguintes itens para uma versão de função publicada:
+ [Acionadores](lambda-services.md#lambda-invocation-trigger)
+ [Destinos](invocation-async-retain-records.md#create-destination)
+ [Simultaneidade provisionada](provisioned-concurrency.md)
+ [Invocação assíncrona](invocation-async.md)
+ [Conexões e proxies de banco de dados](services-rds.md#rds-configuration)

**nota**  
Ao usar os [controles de gerenciamento de runtime](runtimes-update.md#runtime-management-controls) com o modo **Automático**, a versão do runtime usada pela versão da função é atualizada automaticamente. Ao usar **Function update** (Atualização de função) ou o modo **Manual**, a versão de runtime não será atualizada. Para obter mais informações, consulte [Entender como o Lambda gerencia as atualizações de versão do runtime](runtimes-update.md).

**Topics**
+ [Como criar versões de função](#configuration-versions-config)
+ [Usar versões](#versioning-versions-using)
+ [Conceder permissões](#versioning-permissions)

## Como criar versões de função
<a name="configuration-versions-config"></a>

O código e as configurações das funções somente podem ser alterados na versão não publicada de uma função. Quando você publica uma versão, o Lambda bloqueia o código e a maioria das configurações para manter uma experiência consistente para os usuários dessa versão.

Você pode criar uma versão de função usando o console do Lambda.

**Para criar uma nova versão de função**

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

1. Escolha uma função e, em seguida, selecione a guia **Versões**.

1. Na página de configuração de versões, escolha **Publish new version (Publicar nova versão)**.

1. (Opcional) Insira uma descrição de versão.

1. Selecione **Publish**.

Como alternativa, é possível publicar uma versão de uma função usando a operação de API [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html).

O comando da AWS CLI a seguir publica uma nova versão de uma função. A resposta retorna as informações de configuração sobe a versão da função, incluindo o número da versão e o ARN da função com o sufixo da versão.

```
aws lambda publish-version --function-name my-function
```

A seguinte saída deverá ser mostrada:

```
{
  "FunctionName": "my-function",
  "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1",
  "Version": "1",
  "Role": "arn:aws:iam::123456789012:role/lambda-role",
  "Handler": "function.handler",
  "Runtime": "nodejs24.x",
  ...
}
```

**nota**  
O Lambda atribui números de sequência monotônicos crescentes para o controle de versionamento. O Lambda nunca reutiliza números de versão, mesmo após você excluir e recriar uma função.

## Usar versões
<a name="versioning-versions-using"></a>

É possível fazer referência à sua função do Lambda usando um ARN qualificado ou um ARN não qualificado.
+ **ARN qualificado**: o ARN da função com um sufixo da versão. O exemplo a seguir faz referência à versão 42 da função `helloworld`.

  ```
  arn:aws:lambda:aws-region:acct-id:function:helloworld:42
  ```
+ **ARN não qualificado**: o ARN da função sem um sufixo da versão.

  ```
  arn:aws:lambda:aws-region:acct-id:function:helloworld
  ```

É possível usar um ARN qualificado ou não qualificado em todas as operações de API relevantes. No entanto, não é possível usar um ARN não qualificado para criar um alias.

Se você decidir não publicar versões de funções, será possível invocar a função usando o ARN qualificado ou não qualificado no [mapeamento da origem do evento](invocation-eventsourcemapping.md). Quando você invoca uma função usando um ARN não qualificado, o Lambda invoca implicitamente a `$LATEST`. 

O ARN qualificado para cada versão de função do Lambda é exclusivo. Depois de publicar uma versão, não é possível alterar o ARN ou o código da função.

O Lambda só publica uma nova versão da função se o código nunca tiver sido publicado ou se o código foi alterado em relação à última versão publicada. Se não houver nenhuma alteração, a versão da função permanecerá na última versão publicada.

Quando você publica uma versão, o Lambda cria um snapshot imutável do código e da configuração da sua função. Nem todas as alterações de configuração acionam a publicação de uma nova versão. As seguintes alterações de configuração qualificam uma função para a publicação de uma versão:
+ Código da função
+ Variáveis de ambiente
+ Runtime
+ Manipulador
+ Camadas
+ Tamanho da memória
+ Tempo limite
+ Configuração de VPC
+ Configuração de fila de mensagens não entregues (DLQ)
+ perfil do IAM
+ Descrição
+ Arquitetura (x86\$164 ou arm64)
+ Tamanho do armazenamento efêmero
+ Tipo de pacote
+ Configuração de registro em log
+ Configuração do sistema de arquivos
+ SnapStart
+ Configuração de rastreamento

Configurações operacionais, como [simultaneidade reservada](configuration-concurrency.md), não acionam a publicação de uma nova versão quando alteradas.

## Conceder permissões
<a name="versioning-permissions"></a>

É possível usar uma [política baseada em recurso](access-control-resource-based.md) ou uma [política baseada em identidade](access-control-identity-based.md) para conceder acesso à sua função. O escopo da permissão depende se você aplicar a política a uma função ou a uma versão de uma função. Para obter mais informações sobre nomes de recursos de função em políticas, consulte [Ajustar as seções de Recursos e Condições das políticas](lambda-api-permissions-ref.md). 

É possível simplificar o gerenciamento de fontes de eventos e políticas do AWS Identity and Access Management (IAM) utilizando aliases de funções. Para obter mais informações, consulte [Criar um alias para uma função do Lambda](configuration-aliases.md).