アクションの入力と出力を構成する - AWS Systems Manager

アクションの入力と出力を構成する

各オートメーションアクションは、受け取った入力に基づいて応答します。ほとんどの場合、出力を後続のアクションに渡します。ビジュアルデザインエクスペリエンスでは、[フォーム] パネルの [入力] タブと [出力] タブでアクションの入出力データを設定できます。

オートメーションアクションの出力を定義および使用する方法の詳細については、「アクション出力の入力としての使用」を参照してください。

アクションの入力データを提供する。

各オートメーションアクションには、値を指定する必要がある入力が 1 つ以上あります。アクションの入力に指定する値は、アクションが受け付けるデータ型と形式によって決まります。例えば、aws:sleep アクションの入力には、ISO 8601 形式の文字列値が Duration 入力に必要です。

通常、ランブックのワークフローでは、後続のアクションで使用したい出力を返すアクションを使用します。ランブックのワークフローでエラーが発生しないように、入力値が正しいことを確認することが重要です。入力値も重要です。入力値によって、アクションが期待どおりの出力を返すかどうかが決まるからです。例えば、aws:executeAwsApi アクションを使用するときは、API 操作に適切な値を指定していることを確認する必要があります。

アクションの出力データを定義します。

オートメーションアクションの中には、定義した操作を実行した後に出力を返すものもあります。出力を返すアクションには、出力が事前に定義されているか、ユーザーが出力を定義できるものがあります。例えば、aws:createImage アクションには ImageIdImageState を返す出力があらかじめ定義されています。これとは対照的に、aws:executeAwsApi アクションでは、指定した API オペレーションから必要な出力を定義できます。そのため、1 回の API オペレーションから 1 つ以上の値を返して、後続のアクションで使用できます。

オートメーションアクションの独自の出力を定義するには、出力の名前、データ型、出力値を指定する必要があります。引き続き aws:executeAwsApi アクションを例として使用するために、Amazon EC2 から DescribeInstances API オペレーションを呼び出しているとしましょう。この例では、Amazon EC2 インスタンスの State を返す、あるいは出力し、その出力に基づいてランブックのワークフローを分岐させたいと考えています。InstanceState 出力に名前を付けることを選択し、そのデータ型 String を使用します。

出力の実際の値を定義するプロセスは、アクションによって異なります。例えば、aws:executeScript アクションを使用している場合は、出力にデータを提供するために関数内で return ステートメントを使用する必要があります。aws:executeAwsApiaws:waitForAwsResourcePropertyaws: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 を受け入れる必要があります。