Preparar para adicionar um gancho do ciclo de vida a um grupo do Auto Scaling - Amazon EC2 Auto Scaling

Preparar para adicionar um gancho do ciclo de vida a um grupo do Auto Scaling

Antes de adicionar um gancho do ciclo de vida ao grupo do Auto Scaling, certifique-se de que o script de dados do usuário ou o destino de notificação esteja configurado corretamente.

  • Não é necessário configurar um destino de notificação para usar um script de dados do usuário a fim de executar ações personalizadas em suas instâncias enquanto elas estão sendo iniciadas. No entanto, você já deverá ter criado o modelo de execução ou a configuração de execução que especifica o script de dados do usuário e associado ao seu grupo do Auto Scaling. Para obter mais informações sobre scripts de dados do usuário, consulte Executar comandos na instância do Linux na inicialização no Guia do usuário do Amazon EC2 para instâncias do Linux.

  • Para sinalizar ao Amazon EC2 Auto Scaling quando a ação do ciclo de vida estiver concluída, adicione a chamada de API CompleteLifecycleAction ao script. Você também deve criar manualmente um perfil do IAM com uma política que permita que as instâncias do Auto Scaling chamem essa API. Seu modelo de execução ou configuração de execução deve especificar essa função usando um perfil de instância do IAM que é anexado às suas instâncias do Amazon EC2 na inicialização. Para obter mais informações, consulte Concluir uma ação do ciclo de vida em um grupo do Auto Scaling e Perfis do IAM para aplicações que são executadas em instâncias do Amazon EC2.

  • Para permitir que o Lambda sinalize o Amazon EC2 Auto Scaling quando a ação do ciclo de vida estiver concluída, será necessário adicionar a chamada de API CompleteLifecycleAction para o código da função. Você também deve ter anexado uma política do IAM à função de execução da função que concede permissão ao Lambda para concluir ações do ciclo de vida. Para obter mais informações, consulte Tutorial: Configurar um gancho do ciclo de vida que invoca uma função do Lambda.

  • Para usar um serviço como um Amazon SNS ou Amazon SQS para executar uma ação personalizada, você já deverá ter criado o tópico do SNS ou a fila do SQS e ter pronto o nome do recurso da Amazon (ARN). Você também já deverá ter criado o perfil do IAM que concede ao Amazon EC2 Auto Scaling acesso ao tópico do SNS ou ao destino do SQS e ter pronto o ARN. Para obter mais informações, consulte Configurar um destino de notificação para notificações do ciclo de vida.

    nota

    Por padrão, quando você adiciona um gancho do ciclo de vida no console, o Amazon EC2 Auto Scaling envia notificações de eventos do ciclo de vida para o Amazon EventBridge. Usar o EventBridge ou um script de dados do usuário é uma prática recomendada. Para criar um gancho do ciclo de vida que envie notificações diretamente para o Amazon SNS, Amazon SQS ou AWS Lambda, use a AWS CLI, o AWS CloudFormation ou um SDK para adicionar o gancho do ciclo de vida.

Configurar um destino de notificação para notificações do ciclo de vida

Você pode adicionar ganchos do ciclo de vida a um grupo do Auto Scaling para executar ações personalizadas sempre que uma instância entrar em um estado de espera. Você pode escolher um serviço de destino para executar essas ações dependendo de sua abordagem de desenvolvimento preferida.

Há quatro abordagens diferentes para implementar destinos de notificação para ganchos do ciclo de vida:

  • Amazon EventBridge: recebe as notificações e executa as ações que você deseja.

  • Amazon Simple Notification Service (Amazon SNS): cria um tópico para publicar notificações. Os clientes podem se inscrever no tópico do SNS e receber mensagens publicadas usando um protocolo compatível.

  • Amazon Simple Queue Service (Amazon SQS): troca mensagens por meio de um modelo de pesquisa.

  • AWS Lambda: invoca uma função do Lambda que executa a ação desejada.

