Tutorial: Configurar um gancho do ciclo de vida que invoca uma função do Lambda - Amazon EC2 Auto Scaling

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

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 expansão quando você usa uma função Lambda para realizar uma ação personalizada. Depois que uma instância é iniciada, o ciclo de vida da instância é pausado até que o gancho do ciclo de vida seja concluído, seja por meio do tempo limite limite ou pelo Amazon EC2 Auto Scaling recebendo um sinal para continuar.

O fluxo de um evento de expansão quando você usa uma função Lambda para realizar uma ação personalizada.

Pré-requisitos

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 do console do Amazon EC2 e escolha Criar grupo de Auto Scaling.

Etapa 1: criar uma função do IAM com permissões para concluir ações de ciclo de vida

Antes de criar uma função do Lambda, você deve 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 (Políticas) do console do IAM e escolha Create policy (Criar política).

  2. Selecione a guia JSON.

  3. Na caixa Policy Document (Documento da política), cole o documento de política a seguir na caixa, substituindo o texto em itálico pelo o número de conta e o nome do grupo do Auto Scaling.

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

  5. Em Nome da política, insira LogAutoScalingEvent-policy. Escolha Criar política.

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

Para criar a função
  1. No painel de navegação à esquerda, escolha Roles (Funções).

  2. Selecione Criar função.

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

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

  5. 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 AWSLambdaBasicExecutionRolepolítica tem as permissões que a função precisa para gravar registros em CloudWatch Logs.

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

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) no console do Lambda.

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

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

  4. Em Runtime, selecione Node.js 18.x.

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

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

  7. Deixe os outros valores padrão.

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

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

  10. Escolha Implantar.

Etapa 3: criar uma EventBridge regra

Crie uma EventBridge regra para executar sua função Lambda. Para obter mais informações sobre o uso EventBridge, consulteUse EventBridge para lidar com eventos do Auto Scaling.

Como criar uma regra usando o console
  1. Abra o console de EventBridge.

  2. No painel de navegação, escolha Regras.

  3. Escolha Criar Regra.

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

    1. Em Nome, digite LogAutoScalingEvent-rule.

    2. Em Event Bus (Barramento de eventos), escolha default (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.

    3. Em Tipo de Regra, escolha Regra com Padrão de Evento.

    4. Escolha Próximo.

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

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

      1. Em Event source, escolha Serviços da AWS.

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

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

      4. 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, escolhaSpecific instance event(s) (Eventos específicos de instância) e selecione EC2 Instance-launch Lifecycle Action (Ação de ciclo de vida de inicialização de instância do EC2).

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

      6. Escolha Próximo.

  6. 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).

    2. Em Select a target (Selecionar um destino), escolha Lambda function (Função do Lambda).

    3. Em Função, escolha LogAutoScalingEvent.

    4. Escolha Next (Próximo) duas vezes.

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

Etapa 4: Adicionar um gancho do ciclo de vida

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 de ciclo de vida
  1. Abra a página de grupos do Auto Scaling do console do Amazon EC2.

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

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

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

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

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

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

    5. (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.

  5. Escolha Criar.

Etapa 5: Testar e verificar o evento

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 do console do Amazon EC2.

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

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

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

  5. 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 do CloudWatch console.

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

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

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

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 do console do Amazon EC2.

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

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

  4. Escolha Ações, Excluir.

  5. Para confirmar, escolha Delete (Excluir) novamente.

Para excluir a EventBridge regra da Amazon
  1. Abra a página de regras no EventBridge console da Amazon.

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

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

  4. Escolha Excluir.

  5. 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) no console do Lambda.

  2. Escolha a função (LogAutoScalingEvent).

  3. Escolha Ações, Excluir.

  4. 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 do CloudWatch console.

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

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

  4. 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 (Funções) no console do IAM.

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

  3. Escolha Excluir.

  4. 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 (Políticas) do console do IAM.

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

  3. Escolha Ações, Excluir.

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

Os tópicos relacionados a seguir podem ser úteis ao criar EventBridge regras com base em eventos que acontecem nas instâncias do seu grupo de Auto Scaling.

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: use o script de dados e os metadados da instância para recuperar o estado do ciclo de vida