設定動作的輸入和輸出 - 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:assertAwsResourcePropertySelector 是必需的。或正如某些動作所參考的,SelectorPropertySelector 是用來處理來自 API 操作的 JSON 回應的 JSONPath 字串。了解來自 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 回應物件中,執行個體 StateInstances 物件中形成巢狀,該物件又在 Reservations 物件中形成巢狀。若要傳回執行個體 State 的值,請為 Selector 使用下列字串,以便在我們的輸出中使用該值:$.Reservations[0].Instances[0].State.Name

若要在執行手冊工作流程的後續動作中參照輸出值,請使用下列格式:{{ StepName.NameOfOutput }}。例如:{{ GetInstanceState.InstanceState }}。在視覺化設計體驗中,您可以使用輸入的下拉式清單,選擇要在後續動作中使用的輸出值。在後續動作中使用輸出時,輸出的資料類型必須與輸入的資料類型相符。在此範例中,InstanceState 輸出為 String。因此,若要在後續動作的輸入中使用該值,輸入必須接受 String