

• 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 pernyataan bersyarat di runbook
<a name="automation-branch-condition"></a>

Secara default, langkah-langkah yang Anda tentukan di bagian `mainSteps` runbook yang dijalankan secara berurutan. Setelah satu tindakan selesai, tindakan berikutnya ditentukan dalam `mainSteps` bagian dimulai. Selain itu, jika tindakan gagal dijalankan, seluruh otomatisasi gagal (secara default). Anda dapat menggunakan `aws:branch` tindakan otomasi dan opsi runbook yang dijelaskan di bagian ini untuk membuat otomatisasi yang berkinerja *Percabangan bersyarat*. Buat otomatisasi yang melompat ke langkah yang berbeda setelah mengevaluasi pilihan yang berbeda atau yang secara dinamis menanggapi perubahan ketika langkah selesai. Berikut adalah daftar opsi yang dapat Anda gunakan untuk membuat otomatisasi dinamis:
+ **`aws:branch`**: Tindakan ini mengizinkan Anda membuat otomatisasi dinamis yang mengevaluasi pilihan yang berbeda dalam satu langkah dan kemudian melompat ke langkah di runbook yang berbeda berdasarkan hasil evaluasi tersebut.
+ **`nextStep`**: Opsi ini menentukan langkah otomatisasi mana yang harus diproses setelah berhasil menyelesaikan langkah. 
+ **`isEnd`**: Opsi ini menghentikan otomatisasi pada akhir langkah tertentu. Nilai default opsi ini adalah palsu.
+ **`isCritical`**: Opsi ini menunjukkan langkah sebagai kepentingan untuk berhasil menyelesaikan otomatisasi. Jika langkah dengan penunjukan ini gagal, maka Otomatisasi melaporkan status akhir otomatisasi sebagai `Failed`. Nilai default opsi ini adalah `true`.
+ **`onFailure`**: Opsi ini menunjukkan apakah otomatisasi harus berhenti, melanjutkan, atau meneruskan ke langkah kegagalan yang berbeda. Nilai default untuk opsi ini adalah batalkan.

Bagian berikut menjelaskan `aws:branch` tindakan otomatisi. Untuk informasi lebih lanjut tentang pilihan `nextStep`, `isEnd`, `isCritical`, dan `onFailure`, lihat [Contoh `aws:branch` runbook](#branch-runbook-examples).

## Bekerja dengan `aws:branch` tindakan
<a name="branch-action-explained"></a>

Tindakan `aws:branch` tersebut menawarkan opsi percabangan bersyarat yang paling dinamis untuk otomatisasi. Seperti disebutkan sebelumnya, tindakan ini mengizinkan otomatisasi Anda untuk mengevaluasi beberapa kondisi dalam satu langkah dan kemudian melompat ke langkah baru berdasarkan hasil evaluasi tersebut. Tindakan `aws:branch` berfungsi seperti `IF-ELIF-ELSE` pernyataan dalam pemrograman.

Berikut adalah contoh YAML dari `aws:branch` langkah.

```
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

Bila Anda menentukan `aws:branch` tindakan untuk sebuah langkah, Anda menentukan `Choices` bahwa otomatisasi harus mengevaluasi. Otomatisasi dapat mengevaluasi `Choices` berdasarkan nilai parameter yang Anda tentukan dalam `Parameters` bagian runbook tersebut. Otomatisasi juga dapat mengevaluasi `Choices` berdasarkan output dari langkah sebelumnya.

Otomatisasi mengevaluasi setiap pilihan dengan menggunakan ekspresi Boolean. Jika evaluasi menentukan bahwa pilihan pertama adalah `true`, maka otomatisasi melompat ke langkah yang ditetapkan di pilihan tersebut. Jika evaluasi menentukan bahwa pilihan pertama adalah `false`, maka otomatisasi mengevaluasi pilihan berikutnya. Jika langkah Anda mencakup tiga atau lebih `Choices`, maka otomatisasi menilai setiap pilihan dalam urutan yang tepat sehingga otomatisasi menilai pilihan yang `true`. Selanjutnya, otomatisasi melompat ke langkah yang ditetapkan untuk pilihan `true` tersebut.

Jika tidak ada pilihan `Choices` yang `true`, otomatisasi memeriksa untuk melihat apakah langkah berisi `Default` nilai. Nilai `Default` menentukan langkah yang harus dilakukan otomatisasi jika tidak ada pilihan yang `true`. Jika tidak ada `Default` nilai yang ditentukan untuk langkah, otomatisasi akan memproses langkah berikutnya dalam runbook.

Berikut adalah `aws:branch` langkah dalam YAMAL bernama **pilih OSfrom Parameter**. Langkahnya mencakup dua `Choices`: (`NextStep: runWindowsCommand`) dan (`NextStep: runLinuxCommand`). Otomatisasi mengevaluasi ini `Choices` untuk menentukan perintah mana yang dijalankan untuk sistem operasi yang sesuai. `Variable` untuk setiap pilihan menggunakan `{{OSName}}`, yang merupakan parameter yang ditentukan oleh penulis runbook `Parameters` di bagian runbook.

```
mainSteps:
- name: chooseOSfromParameter
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OSName}}"
      StringEquals: Windows
    - NextStep: runLinuxCommand
      Variable: "{{OSName}}"
      StringEquals: Linux
