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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

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

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

重要

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

将通知路由到 Lambda 使用 EventBridge

您可以使用 EventBridge 要设置目标以调用A Lambda 生命周期操作发生时的功能。

使用 设置通知EventBridge

  1. 创建 Lambda 功能使用 创建 Lambda 函数 并注意其亚马逊资源名称(ARN)。例如:arn:aws-cn:lambda:region:123456789012:function:my-function.

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

    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. 授予调用您的 Lambda 功能使用以下内容 add-permission 命令。此命令信任 EventBridge 服务负责人(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. 创建调用您的 Lambda 生命周期操作发生时的功能,使用以下内容 put-targets 命令。

    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. 创建 Amazon SNS 主题 create-topic 命令。有关详细信息,请参阅 创建主题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. 在导航窗格中,选择 角色创建新角色.

    3. 下方 选择可信任实体类型,选择 AWS服务.

    4. 下方 选择将使用此角色的服务,选择 EC2自动缩放 从列表中。

    5. 下方 选择您的使用情形,选择 EC2自动扩展通知访问,然后选择 下一步:权限.

    6. 选择 下一步:标签. (可选)您可以通过以键/值对的形式附加标签来向角色添加元数据。Thenchoose 下一步:回顾.

    7. 审核 页面,输入角色的名称(例如,我的通知角色),然后选择 创建角色.

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

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

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

  • LifecycleActionToken — LifecycleAction令牌。

  • AccountId — AWS帐户ID。

  • AutoScalingGroupName — 姓名 Auto Scaling 组。

  • LifecycleHookName — LifecycleHook的名称。

  • 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 SQSAmazon Simple Queue Service 开发人员指南. 记下目标的 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. 在导航窗格中,选择 角色创建新角色.

    3. 下方 选择可信任实体类型,选择 AWS服务.

    4. 下方 选择将使用此角色的服务,选择 EC2自动缩放 从列表中。

    5. 下方 选择您的使用情形,选择 EC2自动扩展通知访问,然后选择 下一步:权限.

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

    7. 审核 页面,输入角色的名称(例如,我的通知角色),然后选择 创建角色.

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

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

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