Amazon EC2 Systems Manager
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将命令发送到队列

您可以使用 targets 参数向数十个、数百个或数千个实例发送命令 (Amazon EC2 控制台中的 Select Targets by Specifying a Tag 选项)。targets 参数支持基于您为实例指定的 Amazon EC2 标签 Key,Value 组合。当您执行该命令时,系统会找到并尝试在匹配指定标签的所有实例上运行命令。有关 Amazon EC2 标签的更多信息,请参阅 Amazon EC2 用户指南 中的标记 Amazon EC2 资源 (内容适用于 Windows 和 Linux 实例)。

注意

您也可以使用 targets 参数将特定实例 ID 的列表设为目标,如下一部分中所述。

为控制数百个或数千个实例的命令执行,Run Command 还包含一些参数,用于限制同时处理请求的实例数量以及终止命令前其引发的错误数量。

针对多个实例

您可以通过指定 Amazon EC2 标签或实例 ID 执行命令并将实例设为目标。在 AWS CLI 中,targets 参数使用以下语法:

示例 1:将标签设为目标

Copy
aws ssm send-command --document-name name --targets Key=tag:tag_name,Values=tag_value [...]

注意

本部分的示例命令使用 [...] 进行截断。

示例 2:将实例 ID 设为目标

Copy
aws ssm send-command --document-name name --targets Key=instanceids,Values=ID1,ID2,ID3 [...]

如果您使用名为 KeyEnvironment,以及 ValuesDevelopmentTestPre-productionProduction 标记不同环境的实例,则可以使用采用以下语法的 参数,向其中一个环境的所有实例发送命令。targets

Copy
aws ssm send-command --document-name name --targets Key=tag:Environment,Values=Development [...]

通过添加到 Values 列表,您可以将其他环境中的其他实例设为目标。使用逗号分隔项目。

Copy
aws ssm send-command - -document-name name --targets Key=tag:Environment,Values=Development,Test,Pre-production [...]

示例:使用多个 Key 条件细化您的目标。

通过包括多个 Key 条件,您可以细化您的命令的目标数。如果包括多个 Key 条件,系统会将符合所有 条件的实例设为目标。以下命令会将标记为财务部门标记为数据库服务器角色的所有实例设为目标。

Copy
aws ssm send-command --document-name name --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database [...]

示例:使用多个 KeyValue 条件

对上一个示例进行扩展,您可以通过在 Values 条件中包括其他项目来将多个部门和多个服务器角色设为目标。

Copy
aws ssm send-command --document-name name --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database [...]

示例:针对使用多个 Values 条件标记的实例

如果您使用名为 DepartmentKey,以及 SalesFinanceValues 标记不同环境的实例,则可以使用采用以下语法的 targets 参数,向这些环境的所有实例发送命令。

Copy
aws ssm send-command --document-name name --targets Key=tag:Department,Values=Sales,Finance [...]

注意

您可以指定最大值为 5 个密钥,每个密钥 5 个值。

如果某个标签密钥 (标签名称) 或某个标签值包含空格,则必须将该标签密钥或该值用引号引起来,如以下示例所示。

示例 1:Value 标签中的空格。

Copy
aws ssm send-command --document-name name --targets Key=tag:OS,Values="Windows Server 2016 Nano" [...]

示例 2:tag 密钥和 Value 中的空格。

Copy
aws ssm send-command --document-name name --targets Key="tag:Operating System",Values="Windows Server 2016 Nano" [...]

示例 3:Values 的列表中一个项目中的空格。

Copy
aws ssm send-command --document-name name --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" [...]

使用并发控件

您可以使用 max-concurrency 参数 (Amazon EC2 控制台中的 Execute on 字段) 控制同时执行命令的服务器的数量。您可以指定绝对数量的实例 (如 10),也可以指定目标集百分比 (如 10%)。队列系统将该命令传输到单个实例,等到初始调用完成之后,再将命令发送到两个或更多实例。系统以指数增长方式将命令发送到更多实例,直到达到 max-concurrency 值。max-concurrency 值默认为 50。下列示例介绍如何为 max-concurrency 参数指定值:

Copy
aws ssm send-command --document-name name --max-concurrency 10 --targets Key=tag:Environment,Values=Development [...]
Copy
aws ssm send-command --document-name name --max-concurrency 10% --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database [...]

使用错误控件

通过使用 max-errors 参数 (Amazon EC2 控制台中的 Stop after __ errors 字段) 设置错误限制,您还可以控制向数百个或数千个实例发送的命令的执行。该参数指定系统停止向其他实例发送命令之前所允许的错误数。您可以指定绝对数量的错误 (如 10),也可以指定目标集百分比 (如 10%)。例如,如果您指定 3,系统将在收到第四个错误时停止发送命令。如果您指定 0,则系统会在返回第一个错误结果后停止向其他实例发送命令。如果您向 50 个实例发送命令并将 max-errors 设置为 10%,则系统会在收到第六个错误时停止向其他实例发送命令。

当达到 max-errors 时,允许完成已经运行命令的调用,但是其中一些调用也可能失败。如果您需要确保失败的调用数不超过 max-errors,请将 max-concurrency 设置为 1,以便一次进行一个调用。最大并发数默认为 50。下列示例介绍如何为 max-errors 参数指定值:

Copy
aws ssm send-command --document-name name --max-errors 10 --targets Key=tag:Database,Values=Development [...]
Copy
aws ssm send-command --document-name name --max-errors 10% --targets Key=tag:Environment,Values=Development [...]
Copy
aws ssm send-command --document-name name --max-concurrency 1 --max-errors 1 --targets Key=tag:Environment,Values=Production [...]