配置操作的输入和输出 - AWS Systems Manager

配置操作的输入和输出

每个自动化操作都会根据其收到的输入进行响应。在大多数情况下,您随后会将输出传递给后续操作。在视觉对象设计体验中,您可以在表单面板的输入输出选项卡中配置操作的输入和输出数据。

有关如何定义和使用自动化操作输出的详细信息,请参阅 使用操作输出作为输入

为操作提供输入数据

每个自动化操作都有一个或多个输入,您必须为其提供值。您为操作输入提供的值由操作接受的数据类型和格式决定。例如,这些 aws:sleep 操作要求 Duration 输入采用 ISO 8601 格式的字符串值。

通常,您在运行手册的工作流程中使用操作,这些操作将返回要在后续操作中使用的输出。请务必确保输入值正确,以避免运行手册的工作流程出现错误。输入值也很重要,因为其决定了操作是否返回预期的输出。例如,在使用 aws:executeAwsApi 操作时,您需要确保为 API 操作提供了正确的值。

定义操作的输出数据

一些自动化操作在执行其定义的操作后会返回输出。返回输出的操作要么具有预定义的输出,要么允许您自己定义输出。例如,aws:createImage 操作具有返回 ImageIdImageState 的预定义输出。相比之下,通过 aws:executeAwsApi 操作,您可以定义您想要从指定 API 操作中获得的输出。因此,您可以从单个 API 操作中返回一个或多个值,以便在后续操作中使用。

为自动化操作定义自己的输出需要您指定输出的名称、数据类型和输出值。要继续使用 aws:executeAwsApi 操作作为示例,假设您正在从 Amazon EC2 调用 DescribeInstances API 操作。在此示例中,您想要返回或输出 Amazon EC2 实例的 State,并根据输出对运行手册的工作流程进行分支。您可以选择命名输出 InstanceState,然后使用 String 数据类型。

定义输出实际值的过程因操作而异。例如,如果您使用的是 aws:executeScript 操作,则必须在函数中使用 return 语句为输出提供数据。对于 aws:executeAwsApiaws:waitForAwsResourcePropertyaws:assertAwsResourceProperty 等其他操作,则需要 SelectorSelector(或某些操作所指的 PropertySelector),是一个 JSONPath 字符串,用于处理来自 API 操作的 JSON 响应。了解 API 操作的 JSON 响应对象的结构至关重要,这样您才能为输出选择正确的值。使用前面提到 DescribeInstances API 操作,请参阅以下 JSON 响应示例:

{ "reservationSet": { "item": { "reservationId": "r-1234567890abcdef0", "ownerId": 123456789012, "groupSet": "", "instancesSet": { "item": { "instanceId": "i-1234567890abcdef0", "imageId": "ami-bff32ccc", "instanceState": { "code": 16, "name": "running" }, "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal", "dnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com", "reason": "", "keyName": "my_keypair", "amiLaunchIndex": 0, "productCodes": "", "instanceType": "t2.micro", "launchTime": "2018-05-08T16:46:19.000Z", "placement": { "availabilityZone": "eu-west-1c", "groupName": "", "tenancy": "default" }, "monitoring": { "state": "disabled" }, "subnetId": "subnet-56f5f000", "vpcId": "vpc-11112222", "privateIpAddress": "192.168.1.88", "ipAddress": "54.194.252.215", "sourceDestCheck": true, "groupSet": { "item": { "groupId": "sg-e4076000", "groupName": "SecurityGroup1" } }, "architecture": "x86_64", "rootDeviceType": "ebs", "rootDeviceName": "/dev/xvda", "blockDeviceMapping": { "item": { "deviceName": "/dev/xvda", "ebs": { "volumeId": "vol-1234567890abcdef0", "status": "attached", "attachTime": "2015-12-22T10:44:09.000Z", "deleteOnTermination": true } } }, "virtualizationType": "hvm", "clientToken": "xMcwG14507example", "tagSet": { "item": { "key": "Name", "value": "Server_1" } }, "hypervisor": "xen", "networkInterfaceSet": { "item": { "networkInterfaceId": "eni-551ba000", "subnetId": "subnet-56f5f000", "vpcId": "vpc-11112222", "description": "Primary network interface", "ownerId": 123456789012, "status": "in-use", "macAddress": "02:dd:2c:5e:01:69", "privateIpAddress": "192.168.1.88", "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal", "sourceDestCheck": true, "groupSet": { "item": { "groupId": "sg-e4076000", "groupName": "SecurityGroup1" } }, "attachment": { "attachmentId": "eni-attach-39697adc", "deviceIndex": 0, "status": "attached", "attachTime": "2018-05-08T16:46:19.000Z", "deleteOnTermination": true }, "association": { "publicIp": "54.194.252.215", "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com", "ipOwnerId": "amazon" }, "privateIpAddressesSet": { "item": { "privateIpAddress": "192.168.1.88", "privateDnsName": "ip-192-168-1-88.eu-west-1.compute.internal", "primary": true, "association": { "publicIp": "54.194.252.215", "publicDnsName": "ec2-54-194-252-215.eu-west-1.compute.amazonaws.com", "ipOwnerId": "amazon" } } }, "ipv6AddressesSet": { "item": { "ipv6Address": "2001:db8:1234:1a2b::123" } } } }, "iamInstanceProfile": { "arn": "arn:aws:iam::123456789012:instance-profile/AdminRole", "id": "ABCAJEDNCAA64SSD123AB" }, "ebsOptimized": false, "cpuOptions": { "coreCount": 1, "threadsPerCore": 1 } } } } } }

在 JSON 响应对象中,实例 State 嵌套在 Instances 对象中,而该对象嵌套在 Reservations 对象中。要返回实例 State 的值,请使用以下字符串作为 Selector,以便可以在输出中使用该值:$.Reservations[0].Instances[0].State.Name

要在运行手册工作流程的后续操作中引用输出值,请使用以下格式:{{ StepName.NameOfOutput }}。例如,{{ GetInstanceState.InstanceState }}。在视觉对象设计体验中,您可以使用输入下拉菜单选择要在后续操作中使用的输出值。在后续操作中使用输出时,输出的数据类型必须与输入的数据类型相匹配。在此示例中,InstanceState 输出为 String。因此,要在后续操作的输入中使用该值,输入必须接受 String