

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á.

# Tutorial: Configurar um gancho do ciclo de vida que invoca uma função do Lambda
<a name="tutorial-lifecycle-hook-lambda"></a>

Neste exercício, você cria uma EventBridge regra da Amazon que inclui um padrão de filtro que, quando combinado, invoca uma AWS Lambda função como destino da regra. Nós fornecemos o padrão de filtro e código de função de exemplo a ser usada. 

Se tudo estiver configurado corretamente, no final deste tutorial, a função do Lambda executará uma ação personalizada quando as instâncias forem iniciadas. A ação personalizada simplesmente registra o evento no stream de CloudWatch registros de registros associado à função Lambda.

A função do Lambda também executa um retorno de chamada para permitir que o ciclo de vida da instância prossiga se essa ação for bem-sucedida, mas permite que a instância abandone o início e termine se a ação falhar.

A ilustração a seguir resume o fluxo de um evento de aumento a escala horizontalmente quando você usa uma função do Lambda para executar uma ação personalizada. Depois da execução de uma instância, o ciclo de vida da instância é pausado até que o gancho do ciclo de vida seja concluído, seja por tempo limite ou pelo Amazon EC2 Auto Scaling recebendo um sinal para continuar. 

![\[O fluxo de um evento de aumento a escala horizontalmente quando você usa uma função do Lambda para executar uma ação personalizada.\]](http://docs.aws.amazon.com/pt_br/autoscaling/ec2/userguide/images/lifecycle-hook-lambda-function.png)


**nota**  
Dependendo do seu caso de uso, você pode configurar um gancho de ciclo de vida seguindo as etapas abaixo e criando uma EventBridge regra. Ou você pode usar uma função Lambda para configurar um gancho de ciclo de vida diretamente sem criar uma regra. EventBridge 

**Topics**
+ [Pré-requisitos](#lambda-hello-world-tutorial-prerequisites)
+ [Etapa 1: criar um perfil do IAM com permissões para concluir ações do ciclo de vida](#lambda-create-iam-role)
+ [Etapa 2: Criar uma função do Lambda](#lambda-create-hello-world-function)
+ [Etapa 3: criar uma EventBridge regra](#lambda-create-rule)
+ [Etapa 4: Adicionar um gancho do ciclo de vida](#lambda-add-lifecycle-hook)
+ [Etapa 5: Testar e verificar o evento](#lambda-testing-hook-notifications)
+ [Etapa 6: limpar](#lambda-lifecycle-hooks-tutorial-cleanup)
+ [Recursos relacionados](#lambda-lifecycle-hooks-tutorial-related-resources)

## Pré-requisitos
<a name="lambda-hello-world-tutorial-prerequisites"></a>

Antes de iniciar este tutorial, crie um grupo do Auto Scaling, se você ainda não tiver um. Para criar um grupo do Auto Scaling, abra a [página Grupos do Auto Scaling](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) do console do Amazon EC2 e escolha **Criar grupo de Auto Scaling**.

## Etapa 1: criar um perfil do IAM com permissões para concluir ações do ciclo de vida
<a name="lambda-create-iam-role"></a>

Antes de criar uma função do Lambda, é necessário primeiro criar uma função de execução e uma política de permissões para permitir que o Lambda conclua os ganchos do ciclo de vida.

**Para criar a política**

1. Abra a página [Policies](https://console.aws.amazon.com/iam/home?#/policies) (Políticas) do console do IAM e escolha **Create policy** (Criar política).

1. Selecione a guia **JSON**.

1. Na caixa **Documento de política**, cole o seguinte documento de política na caixa, substituindo o texto pelo número da sua conta e pelo nome do seu grupo de Auto Scaling. **italics**

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "autoscaling:CompleteLifecycleAction"
         ],
         "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/my-asg"
       }
     ]
   }
   ```

------

1. Escolha **Próximo**. 

1. Em **Nome da política**, insira **LogAutoScalingEvent-policy**. Selecione **Criar política**.

Quando você terminar de criar a política, poderá criar uma função que a utilize.

**Para criar o perfil**

1. No painel de navegação à esquerda, escolha **Roles (Funções)**.

1. Selecione **Criar perfil**.

1. Em **Select trusted entity** (Selecionar entidade confiável), escolha **AWS service** (serviço).

1. Para seu caso de uso, escolha **Lambda** e escolha **Next** (Próximo). 

1. Em **Adicionar permissões**, escolha a política que você criou (**LogAutoScalingEvent-policy**) e a política nomeada **AWSLambdaBasicExecutionRole**. Em seguida, escolha **Próximo**. 
**nota**  
A **AWSLambdaBasicExecutionRole**política tem as permissões que a função precisa para gravar registros em CloudWatch Logs.

1. Na página **Name, review, and create** (Nomear, revisar e criar), em **Role name** (Nome da função), insira **LogAutoScalingEvent-role** e escolha **Create role** (Criar função).

## Etapa 2: Criar uma função do Lambda
<a name="lambda-create-hello-world-function"></a>

Crie uma função do Lambda para servir como destino para eventos. A função Lambda de amostra, escrita em Node.js, é invocada EventBridge quando um evento correspondente é emitido pelo Amazon EC2 Auto Scaling.

**Criar uma função do Lambda**

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

1. Escolha **Create function** (Criar função) e **Author from scratch** (Criar desde o início).

1. Em **Basic information (Informações básicas)**, em **Function name (Nome da função)**, insira **LogAutoScalingEvent**.

1. Em **Runtime**, selecione **Node.js 18.x**.

1. Role para baixo e escolha **Alterar função de execução padrão** e, em seguida, para **Função de execução**, escolha **Usar uma função existente**.

1. Em **Função existente**, escolha **LogAutoScalingEvent-role**.

1. Deixe os outros valores padrão.

1. Escolha a opção **Criar função**. Você é retornado ao código e configuração da função. 

1. Com sua `LogAutoScalingEvent` função ainda aberta no console, em **Código-fonte**, no editor, cole o código de exemplo a seguir no arquivo denominado index.mjs.

   ```
   import { AutoScalingClient, CompleteLifecycleActionCommand } from "@aws-sdk/client-auto-scaling";
   export const handler = async(event) => {
     console.log('LogAutoScalingEvent');
     console.log('Received event:', JSON.stringify(event, null, 2));
     var autoscaling = new AutoScalingClient({ region: event.region });
     var eventDetail = event.detail;
     var params = {
       AutoScalingGroupName: eventDetail['AutoScalingGroupName'], /* required */
       LifecycleActionResult: 'CONTINUE', /* required */
       LifecycleHookName: eventDetail['LifecycleHookName'], /* required */
       InstanceId: eventDetail['EC2InstanceId'],
       LifecycleActionToken: eventDetail['LifecycleActionToken']
     };
     var response;
     const command = new CompleteLifecycleActionCommand(params);
     try {
       var data = await autoscaling.send(command);
       console.log(data); // successful response
       response = {
         statusCode: 200,
         body: JSON.stringify('SUCCESS'),
       };
     } catch (err) {
       console.log(err, err.stack); // an error occurred
       response = {
         statusCode: 500,
         body: JSON.stringify('ERROR'),
       };
     }
     return response;
   };
   ```

   Esse código simplesmente registra o evento para que, no final deste tutorial, você possa ver um evento aparecer no stream de CloudWatch registros de registros associado a essa função Lambda. 

1. Escolha **Implantar**. 

## Etapa 3: criar uma EventBridge regra
<a name="lambda-create-rule"></a>

Crie uma EventBridge regra para executar sua função Lambda. Para obter mais informações sobre o uso de EventBridge, consulte [Use EventBridge para lidar com eventos do Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md).

**Como criar uma regra usando o console**

1. Abra o [console do EventBridge](https://console.aws.amazon.com/events/).

1. No painel de navegação, escolha **Regras**.

1. Escolha **Create rule**.

1. Em **Define rule detail** (Definir detalhe da regra), faça o seguinte:

   1. Em **Nome**, digite **LogAutoScalingEvent-rule**.

   1. Em **Barramento de eventos**, escolha **padrão**. Quando um AWS service (Serviço da AWS) em sua conta gera um evento, ele sempre vai para o ônibus de eventos padrão da sua conta.

   1. Em **Rule type**, escolha **Rule with an event pattern**.

   1. Escolha **Próximo**.

1. Em **Build event pattern** (Criar padrão de evento), faça o seguinte:

   1. Em **Origem do evento**, escolha **AWS eventos ou eventos de EventBridge parceiros**.

   1. Role para baixo até o **Padrão de eventos** e faça o seguinte:

   1. 

      1. Para **Origem do evento**, escolha **Serviços da AWS**.

      1. Em **AWS service (Serviço da AWS)**, escolha **Auto Scaling**.

      1. Em **Event type (Tipo de evento)**, selecione **Instance Launch and Terminate (Inicialização e encerramento de instância)**.

      1. Por padrão, a regra faz a correspondência com qualquer evento de aumento ou redução horizontal da escala. Para criar uma regra que notifique você quando houver um evento de aumento horizontal da escala e uma instância for colocada em estado de espera devido a um gancho do ciclo de vida, escolha**Specific instance event(s)** (Eventos específicos de instância) e selecione **EC2 Instance-launch Lifecycle Action** (Ação do ciclo de vida de inicialização de instância do EC2).

      1. Por padrão, a regra corresponde a qualquer grupo do Auto Scaling na região. Para fazer com que a regra corresponda a um grupo específico do Auto Scaling, escolha **Nome(s) de grupo específico(s)** e selecione o grupo.

      1. Escolha **Próximo**.

1. Em **Select target(s)** (Selecionar destino(s)), faça o seguinte:

   1. Em **Target types** (Tipos de destino), escolha **AWS service (Serviço da AWS)**.

   1. Para **Selecionar um destino**, escolha **Função do Lambda**.

   1. Em **Função**, escolha **LogAutoScalingEvent**.

   1. Escolha **Next** (Próximo) duas vezes.

1. Na página **Revisar e criar**, escolha **Criar regra**.

## Etapa 4: Adicionar um gancho do ciclo de vida
<a name="lambda-add-lifecycle-hook"></a>

Nesta seção, você adicionará um gancho do ciclo de vida para que o Lambda execute sua função em instâncias no início.

**Para adicionar um gancho do ciclo de vida**

1. Abra a página de [grupos do Auto Scaling](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) do console do Amazon EC2.

1. Marque a caixa de seleção ao lado do seu grupo do Auto Scaling. Um painel dividido é aberto na parte inferior da página. 

1. No painel inferior, na guia **Instance management** (Gerenciamento de instâncias), em **Lifecycle ganchos** (Ganchos do ciclo de vida), escolha **Create lifecycle gancho** (Criar gancho do ciclo de vida).

1. Para definir um gancho do ciclo de vida para expansão (execução de instâncias), faça o seguinte:

   1. Em **Lifecycle gancho name** (Nome do gancho do ciclo de vida), insira **LogAutoScalingEvent-hook**.

   1. Em **Lifecycle transition** (Transição do ciclo de vida), escolha **Instance launch** (Início da instância).

   1. Em **Heartbeat timeout** (Tempo limite de pulsação), insira **300** para o número de segundos de espera por um retorno de chamada da sua função do Lambda.

   1. Em **Default result** (Resultado padrão), escolha **ABANDON** (Abandono). Isso significa que o grupo do Auto Scaling terminará uma nova instância se o hook expirar sem receber um retorno de chamada de sua função do Lambda.

   1. (Opcional) Deixe **Notification metadata** (Metados da notificação) vazio. Os dados do evento para os quais passamos EventBridge contêm todas as informações necessárias para invocar a função Lambda.

1. Escolha **Criar**.

## Etapa 5: Testar e verificar o evento
<a name="lambda-testing-hook-notifications"></a>

Para testar o evento, atualize o grupo do Auto Scaling aumentando a capacidade desejada do grupo do Auto Scaling em 1. Sua função do Lambda é invocada dentro de alguns segundos depois do aumento da capacidade desejada.

**Para aumentar o tamanho de grupo do Auto Scalin**

1. Abra a página de [grupos do Auto Scaling](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) do console do Amazon EC2.

1. Marque a caixa de seleção ao lado do seu grupo do Auto Scaling para visualizar detalhes em um painel inferior e ainda ver as linhas superiores do painel superior. 

1. No painel inferior, na guia **Details** (Detalhes), escolha **Group details** (Detalhes do grupo, **Edit** (Editar).

1. Em **Desired capacity (Capacidade desejada)**, aumente o valor atual em 1.

1. Selecione **Atualizar**. Enquanto a instância está sendo iniciada ou terminada, a coluna **Status** no painel superior exibe um status *Updating capacity* (Atualizando capacidade). 

Depois de aumentar a capacidade desejada, você poderá verificar se a sua função do Lambda foi invocada.

**Para visualizar a saída da função do Lambda**

1. Abra a [página Grupos de registros](https://console.aws.amazon.com/cloudwatch/home#logs:) do CloudWatch console.

1. Selecione o nome do grupo de logs para sua função do Lambda (`/aws/lambda/LogAutoScalingEvent`).

1. Selecione o nome do fluxo de logs para visualizar os dados fornecidos pela função para a ação do ciclo de vida.

Em seguida, é possível verificar se a instância foi iniciada com êxito a partir da descrição das atividades de escalabilidade.

**Para visualizar as atividades de escalabilidade**

1. Retorne á página **Auto Scaling groups** (Grupos do Auto Scaling) e selecione seu grupo.

1. Na guia **Activity** (Atividade), em **Activity history** (Histórico de atividades), a coluna **Status** exibe se o seu grupo do Auto Scaling iniciou uma instância com êxito. 
   + Se a ação foi bem-sucedida, a atividade de escalabilidade terá o status “Successful” (Sucesso).
   + Se falhar, depois de esperar alguns minutos, você observará uma atividade de escalabilidade com o status “Cancelled” (Cancelado) e uma mensagem de status "Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result" (Instância falhou ao concluir a ação do ciclo de vida do usuário: ação do ciclo de vida com token e85eb647-4fe0-4909-b341-a6c42EXAMPLE foi abandonada: ação do ciclo de vida concluída com o resultado ABANDONAR).

**Para reduzir o tamanho do grupo do Auto Scaling**  
Se não for necessária a instância adicional iniciada para este teste, você pode abrir a guia **Details** (Detalhes) e reduzir **Desired capacity** (Capacidade desejada) em 1.

## Etapa 6: limpar
<a name="lambda-lifecycle-hooks-tutorial-cleanup"></a>

Se você tiver terminado de trabalhar com os recursos que você criou apenas para este tutorial, use as seguintes etapas para excluí-los.

**Para excluir o gancho do ciclo de vida**

1. Abra a página de [grupos do Auto Scaling](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) do console do Amazon EC2.

1. Marque a caixa de seleção ao lado do seu grupo do Auto Scaling.

1. Na guia **Instance management** (Gerenciamento de instâncias), em **Lifecycle ganchos** (Ganchos do ciclo de vida), escolha o gancho do ciclo de vida (`LogAutoScalingEvent-hook`).

1. Selecione **Ações**, **Excluir**.

1. Para confirmar, escolha **Delete** (Excluir) novamente.

**Para excluir a EventBridge regra da Amazon**

1. Abra a [página de regras](https://console.aws.amazon.com/events/home?#/rules) no EventBridge console da Amazon.

1. Em **Event bus** (Barramento de eventos), escolha o barramento de eventos associado à regra (`Default`).

1. Marque a caixa de seleção ao lado da sua regra (`LogAutoScalingEvent-rule`). 

1. Escolha **Excluir**.

1. Quando for solicitada confirmação, digite o nome da regra e escolha **Excluir**.

Se você tiver terminado de trabalhar com a função de exemplo, exclua-a. Você também pode excluir o grupo de logs que armazena os logs da função e a função de execução e a política de permissões que você criou.

**Para excluir uma função do Lambda**

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

1. Escolha a função (`LogAutoScalingEvent`).

1. Selecione **Ações**, **Excluir**.

1. Quando for solicitada confirmação, digite **delete** para confirmar a exclusão do modelo de execução especificado e, em seguida, escolha **Excluir**.

**Para excluir o grupo de logs**

1. Abra a [página Grupos de registros](https://console.aws.amazon.com/cloudwatch/home#logs:) do CloudWatch console.

1. Selecione o grupo de logs da função (`/aws/lambda/LogAutoScalingEvent`).

1. Selecione **Actions (Ações)**, **Delete log group(s) (Excluir grupo(s) de log)**.

1. Na caixa de diálogo **Delete log group(s)** (Excluir grupo(s) de logs), escolha **Delete** (Excluir).

**Para excluir a função de execução**

1. Abra a página [Roles](https://console.aws.amazon.com/iam/home?#/roles) (Funções) no console do IAM.

1. Selecione o papel da função (`LogAutoScalingEvent-role`).

1. Escolha **Excluir**.

1. Quando for solicitada confirmação, digite o nome da função e escolha **Excluir**.

**Para excluir a política do IAM**

1. Abra a [página Policies](https://console.aws.amazon.com/iam/home?#/policies) (Políticas) do console do IAM.

1. Selecione a política que você criou (`LogAutoScalingEvent-policy`).

1. Selecione **Ações**, **Excluir**.

1. Quando for solicitada confirmação, digite o nome da política e escolha **Excluir**.

## Recursos relacionados
<a name="lambda-lifecycle-hooks-tutorial-related-resources"></a>

Os tópicos relacionados a seguir podem ser úteis à medida que você cria EventBridge regras com base em eventos que acontecem nas instâncias do seu grupo de Auto Scaling.
+ [Use EventBridge para lidar com eventos do Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md). Esta seção mostra exemplos de eventos para outros casos de uso, incluindo eventos para redução.
+ [Adicionar ganchos do ciclo de vida (console)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Este procedimento mostra como adicionar ganchos do ciclo de vida tanto para expansão (execução de instâncias) quanto para redução (instâncias encerrando ou retornando a um pool ativo).

Para ver um tutorial que mostra como usar o serviço de metadados de instância (IMDS) para invocar uma ação de dentro da própria instância, consulte. [Tutorial: Usar script de dados e metadados de instância para recuperar o estado do ciclo de vida](tutorial-lifecycle-hook-instance-metadata.md)