Como prática recomendada, sugerimos que você use o EventBridge. As notificações enviadas para o Amazon SNS e o Amazon SQS contêm as mesmas informações que as notificações que o Amazon EC2 Auto Scaling envia para o EventBridge. Antes do EventBridge, a prática padrão era enviar uma notificação para o SNS ou o SQS e integrar outro serviço com o SNS ou o SQS para executar ações programáticas. Atualmente, o EventBridge oferece mais opções para quais serviços você pode destinar e facilita o controle de eventos usando arquitetura sem servidor.

Lembre-se de que, se você tiver um script de dados do usuário no modelo de execução ou uma configuração de execução que configure suas instâncias quando forem iniciadas, você não precisa receber notificações para executar ações personalizadas em suas instâncias.

Os procedimentos a seguir abordam como configurar seu destino de notificação.

Importante

A regra do EventBridge, a função do Lambda, o tópico do Amazon SNS e a fila do Amazon SQS que você usa com ganchos do ciclo de vida devem estar sempre na mesma região onde você criou seu grupo do Auto Scaling.

Encaminhar notificações para o Lambda usando EventBridge

Você pode configurar uma regra do EventBridge para chamar uma função do Lambda quando uma instância entra em um estado de espera. O Amazon EC2 Auto Scaling emite uma notificação de eventos do ciclo de vida para o EventBridge sobre a instância que está sendo iniciada ou terminada e um token que você pode usar para controlar a ação do ciclo de vida. Para obter exemplos desses eventos, consulte Referência de eventos do Amazon EC2 Auto Scaling.

nota

Quando você usa o Console de gerenciamento da AWS para criar uma regra de evento, o console adiciona automaticamente as permissões do IAM necessárias para conceder ao EventBridge permissão para chamar sua função do Lambda. Caso esteja criando uma regra de evento usando a AWS CLI, você precisa conceder essa permissão explicitamente.

Para obter informações sobre como criar regras de eventos no console do EventBridge, consulte Criar regras do Amazon EventBridge que reajam a eventos no Guia do usuário do Amazon EventBridge.

- ou -

Para um tutorial introdutório direcionado a usuários do console, consulte Tutorial: Configurar um gancho do ciclo de vida que invoca uma função do Lambda. Esse tutorial mostra como criar uma função simples do Lambda que escute eventos de inicialização e os grave em um log do CloudWatch Logs.

Para criar uma regra do EventBridge para invocar uma função do Lambda
  1. Crie uma função do Lambda usando o console do Lambda e observe seu nome de recurso da Amazon (ARN). Por exemplo, arn:aws:lambda:region:123456789012:function:my-function. Você precisa do ARN para criar um destino do EventBridge. Para obter mais informações, consulte Conceitos básicos do Lambda no Guia do desenvolvedor do AWS Lambda.

  2. Para criar uma regra que faça a correspondência com eventos para inicialização de instâncias, use o seguinte comando put-rule.

    aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED

    O exemplo a seguir mostra o pattern.json de uma ação do ciclo de vida de execício ução de instância. Substitua o texto em itálico pelo nome do grupo do Auto Scaling.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-launch Lifecycle Action" ], "detail": { "AutoScalingGroupName": [ "my-asg" ] } }

    Se o comando for executado com êxito, o EventBridge responderá com o ARN da regra. Anote esse ARN. Você vai precisar dele na etapa 4.

    Para criar uma regra que faça a correspondência com outros eventos, modifique o padrão de evento. Para obter mais informações, consulte Usar o EventBridge para lidar com eventos do Auto Scaling.

  3. Para especificar a função do Lambda a ser usada como destino para a regra, use o seguinte comando put-targets.

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function

    No comando anterior, my-rule é o nome que você especificou para a regra na etapa 2, enquanto o valor para o parâmetro Arn é o ARN da função que você criou na etapa 1.

  4. Para adicionar permissões que deixem a regra invocar sua função do Lambda, use o seguinte comando add-permission do Lambda. Esse comando confia na entidade principal do serviço do EventBridge (events.amazonaws.com) e nas permissões de escopo para a regra especificada.

    aws lambda add-permission --function-name my-function --statement-id my-unique-id \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule

    No comando anterior:

    • my-function é o nome da função do Lambda que deseja que a regra use como destino.

    • my-unique-id é um identificador exclusivo que você define para descrever a instrução na política de função do Lambda.

    • source-arn é o ARN da regra do EventBridge.

    Se o comando for executado com êxito, você receberá um resultado semelhante a este.

    { "Statement": "{\"Sid\":\"my-unique-id\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}" }

    O valor de Statement é uma versão da string JSON da instrução adicionada à política da função do Lambda.

  5. Depois que você tiver seguido estas instruções, prossiga para Preparar para adicionar um gancho do ciclo de vida a um grupo do Auto Scaling como próxima etapa.