```

Berikut adalah `aws:branch` langkah dalam YAMAL bernama **pilih OSfrom Output**. Langkahnya mencakup dua `Choices`: (`NextStep: runPowerShellCommand`) dan (`NextStep: runShellCommand`). Otomatisasi mengevaluasi ini `Choices` untuk menentukan perintah mana yang dijalankan untuk sistem operasi yang sesuai. `Variable` untuk setiap pilihan menggunakan `{{GetInstance.platform}}`, yang merupakan output dari langkah sebelumnya di runbook. Contoh ini juga mencakup opsi yang disebut `Default`. Jika otomatisasi mengevaluasi keduanya `Choices`, dan tidak ada pilihan `true`, maka otomatisasi melompat ke langkah yang bernama `PostProcessing`.

```
mainSteps:
- name: chooseOSfromOutput
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      PostProcessing
```

### Membuat `aws:branch` langkah dalam runbook
<a name="create-branch-action"></a>

Saat Anda membuat `aws:branch` langkah dalam runbook, Anda menentukan `Choices` otomatisasi harus mengevaluasi untuk menentukan langkah mana lagi yang harus dilalui otomatisasi. Seperti disebutkan sebelumnya, `Choices` dievaluasi dengan menggunakan ekspresi Boolean. Setiap templat menyertakan menentukan opsi berikut:
+ **NextStep**: Langkah selanjutnya dalam runbook untuk memproses jika pilihan yang ditunjuk adalah`true`.
+ **Variabel**: Tentukan nama parameter yang didefinisikan di `Parameters` bagian runbook, variabel yang didefinisikan di `Variables` bagian, atau tentukan objek keluaran dari langkah sebelumnya.

  Tentukan nilai variabel dengan menggunakan formulir berikut.

  `Variable: "{{variable name}}"`

  Tentukan nilai parameter dengan menggunakan formulir berikut.

  `Variable: "{{parameter name}}"`

  Tentukan variabel objek output dengan menggunakan formulir berikut.

  `Variable: "{{previousStepName.outputName}}"`
**catatan**  
Membuat variabel output dijelaskan secara lebih detail pada bagian berikutnya, [Tentang membuat variabel output](#branch-action-output).
+ **Operasi**: Kriteria yang digunakan untuk mengevaluasi pilihan, seperti `StringEquals: Linux`. Tindakan `aws:branch` tersebut mendukung operasi berikut:

**Operasi String**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + Berisi

**Operasi numerik**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**Operasi Boolean**
  + BooleanEquals
**penting**  
Ketika Anda membuat runbook, sistem memvalidasi setiap operasi di runbook. Jika operasi tidak didukung, sistem akan mengembalikan kesalahan saat Anda mencoba membuat runbook.
+ **Default**: Tentukan langkah mundur yang harus dilewati otomatisasi jika tidak ada `Choices` adalah `true`.
**catatan**  
Jika Anda tidak ingin menentukan `Default` nilai, maka Anda dapat menentukan `isEnd` pilihan. Jika tidak ada `Choices` adalah `true` dan tidak ada `Default` nilai yang ditentukan, maka otomatisasi berhenti di akhir langkah.

Gunakan template berikut untuk membantu Anda membangun `aws:branch` langkah dalam runbook Anda. Ganti masing-masing *example resource placeholder* dengan informasi Anda sendiri.

------
#### [ YAML ]

```
mainSteps:
- name: step name
  action: aws:branch
  inputs:
    Choices:
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    - NextStep: step to jump to if evaluation for this choice is true
      Variable: "{{parameter name or output from previous step}}"
      Operation type: Operation value
    Default:
      step to jump to if all choices are false
