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

Amazon Systems Manager Change Manager 不再向新客户开放。现有客户可以继续正常使用该服务。有关更多信息,请参阅 Amazon Systems Manager Change Manager 可用性变更

映射自动化目标

通过 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 Automation 的目标

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 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 \ –-parameters input parameters \ --target-maps path 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 的运行手册。此运行手册定义两个输入参数: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 EC2 实例设置为目标

您可以通过选择目标列表中的所有实例,在当前 Amazon Web Services 账户 和 Amazon Web Services 区域 中的所有 Amazon EC2 实例上运行自动化。例如,如果要重新启动 Amazon Web Services 账户 和当前 Amazon Web Services 区域 的所有 Amazon EC2 实例,您可以选择 AWS-RestartEC2Instance 运行手册,然后选择目标列表中的所有实例

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

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