

# Ativação e gerenciamento do Lambda SnapStart
<a name="snapstart-activate"></a>

Para usar o SnapStart, ative o SnapStart em uma função do Lambda nova ou existente. Em seguida, publique e invoque uma versão da função.

**Topics**
+ [Ativação do SnapStart (console)](#snapshot-console)
+ [Ativação do SnapStart (AWS CLI)](#snapshot-cli)
+ [Ativação do SnapStart (API)](#snapshot-api)
+ [Lambda SnapStart e estados de função](#snapstart-function-states)
+ [Atualização de um snapshot](#update-snapshot)
+ [Uso do SnapStart com AWS SDKs](#snapstart-credentials)
+ [Uso do SnapStart com o CloudFormation, o AWS SAM e o AWS CDK](#snapstart-cfn-sam)
+ [Exclusão de snapshots](#snapshot-delete)

## Ativação do SnapStart (console)
<a name="snapshot-console"></a>

**Para ativar o SnapStart para uma função**

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

1. Escolha o nome de uma função.

1. Escolha **Configuration** (Configuração) e, em seguida, selecione **General configuration** (Configuração geral).

1. No painel **General configuration** (Configuração geral), escolha **Edit** (Editar).

1. Na página **Edit basic settings** (Editar configurações básicas), para **SnapStart**, escolha **Published versions** (Versões publicadas).

1. Escolha **Salvar**.

1. [Publique uma versão da função](configuration-versions.md#configuration-versions-config). O Lambda inicializa o código, cria um snapshot do ambiente de execução inicializado e, em seguida, armazena em cache o snapshot para acesso de baixa latência.

1. [Invoque a versão da função](configuration-versions.md#versioning-versions-using).

## Ativação do SnapStart (AWS CLI)
<a name="snapshot-cli"></a>

**Para ativar o SnapStart para uma função existente**

1. Atualize a configuração da função executando o comando [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) com a opção **--snap-start**.

   ```
   aws lambda update-function-configuration \
     --function-name my-function \
     --snap-start ApplyOn=PublishedVersions
   ```

1. Publique uma versão de função com o comando [publish-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-version.html).

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

1. Confirme se o SnapStart está ativado para a versão da função ao executar o comando [get-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-function-configuration.html) e especificar o número da versão. O exemplo a seguir especifica a versão 1.

   ```
   aws lambda get-function-configuration \
     --function-name my-function:1
   ```

   Se a resposta mostrar que [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) é `On` e [State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) é `Active`, o SnapStart será ativado e um snapshot estará disponível para a versão da função especificada.

   ```
   "SnapStart": { 
       "ApplyOn": "PublishedVersions",
       "OptimizationStatus": "On"
    },
    "State": "Active",
   ```

1. Invoque a versão da função ao executar o comando [invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) e especificar a versão. O exemplo a seguir invoca a versão 1.

   ```
   aws lambda invoke \
     --cli-binary-format raw-in-base64-out \
     --function-name my-function:1 \
     --payload '{ "name": "Bob" }' \
     response.json
   ```

   A opção **cli-binary-format** será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute `aws configure set cli-binary-format raw-in-base64-out`. Para obter mais informações, consulte [A AWS CLI comporta opções de linha de comando globais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) no *Guia do usuário da AWS Command Line Interface versão 2*.

**Para ativar o SnapStart ao criar uma nova função**

1. Crie uma função ao executar o comando [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) com a opção **--snap-start**. Para **--role**, especifique o nome do recurso da Amazon (ARN) do [perfil de execução](lambda-intro-execution-role.md).

   ```
   aws lambda create-function \
     --function-name my-function \
     --runtime "java25" \
     --zip-file fileb://my-function.zip \
     --handler my-function.handler \
     --role arn:aws:iam::111122223333:role/lambda-ex \
     --snap-start ApplyOn=PublishedVersions
   ```

1. Crie uma versão com o comando [publish-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-version.html).

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

1. Confirme se o SnapStart está ativado para a versão da função ao executar o comando [get-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-function-configuration.html) e especificar o número da versão. O exemplo a seguir especifica a versão 1.

   ```
   aws lambda get-function-configuration \
     --function-name my-function:1
   ```

   Se a resposta mostrar que [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) é `On` e [State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) é `Active`, o SnapStart será ativado e um snapshot estará disponível para a versão da função especificada.

   ```
   "SnapStart": { 
        "ApplyOn": "PublishedVersions",
        "OptimizationStatus": "On"
     },
     "State": "Active",
   ```

1. Invoque a versão da função ao executar o comando [invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) e especificar a versão. O exemplo a seguir invoca a versão 1.

   ```
   aws lambda invoke \
     --cli-binary-format raw-in-base64-out \
     --function-name my-function:1 \
     --payload '{ "name": "Bob" }' \
     response.json
   ```

   A opção **cli-binary-format** será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute `aws configure set cli-binary-format raw-in-base64-out`. Para obter mais informações, consulte [A AWS CLI comporta opções de linha de comando globais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) no *Guia do usuário da AWS Command Line Interface versão 2*.

## Ativação do SnapStart (API)
<a name="snapshot-api"></a>

**Para ativar o SnapStart**

1. Execute um destes procedimentos:
   + Crie uma nova função com o SnapStart ativado ao usar a ação de API [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) com o parâmetro [SnapStart](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStart.html).
   + Ative o SnapStart para uma função existente ao usar a ação [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html) com o parâmetro [SnapStart](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStart.html).

1. Publique uma versão de função com a ação [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html). O Lambda inicializa o código, cria um snapshot do ambiente de execução inicializado e, em seguida, armazena em cache o snapshot para acesso de baixa latência.

1. Confirme se o SnapStart está ativado para a versão da função ao usar a ação [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html). Especifique um número de versão para confirmar que o SnapStart está ativado para essa versão. Se a resposta mostrar que [OptimizationStatus](https://docs.aws.amazon.com/lambda/latest/api/API_SnapStartResponse.html) é `On` e [State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) é `Active`, o SnapStart será ativado e um snapshot estará disponível para a versão da função especificada.

   ```
   "SnapStart": { 
           "ApplyOn": "PublishedVersions",
           "OptimizationStatus": "On"
        },
        "State": "Active",
   ```

1. Invoque a versão de função com a ação [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html).

## Lambda SnapStart e estados de função
<a name="snapstart-function-states"></a>

Os estados de função a seguir podem ocorrer quando você usa o SnapStart.

**Pendente**  
O Lambda está inicializando o código e obtendo um snapshot do ambiente de execução inicializado. Quaisquer invocações ou outras ações de API que operam na versão de função falharão.

**Ativo**  
A criação do snapshot está concluída e é possível invocar a função. Para usar o SnapStart, é necessário invocar a versão de função publicada, não a versão não publicada (\$1LATEST).

**Inactive**  
O estado `Inactive` pode ocorrer quando o Lambda regenera periodicamente os snapshots da função para aplicar atualizações de software. Nessa instância, se sua função não for inicializada, ela poderá entrar em um estado `Inactive`.  
Para funções que usam um runtime Java, o Lambda exclui snapshots após 14 dias sem uma invocação. Se você invocar a versão de função após 14 dias, o Lambda retornará uma resposta `SnapStartNotReadyException` e começará a inicializar um novo snapshot. Aguarde até que a versão de função atinja o estado `Active` e, em seguida, invoque-a novamente.

**Falha**  
O Lambda encontrou um erro ao executar o código de inicialização ou ao criar o snapshot.

## Atualização de um snapshot
<a name="update-snapshot"></a>

O Lambda cria um snapshot para cada versão de função publicada. Para atualizar um snapshot, publique uma nova versão da função.

## Uso do SnapStart com AWS SDKs
<a name="snapstart-credentials"></a>

Para fazer chamadas para o SDK da AWS usando sua função, o Lambda gera um conjunto efêmero de credenciais ao assumir o perfil de execução da função. Essas credenciais estão disponíveis como variáveis ​​de ambiente durante a invocação da sua função. Não é necessário fornecer credenciais para o SDK diretamente no código. Por padrão, a cadeia de provedores de credenciais verifica sequencialmente cada local em que você pode definir credenciais e escolhe o primeiro disponível, que geralmente corresponde às variáveis de ambiente (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` e `AWS_SESSION_TOKEN`).

**nota**  
Quando o SnapStart é ativado, o runtime do Lambda usa automaticamente as credenciais do contêiner (`AWS_CONTAINER_CREDENTIALS_FULL_URI` e `AWS_CONTAINER_AUTHORIZATION_TOKEN`), em vez das variáveis de ambiente de chave de acesso. Isso evita que as credenciais expirem antes que a função seja restaurada.

## Uso do SnapStart com o CloudFormation, o AWS SAM e o AWS CDK
<a name="snapstart-cfn-sam"></a>
+ **AWS CloudFormation:** declare a entidade [SnapStart](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-snapstart.html) em seu modelo.
+ **AWS Serverless Application Model (AWS SAM):** declare a propriedade do [SnapStart](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-snapstart) em seu modelo.
+ **AWS Cloud Development Kit (AWS CDK):** use o tipo [SnapStartProperty](https://docs.aws.amazon.com/cdk/api/v2/java/software/amazon/awscdk/services/lambda/CfnFunction.SnapStartProperty.html).

## Exclusão de snapshots
<a name="snapshot-delete"></a>

O Lambda exclui snapshots quando:
+ Você exclui a função ou a versão de função.
+ **Somente runtimes Java**: você não invoca a versão de função por 14 dias. Após 14 dias sem uma invocação, a versão de função transita para o estado [Inactive](#snapstart-function-states) (Inativo). Se você invocar a versão de função após 14 dias, o Lambda retornará uma resposta `SnapStartNotReadyException` e começará a inicializar um novo snapshot. Aguarde até que a versão de função atinja o estado [Active](#snapstart-function-states) (Ativo) e, em seguida, invoque-a novamente.

O Lambda remove todos os recursos associados aos snapshots excluídos em conformidade com o Regulamento Geral sobre a Proteção de Dados (GDPR).