```

------
#### [ JSON ]

```
{
   "mainSteps":[
      {
         "name":"a name for the step",
         "action":"aws:branch",
         "inputs":{
            "Choices":[
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               },
               {
                  "NextStep":"step to jump to if evaluation for this choice is true",
                  "Variable":"{{parameter name or output from previous step}}",
                  "Operation type":"Operation value"
               }
            ],
            "Default":"step to jump to if all choices are false"
         }
      }
   ]
}
```

------

#### Tentang membuat variabel output
<a name="branch-action-output"></a>

Untuk membuat `aws:branch` pilihan yang mereferensikan output dari langkah sebelumnya, Anda perlu mengidentifikasi nama langkah sebelumnya dan namabidang output. Anda kemudian menggabungkan nama-nama langkah dan bidang dengan menggunakan format berikut.

`Variable: "{{previousStepName.outputName}}"`

Sebagai contoh, langkah pertama dalam contoh berikut bernama `GetInstance`. Dan kemudian, di bawah `outputs`, terdapat sebuah bidang yang disebut `platform`. Pada langkah kedua (`ChooseOSforCommands`), penulis ingin mereferensikan output dari bidang platform sebagai variabel. Untuk membuat variabel, cukup gabungkan nama langkah (GetInstance) dan nama bidang output (platform) untuk membuat`Variable: "{{GetInstance.platform}}"`.

```
mainSteps:
- Name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
    Filters:
    - Key: InstanceIds
      Values: ["{{ InstanceId }}"]
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
```

Berikut adalah contoh yang menunjukkan bagaimana *"Variable": "\$1\$1 describeInstance.Platform \$1\$1"* dibuat dari langkah sebelumnya dan output.

```
- name: describeInstance
  action: aws:executeAwsApi
  onFailure: Abort
  inputs:
    Service: ec2
    Api: DescribeInstances
    InstanceIds:
    - "{{ InstanceId }}"
  outputs:
  - Name: Platform
    Selector: "$.Reservations[0].Instances[0].Platform"
    Type: String
  nextStep: branchOnInstancePlatform
- name: branchOnInstancePlatform
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runEC2RescueForWindows
      Variable: "{{ describeInstance.Platform }}"
      StringEquals: windows
    Default: runEC2RescueForLinux
