

• AWS Systems Manager CloudWatch 대시보드는 2026년 4월 30일 이후에는 더 이상 사용할 수 없습니다. 고객은 Amazon CloudWatch 콘솔을 계속 사용하여 현재와 마찬가지로 Amazon CloudWatch 대시보드를 보고, 생성하고, 관리할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 대시보드 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

# 런북에서 조건문 사용
<a name="automation-branch-condition"></a>

기본적으로 실행서의 `mainSteps` 섹션에서 정의하는 단계는 순차적으로 실행됩니다. 한 작업이 완료된 후에는 `mainSteps` 섹션에 지정된 다음 작업이 시작됩니다. 또한 작업 실행에 실패할 경우 기본적으로 전체 자동화가 실패합니다. 이 섹션에 설명된 `aws:branch` 자동화 작업 및 실행서 옵션을 사용하여 *조건부 분기*를 수행하는 자동화를 생성할 수 있습니다. 다시 말해서 단계 완료 시 변경 내용에 동적으로 응답하거나 다양한 선택 항목을 평가한 후 다른 단계로 이동하는 자동화를 생성할 수 있습니다. 동적 자동화를 생성하는 데 사용할 수 있는 옵션 목록은 다음과 같습니다.
+ **`aws:branch`**: 이 자동화 작업을 통해 한 단계에서 여러 선택 항목을 평가한 다음 평가 결과에 따라 실행서의 다른 단계로 이동하는 동적 자동화를 생성할 수 있습니다.
+ **`nextStep`**: 이 옵션은 한 단계를 성공적으로 완료한 후 처리할 자동화의 단계를 지정합니다.
+ **`isEnd`**: 이 옵션은 특정 단계 종료 시 자동화를 중지합니다. 이 옵션의 기본값은 false입니다.
+ **`isCritical`**: 이 옵션은 자동화의 성공적 완료에 대해 단계를 심각으로 지정합니다. 이 지정이 있는 단계가 실패하면 Automation은 자동화의 최종 상태를 `Failed`로 보고합니다. 이 옵션의 기본값은 `true`입니다.
+ **`onFailure`**: 이 옵션은 실패 시 자동화가 중지되어야 하는지, 계속되어야 하는지 또는 다른 단계로 이동해야 하는지를 나타냅니다. 이 옵션의 기본값은 중단입니다.

