使用目标和速率控制将命令发送到队列 - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用目标和速率控制将命令发送到队列

您可以使用命令到几十、几百或几千个实例发送命令,方法是使用targets参数(指定实例标签选项,运行命令页面)。这些区域有:targets参数接受Key,Value组合,基于您为您的实例指定的 Amazon Elastic Compute Cloud (Amazon EC2) 标签。当您运行该命令时,系统会找到并尝试在匹配指定标签的所有实例上运行命令。有关 Amazon EC2 标签的更多信息,请参阅标记 Amazon EC2 资源中的Amazon EC2 用户指南(内容适用于Windows Server和 Linux 实例)。您还可以将命令发送到属于Amazon资源组。有关资源组的详细信息,请参阅什么是 Resource Groups?中的AmazonResource Groups 用户指南

注意

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

要控制命令在数百个或数千个实例上的运行方式,请运行 Command(Amazon Web Services Systems Manager,还包含一些参数,用于限制同时处理请求的实例数量以及取消命令前其引发的错误数量。

针对多个实例

您可以通过指定应用于托管实例的标签来运行命令和设定目标实例Amazon资源组名称或实例 ID。

注意

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

与结合使用Amazon命令行界面 (AmazonCLI)send-command命令,targets参数支持以下示例中演示的语法。

示例 1:设置目标标签

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:tag-name,Values=tag-value \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:tag-name,Values=tag-value ^ [...]

示例 2:目标Amazon按名称列出的资源组

您最多可以为每个命令指定一个资源组名称。当您创建资源组时,我们建议您包含 AWS::SSM:ManagedInstanceAWS::EC2::Instance 作为分组条件中的资源类型。

注意

为了发送将资源组设为目标的命令,您必须已被授予列出或查看属于该组的资源的 AWS Identity and Access Management (IAM) 权限。有关更多信息,请参阅 。设置权限中的AmazonResource Groups 用户指南

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:Name,Values=resource-group-name \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:Name,Values=resource-group-name ^ [...]

示例 3:目标Amazon按资源类型列出的资源组

对于每个命令,您最多可以指定 5 种资源组类型。当您创建资源组时,我们建议您包含 AWS::SSM:ManagedInstanceAWS::EC2::Instance 作为分组条件中的资源类型。

注意

为了发送将资源组设为目标的命令,您必须已被授予列出或查看属于该组的资源的 IAM 权限。有关更多信息,请参阅 。设置权限中的AmazonResource Groups 用户指南

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=resource-groups:ResourceTypeFilters,Values=resource-type-1,resource-type-2 ^ [...]

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=instanceids,Values=instance-ID-1,instance-ID-2,instance-ID-3 ^ [...]

如果您使用Key命名EnvironmentValuesDevelopmentTestPre-productionProduction,那么你可以发送一个命令到one这些环境中的targets参数,使用以下语法。

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development ^ [...]

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Environment,Values=Development,Test,Pre-production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Environment,Values=Development,Test,Pre-production ^ [...]

变体:使用多个细化您的目标Keycriteria

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance Key=tag:ServerRole,Values=Database ^ [...]

变体:使用多个KeyValuecriteria

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Finance,Marketing Key=tag:ServerRole,Values=WebServer,Database ^ [...]

变体:使用多个针对标记的实例Valuescriteria

如果您使用Key命名DepartmentValuesSalesFinance,则可以使用targets参数,使用以下语法。

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values=Sales,Finance \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values=Sales,Finance ^ [...]
注意

您最多可以为每个键指定五个键和五个值。

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

示例:中的空格Value标签

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:OS,Values="Windows Server 2016 Nano" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:OS,Values="Windows Server 2016 Nano" ^ [...]

示例:中的空格tag键和Value

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

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --targets Key=tag:Department,Values="Sales","Finance","Systems Mgmt" ^ [...]

使用速率控制

您可以使用并发控件错误控件 来控制将命令发送到组中实例的速率。

使用并发控件

您可以使用控制同时运行命令的服务器数量,方法是使用max-concurrency参数(同意选项运行命令页)。您可以指定绝对数量的实例,例如10,也可以占目标集百分比(例如10%。队列系统将该命令传输到单个实例,等到系统确认初始调用之后,再将命令发送到两个或更多实例。系统以指数增长方式将命令发送到更多实例,直到系统满足max-concurrencymax-concurrency 值默认为 50。下列示例介绍如何为 max-concurrency 参数指定值。

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

使用错误控件

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

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

Linux & macOS
aws ssm send-command \ --document-name document-name \ --max-errors 10 \ --targets Key=tag:Database,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-errors 10% \ --targets Key=tag:Environment,Values=Development \ [...]
aws ssm send-command \ --document-name document-name \ --max-concurrency 1 \ --max-errors 1 \ --targets Key=tag:Environment,Values=Production \ [...]
Windows
aws ssm send-command ^ --document-name document-name ^ --max-errors 10 ^ --targets Key=tag:Database,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-errors 10% ^ --targets Key=tag:Environment,Values=Development ^ [...]
aws ssm send-command ^ --document-name document-name ^ --max-concurrency 1 ^ --max-errors 1 ^ --targets Key=tag:Environment,Values=Production ^ [...]