配置操作的输入和输出
每个自动化操作都会根据其收到的输入进行响应。在大多数情况下,您随后会将输出传递给后续操作。在视觉对象设计体验中,您可以在表单面板的输入和输出选项卡中配置操作的输入和输出数据。
有关如何定义和使用自动化操作输出的详细信息,请参阅 使用操作输出作为输入。
为操作提供输入数据
每个自动化操作都有一个或多个输入,您必须为其提供值。您为操作输入提供的值由操作接受的数据类型和格式决定。例如,这些 aws:sleep
操作要求 Duration
输入采用 ISO 8601 格式的字符串值。
通常,您在运行手册的工作流程中使用操作,这些操作将返回要在后续操作中使用的输出。请务必确保输入值正确,以避免运行手册的工作流程出现错误。输入值也很重要,因为其决定了操作是否返回预期的输出。例如,在使用 aws:executeAwsApi
操作时,您需要确保为 API 操作提供了正确的值。
定义操作的输出数据
一些自动化操作在执行其定义的操作后会返回输出。返回输出的操作要么具有预定义的输出,要么允许您自己定义输出。例如,aws:createImage
操作具有返回 ImageId
和 ImageState
的预定义输出。相比之下,通过 aws:executeAwsApi
操作,您可以定义您想要从指定 API 操作中获得的输出。因此,您可以从单个 API 操作中返回一个或多个值,以便在后续操作中使用。
为自动化操作定义自己的输出需要您指定输出的名称、数据类型和输出值。要继续使用 aws:executeAwsApi
操作作为示例,假设您正在从 Amazon EC2 调用 DescribeInstances
API 操作。在此示例中,您想要返回或输出 Amazon EC2 实例的 State
,并根据输出对运行手册的工作流程进行分支。您可以选择命名输出 InstanceState
,然后使用 String
数据类型。
定义输出实际值的过程因操作而异。例如,如果您使用的是 aws:executeScript
操作,则必须在函数中使用 return
语句为输出提供数据。对于 aws:executeAwsApi
、aws:waitForAwsResourceProperty
和 aws:assertAwsResourceProperty
等其他操作,则需要 Selector
。Selector
(或某些操作所指的 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
。