Receba notificações usando o Amazon SNS

Você pode usar o Amazon SNS para configurar um destino de notificação (um tópico do SNS) para receber notificações quando ocorrer uma ação do ciclo de vida. Em seguida, o Amazon SNS envia as notificações para os destinatários inscritos. Até que a inscrição seja confirmada, nenhuma notificação publicada no tópico é enviada para os destinatários.

Para configurar notificações usando o Amazon SNS
  1. Crie um tópico do Amazon SNS usando o console do Amazon SNS ou o seguinte comando create-topic. Verifique se o tópico está na mesma região do grupo do Auto Scaling que você está usando. Para obter mais informações, consulte Conceitos básicos do Amazon SNS no Guia do desenvolvedor do Amazon Simple Notification Service.

    aws sns create-topic --name my-sns-topic
  2. Observe o nome de recurso da Amazon (ARN) do tópico, por exemplo, arn:aws:sns:region:123456789012:my-sns-topic. Você precisa dele para criar o gancho do ciclo de vida.

  3. Crie uma função de serviço do IAM para dar ao Amazon EC2 Auto Scaling acesso ao seu destino de notificação do Amazon SNS.

    Para dar ao Amazon EC2 Auto Scaling acesso ao seu tópico do SNS

    1. Abra o console do IAM, em https://console.aws.amazon.com/iam/.

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

    3. Selecione Criar perfil.

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

    5. Para seu caso de uso, em Use cases for other AWS services (Casos de uso de outros produtos), escolha EC2 Auto Scaling e depois EC2 Auto Scaling Notification Access (Acesso à notificação do EC2 Auto Scaling).

    6. Escolha Next (Próximo) duas vezes para ir até a página Name, review, and create (Nomear, revisar e criar).

    7. Em Role name (Nome da função), insira um nome para a função (por exemplo, my-notification-role) e escolha Create role (Criar função).

    8. Na página Roles (Funções), escolha a função recém-criada para abrir a página Summary (Resumo). Anote o Role ARN (ARN da função). Por exemplo, arn:aws:iam::123456789012:role/my-notification-role. Você precisa dele para criar o gancho do ciclo de vida.

  4. Depois que você tiver seguido estas instruções, prossiga para Adicionar ganchos do ciclo de vida (AWS CLI) como próxima etapa.

Receba notificações usando o Amazon SQS

Você pode usar o Amazon SQS para configurar um destino de notificação para receber notificações quando ocorrer uma ação do ciclo de vida. Um consumidor da fila deve sondar uma fila do SQS para agir nessas notificações.

Importante

As filas FIFO não são compatíveis com ganchos do ciclo de vida.