```

### Contoh `aws:branch` runbook
<a name="branch-runbook-examples"></a>

Berikut adalah beberapa contoh runbook yang menggunakan `aws:branch`.

**Contoh 1: Menggunakan `aws:branch` dengan variabel output untuk menjalankan perintah berdasarkan jenis sistem operasi**

Pada langkah pertama contoh ini (`GetInstance`), penulis runbook menggunakan `aws:executeAwsApi` tindakan untuk memanggil `ssm` `DescribeInstanceInformation` Operasi API. Penulis menggunakan tindakan ini untuk menentukan jenis sistem operasi yang digunakan oleh sebuah contoh. Tindakan `aws:executeAwsApi` tersebut mengeluarkan instans ID dan jenis platform.

Pada langkah kedua (`ChooseOSforCommands`), penulis menggunakan `aws:branch` tindakan dengan dua `Choices` (`NextStep: runPowerShellCommand`) dan (`NextStep: runShellCommand`). Otomatisasi mengevaluasi sistem operasi instans dengan menggunakan output dari langkah sebelumnya (`Variable: "{{GetInstance.platform}}"`). Otomatisasi melompat ke langkah untuk sistem operasi yang ditunjuk.

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
mainSteps:
- name: GetInstance
  action: aws:executeAwsApi
  inputs:
    Service: ssm
    Api: DescribeInstanceInformation
  outputs:
  - Name: myInstance
    Selector: "$.InstanceInformationList[0].InstanceId"
    Type: String
  - Name: platform
    Selector: "$.InstanceInformationList[0].PlatformType"
    Type: String
- name: ChooseOSforCommands
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runPowerShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Windows
    - NextStep: runShellCommand
      Variable: "{{GetInstance.platform}}"
      StringEquals: Linux
    Default:
      Sleep
- name: runShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runPowerShellCommand
  action: aws:runCommand
  inputs:
    DocumentName: AWS-RunPowerShellScript
    InstanceIds:
    - "{{GetInstance.myInstance}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

**Contoh 2: Menggunakan `aws:branch` dengan variabel parameter untuk menjalankan perintah berdasarkan jenis sistem operasi**

Penulis runbook mendefinisikan beberapa pilihan parameter pada awal runbook di `parameters` bagian. Satu parameter bernama `OperatingSystemName`. Pada langkah pertama (`ChooseOS`), penulis menggunakan `aws:branch` tindakan dengan dua `Choices` (`NextStep: runWindowsCommand`) dan (`NextStep: runLinuxCommand`). Variabel untuk ini `Choices` mereferensikan opsi parameter yang ditentukan dalam bagian parameter (`Variable: "{{OperatingSystemName}}"`). Ketika pengguna menjalankan runbook ini, mereka menentukan nilai pada saat waktu aktif untuk `OperatingSystemName`. Otomatisasi menggunakan parameter waktu aktif selama `Choices` evaluasi. Otomatisasi melanjutkan ke langkah untuk sistem operasi yang ditunjuk berdasarkan parameter waktu aktif yang ditentukan untuk `OperatingSystemName`.

```
---
schemaVersion: '0.3'
assumeRole: "{{AutomationAssumeRole}}"
parameters:
  AutomationAssumeRole:
    default: ""
    type: String
  OperatingSystemName:
    type: String
  LinuxInstanceId:
    type: String
  WindowsInstanceId:
    type: String
mainSteps:
- name: ChooseOS
  action: aws:branch
  inputs:
    Choices:
    - NextStep: runWindowsCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: windows
    - NextStep: runLinuxCommand
      Variable: "{{OperatingSystemName}}"
      StringEquals: linux
    Default:
      Sleep
- name: runLinuxCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunShellScript"
    InstanceIds:
    - "{{LinuxInstanceId}}"
    Parameters:
      commands:
      - ls
  isEnd: true
- name: runWindowsCommand
  action: aws:runCommand
  inputs:
    DocumentName: "AWS-RunPowerShellScript"
    InstanceIds:
    - "{{WindowsInstanceId}}"
    Parameters:
      commands:
      - date
  isEnd: true
- name: Sleep
  action: aws:sleep
  inputs:
    Duration: PT3S
