Menggunakan output tindakan sebagai input - AWS Systems Manager

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan output tindakan sebagai input

Beberapa tindakan otomatisasi mengembalikan output yang telah ditentukan sebelumnya. Anda dapat meneruskan output ini sebagai input ke langkah selanjutnya di runbook Anda menggunakan format. {{stepName.outputName}} Anda juga dapat menentukan output khusus untuk tindakan otomatisasi di runbook Anda. Ini memungkinkan Anda menjalankan skrip, atau menjalankan operasi API untuk yang lain AWS layanan sekali sehingga Anda dapat menggunakan kembali nilai sebagai input dalam tindakan selanjutnya. Jenis parameter dalam runbook bersifat statis. Ini berarti jenis parameter tidak dapat diubah setelah ditentukan. Untuk menentukan output langkah menyediakan bidang-bidang berikut:

  • Nama: (Wajib) Nama keluaran yang digunakan untuk mereferensikan nilai output di langkah selanjutnya.

  • Selector: (Required) Ekspresi JsonPath yang digunakan untuk menentukan nilai output.

  • Jenis: (Opsional) Tipe data dari nilai yang dikembalikan oleh bidang pemilih. Nilai tipe yang valid adalahString,Integer,Boolean,StringList,StringMap,MapList. Nilai default-nya adalah String.

Jika nilai output tidak cocok dengan tipe data yang Anda tentukan, Automation mencoba mengonversi tipe data. Misalnya, jika nilai yang dikembalikan adalahInteger, tetapi yang Type ditentukan adalahString, nilai output akhir adalah String nilai. Jenis konversi berikut didukung:

  • Stringnilai dapat dikonversi keStringList, Integer danBoolean.

  • Integernilai dapat dikonversi ke String danStringList.

  • Booleannilai dapat dikonversi ke String danStringList.

  • StringList,IntegerList, atau BooleanList nilai-nilai yang mengandung satu elemen dapat dikonversi keString,Integer, atauBoolean.

Saat menggunakan parameter atau output dengan tindakan otomatisasi, tipe data tidak dapat diubah secara dinamis dalam input tindakan.

Berikut adalah contoh runbook yang menunjukkan cara mendefinisikan output tindakan, dan referensi nilai sebagai input untuk tindakan selanjutnya. Runbook melakukan hal berikut:

  • Menggunakan aws:executeAwsApi tindakan untuk memanggil operasi Amazon EC2 DescribeImages API untuk mendapatkan nama Windows Server 2016 tertentu. AMI Ini menampilkan ID gambar sebagai ImageId.

  • Menggunakan aws:executeAwsApi tindakan untuk memanggil operasi Amazon EC2 RunInstances API untuk meluncurkan satu instance yang menggunakan ImageId dari langkah sebelumnya. Ini menampilkan instans ID sebagai InstanceId.

  • Menggunakan aws:waitForAwsResourceProperty tindakan untuk melakukan polling operasi Amazon EC2 DescribeInstanceStatus API untuk menunggu instans mencapai status. running Tindakan akan berakhir dalam 60 detik. Langkah berakhir jika status instans gagal mencapai running setelah 60 detik polling.

  • Menggunakan aws:assertAwsResourceProperty tindakan untuk memanggil operasi API Amazon EC2 DescribeInstanceStatus untuk menegaskan bahwa instans ada dalam running status. Langkah gagal jika status instans tidak running.

--- description: Sample runbook using AWS API operations schemaVersion: '0.3' assumeRole: "{{ AutomationAssumeRole }}" parameters: AutomationAssumeRole: type: String description: "(Optional) The ARN of the role that allows Automation to perform the actions on your behalf." default: '' ImageName: type: String description: "(Optional) Image Name to launch EC2 instance with." default: "Windows_Server-2022-English-Full-Base*" mainSteps: - name: getImageId action: aws:executeAwsApi inputs: Service: ec2 Api: DescribeImages Filters: - Name: "name" Values: - "{{ ImageName }}" outputs: - Name: ImageId Selector: "$.Images[0].ImageId" Type: "String" - name: launchOneInstance action: aws:executeAwsApi inputs: Service: ec2 Api: RunInstances ImageId: "{{ getImageId.ImageId }}" MaxCount: 1 MinCount: 1 outputs: - Name: InstanceId Selector: "$.Instances[0].InstanceId" Type: "String" - name: waitUntilInstanceStateRunning action: aws:waitForAwsResourceProperty timeoutSeconds: 60 inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running - name: assertInstanceStateRunning action: aws:assertAwsResourceProperty inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running outputs: - "launchOneInstance.InstanceId" ...

