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. {{
Anda juga dapat menentukan output khusus untuk tindakan otomatisasi di runbook Anda. Ini memungkinkan Anda menjalankan skrip, atau menjalankan operasi API untuk yang lain Layanan AWS 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:stepName
.outputName
}}
-
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 adalah
String
,Integer
,Boolean
,StringList
,StringMap
,MapList
. Nilai default-nya adalahString
.
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:
-
String
nilai dapat dikonversi keStringList
,Integer
danBoolean
. -
Integer
nilai dapat dikonversi keString
danStringList
. -
Boolean
nilai dapat dikonversi keString
danStringList
. -
StringList
,IntegerList
, atauBooleanList
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 sebagaiImageId
. -
Menggunakan
aws:executeAwsApi
tindakan untuk memanggil operasi Amazon EC2 RunInstances API untuk meluncurkan satu instance yang menggunakanImageId
dari langkah sebelumnya. Ini menampilkan instans ID sebagaiInstanceId
. -
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 mencapairunning
setelah 60 detik polling. -
Menggunakan
aws:assertAwsResourceProperty
tindakan untuk memanggil operasi API Amazon EC2DescribeInstanceStatus
untuk menegaskan bahwa instans ada dalamrunning
status. Langkah gagal jika status instans tidakrunning
.
--- 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
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