```

### Membuat otomatisasi percabangan yang kompleks dengan operator
<a name="branch-operators"></a>

Anda dapat membuat otomatisasi percabangan kompleks dengan menggunakan `And`, `Or`, dan `Not` operator di `aws:branch` langkah.

**Operator 'Dan'**  
Gunakan `And` operator ketika Anda ingin beberapa variabel menjadi `true` untuk sebuah pilihan. Pada contoh berikut, pilihan pertama mengevaluasi apakah instans adalah `running` dan menggunakan`Windows` sistem operasi. Jika evaluasi *kedua* variabel ini benar, maka otomasi melompat ke `runPowerShellCommand` langkah. Jika satu atau beberapa variabel tersebut `false`, maka otomatisasi mengevaluasi variabel untuk pilihan kedua.

```
mainSteps:
- name: switch2
  action: aws:branch
  inputs:
    Choices:
    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Windows
      NextStep: runPowerShellCommand

    - And:
      - Variable: "{{GetInstance.pingStatus}}"
        StringEquals: running
      - Variable: "{{GetInstance.platform}}"
        StringEquals: Linux
      NextStep: runShellCommand
    Default:
      sleep3
```

**Operator 'Atau'**  
Gunakan `Or` operator ketika Anda ingin *salah satu dari* beberapa variabel menjadi benar untuk suatu pilihan. Pada contoh berikut, pilihan pertama mengevaluasi apakah string parameter adalah `Windows` dan apakah output dari AWS Lambda langkah adalah benar. Jika evaluasi menentukan bahwa *salah satu dari dua* variabel ini benar, maka otomasi melompat ke `RunPowerShellCommand` langkah. Jika kedua variabel tersebut salah, maka otomatisasi mengevaluasi variabel untuk pilihan kedua.

```
- Or:
  - Variable: "{{parameter1}}"
    StringEquals: Windows
  - Variable: "{{BooleanParam1}}"
    BooleanEquals: true
  NextStep: RunPowershellCommand
- Or:
  - Variable: "{{parameter2}}"
    StringEquals: Linux
  - Variable: "{{BooleanParam2}}"
    BooleanEquals: true
  NextStep: RunShellScript
```

**Operator 'Tidak'**  
Gunakan `Not` operator ketika Anda ingin melompat ke langkah yang didefinisikan ketika variabel *tidak* benar. Pada contoh berikut, pilihan pertama mengevaluasi apakah string parameter adalah `Not Linux`. Jika evaluasi menentukan bahwa itu adalah Linux, maka otomasi melompat ke `sleep2` langkah. Jika evaluasi pilihan pertama menentukan bahwa itu *adalah* Linux, maka otomatisasi mengevaluasi pilihan berikutnya.

```
mainSteps:
- name: switch
  action: aws:branch
  inputs:
    Choices:
    - NextStep: sleep2
      Not:
        Variable: "{{testParam}}"
        StringEquals: Linux
    - NextStep: sleep1
      Variable: "{{testParam}}"
      StringEquals: Windows
    Default:
      sleep3
```

## Contoh cara menggunakan opsi bersyarat
<a name="conditional-examples"></a>

Bagian ini mencakup contoh yang berbeda tentang cara menggunakan opsi dinamis dalam runbook. Setiap contoh di bagian ini memperluas runbook berikut. Runbook ini memiliki dua tindakan. Tindakan pertama bernama `InstallMsiPackage`. Menggunakan perintah `aws:runCommand` tindakan untuk menginstal aplikasi pada Windows Server instans. Tindakan kedua bernama `TestInstall`. Menggunakan `aws:invokeLambdaFunction` tindakan untuk melakukan tes aplikasi yang diinstal jika aplikasi berhasil diinstal. Langkah satu menentukan `onFailure: Abort`. Ini berarti bahwa jika aplikasi tidak berhasil diinstal, otomatisasi berhenti sebelum langkah kedua.

**Contoh 1: Runbook dengan dua tindakan linier**

```
---
schemaVersion: '0.3'
description: Install MSI package and run validation.
assumeRole: "{{automationAssumeRole}}"
parameters:
  automationAssumeRole:
    type: String
    description: "(Required) Assume role."
  packageName:
    type: String
    description: "(Required) MSI package to be installed."
  instanceIds:
    type: String
    description: "(Required) Comma separated list of instances."
