アクションの入力と出力を構成する
各オートメーションアクションは、受け取った入力に基づいて応答します。ほとんどの場合、出力を後続のアクションに渡します。ビジュアルデザインエクスペリエンスでは、[フォーム] パネルの [入力] タブと [出力] タブでアクションの入出力データを設定できます。
オートメーションアクションの出力を定義および使用する方法の詳細については、「アクション出力の入力としての使用」を参照してください。
アクションの入力データを提供する。
各オートメーションアクションには、値を指定する必要がある入力が 1 つ以上あります。アクションの入力に指定する値は、アクションが受け付けるデータ型と形式によって決まります。例えば、aws:sleep
アクションの入力には、ISO 8601 形式の文字列値が Duration
入力に必要です。
通常、ランブックのワークフローでは、後続のアクションで使用したい出力を返すアクションを使用します。ランブックのワークフローでエラーが発生しないように、入力値が正しいことを確認することが重要です。入力値も重要です。入力値によって、アクションが期待どおりの出力を返すかどうかが決まるからです。例えば、aws:executeAwsApi
アクションを使用するときは、API 操作に適切な値を指定していることを確認する必要があります。
アクションの出力データを定義します。
オートメーションアクションの中には、定義した操作を実行した後に出力を返すものもあります。出力を返すアクションには、出力が事前に定義されているか、ユーザーが出力を定義できるものがあります。例えば、aws:createImage
アクションには ImageId
と ImageState
を返す出力があらかじめ定義されています。これとは対照的に、aws:executeAwsApi
アクションでは、指定した API オペレーションから必要な出力を定義できます。そのため、1 回の API オペレーションから 1 つ以上の値を返して、後続のアクションで使用できます。
オートメーションアクションの独自の出力を定義するには、出力の名前、データ型、出力値を指定する必要があります。引き続き aws:executeAwsApi
アクションを例として使用するために、Amazon EC2 から DescribeInstances
API オペレーションを呼び出しているとしましょう。この例では、Amazon EC2 インスタンスの State
を返す、あるいは出力し、その出力に基づいてランブックのワークフローを分岐させたいと考えています。InstanceState
出力に名前を付けることを選択し、そのデータ型 String
を使用します。
出力の実際の値を定義するプロセスは、アクションによって異なります。例えば、aws:executeScript
アクションを使用している場合は、出力にデータを提供するために関数内で return
ステートメントを使用する必要があります。aws:executeAwsApi
、aws:waitForAwsResourceProperty
、aws:assertAwsResourceProperty
などのアクションでは、Selector
が必要です。Selector
、または一部のアクションで参照されるような PropertySelector
は、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 レスポンスオブジェクトでは、State
インスタンスは Instances
オブジェクトにネストされ、次いで Reservations
オブジェクトにネストされます。State
インスタンスの値を返すには、Selector
に文字列 ($.Reservations[0].Instances[0].State.Name
) を使用して、その値を出力に使用できるようにします。
ランブックのワークフローの後続アクションで出力値を参照するには、次の形式を使用します: {{
。例えば、StepName
.NameOfOutput
}}{{ GetInstanceState.InstanceState }}
と指定します。ビジュアルデザインエクスペリエンスでは、入力のドロップダウンを使用して、後続のアクションで使用する出力値を選択できます。後続のアクションで出力を使用する場合、出力のデータ型は入力のデータ型と一致する必要があります。この例では、InstanceState
出力は、String
です。したがって、その値を後続のアクションの入力で使用するには、入力が String
を受け入れる必要があります。