关于目标 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

关于目标

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

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

注意

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

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

设置目标标签

多个 Amazon 资源支持标签,包括 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) 存储桶(仅举几例)。您可以通过设置目标标签在 Amazon 资源上快速运行自动化。标签是一种键值对,例如 Operating_System-Linux 或 Department-Finance。如果为资源指定一个特定名称,则还可以使用“Name”作为键,将资源名称用作值。

在将标签指定为自动化的目标时,还可以指定目标参数。目标参数使用 TargetParameterName 选项。通过选择目标参数,可以定义在其上运行自动化的资源的类型。使用标签指定的目标参数必须是运行手册中定义的有效参数。例如,如果要使用标签将数十个 EC2 实例设为目标,请选择 InstanceId 目标参数。通过选择此参数,可以将实例 定义为自动化的资源类型。此外,在创建自定义运行手册时,您可以指定目标类型/AWS::EC2::Instance 以确保仅使用实例。下面的屏幕截图使用 AWS-DetachEBSVolume 运行手册。逻辑目标参数为 VolumeId


                            使用标记作为 Systems Manager 自动化的目标

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

重要

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

aws ssm describe-document \ --name AWS-DeleteSnapshot

下面是一些使用标签设置资源目标的示例 Amazon 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

设置目标 Amazon Resource Groups

您可以指定单个 Amazon 资源组作为自动化目标。Systems Manager 为目标资源组中的每个对象创建一个子自动化。

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

下面的 Amazon 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 自动化功能的 Amazon 资源组设为目标

设置目标参数值

您也可以将参数值设置为目标:输入 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 name_of_runbook \ --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_runbook \ –-parameters one_or_more_input_parameters \ --target-maps full_path_to_file/file_name.json

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

aws ssm start-automation-execution \ --document-name name_of_runbook \ --target-maps http://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/file_name.json

下面是一个帮助您了解 TargetMaps 选项的示例方案。在此方案中,用户想要从不同的 AMIs 创建不同类型的 Amazon EC2 实例。为了执行此任务,用户创建一个名为 AMI_Testing 的运行手册。此运行手册定义两个输入参数: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"] } ]

用户可以通过运行以下命令来运行此自动化并创建在 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 Web Services 账户 和 Amazon Web Services 区域 中,通过选择目标列表中的所有实例,在所有托管实例上运行一个自动化。例如,如果您想重新启动 Amazon Web Services 账户 和当前 Amazon Web Services 区域 的所有托管式实例,您可以选择 AWS-RestartEC2Instance 运行手册,然后选择 Targets(目标)列表中的 All instances(所有实例)。


                            将运行手册的所有实例设为目标

在您选择所有实例后,Systems Manager 将填充带有星号 (*) 的实例字段,并使字段不可更改(该字段呈灰色)。Systems Manager 还会使 InstanceId 字段中的输入参数字段不可更改。如果您选择将所有实例设置为目标,则使这些字段不可更改是预期行为。