自动在 EC2 实例上运行操作以响应 AWS Health 中的事件
您可以针对 Amazon EC2 实例,通过自动化操作来响应新的计划事件。当 AWS Health 向您的 AWS 账户发送事件时,EventBridge 规则可以调用目标(如 AWS Systems Manager 自动化文档),由此代表您自动执行操作。
例如,当为由 Amazon Elastic Block Store (Amazon EBS) 支持的 EC2 实例安排 Amazon EC2 实例停用事件时,AWS Health 会将 AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED
事件类型发送到您的 AWS Health 控制面板。当规则检测到此事件类型后,您可以自动停止和启动实例。这样,将不必手动执行这些操作。
注意
为自动执行 Amazon EC2 实例操作,必须通过 Systems Manager 管理这些实例。
有关更多信息,请参阅《Amazon EC2 用户指南》中的使用 EventBridge 自动执行 Amazon EC2。
先决条件
创建规则之前,必须先创建 AWS Identity and Access Management (IAM) 策略、创建 IAM 角色以及更新角色的信任策略。
按照此步骤为您的角色创建客户管理型策略。此策略授予角色代表您执行操作的权限。此过程使用 IAM 控制台中的 JSON 策略编辑器。
创建 IAM policy
登录到 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择策略。
-
选择创建策略。
-
选择 JSON 选项卡。
-
复制以下 JSON,然后替换编辑器中的默认 JSON。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:DescribeInstanceStatus" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ssm:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:*:*:Automation*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::
123456789012
:role/AutomationEVRole
" } ] }-
在
Resource
参数中,在 Amazon 资源名称 (ARN) 中输入 AWS 账户 ID。 -
您也可以替换角色名称或使用默认名称。此示例使用
AutomationEVRole
。
-
-
选择下一步:标签。
-
(可选)您可以使用标签作为键值对将元数据添加到策略。
-
选择 下一步: 审核。
-
在 查看策略页面上,输入 名称,如
AutomationEVRolePolicy
和可选 描述。 -
查看 Summary(摘要)页面,以查看策略允许的权限。如果您对策略感到满意,请选择 创建策略。
此策略定义角色可以执行的操作。有关更多信息,请参阅《IAM 用户指南》中的创建 IAM policy(控制台)。
创建策略后,您必须创建 IAM 角色,并将策略附加到此角色。
为 AWS 服务创建角色
登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择 Roles(角色),然后选择 Create role(创建角色)。
-
对于Select type of trusted entity(选择受信任实体的类型),选择 AWS service(服务)。
-
对于您希望允许其承担此角色的服务,选择 EC2。
-
选择下一步: 权限。
-
输入您创建的策略名称,如
AutomationEVRolePolicy
,然后选中策略旁边的复选框。 -
选择下一步:标签。
-
(可选)您可以使用标签作为键值对将元数据添加到角色。
-
选择 下一步: 审核。
-
在 角色名称中,输入
AutomationEVRole
。此名称必须与您创建的 IAM policy 的 ARN 中显示的名称相同。 -
(可选)对于 Role description(角色描述),输入角色的描述。
-
检查角色,然后选择创建角色。
有关更多信息,请参阅《IAM 用户指南》中的创建用于 AWS 服务的角色。
最后,您可以更新所创建角色的信任策略。您必须完成此过程,才能在 EventBridge 控制台中选择此角色。
要更新该角色的信任策略
登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择角色。
-
在 AWS 账户的角色列表中,选择您创建的角色名称,如
AutomationEVRole
。 -
选择 信任关系 选项卡,然后选择 编辑信任关系。
-
对于 Policy Document,复制以下 JSON,删除默认策略,然后将复制的 JSON 粘贴到所在位置。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ssm.amazonaws.com", "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
选择更新信任策略。
有关更多信息,请参阅 IAM 用户指南中的修改角色信任策略(控制台)。
为 EventBridge 创建规则
按照此程序在 EventBridge 控制台中创建规则,以便自动停止和启动计划停用的 EC2 实例。
为 EventBridge 创建 Systems Manager 自动化操作规则
访问 https://console.aws.amazon.com/events/
,打开 Amazon EventBridge 控制台。 -
在导航窗格中的 Events(事件)下,选择 Rules(规则)。
-
在 创建规则页面上,输入规则的 名称 和 描述。
-
在 Define pattern(定义模式)下,选择 Event pattern(事件模式),然后选择 Pre-defined pattern by service(按服务预定义的模式)。
-
对于 Service provider(服务提供商),选择 AWS。
-
对于 服务名称,选择 运行状况。
-
对于 事件类型,选择 特定运行状况事件。
-
选择 特定服务,然后选择 EC2。
-
选择 特定事件类型类别,然后选择 scheduledChange。
-
选择 特定事件类型代码,然后选择事件类型代码。
例如,对于由 Amazon EC2 EBS 支持的实例,选择
。对于由 Amazon EC2 实例存储支持的实例,选择AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED
。AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED
-
选择 Any resource(任何资源)。
您的 事件模式类似于以下示例。
{ "source": [ "aws.health" ], "detail-type": [ "AWS Health Event" ], "detail": { "service": [ "EC2" ], "eventTypeCategory": [ "scheduledChange" ], "eventTypeCode": [ "AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED" ] } }
-
添加 Systems Manager Automation 文档目标。在 选择目标下,对于 目标,选择 SSM Automation。
-
对于 Document(文档),选择
AWS-RestartEC2Instance
。 -
展开 配置自动化参数,然后选择 输入转换器。
-
在 输入路径字段中输入
。{"Instances":"$.resources"}
-
对于第二个字段,输入
。{"InstanceId": <Instances>}
-
选择 使用现有角色,然后选择您创建的 IAM 角色,如
AutomationEVRole
。您的目标应类似于以下示例。
注意
如果没有具备所需 EC2 和 Systems Manager 权限以及信任关系的现有 IAM 角色,则角色将不会显示在列表中。有关更多信息,请参阅 先决条件。
-
选择创建。
如果您的账户中发生符合规则的事件,EventBridge 会将事件发送到指定目标。