使用维护窗口运行触发器的自动化 - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用维护窗口运行触发器的自动化

您可以通过将 Runbook 配置为维护时段的注册任务来启动自动化。通过将 Runbook 注册为注册任务,维护时段将在计划的维护期间内运行自动化。

例如,假设您创建了一个名为CreateAMI创建Amazon Machine Image(AMI)注册为目标的实例到维护窗口。指定CreateAMIrunbook(和对应的自动化)作为维护时段的注册任务,您首先要创建一个维护时段并注册目标。然后,您可使用以下过程指定CreateAMI文档作为维护时段内的注册任务。当维护时段在计划期间内启动时,系统将运行自动化并创建AMI登记目标。

有关创建 Automation 运行手册的信息,请参阅使用运行手册。自动化是Amazon Web Services Systems Manager。

使用,通过以下过程将自动化配置为维护时段的注册任务。Amazon Web Services Systems Manager控制台,Amazon命令行界面 (Amazon),或Amazon适用于 Windows PowerShell 的工具。

在维护时段中注册自动化任务(控制台)

以下过程介绍了如何使用 Systems Manager 控制台将 Automation 配置为维护时段的注册任务。

开始前的准备工作

在完成以下过程之前,您必须创建维护时段并注册至少一个目标。有关更多信息,请参阅以下流程:

将 Automation 配置为维护时段的注册任务

  1. 打开Amazon Web Services Systems Manager控制台https://console.aws.amazon.com/systems-manager/

  2. 在左侧导航窗格中,选择维护时段,然后选择您要向其注册 Automation 任务的维护时段。

  3. 选择 Actions。然后选择 。选择注册 Automation 任务。使用 Runbook 在目标上运行您选择的自动化。

  4. 对于 Name (名称),输入任务的名称。

  5. 对于 Description (说明),输入说明。

  6. 适用于文档中,选择定义要运行的任务的 Runbook。

  7. 适用于文档版本下,选择 Runbook 版本。

  8. 适用于任务优先级下,指定此任务的优先级。1是最高优先级。维护时段中的任务按优先级顺序计划,具有相同优先级的任务则并行计划。

  9. 目标部分,如果您选择的 Runbook 是对资源运行任务的 Runbook,请通过手动指定标签或选择实例来标识您要对其运行此自动化的目标。

    注意

    如果要通过输入参数而不是目标传递资源,则无需指定维护时段目标。

    在许多情况下,无需明确指定自动化任务的目标。例如,假设您正在创建一个 Automation 类型的任务以更新Amazon Machine Image(AMI),使用AWS-UpdateLinuxAmi运行手册。当任务运行时,AMI使用最新可用的 Linux 分发程序包和 Amazon 软件更新。新实例从AMI已经安装了这些更新。由于AMI在 Runbook 的输入参数中指定,则无需在维护窗口任务中再次指定目标。

    有关不需要目标的维护窗口任务的信息,请参阅注册没有目标的维护时段任务

  10. (可选)对于速率控制

    注意

    如果您正在运行的任务没有指定目标,则无需指定费率控制。

    • 适用于并发中,指定要同时运行 Automation 的目标的数量或百分比。

      如果通过选择键值对选择了目标,但不确定有多少个目标使用所选标签,则可以通过指定百分比来限制可同时运行的自动化数量。

      当维护时段运行时,每个目标将启动一个新的自动化。每个仅限 100 个并发自动化Amazon Web Services 账户。如果您指定的并发速率大于 100,会有 100 个以上的并发自动化被自动添加到 Automation 队列。想要了解有关信息,请参阅Systems Manager 服务配额中的Amazon Web Services 一般参考

    • 适用于错误阈值中,请指定在一定数量或百分比的目标上失败后何时停止在其他目标上运行自动化。例如,如果您指定三个错误,Systems Manager 会在收到第四个错误时停止运行自动化。仍在处理 Automation 的目标也可能发送错误。

  11. IAM 服务角色区域中,选择以下选项之一为 Systems Manager 提供启动自动化的权限:

    要帮助您决定是使用自定义服务角色还是 Systems Manager 服务相关角色来运行维护时段任务,请参阅我应该使用服务相关角色还是自定义服务角色来运行维护时段任务?

  12. 输入参数部分中,为 Runbook 指定参数。对于 Runbook,系统将自动填充某些值。您可以保留或更换这些值。

    重要

    对于 Runbook,您可以选择性地指定 Automation 代入角色。如果您不为此参数指定角色,那么 Automation 将假定为您在步骤 11 中选择的维护时段服务角色。因此,您必须确保所选择的维护时段服务角色具有适当的 AWS Identity and Access Management (IAM) 权限来执行在 Runbook 中定义的操作。

    例如,Systems Manager 的服务相关角色没有 IAM 权限ec2:CreateSnapshot,这是使用 Runbook 所需的AWS-CopySnapshot。在此情况下,您必须使用自定义的维护时段服务角色或指定具有 ec2:CreateSnapshot 权限的 Automation 代入角色。有关信息,请参阅 设置 Automation

  13. 选择 Register Automation task (注册 Automation 任务)

