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

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

关于目标

使用Targets参数来快速定义队列中的哪些资源能够运行 Automation。例如,如果需要运行一个重新启动托管实例的自动化,不必在控制台中手动选择数十个实例 ID 或在命令中键入它们,您可以通过使用Targets参数。

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

注意

任何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”作为键,将资源名称用作值。

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


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

这些区域有:AWS-DetachEBSVolumerunbook 还包含一个名为Target type,设置为/AWS::EC2::Volume。这意味着,如果标签键对Finance-TestEnv返回不同类型的资源(例如 EC2 实例、Amazon EBS 卷、Amazon EBS 快照),则仅使用 Amazon EBS 卷。

重要

目标参数名称区分大小写。如果您通过使用Amazon命令行界面 (AmazonCLI)或AmazonWindows PowerShell 工具,然后您必须完全按照运行手册中的定义输入目标参数名称。否则,系统将返回 InvalidAutomationExecutionParametersException 错误。您可以使用DescribeDocumentAPI 操作,以查看有关特定 Runbook 中可用目标参数的信息。以下是一个示例AmazonCLI 命令,该命令提供有关AWS-DeleteSnapshot文档.

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

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

示例 1:使用键/值对将标签指定为目标以重启 Amazon EC2 实例

此示例重新启动带有键为DecationHumanResources。目标参数使用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"

示例 2:使用键/值对将标签指定为目标以删除 Amazon EBS 快照

下面的示例使用了AWS-DeleteSnapshotrunbook 删除所有密钥为的快照名称2018 年 1 月备份。目标参数使用 VolumeId 参数。

aws ssm start-automation-execution \ --document-name AWS-DeleteSnapshot \ --targets Key=tag:Name,Values=January2018Backups \ --target-parameter-name VolumeId

设置目标Amazon资源组

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

例如,假设您的一个资源组名为 PatchedAMIs。此资源组包括一个列表,其中有 25 个 WindowsAmazon Machine Images(AMIs),这些都是例行修补的。如果您运行的自动化使用AWS-CreateManagedWindowsInstancerunbook 并以此资源组为目标,则 Systems Manager agement 为 25 个AMIs。这意味着,通过将 PatchedAMIS 资源组设置为目标,自动化会从修补的AMIs。当所有子 Automation 都完成处理或达到最终状态时,父 Automation 完成。

以下AmazonCLI 命令适用于 PatCHAMIs 资源组示例。命令使用AmiId参数--target-parameter-name选项。该命令不包含定义从每个AMI。这些区域有:AWS-CreateManagedWindowsInstance运行簿默认为 t2.medium 实例类型,因此该命令将创建 25 个 t2.medium Amazon EC2 实例Windows Server。

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

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


                            定位Amazon具有 Systems Manager 自动化功能的资源组

设置目标参数值

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

例如,假设 Runbook 包含一个InstanceID参数。如果您将InstanceID参数,则 Systems Manager 会为指定的每个实例 ID 值运行一个子 Automation。当 Automation 完成每个指定实例的运行或自动化失败时,父 Automation 完成。您最多可以将 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不是有效的参数。运行以参数值为目标的 Automation 时,不要选择此项。

设置目标参数值映射

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 选项的示例方案。在此方案中,用户需要创建不同类型的 Amazon EC2 实例,从不同的AMIs。要执行此任务,用户创建一个名为 AMI_Task 的运行簿。此 Runbook 定义两个输入参数: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 并创建五个 EC2 实例。AMI_instance_types.json,通过运行以下命令。

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运行簿,然后选择所有实例来自 的目标列表。


                            定位 Runbook 的所有实例

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