跳至内容

如何使用 Systems Manager Maintenance Windows 安排我的 EC2 实例的启动和停止?

2 分钟阅读
0

我想使用 Maintenance Windows(AWS Systems Manager 的一项功能)来安排 Amazon Elastic Compute Cloud (Amazon EC2) 实例的启动或停止。

简短描述

要安排实例启动或停止,请将 AWS-StartEC2Instance 或 AWS-StopEC2Instance 运行手册注册到维护时段。您必须具有运行该运行手册所需的权限。

**注意:**当您使用 Automation(AWS Systems Manager 的一项功能)来运行运行手册时,您的实例不必是托管实例。

要在实例停止后立即重启实例,请在同一个维护时段内同时设置停止和启动任务。要让您的实例在启动前的预定时间内停止运行,请将每项任务设置到单独的维护时段。

解决方法

使用具有运行手册所需权限的 IAM 角色

要为启动或停止操作安排维护时段,您必须使用具有运行运行手册所需权限的 AWS Identity and Access Management (IAM) 角色。IAM 角色仅需要您在维护时段中注册的 Systems Manager 运行手册的权限。例如,如果您选择注册 AWS-StartEC2Instance 而不是 AWS-StopEC2Instance,那么 IAM 角色只需要 ec2:StartInstances 权限。

如果您的 IAM 角色没有所需权限,请创建 IAM 角色。创建时,对于 Service or use case(服务或使用案例),选择 Systems Manager,或使用现有的 Systems Manager 角色。然后,向该角色添加以下权限策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:StartAutomationExecution",
        "ec2:DescribeInstanceStatus"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances"
      ],
      "Resource": "arn:aws:ec2:example_region:example_account_number:instance/example_instance_ID"
    }
  ]
}

**注意:**将 example_region 替换为您的 AWS 区域。将 example_account_number 替换为您的 AWS 账号。将 example_instance_ID 替换为您的实例的 ID 号。您可以添加多个 ARN,用逗号分隔。以下示例将两个 ARN 命名为资源:

"Resource": "arn:aws:ec2:example_region:example_account_number:instance/example_instance_ID_1", "arn:aws:ec2:example_region:example_account_number:instance/example_instance_ID_2"

**重要事项:**对于 ec2: StartInstances 和 ec2: StopInstances,最佳做法是添加您想要提供访问权限的实例的资源 ARN。有关更多信息,请参阅策略语法。如果您使用 AWS Key Management Service 密钥加密了实例中的卷,则将该密钥的权限也添加到您的角色中。有关更多信息,请参阅当我启动附加了加密卷的 Amazon EC2 实例时,为什么会收到 "client error on launch" 错误?

创建维护时段

如果您没有维护时段,请创建一个维护时段。在维护时段中,在任务优先级字段中对任务进行排序,将 0 作为最高优先级。如果已有维护时段,请继续注册自动化任务。

要在维护时段注册目标,请选择手动选择实例或选择资源组选项作为目标选项。要在尚未注册为目标的托管实例上运行维护时段,必须选择允许未注册的目标。请勿选择指定实例标签作为目标选项。

有关更多信息,请参阅使用控制台为维护时段分配目标。

注册自动化任务

完成以下步骤:

  1. 打开 Systems Manager 控制台。
  2. 在导航窗格中,选择 Maintenance Windows(维护时段)。
  3. 在维护时段列表中,选择目标维护时段。
  4. 选择 Actions(操作),然后选择 Register Automation task(注册自动化任务)。
  5. (可选)对于 Maintenance window task details(维护时段任务详细信息),输入名称和描述。
  6. 对于 Automation document(自动化文档),选择 AWS-StartEC2Instance 或 AWS-StopEC2Instance。
  7. 对于 Document version(文档版本),选择 Default version at runtime(运行时的默认版本)。
  8. 默认情况下,Task priority(任务优先级)设置为 1。如果您将多个任务注册到同一个维护时段,请为它们指定不同的优先级以便按顺序运行。
  9. 对于 Targets(目标),如果您在维护时段注册了目标实例,请选择 Selecting registered target groups(选择已注册的目标组)。如果尚未在维护时段注册目标实例,请选择 Selecting unregistered targets(选择未注册的目标)。然后,手动选择实例,或指定一个资源组,确定您要运行自动化文档的实例。
    **注意:**只有 Systems Manager 管理的实例才支持目标标签。
  10. 对于 Rate control(速率控制),请指定 Concurrency(并发)和 Error threshold(错误阈值)。
  11. 对于 IAM service role(IAM 服务角色),请从下拉列表中选择 Systems Manager 的服务角色。如果您没有为 Systems Manager 创建服务角色,请创建一个角色。
    **注意:**请勿使用 AWSServiceRoleForAmazonSSM 角色。
  12. 对于 Input parameters(输入参数),请指定以下参数:
    **InstanceId:**输入伪参数 {{RESOURCE_ID}} 以定位多个资源。
    **AutomationAssumeRole:**输入具有 ec2:StartInstances 或 ec2:StopInstances 权限的 IAM 角色的完整 Amazon 资源名称 (ARN)。例如,arn:aws:iam::123456789101:role/SSM_StartStopEC2Role。
  13. 选择 Register Automation task(注册自动化任务)。

**重要事项:**要注册自动化文档以安排停止和启动操作,请对第二个文档重复上述步骤。

相关信息

AWS Systems Manager Maintenance Windows

Amazon EC2 的操作、资源和条件键

为什么 Systems Manager 没有将我的 Amazon EC2 实例显示为托管实例?

AWS 官方已更新 8 个月前