다음 섹션에서는 `aws:branch` 자동화 작업을 설명합니다. `nextStep`, `isEnd`, `isCritical` 및 `onFailure` 옵션에 대한 자세한 내용은 [예제 `aws:branch` 실행서](#branch-runbook-examples) 섹션을 참조하세요.

## `aws:branch` 작업 수행
<a name="branch-action-explained"></a>

`aws:branch` 작업은 자동화에 대한 가장 동적인 조건부 분기 옵션을 제공합니다. 앞에서 언급한 바와 같이, 이 작업을 사용하면 자동화가 한 단계에서 여러 조건을 평가한 다음 해당 평가의 결과에 따라 새 단계로 이동할 수 있습니다. `aws:branch` 작업은 프로그래밍의 `IF-ELIF-ELSE` 문처럼 작동합니다.

다음은 `aws:branch` 단계의 YAML 예제입니다.

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

단계에 대한 `aws:branch` 작업을 지정할 경우 해당 자동화에서 평가해야 하는 `Choices`를 지정할 수 있습니다. 이 자동화는 실행서의 `Parameters` 섹션에 지정된 파라미터의 값에 따라 `Choices`를 평가할 수 있습니다. 이 자동화는 이전 단계의 출력에 따라 `Choices`를 평가할 수도 있습니다.

이 자동화는 부울 식을 사용하여 각 선택을 평가합니다. 평가에서 첫 번째 선택 항목이 `true`인 것으로 확인되면 자동화는 해당 선택 항목에 지정된 단계로 이동합니다. 평가에서 첫 번째 선택 항목이 `false`인 것으로 확인되면 자동화는 다음 선택 항목을 평가합니다. 단계에 세 개 이상의 `Choices`가 포함된 경우 자동화는 `true`인 선택 항목을 평가할 때까지 순서대로 각 선택 항목을 평가합니다. 그런 다음 이 워크플로는 `true`인 선택 항목에 지정된 단계로 이동합니다.

`Choices` 중에 `true`인 항목이 없는 경우 자동화는 단계에 `Default` 값이 포함되었는지 확인합니다. `Default` 값은 선택 항목 중에 `true`인 항목이 없는 경우 자동화에서 이동해야 하는 단계를 정의합니다. 단계에 대한 `Default` 값이 지정되지 않은 경우 자동화는 실행서의 다음 단계를 처리합니다.

다음은 **chooseOSfromParameter**라는 YAML의 `aws:branch` 단계입니다. 이 단계에는 `NextStep: runWindowsCommand`와 `NextStep: runLinuxCommand`라는 두 `Choices`가 포함되어 있습니다. 이 자동화는 이러한 `Choices`를 평가하여 해당 운영 체제에 대해 실행할 명령을 결정합니다. 각 선택 항목에 대한 `Variable`은 `{{OSName}}`을 사용하며, 이것은 실행서 작성자가 실행서의 `Parameters` 섹션에 정의한 파라미터입니다.

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

다음은 **chooseOSfromOutput**이라는 YAML의 `aws:branch` 단계입니다. 이 단계에는 `NextStep: runPowerShellCommand`와 `NextStep: runShellCommand`라는 두 `Choices`가 포함되어 있습니다. 이 자동화는 이러한 `Choices`를 평가하여 해당 운영 체제에 대해 실행할 명령을 결정합니다. 각 선택 항목의 `Variable`은 `{{GetInstance.platform}}`을 사용하며, 이것은 실행서의 이전 단계에서 얻은 출력입니다. 이 예제에는 `Default`라는 옵션도 포함되어 있습니다. 자동화에서 두 `Choices`를 평가했지만 어느 것도 `true`가 아니면 이 자동화는 `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
```

### 실행서에서 `aws:branch` 단계 생성
<a name="create-branch-action"></a>

실행서에서 `aws:branch` 단계를 생성하는 경우 자동화에서 다음으로 이동해야 할 단계를 결정하기 위해 평가해야 하는 `Choices`를 정의합니다. 앞에서 언급한 바와 같이, `Choices`는 부울 식을 사용하여 평가됩니다. 각 선택 항목은 다음 옵션을 정의해야 합니다.
+ **NextStep**: 지정된 선택 항목이 `true`인 경우 처리할 실행서의 다음 단계입니다.
+ **Variable**: 런북의 `Parameters` 섹션에 정의된 파라미터(`Variables` 섹션에 정의된 변수)의 이름을 지정하거나 이전 단계에서 얻은 출력 객체를 지정합니다.

  다음 형식을 사용하여 변수 값을 지정합니다.

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

  다음 형식을 사용하여 파라미터 값을 지정합니다.

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

  다음 형식을 사용하여 출력 객체 변수를 지정합니다.

  `Variable: "{{previousStepName.outputName}}"`
**참고**  
출력 변수 생성은 다음 섹션인 [출력 변수 생성 정보](#branch-action-output)에서 자세히 설명합니다.
+ **Operation**: 선택 항목을 평가하는 데 사용되는 기준으로, 예를 들면 `StringEquals: Linux`입니다. `aws:branch` 작업에서는 다음 연산을 지원합니다.

**문자열 연산**
  + StringEquals
  + EqualsIgnoreCase
  + StartsWith
  + EndsWith
  + 포함

**수치 연산**
  + NumericEquals
  + NumericGreater
  + NumericLesser
  + NumericGreaterOrEquals
  + NumericLesser
  + NumericLesserOrEquals

**부울 연산**
  + BooleanEquals
**중요**  
실행서를 생성하면 시스템에서 실행서의 각 작업을 검증합니다. 작업이 지원되지 않는 경우 실행서를 생성할 때 오류가 발생합니다.
+ **Default**: `Choices` 중 어떤 것도 `true`가 아니면 자동화에서 이동해야 할 폴백 단계를 지정합니다.
**참고**  
`Default` 값을 지정하지 않으려면 `isEnd` 옵션을 지정할 수 있습니다. `Choices` 중 어느 것도 `true`가 아니며 `Default` 값을 지정하지 않은 경우 자동화는 단계의 끝에서 중지됩니다.

다음 템플릿을 사용하여 실행서에서 `aws:branch` 단계를 생성합니다. 각 *example resource placeholder*를 사용자의 정보로 바꿉니다.

------
#### [ 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"
         }
      }
   ]
}
```

------

#### 출력 변수 생성 정보
<a name="branch-action-output"></a>

이전 단계의 출력을 참조하는 `aws:branch` 선택 항목을 생성하려면 이전 단계의 이름과 출력 필드의 이름을 식별해야 합니다. 그러고 나서 다음 형식을 사용하여 단계의 이름과 필드를 결합합니다.

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

예를 들어 다음 예에서 첫 번째 단계의 이름은 `GetInstance`입니다. 그 다음, `outputs` 아래에 `platform`이라는 필드가 있습니다. 두 번째 단계(`ChooseOSforCommands`)에서 작성자는 플랫폼 필드의 출력을 변수로 참조하려고 합니다. 변수를 생성하려면 단계 이름(GetInstance)과 출력 필드 이름(platform)을 결합하여 `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
```

다음은 이전 단계 및 출력에서 *"Variable": "\$1\$1 describeInstance.Platform \$1\$1"*이 어떻게 생성되는지 보여주는 예시입니다.

```
- 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
```

### 예제 `aws:branch` 실행서
<a name="branch-runbook-examples"></a>

다음은 `aws:branch`를 사용하는 몇 가지 예제 실행서입니다.

**예제 1: `aws:branch`를 출력 변수와 함께 사용하여 운영 체제 유형에 따라 명령 실행**

이 예의 첫 번째 단계(`GetInstance`)에서 실행서 작성자는 `aws:executeAwsApi` 작업을 사용하여 `ssm` `DescribeInstanceInformation` API 작업을 호출합니다. 작성자는 이 작업을 사용하여 인스턴스에서 사용 중인 운영 체제 유형을 확인합니다. `aws:executeAwsApi` 작업은 인스턴스 ID 및 플랫폼 유형을 출력합니다.

두 번째 단계(`ChooseOSforCommands`)에서 작성자는 `aws:branch` 작업과 두`Choices`인 `NextStep: runPowerShellCommand` 및 `NextStep: runShellCommand`를 함께 사용합니다. 이 자동화는 이전 단계(`Variable: "{{GetInstance.platform}}"`)의 출력을 사용하여 인스턴스의 운영 체제를 평가합니다. 이 자동화는 지정된 운영 체제에 대한 단계로 이동합니다.

```
---
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
```

**예 2: `aws:branch`를 파라미터 변수와 함께 사용하여 운영 체제 유형에 따라 명령 실행**

실행서 작성자는 실행서의 시작 부분에 나오는 `parameters` 섹션에서 여러 파라미터 옵션을 정의합니다. 파라미터 하나의 이름은 `OperatingSystemName`입니다. 첫 번째 단계(`ChooseOS`)에서 작성자는 `aws:branch` 작업과 두`Choices`인 `NextStep: runWindowsCommand` 및 `NextStep: runLinuxCommand`를 함께 사용합니다. 이러한 `Choices`의 변수는 파라미터 섹션에 지정된 파라미터 옵션(`Variable: "{{OperatingSystemName}}"`)을 참조합니다. 사용자는 이 실행서를 실행할 경우 런타임 시 `OperatingSystemName`에 대한 값을 지정합니다. 이 자동화는 `Choices` 평가 중에 런타임 파라미터를 사용합니다. 이 자동화는 `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
```

### 연산자를 사용하여 복합 분기 자동화 생성
<a name="branch-operators"></a>

`aws:branch` 단계에서 `And`, `Or` 및 `Not` 연산자를 사용하여 복합 문기 자동화를 생성할 수 있습니다.

**'And' 연산자**  
선택 항목에 대해 여러 변수가 `true`가 되도록 하려는 경우 `And` 연산자를 사용합니다. 다음 예제에서는 첫 번째 선택 항목이 인스턴스가 `running`이고 `Windows` 운영 체제를 사용하는지 여부를 평가합니다. 이들 변수 *모두*를 평가한 결과가 true이면 이 자동화는 `runPowerShellCommand` 단계로 이동합니다. 변수 중 하나 이상이 `false`이면 이 자동화는 두 번째 선택 항목에 대한 변수를 평가합니다.

```
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
```

**'Or' 연산자**  
선택 항목에 대해 여러 변수 중 *하나라도* true가 되도록 하려는 경우 `Or` 연산자를 사용합니다. 다음 예제에서 첫 번째 선택 항목은 파라미터 문자열이 `Windows`이고 AWS Lambda 단계의 출력이 true인지 여부를 평가합니다. 평가 결과 이들 변수 중 *하나*가 true인 것으로 확인되면 이 자동화는 `RunPowerShellCommand` 단계로 이동합니다. 두 변수가 모두 false이면 이 자동화는 두 번째 선택 항목에 대한 변수를 평가합니다.

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

**'Not' 연산자**  
변수가 true가 *아닐* 때 정의된 단계로 이동하려면 `Not` 연산자를 사용합니다. 다음 예제에서 첫 번째 선택 항목은 파라미터 문자열이 `Not Linux`인지 여부를 평가합니다. 평가 결과 이 변수가 Linux가 아니면 이 자동화는 `sleep2` 단계로 이동합니다. 첫 번째 선택 항목의 평가에서 Linux*인* 것으로 확인되면 이 자동화는 다음 선택 항목을 평가합니다.

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

## 조건 옵션 사용 방법의 예
<a name="conditional-examples"></a>

이 섹션에는 실행서에서 동적 옵션 사용 방법의 다양한 예가 포함되어 있습니다. 이 섹션에 나오는 각 예는 다음 실행서를 확장합니다. 이 실행서에는 2개의 작업이 있습니다. 첫 번째 작업의 이름은 `InstallMsiPackage`입니다. `aws:runCommand` 작업을 사용하여 Windows Server 인스턴스에 애플리케이션을 설치합니다. 두 번째 작업의 이름은 `TestInstall`입니다. 이 작업은 `aws:invokeLambdaFunction` 작업을 사용하여 애플리케이션이 성공적으로 설치된 경우 설치된 애플리케이션의 테스트를 수행합니다. 1단계는 `onFailure: Abort`를 지정합니다. 따라서 애플리케이션이 성공적으로 설치되지 않은 경우 2단계 이전에 자동화가 중지됩니다.

**예 1: 2개의 선형 작업이 있는 실행서**

```
---
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
...
```

**`onFailure` 옵션을 사용하여 다양한 단계로 이동하는 동적 자동화 생성**

다음 예에서는 `onFailure: step:step name`, `nextStep` 및 `isEnd` 옵션을 사용하여 동적 자동화를 생성합니다. 이 예제에서 `InstallMsiPackage` 작업이 실패하면 자동화가 *PostFailure*(`onFailure: step:PostFailure`)라는 작업으로 이동하여 설치가 실패할 경우 특정 작업을 수행하는 AWS Lambda 함수를 실행합니다. 설치에 성공하면 이 자동화는 TestInstall 작업(`nextStep: TestInstall`)으로 이동합니다. 두 단계 중 하나가 완료될 때 자동화가 끝나도록 두 `TestInstall` 및 `PostFailure` 단계에 모두 `isEnd` 옵션(`isEnd: true`)이 사용됩니다.

**참고**  
`mainSteps` 섹션의 마지막 단계에서 `isEnd` 옵션을 사용하는 것은 선택 사항입니다. 마지막 단계가 다른 단계로 건너뛰지 않으면 마지막 단계에서 작업을 실행한 후 자동화가 중지됩니다.

**예 2: 다양한 단계로 이동하는 동적 자동화**

```
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
...
```

**참고**  
실행서를 처리하기 전에 시스템은 실행서가 무한 루프를 생성하지 않는지 확인합니다. 무한 루프가 감지되면 자동화는 오류와 순환 추적을 반환하여 루프를 생성하는 단계를 표시합니다.

**중요 단계를 정의하는 동적 자동화 생성**

단계가 자동화의 전체 성공에 중요한지를 지정할 수 있습니다. 중요 단계가 실패하면 하나 이상의 단계가 성공적으로 실행되더라도 Automation은 자동화 상태를 `Failed`로 보고합니다. 다음 예에서 사용자는 *InstallMsiPackage* 단계가 실패하는 경우(`onFailure: step:VerifyDependencies`) *VerifyDependencies* 단계를 식별합니다. 사용자는 `InstallMsiPackage` 단계가 중요하지 않다고 지정합니다(`isCritical: false`). 이 예에서는 애플리케이션 설치에 실패한 경우 자동화가 `VerifyDependencies` 단계를 처리하여 하나 이상의 종속성이 누락되어 결과적으로 애플리케이션 설치에 실패했는지 여부를 확인합니다.

**예제 3: 자동화의 중요 단계 정의**

```
---
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
...
```