작업에 대한 입력 및 출력 구성 - AWS Systems Manager

작업에 대한 입력 및 출력 구성

각 자동화 작업은 수신한 입력에 따라 응답합니다. 대부분의 경우 출력을 후속 작업에 전달합니다. 시각적 디자인 환경에서는 양식 패널의 입력출력 탭에서 작업의 입력 및 출력 데이터를 구성할 수 있습니다.

자동화 작업의 출력을 정의하고 사용하는 방법에 대한 자세한 내용은 작업 출력을 입력으로 사용 단원을 참조하십시오.

작업에 대한 입력 데이터 제공

자동화 작업마다 값을 제공해야 하는 한 가지 이상의 입력이 있습니다. 작업 입력에 제공하는 값은 작업에 허용되는 데이터 유형 및 형식에 따라 결정됩니다. 예를 들어 aws:sleep 작업의 Duration 입력에는 ISO 8601 형식의 문자열 값이 필요합니다.

일반적으로 런북의 워크플로에서는 후속 작업에서 사용하려는 출력을 반환하는 작업을 사용합니다. 런북 워크플로에서 오류가 발생하지 않도록 입력 값이 올바른지 확인하는 것이 중요합니다. 입력 값은 작업이 예상 출력을 반환하는지 여부를 결정하므로 중요합니다. 예를 들어 aws:executeAwsApi 작업을 사용할 때는 API 작업에 적합한 값을 제공하고 있는지 확인해야 합니다.

작업의 출력 데이터 정의

일부 자동화 동작은 정의된 작업을 수행한 후 출력을 반환합니다. 출력을 반환하는 작업에는 사전 정의된 출력이 있거나 사용자가 직접 출력을 정의할 수 있습니다. 예를 들어, aws:createImage 작업에는 ImageIdImageState를 반환하는 사전 정의된 출력이 있습니다. 이에 비해 aws:executeAwsApi 작업을 사용하면 지정된 API 작업에서 원하는 출력을 정의할 수 있습니다. 따라서 단일 API 작업에서 하나 이상의 값을 반환하여 후속 작업에 사용할 수 있습니다.

자동화 작업에 대한 자체 출력을 정의하려면 출력 이름, 데이터 유형 및 출력 값을 지정해야 합니다. aws:executeAwsApi 작업을 계속 예로 들어 Amazon EC2에서 DescribeInstances API 작업을 직접적으로 호출한다고 가정해 보겠습니다. 이 예제에서는 State Amazon EC2 인스턴스를 반환하거나 출력하고 출력을 기반으로 런북의 워크플로를 분기하려고 합니다. InstanceState 출력의 이름을 지정하고 String 데이터 유형을 사용하도록 선택합니다.

출력의 실제 값을 정의하는 프로세스는 작업에 따라 다릅니다. 예를 들어 aws:executeScript 작업을 사용하는 경우 함수에 return 명령문을 사용하여 출력값에 데이터를 제공해야 합니다. aws:executeAwsApi, aws:waitForAwsResourcePropertyaws: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을 받아야 합니다.