mainSteps:
- name: InstallMsiPackage
  action: aws:runCommand
  maxAttempts: 2
  onFailure: Abort
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
...
```

**Membuat otomatisasi dinamis yang melompat ke langkah yang berbeda dengan menggunakan opsi `onFailure`**

Contoh berikut menggunakan `onFailure: step:step name`, `nextStep`, dan `isEnd` pilihan untuk membuat otomatisasi dinamis. Dengan contoh ini, jika `InstallMsiPackage` tindakan gagal, maka otomatisasi melompat ke tindakan yang disebut *PostFailure*(`onFailure: step:PostFailure`) untuk menjalankan AWS Lambda fungsi untuk melakukan beberapa tindakan jika penginstalan gagal. Jika instalasi berhasil, maka otomatisasi melompat ke TestInstall action ()`nextStep: TestInstall`. Kedua langkah `TestInstall` dan `PostFailure` menggunakan `isEnd` pilihan (`isEnd: true`) sehingga otomatisasi selesai ketika salah satu dari langkah tersebut selesai.

**catatan**  
Menggunakan `isEnd` pilihan di langkah terakhir `mainSteps` bagian adalah opsional. Jika langkah terakhir tidak melompat ke langkah lain, maka otomatisasi berhenti setelah menjalankan tindakan di langkah terakhir.

**Contoh 2: Otomatisasi dinamis yang melompat ke berbagai langkah**

```
mainSteps
- name: InstallMsiPackage
  action: aws:runCommand
  onFailure: step:PostFailure
  maxAttempts: 2
  inputs:
    InstanceIds:
    - "{{instanceIds}}"
    DocumentName: AWS-RunPowerShellScript
    Parameters:
      commands:
      - msiexec /i {{packageName}}
  nextStep: TestInstall
- name: TestInstall
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: TestLambdaFunction
  isEnd: true
- name: PostFailure
  action: aws:invokeLambdaFunction
  maxAttempts: 1
  timeoutSeconds: 500
  inputs:
    FunctionName: PostFailureRecoveryLambdaFunction
  isEnd: true
...
```

**catatan**  
Sebelum memproses runbook, sistem memverifikasi bahwa runbook tidak membuat perulangan tak terbatas. Jika perulangan tak terbatas terdeteksi, Otomatisasi mengembalikan kesalahan dan jejak lingkaran yang menunjukkan langkah mana yang membuat perulangan.

**Membuat otomatisasi dinamis yang mendefinisikan langkah-langkah penting**

Anda dapat menentukan bahwa langkah sangat penting untuk keberhasilan otomatisasi secara keseluruhan. Jika langkah kritis gagal, maka otomatisasi melaporkan status otomatisasi sebagai `Failed`, bahkan jika satu langkah atau lebih berjalan dengan sukses. Dalam contoh berikut, pengguna mengidentifikasi *VerifyDependencies*langkah jika *InstallMsiPackage*langkah gagal (`onFailure: step:VerifyDependencies`). Pengguna menentukan bahwa `InstallMsiPackage` langkah ini tidak penting (`isCritical: false`). Dalam contoh ini, jika aplikasi gagal untuk menginstal, Otomatisasi memproses `VerifyDependencies` langkah untuk menentukan apakah satu dependensi atau lebih hilang, yang oleh karena itu menyebabkan penginstalan aplikasi gagal. 

**Contoh 3: Mendefinisikan langkah-langkah penting untuk otomatisasi**

```
---
name: InstallMsiPackage
action: aws:runCommand
onFailure: step:VerifyDependencies
isCritical: false
maxAttempts: 2
inputs:
  InstanceIds:
  - "{{instanceIds}}"
  DocumentName: AWS-RunPowerShellScript
  Parameters:
    commands:
    - msiexec /i {{packageName}}
nextStep: TestPackage
...
```