映射自动化目标
通过 Targets
参数,可以快速定义自动化的目标资源。例如,如果需要运行一个重新启动托管实例的自动化,不必在控制台中手动选择数十个实例 ID 或在命令中键入它们,您可以通过使用 Targets
参数指定 Amazon Elastic Compute Cloud (Amazon EC2) 标签将实例设为目标。
运行使用目标的自动化时,AWS Systems Manager 会为每个目标创建一个子自动化。例如,如果您通过指定标签将 Amazon Elastic Block Store (Amazon EBS) 卷指定为目标,并且这些标签解析为 100 个 Amazon EBS 卷,则 Systems Manager 创建 100 个子自动化。当所有子自动化都到达最终状态时,父自动化完成。
注意
在运行时指定的任何 input parameters
(在控制台的输入参数部分或在命令行中使用 parameters
选项)都由所有子自动化自动处理。
您可以使用标签、Resource Groups 和参数值为自动化设置目标资源。此外,您还可以使用 TargetMaps
选项在命令行或文件中将多个参数值设为目标。下一节更详细地介绍每个设置目标选项。
设置目标标签
您可以指定单个标签作为自动化目标。多个 AWS 资源支持标签,包括 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Relational Database Service (Amazon RDS) 实例、Amazon Elastic Block Store (Amazon EBS) 卷和快照、Resource Groups 以及 Amazon Simple Storage Service (Amazon S3) 存储桶(仅举几例)。您可以通过设置目标标签在 AWS 资源上快速运行自动化。标签是一种键值对,例如 Operating_System:Linux 或 Department:Finance。如果为资源指定一个特定名称,则还可以使用“Name”作为键,将资源名称用作值。
在将标签指定为自动化目标时,还可以指定目标参数。目标参数使用 TargetParameterName
选项。通过选择目标参数,可以定义在其上运行自动化的资源的类型。使用标签指定的目标参数必须是运行手册中定义的有效参数。例如,如果要使用标签将数十个 EC2 实例设为目标,请选择 InstanceId
目标参数。通过选择此参数,可以将实例 定义为自动化的资源类型。在创建自定义运行手册时,您必须将目标类型指定为 /AWS::EC2::Instance
,以确保仅使用实例。否则,所有具有相同标签的资源都将被设置为目标。使用标签定位实例时,可能会包括已终止的实例。
下面的屏幕截图使用 AWS-DetachEBSVolume
运行手册。逻辑目标参数为 VolumeId
。
![使用标签作为 Systems Manager Automation 的目标](images/automation-rate-control-tags-1-new.png)
AWS-DetachEBSVolume
运行手册还包含一个名为目标类型的特殊属性,设置为 /AWS::EC2::Volume
。这意味着,如果标签键对 Finance:TestEnv
返回不同类型的资源(例如,EC2 实例、Amazon EBS 卷、Amazon EBS 快照),则仅使用 Amazon EBS 卷。
重要
目标参数名称区分大小写。如果使用 AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 运行自动化,则必须完全按照运行手册中的定义输入目标参数名称。否则,系统将返回 InvalidAutomationExecutionParametersException
错误。您可以使用 DescribeDocument API 操作来查看有关特定运行手册中可用目标参数的信息。下面是一个示例 AWS CLI 命令,其中提供有关 AWS-DeleteSnapshot
文档的信息。
aws ssm describe-document \ --name AWS-DeleteSnapshot
下面是一些使用标签设置资源目标的示例 AWS CLI 命令。
示例 1:使用键值对将标签指定为目标以重启 Amazon EC2 实例
此示例重新启动带有键为 Department、值为 HumanResources 的标签的所有 Amazon EC2 实例。目标参数使用运行手册中的 InstanceId 参数。该示例使用了一个附加参数,通过使用自动化服务角色(也称为担任角色)来运行自动化。
aws ssm start-automation-execution \ --document-name AWS-RestartEC2Instance \ --targets Key=tag:Department,Values=HumanResources \ --target-parameter-name InstanceId \ --parameters "AutomationAssumeRole=arn:aws:iam::111122223333:role/AutomationServiceRole"
示例 2:使用键值对将标签指定为目标以删除 Amazon EBS 快照
下面的示例使用 AWS-DeleteSnapshot
运行手册删除键为 Name、值为 January2018Backups 的所有快照。目标参数使用 VolumeId 参数。
aws ssm start-automation-execution \ --document-name AWS-DeleteSnapshot \ --targets Key=tag:Name,Values=January2018Backups \ --target-parameter-name VolumeId
设置目标 AWS Resource Groups
您可以指定单个 AWS 资源组作为自动化目标。Systems Manager 为目标资源组中的每个对象创建一个子自动化。
例如,假设您的一个 Resource Groups 名为 PatchedAMIs。此资源组包括一个列表,其中有 25 个定期进行修补的 Windows Amazon Machine Images (AMIs)。如果您运行使用 AWS-CreateManagedWindowsInstance
运行手册并以此资源组为目标的自动化,则 Systems Manager 会为 25 个 AMIs 中的每一个创建一个子自动化。也就是说,通过将 PatchedAMIs 资源组设置为目标,自动化会从修补的 AMIs 列表中创建 25 个实例。当所有子自动化都完成处理或到达最终状态时,父自动化完成。
下面的 AWS CLI 命令适用于此 PatchAMIs 资源组示例。该命令中,--target-parameter-name
选项采用 AmiId 参数。该命令不包含定义从每个 AMI 创建的实例类型的附加参数。AWS-CreateManagedWindowsInstance
运行手册默认为 t2.medium 实例类型,因此该命令将创建 25 个适用于 Windows Server 的 t2.medium Amazon EC2 实例。
aws ssm start-automation-execution \ --document-name AWS-CreateManagedWindowsInstance \ --targets Key=ResourceGroup,Values=PatchedAMIs \ --target-parameter-name AmiId
下面的控制台示例使用名为 t2-micro-instances 的资源组。
![将具有 Systems Manager 自动化功能的 AWS 资源组设为目标](images/automation-rate-control-resource-groups-new.png)
设置目标参数值
您也可以将参数值设置为目标:输入 ParameterValues
作为键,然后输入要在其上运行自动化的特定资源值。如果指定多个值,Systems Manager 将在指定的每个值上运行子自动化。
例如,假设运行手册包含 InstanceID 参数。如果在运行此自动化时将 InstanceID 参数值设置为目标,则 Systems Manager 会为指定的每个实例 ID 值运行一个子自动化。当自动化完成每个指定实例的运行或执行失败时,父自动化完成。您最多可以将 50 个参数值设置为目标。
以下示例使用 AWS-CreateImage
运行手册。指定的目标参数名称为 InstanceId。键使用 ParameterValues。值为两个 Amazon EC2 实例 ID。此命令为每个实例创建一个自动化,这将从每个实例生成一个 AMI。
aws ssm start-automation-execution --document-name AWS-CreateImage \ --target-parameter-name InstanceId \ --targets Key=ParameterValues,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE
注意
AutomationAssumeRole
不是有效的参数。运行以参数值为目标的自动化时,不要选择此项。
设置目标参数值映射
TargetMaps
选项扩展了您设置 ParameterValues
目标的能力。您可以在命令行中使用 TargetMaps
输入一个参数值数组。在命令行中,最多可以指定 50 个参数值。如果要运行指定 50 个以上参数值的命令,请在 JSON 文件中输入这些值。然后,可以在命令行中调用该文件。
注意
控制台中不支持 TargetMaps
选项。
在命令中使用 TargetMaps
选项以下面的格式指定多个参数值。将每个示例资源占位符
替换为您自己的信息。
aws ssm start-automation-execution \ --document-name
runbook name
\ --target-maps “parameter
=value
,parameter 2
=value
,parameter 3
=value
” “parameter 4
=value
,parameter 5
=value
,parameter 6
=value
”
如果要为 TargetMaps
选项输入 50 个以上的参数值,请使用以下 JSON 格式在文件中指定这些值。在提供多个参数值时,使用 JSON 文件还有助于提高可读性。
[ {“parameter”: "value", “parameter 2”: "value", “parameter 3”: "value"}, {“parameter 4”: "value", “parameter 5”: "value", "parameter 6": "value"} ]
使用 .json 文件扩展名保存该文件。可以使用下面的命令调用此文件。将每个示例资源占位符
替换为您自己的信息。
aws ssm start-automation-execution \ --document-name
runbook name
\ –-parametersinput parameters
\ --target-mapspath to file/file name
.json
您还可以从 Amazon Simple Storage Service (Amazon S3) 存储桶下载此文件,前提是您有权从存储桶读取数据。使用下面的命令格式。将每个示例资源占位符
替换为您自己的信息。
aws ssm start-automation-execution \ --document-name
runbook name
\ --target-maps http://amzn-s3-demo-bucket.s3.amazonaws.com/file_name
.json
下面是一个帮助您了解 TargetMaps
选项的示例方案。在此方案中,用户想要从不同的 AMIs 创建不同类型的 Amazon EC2 实例。为了执行此任务,用户创建一个名为 AMI_Testing 的运行手册。此运行手册定义两个输入参数:instanceType
和 imageId
。
{ "description": "AMI Testing", "schemaVersion": "0.3", "assumeRole": "{{assumeRole}}", "parameters": { "assumeRole": { "type": "String", "description": "Role under which to run the automation", "default": "" }, "instanceType": { "type": "String", "description": "Type of EC2 Instance to launch for this test" }, "imageId": { "type": "String", "description": "Source AMI id from which to run instance" } }, "mainSteps": [ { "name": "runInstances", "action": "aws:runInstances", "maxAttempts": 1, "onFailure": "Abort", "inputs": { "ImageId": "{{imageId}}", "InstanceType": "{{instanceType}}", "MinInstanceCount": 1, "MaxInstanceCount": 1 } } ], "outputs": [ "runInstances.InstanceIds" ] }
然后,用户在名为 AMI_instance_types.json
的文件中指定以下目标参数值。
[ { "instanceType" : ["t2.micro"], "imageId" : ["ami-b70554c8"] }, { "instanceType" : ["t2.small"], "imageId" : ["ami-b70554c8"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] }, { "instanceType" : ["t2.medium"], "imageId" : ["ami-cfe4b2b0"] } ]
用户可以通过运行以下命令来运行此自动化并创建在 AMI_instance_types.json
中定义的五个 EC2 实例:
aws ssm start-automation-execution \ --document-name AMI_Testing \ --target-parameter-name imageId \ --target-maps file:///home/TestUser/workspace/runinstances/AMI_instance_types.json
将所有 Amazon EC2 实例设置为目标
您可以通过选择目标列表中的所有实例,在当前 AWS 账户 和 AWS 区域 中的所有 Amazon EC2 实例上运行自动化。例如,如果要重新启动 AWS 账户 和当前 AWS 区域 的所有 Amazon EC2 实例,您可以选择 AWS-RestartEC2Instance
运行手册,然后选择目标列表中的所有实例。
![将运行手册的所有 Amazon EC2 实例设置为目标](images/automation-rate-control-target-all-instances.png)
在您选择所有实例后,Systems Manager 将填充带有星号 (*) 的实例字段,并使字段不可更改(该字段呈灰色)。Systems Manager 还会使 InstanceId 字段中的输入参数字段不可更改。如果您选择将所有实例设置为目标,则使这些字段不可更改是预期行为。