为 Amazon EC2 Auto Scaling 生命周期挂钩配置通知 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 Amazon EC2 Auto Scaling 生命周期挂钩配置通知

您可以向 Auto Scaling 组添加生命周期挂钩,该挂钩在实例进入等待状态时触发通知。您可以出于各种原因配置这些通知,例如,用于调用 Lambda 函数或接收电子邮件通知以便执行自定义操作。本主题介绍如何使用 Amazon CloudWatch Events、Amazon SNS 和 Amazon SQS 配置通知。选择您喜好的选项。或者,如果您拥有在实例启动时配置实例的脚本,则无需在生命周期操作发生时接收通知。

重要

用于通知的 AWS 资源必须始终在您在其中创建生命周期挂钩的同一个 AWS 区域中创建。例如,如果您使用 Amazon SNS 配置通知,Amazon SNS 主题必须与您的生命周期挂钩位于同一个区域中。

使用 CloudWatch Events 将通知路由到 Lambda

您可以使用 CloudWatch Events 设置一个目标以在生命周期操作发生时调用 Lambda 函数。

使用 CloudWatch Events 设置通知

  1. 使用 创建 Lambda 函数 中的步骤创建 Lambda 函数,并记下其 Amazon 资源名称 (ARN)。例如:arn:aws-cn:lambda:region:123456789012:function:my-function

  2. 使用以下 put-rule 命令创建一个与生命周期操作匹配的 CloudWatch Events 规则。

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

    以下示例显示了实例启动生命周期操作的 pattern.json

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

    以下示例显示了实例终止生命周期操作的 pattern.json

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-terminate Lifecycle Action" ] }
  3. 使用以下 add-permission 命令为该规则授予调用 Lambda 函数的权限。此命令信任 CloudWatch Events 服务委托人 (events.amazonaws.com),并将权限范围划定为指定规则。

    aws lambda add-permission --function-name LogScheduledEvent --statement-id my-scheduled-event \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws-cn:events:region:123456789012:rule/my-scheduled-rule
  4. 使用以下 put-targets 命令创建一个目标,它在执行生命周期操作时调用 Lambda 函数。

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws-cn:lambda:region:123456789012:function:my-function
  5. 在遵循以上说明操作后,继续添加生命周期挂钩 作为下一步。

当 Auto Scaling 组响应扩展或收缩事件时,它将实例置于等待状态。当实例处于等待状态时,Lambda 函数将被调用。有关事件数据的更多信息,请参阅 Auto Scaling 事件

使用 Amazon SNS 接收通知

您可以使用 Amazon SNS 设置通知目标以便在生命周期操作开始时接收通知。

使用 Amazon SNS 设置通知

  1. 使用以下 create-topic 命令创建 Amazon SNS 主题。有关更多信息,请参阅Amazon Simple Notification Service 开发人员指南中的创建主题

    aws sns create-topic --name my-sns-topic

    记下目标的 ARN(例如 arn:aws-cn:sns:region:123456789012:my-sns-topic)。

  2. 为 Amazon EC2 Auto Scaling 创建服务角色(或代入角色),您可以为其授予访问通知目标的权限。

    要创建 IAM 角色并允许 Amazon EC2 Auto Scaling 担任该角色

    1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

    2. 在导航窗格中,选择 RolesCreate new role

    3. 选择受信任实体的类型下,选择 AWS 服务

    4. 选择将使用此角色的服务下,选择 EC2 Auto Scaling

    5. 选择您的使用案例下,选择 EC2 Auto Scaling Notification Access (EC2 Auto Scaling 通知访问),然后选择 Next:Permissions (下一步:权限)

    6. 选择 Next:Tags (下一步: 标签)。(可选)您可以通过以键/值对的形式附加标签来向角色添加元数据。然后选择 Next:Review (下一步:审核)

    7. Review (审核) 页面上,输入角色的名称(例如,my-notification-role),然后选择 Create role (创建角色)

    8. Roles (角色) 页面中,选择刚刚创建的角色以打开 Summary (摘要) 页面。记录角色 ARN。例如:arn:aws-cn:iam::123456789012:role/my-notification-role。您将在下一步中创建生命周期挂钩时指定角色 ARN。

  3. 在遵循以上说明操作后,继续添加生命周期挂钩 (AWS CLI) 作为下一步。

当 Auto Scaling 组响应扩展或收缩事件时,它将实例置于等待状态。当实例处于等待状态时,将向通知目标发布消息。消息包含以下事件数据:

  • LifecycleActionToken — 生命周期操作令牌。

  • AccountId — AWS 账户 ID。

  • AutoScalingGroupName — Auto Scaling 组的名称。

  • LifecycleHookName — 生命周期挂钩的名称。

  • EC2InstanceId — EC2 实例的 ID。

  • LifecycleTransition — 生命周期挂钩类型。

以下是通知消息示例。

Service: AWS Auto Scaling Time: 2019-04-30T20:42:11.305Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: null

使用 Amazon SQS 接收通知

您可以使用 Amazon SQS 设置通知目标以便在生命周期操作开始时接收通知。

重要

FIFO 队列与生命周期挂钩不兼容。

使用 Amazon SQS 设置通知

  1. 使用 Amazon SQS 创建目标。有关更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的 Amazon SQS 入门。记下目标的 ARN(例如 arn:aws-cn:sqs:region:123456789012:my-sqs-queue)。

  2. 为 Amazon EC2 Auto Scaling 创建服务角色(或代入 角色),您可以为其授予访问通知目标的权限。

    要创建 IAM 角色并允许 Amazon EC2 Auto Scaling 担任该角色

    1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

    2. 在导航窗格中,选择 RolesCreate new role

    3. 选择受信任实体的类型下,选择 AWS 服务

    4. 选择将使用此角色的服务下,选择 EC2 Auto Scaling

    5. 选择您的使用案例下,选择 EC2 Auto Scaling Notification Access (EC2 Auto Scaling 通知访问),然后选择 Next:Permissions (下一步:权限)

    6. 选择 Next:Tags (下一步: 标签)。(可选)您可以通过以键/值对的形式附加标签来向角色添加元数据。然后选择 Next:Review (下一步:审核)

    7. Review (审核) 页面上,输入角色的名称(例如,my-notification-role),然后选择 Create role (创建角色)

    8. Roles (角色) 页面中,选择刚刚创建的角色以打开 Summary (摘要) 页面。记录角色 ARN。例如:arn:aws-cn:iam::123456789012:role/my-notification-role。您将在下一步中创建生命周期挂钩时指定角色 ARN。

  3. 在遵循以上说明操作后,继续添加生命周期挂钩 (AWS CLI) 作为下一步。

当 Auto Scaling 组响应扩展或收缩事件时,它将实例置于等待状态。当实例处于等待状态时,将向通知目标发布消息。