AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

关于目标

通过 Targets 参数,可以快速定义队列中的哪些资源能够运行 Automation 工作流程。例如,如果需要运行一个重新启动托管实例的 Automation,不必在控制台中手动选择数十个实例 ID 或在命令中键入它们,您可以通过使用 Targets 参数指定 Amazon EC2 标签将实例设为目标。

运行使用目标的 Automation 时,Systems Manager 会为每个目标创建一个子 Automation。例如,如果您通过指定标签来定位 Amazon Elastic Block Store (Amazon EBS) 卷,并且这些标签解析为 100 个 Amazon EBS 卷,则 Systems Manager 创建 100 个子 Automation 工作流程。当所有子 Automation 都到达最终状态时,父 Automation 完成。

注意

在运行时指定的任何 input parameters(在控制台的 Input parameters (输入参数) 部分或在命令行中使用 parameters 选项)都由所有子 Automation 自动处理。

您可以使用标签、Resource Groups和参数值为 Automation 执行设置目标资源。此外,您还可以使用 TargetMaps 选项在命令行或文件中将多个参数值设为目标。下一节更详细地介绍每个设置目标选项。

设置目标标签

许多 AWS 资源都支持标签,包括 Amazon EC2 和 Amazon Relational Database Service (Amazon RDS) 实例、Amazon Elastic Block Store (Amazon EBS) 卷和快照、Resource Groups 和 Amazon Simple Storage Service (Amazon S3) 存储桶等等。您可以通过设置目标标签在 AWS 资源上快速运行 Automation 工作流程。标签是一种键值对,例如 Operating_System-Linux 或 Department-Finance。如果为资源指定一个特定名称,则还可以使用“Name”作为键,将资源名称用作值。

在将标签指定为 Automation 的目标时,还可以指定目标参数。目标参数使用 TargetParameterName 选项。通过选择目标参数,可以定义在其上运行 Automation 的资源的类型。使用标签指定的目标参数必须是 Automation 文档中定义的有效参数。例如,如果要使用标签将数十个 Amazon EC2 实例设为目标,请选择 InstanceId 目标参数。通过选择此参数,可以将实例 定义为 Automation 执行的资源类型。下面的屏幕截图使用 AWS-DetachEBSVolume 文档。逻辑目标参数为 VolumeId


                            使用标签来设置 Systems Manager Automation 执行目标

AWS-DetachEBSVolume 文档还包括一个名为 Target type (目标类型) 的特殊属性,其值设置为 /AWS::EC2::Volume。这意味着,如果标签键对 Finance-TestEnv 返回不同类型的资源(例如,Amazon EC2 实例、Amazon EBS 卷、Amazon EBS 快照),则仅使用 Amazon EBS 卷。

重要

目标参数名称区分大小写。如果使用 AWS CLI 或 AWS Tools for Windows PowerShell 运行 Automation,则必须完全按照 Automation 文档中的定义输入目标参数名称。否则,系统将返回 InvalidAutomationExecutionParametersException 错误。您可以使用 DescribeDocument API 操作来查看有关特定文档中可用目标参数的信息。下面是一个示例 AWS CLI 命令,它提供有关 AWS-DeleteSnapshot 文档的信息:

aws ssm describe-document --name AWS-DeleteSnapshot

下面是一些使用标签设置资源目标的示例 AWS CLI 命令。

示例 1:使用键/值对定位标签以重启 Amazon EC2 实例

此示例重新启动带有键为 Department、值为 HumanResources 的标签的所有 Amazon EC2 实例。目标参数使用 Automation 文档中的 InstanceId 参数。该示例使用了一个附加参数,通过使用 Automation 服务角色(也称为代入角色)来运行 Automation。

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"

示例 1:使用键/值对定位标签以删除 Amazon EBS 快照

下面的示例使用 AWS-DeleteSnapshot Automation 文档删除键为 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 资源组指定为 Automation 的目标。Systems Manager 会为目标资源组中的每个对象创建一个子 Automation。

例如,假设您的一个资源组名为 PatchedAMIs。此资源组包括一个列表,其中有 25 个定期进行修补的 Windows Amazon 系统映像 (AMI)。如果您运行使用 AWS-CreateManagedWindowsInstance 文档并以此资源组为目标的 Automation,则 Systems Manager 会为 25 个 AMI 中的每一个创建一个子 Automation。也就是说,通过将 PatchedAMIs 资源组设置为目标,Automation 会从修补的 AMI 列表中创建 25 个实例。当所有子 Automation 都完成处理或到达最终状态时,父 Automation 完成。

