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ê criará uma EventBridge regra da Amazon que inclui um padrão de filtro que, quando correspondido, invoca umaAWS Lambda função do como o 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 fluxo de CloudWatch logs associado à função do 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.

Para obter mais informações sobre o uso EventBridge, consulteUsar EventBridge para lidar com eventos do Auto Scaling.

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 Auto Scaling groups (grupos do Auto Scaling) no console do Amazon EC2 e escolha Create Auto Scaling group (Criar grupo do 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. Escolha 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. Selecione Next: Tags (Próximo: Tags) e, em seguida,Next: Review (Próximo: Análise).

  5. Em Name (Nome), insira LogAutoScalingEvent-policy. Escolha Create policy (Criar política).

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

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

  2. Selecione Create role (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 o nome da política AWSLambdaBasicExecutionRole. Em seguida, escolha Next (Próximo).

    nota

    A AWSLambdaBasicExecutionRolepolítica tem as permissões necessárias para a função gravar CloudWatch logs em 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. O exemplo de função do Lambda, escrito em Node.js, é invocado EventBridge quando um evento correspondente é emitido pelo Amazon EC2 Auto Scaling.

Como 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. Escolha Change default execution role (Alterar a função de execução padrão) e, em Execution role (Função de execução), escolha Use an existing role (Usar uma função existente).

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

  6. Deixe os outros valores padrão.

  7. Escolha Create function (Criar função). Você é retornado ao código e configuração da função.

  8. Com sua função LogAutoScalingEvent ainda aberta no console, em Function code (Código da função), no editor, cole o seguinte código de exemplo no arquivo chamado index.js.

    var aws = require("aws-sdk"); exports.handler = (event, context, callback) => { console.log('LogAutoScalingEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); var autoscaling = new aws.AutoScaling({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; autoscaling.completeLifecycleAction(params, function(err, data) { if (err) { console.log(err, err.stack); // an error occurred response = { statusCode: 500, body: JSON.stringify('ERROR'), }; } else { console.log(data); // successful response response = { statusCode: 200, body: JSON.stringify('SUCCESS'), }; } }); return response; };

    Esse código simplesmente registra o evento para que, no final deste tutorial, você possa ver um evento aparecendo no fluxo de CloudWatch logs que está associado a essa função do Lambda.

  9. Escolha Implantar.

Etapa 3: Criar uma EventBridge regra

Criar uma EventBridge regra para executar a função do Lambda.

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

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

  3. Escolha Create rule (Criar regra).

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

    1. Em Name (Nome), insira LogAutoScalingEvent-rule.

    2. Em Event Bus (Barramento de eventos), escolha default (padrão). Quando um AWS service (Serviço da AWS) em sua conta gerar um evento, ele sempre irá para o barramento de eventos padrão da sua conta.

    3. Em Rule type (Tipo de regra), escolha Rule with an event pattern (Regra com um padrão de evento).

    4. Escolha Next (Próximo).

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

    1. Em Origem do evento, escolha AWSeventos ou eventos EventBridge parceiros.

    2. Em Event pattern (Padrão de evento), faça o seguinte:

      1. Para Event source (Origem do evento), 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 do Auto Scaling específico, escolha Specific group name(s) (Nomes de grupos específicos) e selecione um ou mais grupos do Auto Scaling.

      6. Escolha Next (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 Review and create (Revisar e criar), escolha Create (Criar).

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 Auto Scaling groups (grupos do Auto Scaling) no 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 Auto Scaling groups (Grupos do Auto Scaling).

  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, faça o seguinte:

    1. Em Lifecycle hook 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 do Lambda.

  5. Escolha Create (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 Auto Scaling groups (grupos do Auto Scaling) no 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. Escolha Update (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 de 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: próximas etapas

Agora que você concluiu este tutorial, você pode tentar criar um gancho do ciclo de vida de término. Se as instâncias no grupo do Auto Scaling terminarem, um evento será enviado para EventBridge. Para obter informações sobre o evento que é emitido quando uma instância é terminada, consulte Ação de ciclo de vida de encerramento da instância do EC2.

Etapa 7: 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 Auto Scaling groups (grupos do Auto Scaling) no 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 Actions, Delete.

  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 Delete (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 Actions, Delete.

  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 de grupos de registros do CloudWatch console.

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

  3. Escolha 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 Delete (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 Actions, Delete.

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