

• AWS Systems Manager CloudWatch Dasbor tidak akan lagi tersedia setelah 30 April 2026. Pelanggan dapat terus menggunakan CloudWatch konsol Amazon untuk melihat, membuat, dan mengelola CloudWatch dasbor Amazon mereka, seperti yang mereka lakukan hari ini. Untuk informasi selengkapnya, lihat [dokumentasi CloudWatch Dasbor Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

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
<a name="automation-action-outputs-inputs"></a>

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 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:
+ Nama: (Wajib) Nama keluaran yang digunakan untuk mereferensikan nilai output di langkah selanjutnya.
+ Selector: (Wajib) JSONPath Ekspresi 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 adalah `String`.

Jika nilai output tidak cocok dengan tipe data yang Anda tentukan, Automation mencoba mengonversi tipe data. Misalnya, jika nilai yang dikembalikan adalah`Integer`, tetapi yang `Type` ditentukan adalah`String`, nilai output akhir adalah `String` nilai. Jenis konversi berikut didukung:
+ `String`nilai dapat dikonversi ke`StringList`, `Integer` dan`Boolean`.
+ `Integer`nilai dapat dikonversi ke `String` dan`StringList`.
+ `Boolean`nilai dapat dikonversi ke `String` dan`StringList`.
+ `StringList`,`IntegerList`, atau `BooleanList` nilai-nilai yang mengandung satu elemen dapat dikonversi ke`String`,`Integer`, atau`Boolean`.

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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html). 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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html).

Anda dapat melihat skema untuk setiap tindakan otomatisasi di beberapa lokasi berikut:
+ [`aws:assertAwsResourceProperty`— Menegaskan status AWS sumber daya atau status acara](automation-action-assertAwsResourceProperty.md)
+ [`aws:executeAwsApi`— Panggil dan jalankan operasi AWS API](automation-action-executeAwsApi.md)
+ [`aws:waitForAwsResourceProperty`— Tunggu properti AWS sumber daya](automation-action-waitForAwsResourceProperty.md)

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

**Menggunakan Selector/PropertySelector bidang**  
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 JSONPath sintaks.

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
<a name="automation-action-json-path"></a>

 JSONPath Ekspresi adalah string yang dimulai dengan “\$1.” yang digunakan untuk memilih salah satu komponen yang lebih dalam elemen JSON. Daftar berikut mencakup informasi tentang JSONPath operator yang didukung oleh Systems Manager Automation:
+ **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: ==,\$1 =, >, <, >=, atau <=. Menggabungkan beberapa ekspresi filter dengan AND (&&) atau OR (\$1\$1) tidak didukung. Jenis kembalinya operator ini selalu array JSON. 

Untuk lebih memahami JSONPath operator, tinjau respons JSON berikut dari operasi `DescribeInstances` API ec2. Berikut respon ini adalah beberapa contoh yang menunjukkan hasil yang berbeda dengan menerapkan JSONPath ekspresi yang berbeda untuk respon dari operasi `DescribeInstances` 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
```

**JSONPath Contoh 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
```

**JSONPath Contoh 4: Memindai respons JSON secara mendalam, lalu dapatkan semua nilai VolumeId sebagai 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
```