下面的 AWS CLI 命令适用于此 PatchAMIs 资源组示例。该命令中,--target-parameter-name 选项采用 AmiId 参数。该命令不包含定义从每个 AMI 创建的实例类型的附加参数。AWS-CreateManagedWindowsInstance 文档默认为 t2.medium 实例类型,因此该命令将创建 25 个 t2.medium Windows 实例。

aws ssm start-automation-execution --document-name AWS-CreateManagedWindowsInstance --targets Key=ResourceGroup,Values=PatchedAMIs --target-parameter-name AmiId

下面的控制台示例使用名为 t2-micro-instances 的资源组。


                            使用 AWS 资源组设置 Systems Manager Automation 执行目标

设置目标参数值

您也可以将参数值设置为目标:输入 ParameterValues 作为键,然后输入要在其上运行 Automation 工作流程的特定资源值。如果指定多个值,Systems Manager 将在指定的每个值上运行子 Automation 工作流程。

例如,假设 Automation 文档包含 InstanceID 参数。如果在运行此 Automation 时将 InstanceID 参数值设置为目标,则 Systems Manager 会为指定的每个实例 ID 值运行一个子 Automation。当 Automation 完成每个指定实例的运行或执行失败时,父 Automation 完成。您最多可以将 50 个参数值设置为目标。

下面的示例使用 AWS-CreateImage Automation 文档。指定的目标参数名称为 InstanceId。键使用 ParameterValues。值为两个 Amazon EC2 实例 ID。此命令为每个实例创建一个 Automation 工作流程,这将从每个实例生成一个 AMI。

aws ssm start-automation-execution --document-name AWS-CreateImage --target-parameter-name InstanceId --targets Key=ParameterValues,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE

注意

AutomationAssumeRole 不是有效的参数。运行以参数值为目标的 Automation 工作流程时,不要选择此项。

设置目标参数值映射

TargetMaps 选项扩展了您设置 ParameterValues 目标的能力。您可以在命令行中使用 TargetMaps 输入一个参数值数组。在命令行中,最多可以指定 50 个参数值。如果要运行指定 50 个以上参数值的命令,请在 JSON 文件中输入这些值。然后,可以在命令行中调用该文件。

注意

控制台不支持 TargetMaps

在命令中使用 TargetMaps 选项以下面的格式指定多个参数值:

aws ssm start-automation-execution —document-name name_of_document --target-maps “parameterA=parameterA1, parameterB=parameterB1, parameterC=parameterC1” “parameterA=parameterA2, parameterB=parameterB2, parameterC=parameterC2” “parameterA=parameterA3, parameterB=parameterB3, parameterC=parameterC3

如果要为 TargetMaps 选项输入 50 个以上的参数值,请使用以下 JSON 格式在文件中指定这些值。在提供多个参数值时,使用 JSON 文件还有助于提高可读性。

[ {“parameterA”:”parameterValueA1”, “parameterB”:”parameterValueB1”, “parameterC”:”parameterValueC1”}, {“parameterA”:”parameterValueA2”, “parameterB”:”parameterValueB2”, “parameterC”:”parameterValueC2”}, {“parameterA”:”parameterValueA3”, “parameterB”:”parameterValueB3”, “parameterC”:”parameterValueC3”} ]

使用 .json 文件扩展名保存该文件。可以使用下面的命令调用此文件:

aws ssm start-automation-execution --document-name name_of_document –-parameters one_or_more_input_parameters --target-maps full_path_to_file/file_name.json

您还可以从 Amazon S3 存储桶下载此文件(前提是您有权从存储桶读取数据)。使用下面的命令格式:

aws ssm start-automation-execution —document-name name_of_document --target-maps http://bucket_name.s3.amazonaws.com/file_name.json

下面是一个帮助您了解 TargetMaps 选项的示例方案。在此方案中,用户需要从不同的 AMI 创建不同类型的 Amazon EC2 实例。为了执行此任务,用户创建一个名为 AMI_Testing 的 Automation 文档。此文档定义两个输入参数:instanceTypeimageId

{ "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"] } ]

用户可以通过运行以下命令来运行此 Automation 并创建在 AMI_instance_types.json 中定义的五个 Amazon 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