Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

维护时段 CLI 演练

以下演练将向您介绍维护时段的概念,还会指导您完成使用 AWS CLI 创建和配置维护时段的过程。您将在为 Systems Manager 配置的测试实例上执行此演练。完成演练后,您可以删除该测试实例。

使用 CLI 创建和配置维护时段

使用 AWS CLI 创建和配置维护时段

  1. 将 AWS CLI 下载到本地计算机上。

  2. 打开 AWS CLI,然后执行以下命令,以创建从每个星期二下午 4 点开始运行 4 个小时、停止 1 小时且允许无关联目标的维护时段。有关创建 schedule 参数的 cron 表达式的更多信息,请参阅Systems Manager 的 Cron 计划

    Copy
    aws ssm create-maintenance-window --name "My-First-Maintenance-Window" --schedule "cron(0 16 ? * TUE *)" --duration 4 --cutoff 1 --allow-unassociated-targets

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

    Copy
    { "WindowId":"mw-ab12cd34ef56gh78" }
  3. 执行以下命令,列出您的 AWS 账户中所有的维护时段。

    Copy
    aws ssm describe-maintenance-windows

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

    Copy
    { "WindowIdentities":[ { "Duration":4, "Cutoff":1, "WindowId":"mw-ab12cd34ef56gh78", "Enabled":true, "Name":"My-First-Maintenance-Window" } ] }
  4. 执行以下命令,注册您之前作为此维护时段目标创建的实例。系统将返回维护时段目标 ID。在后面的步骤中,您将使用此 ID 为此维护时段注册任务。

    Copy
    aws ssm register-target-with-maintenance-window --window-id "mw-ab12cd34ef56gh78" --target "Key=InstanceIds,Values=ID" --owner-information "Single instance" --resource-type "INSTANCE"

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

    Copy
    { "WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2" }

    您可以使用以下命令注册多个实例。

    Copy
    aws ssm register-target-with-maintenance-window --window-id "mw-ab12cd34ef56gh78" --targets "Key=InstanceIds,Values=ID 1,ID 2" --owner-information "Two instances in a list" --resource-type "INSTANCE"

    您还可以使用 EC2 标签注册实例。

    Copy
    aws ssm register-target-with-maintenance-window --window-id "mw-ab12cd34ef56gh78" --targets "Key=tag:Environment,Values=Prod" "Key=Role,Values=Web" --owner-information "Production Web Servers" --resource-type "INSTANCE"
  5. 使用以下命令,显示维护时段的目标。

    Copy
    aws ssm describe-maintenance-window-targets --window-id "mw-ab12cd34ef56gh78"

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

    Copy
    { "Targets":[ { "ResourceType":"INSTANCE", "OwnerInformation":"Single instance", "WindowId":"mw-ab12cd34ef56gh78", "Targets":[ { "Values":[ "i-11aa22bb33cc44dd5" ], "Key":"InstanceIds" } ], "WindowTargetId":"a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4" }, { "ResourceType":"INSTANCE", "OwnerInformation":"Two instances in a list", "WindowId":"mw-ab12cd34ef56gh78", "Targets":[ { "Values":[ "i-1a2b3c4d5e6f7g8h9", "i-aa11bb22cc33dd44e " ], "Key":"InstanceIds" } ], "WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2" }, { "ResourceType":"INSTANCE", "OwnerInformation":"Production Web Servers", "WindowId":"mw-ab12cd34ef56gh78", "Targets":[ { "Values":[ "Prod" ], "Key":"tag:Environment" }, { "Values":[ "Web" ], "Key":"tag:Role" } ], "WindowTargetId":"1111aaa-2222-3333-4444-1111aaa " } ] }
  6. 执行以下命令,在您之前创建的实例上注册任务。此任务使用 Systems Manager Run Command,借助 AWS-RunShellScript 文档执行 df 命令。此命令使用以下参数:

    • targets:指定 Key=WindowTargetIds,Values=Window Target ID,以指定维护时段已注册的目标,或者指定 Key=InstanceIds,Values=Instance ID,以指定维护时段已注册的单个实例。

    • task-arn:指定 Systems Manager Run Command 文档的名称。例如:AWS-RunShellScript、AWS-RunPowerShellScript 或 arn:aws:ssm:us-east-1:123456789:document/Restart_Apache (适用于共享文档)。

    • window-id:指定目标维护时段的 ID。

    • task-type:指定RUN_COMMAND。目前仅支持 Run Command 任务。

    • task-parameters:指定 Run Command 文档的必需参数和可选参数。

    • max-concurrency:(可选) 指定允许同时执行命令的最大实例数。您可以指定一个数字或一个百分比 (如 10 或 10%)。

    • max-errors:(可选) 指定不会导致命令失败的允许的最大错误数。当命令失败的次数超出 MaxErrors 值一次,系统就会停止向其他目标发送命令。您可以指定一个数字或一个百分比 (如 10 或 10%)。

    • priority:指定维护时段内任务的优先级。数字越小,优先级越高 (例如,1 表示最高优先级)。维护时段内的任务按优先级顺序计划。具有相同优先级的任务则并行计划。

    Copy
    aws ssm register-task-with-maintenance-window --window-id mw-ab12cd34ef56gh78 --task-arn "AWS-RunShellScript" --targets "Key=InstanceIds,Values=Instance ID" --service-role-arn "arn:aws:iam::1122334455:role/MW-Role" --task-type "RUN_COMMAND" --task-parameters "{\"commands\":{\"Values\":[\"df\"]}}" --max-concurrency 1 --max-errors 1 --priority 10

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

    Copy
    { "WindowTaskId":"44444444-5555-6666-7777-88888888" }

    您还可以使用维护时段目标 ID 注册任务。维护时段目标 ID 通过之前的命令返回。

    Copy
    aws ssm register-task-with-maintenance-window --targets "Key=WindowTargetIds,Values=Window Target ID" --task-arn "AWS-RunShellScript" --service-role-arn "arn:aws:iam::1122334455:role/MW-Role" --window-id "mw-ab12cd34ef56gh78" --task-type "RUN_COMMAND" --task-parameters "{\"commands\":{\"Values\":[\"df\"]}}" --max-concurrency 1 --max-errors 1 --priority 10

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

    Copy
    { "WindowTaskId":"44444444-5555-6666-7777-88888888" }
  7. 执行以下命令,列出维护时段已注册的所有任务。

    Copy
    aws ssm describe-maintenance-window-tasks --window-id "mw-ab12cd34ef56gh78"

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

    Copy
    { "Tasks":[ { "ServiceRoleArn":"arn:aws:iam::11111111:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"3333-3333-3333-333333", "TaskParameters":{ "commands":{ "Values":[ "driverquery.exe" ] } }, "Priority":3, "Type":"RUN_COMMAND", "Targets":[ { "Values":[ "i-1a2b3c4d5e6f7g8h9" ], "Key":"InstanceIds" } ] }, { "ServiceRoleArn":"arn:aws:iam::2222222222:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"44444-44-44-444444", "TaskParameters":{ "commands":{ "Values":[ "ipconfig.exe" ] } }, "Priority":1, "Type":"RUN_COMMAND", "Targets":[ { "Values":[ "555555-55555-555-5555555" ], "Key":"WindowTargetIds" } ] } ] }
  8. 执行以下命令,查看特定维护时段的任务执行列表。

    Copy
    aws ssm describe-maintenance-window-executions --window-id "mw-ab12cd34ef56gh78"

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

    Copy
    { "WindowExecutions":[ { "Status":"SUCCESS", "WindowExecutionId":"1111-1111-1111-11111", "StartTime":1478230495.469 }, { "Status":"SUCCESS", "WindowExecutionId":"2222-2-2-22222222-22", "StartTime":1478231395.677 }, # ... omitting a number of entries in the interest of space... { "Status":"SUCCESS", "WindowExecutionId":"33333-333-333-3333333", "StartTime":1478272795.021 }, { "Status":"SUCCESS", "WindowExecutionId":"4444-44-44-44444444", "StartTime":1478273694.932 } ], "NextToken":111111 ..." }
  9. 执行以下命令,获取有关维护时段任务执行的信息。

    Copy
    aws ssm get-maintenance-window-execution --window-execution-id "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"

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

    Copy
    { "Status":"SUCCESS", "TaskIds":[ "333-33-3333-333333" ], "StartTime":1478230495.472, "EndTime":1478230516.505, "WindowExecutionId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2" }
  10. 执行以下命令,列出维护时段执行过程中执行的任务列表。

    Copy
    aws ssm describe-maintenance-window-execution-tasks --window-execution-id "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"

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

    Copy
    { "WindowExecutionTaskIdentities":[ { "Status":"SUCCESS", "EndTime":1478230516.425, "StartTime":1478230495.782, "TaskId":"33333-333-333-3333333" } ] }
  11. 执行以下命令,获取有关任务执行的详情。

    Copy
    aws ssm get-maintenance-window-execution-task --window-execution-id "555555-555-55-555555" --task-id "4444-4444-4444-444444"

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

    Copy
    { "Status":"SUCCESS", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "ServiceRole":"arn:aws:iam::333333333:role/MW-Role", "WindowExecutionId":"555555-555-55-555555", "Priority":0, "StartTime":1478230495.782, "EndTime":1478230516.425, "Type":"RUN_COMMAND", "TaskParameters":[ ], "TaskExecutionId":"4444-4444-4444-444444" }
  12. 执行以下命令,获取执行某个任务时执行的具体任务调用。

    Copy
    aws ssm describe-maintenance-window-execution-task-invocations --window-execution-id "555555-555-55-555555" --task-id "4444-4444-4444-444444"

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

    Copy
    { "WindowExecutionTaskInvocationIdentities":[ { "Status":"SUCCESS", "Parameters":"{\" documentName \" : \" AWS-RunPowerShellScript \" , \" instanceIds \" :[ \" i-1a2b3c4d5e6f7g8h9 \" , \" i-0a 00def7faa94f1dc \" ], \" parameters \" :{ \" commands \" :[ \" ipconfig.exe \" ]}, \" maxConcurrency \" : \" 1 \" , \" maxErrors \" : \" 1 \" }", "ExecutionId":"555555-555-55-555555", "InvocationId":"3333-33333-3333-33333", "StartTime":1478230495.842, "EndTime":1478230516.291 } ] }

其他维护时段配置命令

本部分包含的命令可帮助您更新维护时段、任务、执行和调用或获取相关信息。

列出您的 AWS 账户中所有的维护时段

Copy
aws ssm describe-maintenance-windows

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

Copy
{ "WindowIdentities":[ { "Duration":2, "Cutoff":0, "WindowId":"mw-ab12cd34ef56gh78", "Enabled":true, "Name":"IAD-Every-15-Minutes" }, { "Duration":4, "Cutoff":1, "WindowId":"mw-1a2b3c4d5e6f7g8h9", "Enabled":true, "Name":"My-First-Maintenance-Window" }, { "Duration":8, "Cutoff":2, "WindowId":"mw-123abc456def789", "Enabled":false, "Name":"Every-Day" } ] }

列出所有已启用的维护时段

Copy
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=true"

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

Copy
{ "WindowIdentities":[ { "Duration":2, "Cutoff":0, "WindowId":"mw-ab12cd34ef56gh78", "Enabled":true, "Name":"IAD-Every-15-Minutes" }, { "Duration":4, "Cutoff":1, "WindowId":"mw-1a2b3c4d5e6f7g8h9", "Enabled":true, "Name":"My-First-Maintenance-Window" } ] }

列出所有已禁用的维护时段

Copy
aws ssm describe-maintenance-windows --filters "Key=Enabled,Values=false"

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

Copy
{ "WindowIdentities":[ { "Duration":8, "Cutoff":2, "WindowId":"mw-1a2b3c4d5e6f7g8h9", "Enabled":false, "Name":"Every-Day" } ] }

按名称筛选

在本示例中,命令将返回所有名称以“My”开头的维护时段。

Copy
aws ssm describe-maintenance-windows --filters "Key=Name,Values=My"

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

Copy
{ "WindowIdentities":[ { "Duration":4, "Cutoff":1, "WindowId":"mw-1a2b3c4d5e6f7g8h9", "Enabled":true, "Name":"My-First-Maintenance-Window" } ] }

修改维护时段

您可以修改以下参数:Name、Schedule、Duration、Cutoff、AllowUnassociatedTargets 和 Enabled。以下示例将修改 name 值。

Copy
aws ssm update-maintenance-window --window-id "mw-1a2b3c4d5e6f7g8h9" --name "My-Renamed-MW"

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

Copy
{ "Cutoff": 1, "Name": "My-Renamed-MW", "Schedule": "cron(0 16 ? * TUE *)", "Enabled": true, "AllowUnassociatedTargets": true, "WindowId": "mw-1a2b3c4d5e6f7g8h9", "Duration": 4 }

修改无关联的目标参数

Copy
aws ssm update-maintenance-window --window-id "mw-1a2b3c4d5e6f7g8h9" --no-allow-unassociated-targets

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

Copy
{ "Cutoff": 2, "Name": "Every-Tuesday-4pm", "Schedule": "cron(0 16 ? * TUE *)", "Enabled": true, "AllowUnassociatedTargets": false, "WindowId": "mw-1a2b3c4d5e6f7g8h9", "Duration": 8 }
Copy
aws ssm update-maintenance-window --window-id "mw-1a2b3c4d5e6f7g8h9" --allow-unassociated-targets --no-enabled

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

Copy
{ "Cutoff": 2, "Name": "Every-Tuesday-4pm", "Schedule": "cron(0 16 ? * TUE *)", "Enabled": false, "AllowUnassociatedTargets": true, "WindowId": "mw-1a2b3c4d5e6f7g8h9", "Duration": 8 }

显示匹配特定所有者信息值的维护时段的目标

Copy
aws ssm describe-maintenance-window-targets --window-id "mw-ab12cd34ef56gh78" --filters "Key=OwnerInformation,Values=Single instance"

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

Copy
{ "Targets":[ { "TargetType":"INSTANCE", "TagFilters":[ ], "TargetIds":[ "i-1a2b3c4d5e6f7g8h9" ], "WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2", "OwnerInformation":"Single instance" } ] }

显示将调用 AWS-RunPowerShellScript Run Command 的所有已注册任务

Copy
aws ssm describe-maintenance-window-tasks --window-id "mw-ab12cd34ef56gh78" --filters "Key=TaskArn,Values=AWS-RunPowerShellScript"

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

Copy
{ "Tasks":[ { "ServiceRoleArn":"arn:aws:iam::444444444444:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6c", "TaskParameters":{ "commands":{ "Values":[ "driverquery.exe" ] } }, "Priority":3, "Type":"RUN_COMMAND", "Targets":[ { "TaskTargetId":"i-1a2b3c4d5e6f7g8h9", "TaskTargetType":"INSTANCE" } ] }, { "ServiceRoleArn":"arn:aws:iam::333333333333:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"33333-33333-333-33333", "TaskParameters":{ "commands":{ "Values":[ "ipconfig.exe" ] } }, "Priority":1, "Type":"RUN_COMMAND", "Targets":[ { "TaskTargetId":"44444-444-4444-444444", "TaskTargetType":"WINDOW_TARGET" } ] } ] }

显示优先级为 3 的所有已注册任务

Copy
aws ssm describe-maintenance-window-tasks --window-id "mw-ab12cd34ef56gh78" --filters "Key=Priority,Values=3"

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

Copy
{ "Tasks":[ { "ServiceRoleArn":"arn:aws:iam::222222222:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"333333-333-33333-33333", "TaskParameters":{ "commands":{ "Values":[ "driverquery.exe" ] } }, "Priority":3, "Type":"RUN_COMMAND", "Targets":[ { "TaskTargetId":"i-1a2b3c4d5e6f7g8h9", "TaskTargetType":"INSTANCE" } ] } ] }

显示优先级为 1 且使用 Run Command 的所有已注册任务

Copy
aws ssm describe-maintenance-window-tasks --window-id "mw-ab12cd34ef56gh78" --filters "Key=Priority,Values=1" "Key=TaskType,Values=RUN_COMMAND"

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

Copy
{ "Tasks":[ { "ServiceRoleArn":"arn:aws:iam::333333333:role/MW-Role", "MaxErrors":"1", "TaskArn":"AWS-RunPowerShellScript", "MaxConcurrency":"1", "WindowTaskId":"66666-555-66-555-6666", "TaskParameters":{ "commands":{ "Values":[ "ipconfig.exe" ] } }, "Priority":1, "Type":"RUN_COMMAND", "Targets":[ { "TaskTargetId":"777-77-777-7777777", "TaskTargetType":"WINDOW_TARGET" } ] } ] }

列出在某个日期之前执行的所有任务

Copy
aws ssm describe-maintenance-window-executions --window-id "mw-ab12cd34ef56gh78" --filters "Key=ExecutedBefore,Values=2016-11-04T05:00:00Z"

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

Copy
{ "WindowExecutions":[ { "Status":"SUCCESS", "EndTime":1478229594.666, "WindowExecutionId":"", "StartTime":1478229594.666 }, { "Status":"SUCCESS", "WindowExecutionId":"06dc5f8a-9ef0-4ae9-a466-ada2d4ce2d22", "StartTime":1478230495.469 }, { "Status":"SUCCESS", "WindowExecutionId":"57ad6419-023e-44b0-a831-6687334390b2", "StartTime":1478231395.677 }, { "Status":"SUCCESS", "WindowExecutionId":"ed1372b7-866b-4d64-bc2a-bbfd5195f4ae", "StartTime":1478232295.529 }, { "Status":"SUCCESS", "WindowExecutionId":"154eb2fa-6390-4cb7-8c9e-55686b88c7b3", "StartTime":1478233195.687 }, { "Status":"SUCCESS", "WindowExecutionId":"1c4de752-eff6-4778-b477-1681c6c03cf1", "StartTime":1478234095.553 }, { "Status":"SUCCESS", "WindowExecutionId":"56062f75-e4d8-483f-b5c2-906d613409a4", "StartTime":1478234995.12 } ] }

列出在某个日期之后执行的所有任务

Copy
aws ssm describe-maintenance-window-executions --window-id "mw-ab12cd34ef56gh78" --filters "Key=ExecutedAfter,Values=2016-11-04T17:00:00Z"

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

Copy
{ "WindowExecutions":[ { "Status":"SUCCESS", "WindowExecutionId":"33333-4444-444-5555555", "StartTime":1478279095.042 }, { "Status":"SUCCESS", "WindowExecutionId":"55555-6666-6666-777777", "StartTime":1478279994.958 }, { "Status":"SUCCESS", "WindowExecutionId":"8888-888-888-888888", "StartTime":1478280895.149 } ] }

从维护时段删除目标

Copy
aws ssm deregister-target-from-maintenance-window --region an SSM region --window-id "mw-ab12cd34ef56gh78" --window-target-id "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2"

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

Copy
{ "WindowId":"mw-ab12cd34ef56gh78", "WindowTargetId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d-1a2" }

从维护时段删除任务

Copy
aws ssm deregister-task-from-maintenance-window --window-id "mw-ab12cd34ef56gh78" --window-task-id "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6c"

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

Copy
{ "WindowTaskId":"1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6c", "WindowId":"mw-ab12cd34ef56gh78" }

删除维护时段

Copy
aws ssm delete-maintenance-window --window-id "mw-1a2b3c4d5e6f7g8h9"

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

Copy
{ "WindowId":"mw-1a2b3c4d5e6f7g8h9" }