Configurar entradas e saídas para suas ações - AWS Systems Manager

Configurar entradas e saídas para suas ações

Cada ação de automação responde com base na entrada recebida. Na maioria dos casos, você envia a saída para as ações subsequentes. Na experiência de design visual, é possível configurar os dados de entrada e saída de uma ação nas guias Entradas e Saídas do painel Formulário.

Para obter informações detalhadas sobre como definir e usar a saída para ações de automação, consulte Uso de saídas de ações como entradas.

Forneça dados de entrada para uma ação

Cada ação de automação tem uma ou mais entradas para as quais você deve fornecer um valor. O valor que você fornece para a entrada de uma ação é determinado pelo tipo e formato de dados aceitos pela ação. Por exemplo, as ações aws:sleep exigem um valor de string formatado em ISO 8601 para a entrada Duration.

Geralmente, você usa ações no fluxo de trabalho do seu runbook que retornam a saída que você deseja usar em ações subsequentes. É importante garantir que seus valores de entrada estejam corretos para evitar erros no fluxo de trabalho do seu runbook. Os valores de entrada também são importantes porque determinam se a ação retorna a saída esperada. Por exemplo, ao usar a ação aws:executeAwsApi, você quer ter certeza de que está fornecendo o valor certo para a operação da API.

Definir dados de saída para uma ação

Algumas ações de automação retornam a saída após realizar suas operações definidas. As ações que retornam uma saída têm saídas predefinidas ou permitem que você mesmo as defina. Por exemplo, a ação aws:createImage tem saídas predefinidas que retornam um ImageId e ImageState. Comparativamente, com a ação aws:executeAwsApi, você pode definir as saídas que deseja da operação de API especificada. Como resultado, você pode retornar um ou mais valores de uma única operação de API para usar em ações subsequentes.

Definir suas próprias saídas para uma ação de automação exige que você especifique um nome da saída, o tipo de dados e o valor da saída. Para continuar usando a ação aws:executeAwsApi como exemplo, digamos que você esteja chamando a operação da API DescribeInstances do Amazon EC2. Neste exemplo, você deseja retornar, ou gerar como saída, o State de uma instância do Amazon EC2 e ramificar o fluxo de trabalho do seu runbook com base na saída. Você escolhe nomear a saída InstanceState e usar o tipo de dados String.

O processo para definir o valor real da saída é diferente dependendo da ação. Por exemplo, se você estiver usando a ação aws:executeScript, deverá usar instruções return em suas funções para fornecer dados às saídas. Com outras ações como aws:executeAwsApi, aws:waitForAwsResourceProperty e aws:assertAwsResourceProperty, um Selector é necessário. O Selector, ou PropertySelector como algumas ações se referem a ele, é uma string JSONPath usada para processar a resposta JSON de uma operação de API. É importante entender como o objeto de resposta JSON de uma operação de API é estruturado para que você possa selecionar o valor correto para sua saída. Usando a operação de API DescribeInstances mencionada anteriormente, veja o exemplo de resposta JSON a seguir:

{ "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 } } } } } }

No objeto de resposta JSON, a instância State está aninhada em um objeto Instances que está aninhado no objeto Reservations. Para retornar o valor da instância State, use a seguinte string para Selector para que o valor possa ser usado em nossa saída: $.Reservations[0].Instances[0].State.Name.

Para referenciar um valor de saída em ações subsequentes do fluxo de trabalho do seu runbook, o seguinte formato é usado: {{ StepName.NameOfOutput }}. Por exemplo, .{{ GetInstanceState.InstanceState }} Na experiência de design visual, é possível escolher valores de saída para usar em ações subsequentes utilizando o menu suspenso para a entrada. Ao usar saídas em ações subsequentes, o tipo de dados da saída deve corresponder ao tipo de dados da entrada. Neste exemplo, a saída InstanceState é uma String. Portanto, para usar o valor na entrada de uma ação subsequente, a entrada deve aceitar uma String.