在维护时段中注册 Automation 任务(命令行)

以下过程介绍如何使用AmazonCLI(在 Linux 或 Windows 上)或AmazonTools for PowerShell 将 Automation 配置为维护时段的注册任务的工具。

开始前的准备工作

在完成以下过程之前,您必须创建维护时段并注册至少一个目标。有关更多信息,请参阅以下流程:

将 Automation 配置为维护时段的注册任务

  1. 安装和配置AmazonCLI 或AmazonTools for PowerShell,如果您还没有。

    想要了解有关信息,请参阅安装或升级Amazon命令行工具

  2. 创建一个命令以将 Automation 配置为维护时段的注册任务。以下是一些为您提供帮助的模板命令。

    Linux & macOS
    aws ssm register-task-with-maintenance-window \ --window-id window_id \ --name task_name \ --task-arn runbook_name \ --targets Key=targets,Values=value_1,value_2,value_3 \ --service-role-arn service_role_arn \ --task-type AUTOMATION \ --task-invocation-parameters task_parameters_if_any \ --priority task_priority \ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \ --max-errors a_number_of_errors_or_a_percentage_of_target_set
    注意

    如果将自动化配置为已注册的任务通过使用AmazonCLI,请使用--Task-Invocation-Parameters参数指定在任务运行时传递给任务的参数。不要使用 --Task-Parameters 参数。--Task-Parameters 参数是一个旧参数。

    对于没有指定目标的维护窗口任务,您无法为--max-errors--max-concurrency。相反,系统会插入一个占位符值1,这可能会在响应命令(例如描述-维护-窗口任务Get-维护/窗口任务。这些值不会影响任务的运行,因此可以忽略。

    有关不需要目标的维护窗口任务的信息,请参阅注册没有目标的维护时段任务

    Windows
    aws ssm register-task-with-maintenance-window ^ --window-id window_id ^ --name task_name ^ --task-arn runbook_name ^ --targets Key=targets,Values=value_1,value_2,value_3 ^ --service-role-arn service_role_arn ^ --task-type AUTOMATION ^ --task-invocation-parameters task_parameters_if_any ^ --priority task_priority ^ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^ --max-errors a_number_of_errors_or_a_percentage_of_target_set
    注意

    如果将自动化配置为已注册的任务通过使用AmazonCLI,请使用--task-invocation-parameters参数指定在任务运行时传递给任务的参数。不要使用 --task-parameters 参数。--task-parameters 参数是一个旧参数。

    对于没有指定目标的维护窗口任务,您无法为--max-errors--max-concurrency。相反,系统会插入一个占位符值1,这可能会在响应命令(例如描述-维护-窗口任务Get-维护/窗口任务。这些值不会影响任务的运行,因此可以忽略。

    有关不需要目标的维护窗口任务的信息,请参阅注册没有目标的维护时段任务

    PowerShell
    Register-SSMTaskWithMaintenanceWindow ` -WindowId window_id ` -Name "task_name" ` -TaskArn "runbook_name" ` -Target @{ Key="targets";Values="value_1" } ` -ServiceRoleArn "service_role_arn" ` -TaskType "AUTOMATION" ` -Automation_Parameter @{ "task_parameters_1"="task_parameter_1_value";"task_parameters_2"="task_parameter_2_value" } ` -Priority task_priority ` -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set ` -MaxError a_number_of_errors_or_a_percentage_of_target_set
    注意

    如果将自动化配置为已注册的任务通过使用AmazonTools for PowerShell,请使用-Automation_Parameter参数指定在任务运行时传递给任务的参数。不要使用 -TaskParameters 参数。-TaskParameters 参数是一个旧参数。

    对于没有指定目标的维护窗口任务,您无法为-MaxError-MaxConcurrency。相反,系统会插入一个占位符值 1,这可能会在响应命令(如Get-SSMMaintenanceWindowTaskListGet-SSMMaintenanceWindowTask。这些值不会影响任务的运行,因此可以忽略。

    有关不需要目标的维护窗口任务的信息,请参阅注册没有目标的维护时段任务

    以下示例将 Automation 配置为具有优先级 1 的维护时段注册任务。它还演示了省略--targets--max-errors, 和--max-concurrency选项进行无目标维护时段任务。自动化使用AWS-StartEC2Instancerunbook 和指定的 Automation 担任角色,以启动注册为维护时段的目标的 EC2 实例。在任何给定时间,维护时段最多在 5 个实例上同时运行自动化。此外,如果错误计数超过 1,注册任务将在特定时间间隔内停止在更多实例上运行。

    Linux & macOS
    aws ssm register-task-with-maintenance-window \ --window-id mw-0c50858d01EXAMPLE \ --name StartEC2Instances \ --task-arn AWS-StartEC2Instance \ --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole \ --task-type AUTOMATION \ --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" \ --priority 1
    Windows
    aws ssm register-task-with-maintenance-window ^ --window-id mw-0c50858d01EXAMPLE ^ --name StartEC2Instances ^ --task-arn AWS-StartEC2Instance ^ --service-role-arn arn:aws:iam::123456789012:role/MaintenanceWindowRole ^ --task-type AUTOMATION ^ --task-invocation-parameters "{\"Automation\":{\"Parameters\":{\"InstanceId\":[\"{{TARGET_ID}}\"],\"AutomationAssumeRole\":[\"arn:aws:iam::123456789012:role/AutomationAssumeRole\"]}}}" ^ --priority 1
    PowerShell
    Register-SSMTaskWithMaintenanceWindow ` -WindowId mw-0c50858d01EXAMPLE ` -Name "StartEC2" ` -TaskArn "AWS-StartEC2Instance" ` -ServiceRoleArn "arn:aws:iam::123456789012:role/MaintenanceWindowRole" ` -TaskType "AUTOMATION" ` -Automation_Parameter @{ "InstanceId"="{{TARGET_ID}}";"AutomationAssumeRole"="arn:aws:iam::123456789012:role/AutomationAssumeRole" } ` -Priority 1

    该命令返回新的注册任务的详细信息,类似于以下内容。

    Linux & macOS
    {
        "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
    }
    Windows
    {
        "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE"
    }
    PowerShell
    4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE
  3. 要查看注册的任务,请运行以下命令。

    Linux & macOS
    aws ssm describe-maintenance-window-tasks \ --window-id mw-0c50858d01EXAMPLE
    Windows
    aws ssm describe-maintenance-window-tasks ^ --window-id mw-0c50858d01EXAMPLE
    PowerShell
    Get-SSMMaintenanceWindowTaskList ` -WindowId mw-0c50858d01EXAMPLE

    系统将返回类似于以下内容的信息。

    Linux & macOS
    {
        "Tasks": [
            {
                "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
                "MaxErrors": "1",
                "TaskArn": "AWS-StartEC2Instance",
                "MaxConcurrency": "1",
                "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
                "TaskParameters": {},
                "Priority": 1,
                "WindowId": "mw-0c50858d01EXAMPLE",
                "Type": "AUTOMATION",
                "Targets": [
                ],
                "Name": "StartEC2"
            }
        ]
    }
    Windows
    {
        "Tasks": [
            {
                "ServiceRoleArn": "arn:aws:iam::123456789012:role/MaintenanceWindowRole",
                "MaxErrors": "1",
                "TaskArn": "AWS-StartEC2Instance",
                "MaxConcurrency": "1",
                "WindowTaskId": "4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE",
                "TaskParameters": {},
                "Priority": 1,
                "WindowId": "mw-0c50858d01EXAMPLE",
                "Type": "AUTOMATION",
                "Targets": [
                ],
                "Name": "StartEC2"
            }
        ]
    }
    PowerShell
    Description    : 
    LoggingInfo    : 
    MaxConcurrency : 5
    MaxErrors      : 1
    Name           : StartEC2
    Priority       : 1
    ServiceRoleArn : arn:aws:iam::123456789012:role/MaintenanceWindowRole
    Targets        : {}
    TaskArn        : AWS-StartEC2Instance
    TaskParameters : {}
    Type           : AUTOMATION
    WindowId       : mw-0c50858d01EXAMPLE
    WindowTaskId   : 4f7ca192-7e9a-40fe-9192-5cb15EXAMPLE