Setiap tindakan otomatisasi yang dijelaskan sebelumnya mengizinkan Anda memanggil operasi API tertentu dengan menentukan namespace layanan, nama operasi API, parameter input, dan parameter output. Input didefinisikan oleh operasi API yang Anda pilih. Anda dapat melihat operasi API (juga disebut metode) dengan memilih layanan di navigasi kiri pada halaman Referensi Layanan. Pilih metode di bagian Klien untuk layanan yang ingin Anda jalankan. Misalnya, semua operasi API (metode) untuk Amazon Relational Database Service (Amazon RDS) tercantum di halaman berikut: Metode Amazon RDS.

Anda dapat melihat skema untuk setiap tindakan otomatisasi di beberapa lokasi berikut:

Skema termasuk deskripsi dari bidang yang diperlukan untuk menggunakan setiap tindakan.

Menggunakan Pemilih/ bidang PropertySelector

Setiap tindakan otomatisasi mengharuskan Anda menentukan output Selector (untuk aws:executeAwsApi) atau PropertySelector (untuk aws:assertAwsResourceProperty dan aws:waitForAwsResourceProperty). Bidang ini digunakan untuk memproses respons JSON dari operasi AWS API. Bidang ini menggunakan sintaks JSONPath.

Berikut adalah contoh untuk membantu menggambarkan konsep ini untuk aws:executeAwsAPi tindakan.

--- mainSteps: - name: getImageId action: aws:executeAwsApi inputs: Service: ec2 Api: DescribeImages Filters: - Name: "name" Values: - "{{ ImageName }}" outputs: - Name: ImageId Selector: "$.Images[0].ImageId" Type: "String" ...

Di aws:executeAwsApi langkah getImageId, otomatisasi menjalankan DescribeImages operasi API dan menerima respon dari ec2. Otomatisasi kemudian berlaku Selector - "$.Images[0].ImageId" ke respon API dan memberikan nilai yang dipilih ke variabel ImageId output. Beberapa langkah lain dalam otomatisasi yang sama dapat menggunakan nilai ImageId dengan menentukan "{{ getImageId.ImageId }}".

Berikut adalah contoh untuk membantu menggambarkan konsep ini untuk aws:waitForAwsResourceProperty tindakan.

--- - name: waitUntilInstanceStateRunning action: aws:waitForAwsResourceProperty # timeout is strongly encouraged for action - aws:waitForAwsResourceProperty timeoutSeconds: 60 inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running ...

Di aws:waitForAwsResourceProperty langkah waitUntilInstanceStateRunning, otomatisasi menjalankan DescribeInstanceStatus operasi API dan menerima respon dari ec2. Otomatisasi kemudian berlaku PropertySelector - "$.InstanceStatuses[0].InstanceState.Name" untuk respon dan memeriksa apakah nilai yang dikembalikan dan sudah ditentukan cocok dengan nilai dalam DesiredValues daftar (dalam hal ini running). Langkah tersebut mengulangi proses sampai respon mengembalikan status instans running.

Menggunakan JsonPath di runbook