Para configurar notificações usando o Amazon SQS
  1. Crie uma fila do Amazon SQS usando o console do Amazon SQS. Verifique se a fila está na mesma região do grupo do Auto Scaling que você está usando. Para obter mais informações, consulte Conceitos básicos do Amazon SQS no Guia do desenvolvedor do Amazon Simple Queue Service.

  2. Observe o ARN da fila, por exemplo, arn:aws:sqs:us-west-2:123456789012:my-sqs-queue. Você precisa dele para criar o gancho do ciclo de vida.

  3. Crie uma função de serviço do IAM para dar ao Amazon EC2 Auto Scaling acesso ao seu destino de notificação do Amazon SQS.

    Para dar ao Amazon EC2 Auto Scaling acesso à sua fila do SQS

    1. Abra o console do IAM, em https://console.aws.amazon.com/iam/.

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

    3. Selecione Criar perfil.

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

    5. Para seu caso de uso, em Use cases for other AWS services (Casos de uso de outros produtos), escolha EC2 Auto Scaling e depois EC2 Auto Scaling Notification Access (Acesso à notificação do EC2 Auto Scaling).

    6. Escolha Next (Próximo) duas vezes para ir até a página Name, review, and create (Nomear, revisar e criar).

    7. Em Role name (Nome da função), insira um nome para a função (por exemplo, my-notification-role) e escolha Create role (Criar função).

    8. Na página Roles (Funções), escolha a função recém-criada para abrir a página Summary (Resumo). Anote o Role ARN (ARN da função). Por exemplo, arn:aws:iam::123456789012:role/my-notification-role. Você precisa dele para criar o gancho do ciclo de vida.

  4. Depois que você tiver seguido estas instruções, prossiga para Adicionar ganchos do ciclo de vida (AWS CLI) como próxima etapa.

Encaminhamento de notificações diretamente para AWS Lambda

É possível usar uma função do Lambda como destino de notificação quando ocorrer uma ação do ciclo de vida.

Para encaminhar notificações diretamente para AWS Lambda
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Escolha a função do Lambda que você deseja.

    Se você quiser criar uma nova função do Lambda, consulte Criar a função do Lambda

  3. Escolha a guia Configuração e, em seguida, Permissões.

  4. Role para baixo até Resource-based policy (Política baseada em recurso) e, em seguida, escolha Add permissions (Adicionar permissões). Uma política baseada em recurso é usada para conceder permissões para invocar sua função no principal que é especificado na política. Neste caso, o principal será o perfil vinculado ao serviço do Amazon EC2 Auto Scaling que está associada ao grupo do Auto Scaling.

  5. Na seção Policy statement (Declaração da política), configure suas permissões:

    1. Selecione Conta da AWS.

    2. Em Principal insira o ARN da função vinculada a serviço de chamada, por exemplo, arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling.

    3. Em Action (Ação), escolha lambda:InvokeFunction.

    4. Em Statement ID (ID da instrução), insira um ID de instrução exclusivo, como AllowInvokeByAutoScaling.

    5. Escolha Salvar.

  6. Depois que você tiver seguido estas instruções, prossiga para Adicionar ganchos do ciclo de vida (AWS CLI) como próxima etapa.

Exemplo de mensagem de notificação

Esta seção fornece um exemplo de notificação para o Amazon SNS, o Amazon SQS e o AWS Lambda.

Enquanto a instância estiver em um estado de espera, uma mensagem será publicada no destino de notificação do Amazon SNS, do Amazon SQS ou do AWS Lambda.

A mensagem inclui as seguintes informações:

  • Origin: um local de onde está vindo uma instância do EC2.

  • Destination: um local para onde uma instância do EC2 está indo.

  • LifecycleActionToken — O token da ação do ciclo de vida.

  • AccountId: o ID da Conta da AWS.

  • AutoScalingGroupName: o nome do grupo do Auto Scaling.

  • LifecycleHookName — O nome do gancho do ciclo de vida.

  • EC2InstanceId — A ID da instância do EC2.

  • LifecycleTransition — O tipo de gancho do ciclo de vida.

  • NotificationMetadata: os metadados da notificação.

Veja a seguir um exemplo de mensagem de notificação.

Service: AWS Auto Scaling Time: 2021-01-19T00:36:26.533Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Origin: EC2 Destination: AutoScalingGroup LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: hook message metadata

Exemplo de mensagem de notificação de teste

Quando você adiciona um gancho do ciclo de vida, uma mensagem de notificação de teste é publicada no destino de notificação. Veja a seguir um exemplo de mensagem de notificação de teste.

Service: AWS Auto Scaling Time: 2021-01-19T00:35:52.359Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Event: autoscaling:TEST_NOTIFICATION AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
nota

Para obter exemplos dos eventos do Amazon EC2 Auto Scaling entregues ao EventBridge, consulte Referência de eventos do Amazon EC2 Auto Scaling.