

• 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 dasbor Amazon CloudWatch 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-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 memanggil operasi API untuk yang Layanan AWS lain sehingga Anda dapat menggunakan kembali nilai sebagai input dalam tindakan selanjutnya. Jenis parameter di runbook bersifat statis. Ini berarti jenis parameter tidak dapat diubah setelah ditentukan. Untuk menentukan output langkah, berikan bidang berikut:
+ Nama: (Diperlukan) Nama keluaran yang digunakan untuk mereferensikan nilai output pada langkah selanjutnya.
+ Selector: (Diperlukan) Ekspresi JSONPath yang digunakan untuk menentukan nilai output.
+ Jenis: (Opsional) Jenis 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 telah Anda tentukan, Otomasi mencoba mengonversi tipe data. Misalnya, jika nilai yang dikembalikan adalah`Integer`, tetapi yang `Type` ditentukan adalah`String`, nilai keluaran akhir adalah `String` nilai. Konversi jenis 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 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 mereferensikan 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 AMI tertentu. Ini menampilkan ID gambar sebagai `ImageId`.
+ Menggunakan `aws:executeAwsApi` tindakan untuk memanggil operasi Amazon EC2 RunInstances API untuk meluncurkan satu instans 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 `running` status. 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 memungkinkan 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: AwsResourceProperty` — Menegaskan sebuah AWS status sumber daya atau keadaan peristiwa](automation-action-assertAwsResourceProperty.md)
+ [`aws:execute AwsApi` - Panggil dan jalankan AWS Operasi API](automation-action-executeAwsApi.md)
+ [`aws:wait ForAwsResourceProperty` — Tunggu AWS atribut 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 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
<a name="automation-action-json-path"></a>

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:
+ **Dot-notated anak (.) **: 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.
+ **Array-Index ([])**: Gunakan dengan array JSON. Operator ini mendapat nilai indeks tertentu.
+ **Saring ([? ({{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
```

**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 nilainya 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 dalam status `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: Meng `ImageId` embalikan instance yang tidak dalam status `running` **

```
JSONPath:
$.Reservations..Instances[?(@.State.Name != 'running')].ImageId

Returns:
[
  "ami-12345678"
]

Type: StringList | String
```