Ekspresi JsonPath adalah string yang dimulai dengan "$." yang digunakan untuk memilih salah satu komponen yang lebih dalam elemen JSON. Daftar berikut mencakup informasi tentang operator JSONPath yang didukung oleh otomatisasi Systems Manager:

  • Anak dot-notated (.): Gunakan dengan objek JSON. Operator ini memilih nilai kunci tertentu.

  • Deep-scan (..): Gunakan dengan elemen JSON. Operator ini memindai tingkat demi tingkat elemen JSON dan memilih daftar nilai dengan kunci tertentu. Jenis kembalinya operator ini selalu array JSON. Dalam konteks jenis keluaran tindakan otomatisasi, operator dapat berupa StringList atau MapList.

  • Indeks Array ([ ]): Gunakan dengan array JSON. Operator ini mendapat nilai indeks tertentu.

  • Filter ([? (expression)]): Gunakan dengan array JSON. Operator ini memfilter nilai array JSON yang cocok dengan kriteria yang ditentukan dalam ekspresi filter. Ekspresi filter hanya dapat menggunakan operator berikut: ==,! =, >, <, >=, atau <=. Menggabungkan beberapa ekspresi filter dengan AND (&&) atau OR (||) tidak didukung. Jenis kembalinya operator ini selalu array JSON.

Untuk lebih memahami operator JSONPath, tinjau respon JSON berikut dari DescribeInstances Operasi API ec2. Respon berikut ini adalah beberapa contoh yang menunjukkan hasil yang berbeda dengan menerapkan ekspresi JSONPath yang berbeda untuk respon dari DescribeInstances operasi API.

{
    "NextToken": "abcdefg",
    "Reservations": [
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-abcd12345678910",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-000000000000"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    }
                }
            ],
            "Groups": []
        },
        {
            "OwnerId": "123456789012",
            "ReservationId": "r-12345678910abcd",
            "Instances": [
                {
                    "ImageId": "ami-12345678",
                    "BlockDeviceMappings": [
                        {
                            "Ebs": {
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-111111111111"
                            },
                            "DeviceName": "/dev/xvda"
                        }
                    ],
                    "State": {
                        "Code": 80,
                        "Name": "stopped"
                    }
                }
            ],
            "Groups": []
        }
    ]
}

JsonPath Contoh 1: Dapatkan String tertentu dari respons JSON

JSONPath: $.Reservations[0].Instances[0].ImageId Returns: "ami-12345678" Type: String

Contoh JSONPath 2: Dapatkan Boolean tertentu dari respons JSON

JSONPath: $.Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.DeleteOnTermination Returns: true Type: Boolean

JsonPath Contoh 3: Dapatkan Integer tertentu dari respons JSON

JSONPath: $.Reservations[0].Instances[0].State.Code Returns: 16 Type: Integer

Contoh JSONPath 4: Memindai respons JSON secara mendalam, lalu dapatkan semua nilai sebagai VolumeId StringList

JSONPath: $.Reservations..BlockDeviceMappings..VolumeId Returns: [ "vol-000000000000", "vol-111111111111" ] Type: StringList

JsonPath Contoh 5: Dapatkan BlockDeviceMappings objek tertentu sebagai StringMap

JSONPath: $.Reservations[0].Instances[0].BlockDeviceMappings[0] Returns: { "Ebs" : { "DeleteOnTermination" : true, "Status" : "attached", "VolumeId" : "vol-000000000000" }, "DeviceName" : "/dev/xvda" } Type: StringMap

JsonPath Contoh 6: Memindai respons JSON secara mendalam, lalu dapatkan semua objek State sebagai MapList

JSONPath: $.Reservations..Instances..State Returns: [ { "Code" : 16, "Name" : "running" }, { "Code" : 80, "Name" : "stopped" } ] Type: MapList

JsonPath Contoh 7: Filter untuk instance di negara bagian running

JSONPath: $.Reservations..Instances[?(@.State.Name == 'running')] Returns: [ { "ImageId": "ami-12345678", "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "Status": "attached", "VolumeId": "vol-000000000000" }, "DeviceName": "/dev/xvda" } ], "State": { "Code": 16, "Name": "running" } } ] Type: MapList

JsonPath Contoh 8: Kembalikan instance yang tidak dalam status ImageId running

JSONPath: $.Reservations..Instances[?(@.State.Name != 'running')].ImageId Returns: [ "ami-12345678" ] Type: StringList | String