

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions 상태 머신을 사용하여 오류 조건 처리
<a name="tutorial-handling-error-conditions"></a>

이 자습서에서는 사용자 지정 오류를 발생시키도록 구축된 Lambda 함수 예제를 호출하는 **Task** 상태의 AWS Step Functions 상태 시스템을 생성합니다.

작업은 `Catch` 필드를 구성할 수 있는 [폴백 상태](concepts-error-handling.md#error-handling-fallback-states) 중 하나입니다. 통합에서 오류가 수신되면 오류 이름을 기반으로 캐치 필드에 의해 다음 단계가 선택됩니다.

## 1단계: 오류를 발생시키는 Lambda 함수 생성
<a name="create-lambda-function-fail"></a>

Lambda 함수를 사용하면 오류 조건을 시뮬레이션할 수 있습니다.

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

1. **함수 생성**을 선택합니다.

1. **블루프린트 사용**을 선택하고 `Step Functions`를 검색한 다음 **사용자 지정 오류 발생**을 선택합니다.

1. [**함수 이름**]에 `ThrowErrorFunction`을 입력합니다.

1. **역할(Role)**에서 **기본 Lambda 권한을 가진 새 역할 생성(Create a new role with basic Lambda permissions)**을 선택합니다.

1. **함수 생성**을 선택합니다.

   **코드** 창에 다음 코드가 표시되어야 합니다.

   ```
   export const handler = async () => {
       function CustomError(message) {
           this.name = 'CustomError';
           this.message = message;
       }
       CustomError.prototype = new Error();
   
       throw new CustomError('This is a custom error!');
   };
   ```

## 2단계: Lambda 함수 테스트
<a name="error-conditions-test"></a>

상태 머신을 생성하기 전에 Lambda 함수가 간접 호출 시 `CustomError`를 발생시키는지 확인합니다.

1. **테스트** 탭을 선택합니다.

1. **새 이벤트 생성**을 선택하고 기본 **이벤트 JSON**를 유지합니다.

1. 테스트 이벤트를 저장하지 않고 함수를 간접 호출하려면 저장하기 전에 **테스트**를 선택합니다.

1. **실행 함수**를 확장하여 발생한 오류의 세부 정보를 검토합니다.

이제 사용자 지정 오류를 발생시킬 준비가 된 Lambda 함수가 있습니다.

다음 단계에서는 해당 오류를 포착하고 재시도하도록 상태 머신을 설정합니다.

## 3단계: 상태 머신 생성
<a name="state-machine-create-step"></a>

Step Functions 콘솔을 사용하여 `Catch` 구성과 함께 [Task 워크플로 상태](state-task.md)를 사용하는 상태 머신을 만듭니다. 상태 머신은 함수가 호출될 때 오류 발생을 시뮬레이션하도록 빌드한 Lambda 함수를 간접 호출합니다. Step Functions는 재시도 간에 지수 백오프를 사용하여 함수를 재시도합니다.

1. [AWS Step Functions 콘솔](https://console.aws.amazon.com/states/home)을 열고 메뉴에서 **상태 머신**을 선택한 다음 **상태 머신 생성**을 선택합니다.

1. **새로 생성**을 선택하고 **상태 머신 이름**에 {{CatchErrorStateMachine}}을 입력합니다.

1. 기본 유형(Standard)을 수락한 다음 **계속**을 선택하여 Workflow Studio에서 상태 머신을 편집합니다.

1. **코드**를 선택하여 ASL 편집기로 전환한 다음 코드를 다음 상태 머신 정의로 바꿉니다.

   ```
   {
     "Comment": "Example state machine that can catch a custom error thrown by a function integration.",
     "StartAt": "CreateAccount",
     "States": {
       "CreateAccount": {
         "Type": "Task",
         "Resource": "arn:aws:states:::lambda:invoke",
         "Output": "{% $states.result.Payload %}",
         "Arguments": {
           "FunctionName": "arn:aws:lambda:{{region}}:{{account-id}}:function:ThrowErrorFunction:$LATEST",
           "Payload": "{% $states.input %}"
         },
         "Catch": [
           {
             "ErrorEquals": [
               "CustomError"
             ],
             "Next": "CustomErrorFallback"
           },
           {
             "ErrorEquals": [
               "States.ALL"
             ],
             "Next": "CatchAllFallback"
           }
         ],
         "End": true,
         "Retry": [
           {
             "ErrorEquals": [
               "CustomError",
               "Lambda.ServiceException",
               "Lambda.AWSLambdaException",
               "Lambda.SdkClientException",
               "Lambda.TooManyRequestsException"
             ],
             "IntervalSeconds": 1,
             "MaxAttempts": 3,
             "BackoffRate": 2,
             "JitterStrategy": "FULL"
           }
         ]
       },
       "CustomErrorFallback": {
         "Type": "Pass",
         "End": true,
         "Output": {
           "Result": "Fallback from a custom error function."
         }
       },
       "CatchAllFallback": {
         "Type": "Pass",
         "End": true,
         "Output": {
           "Result": "Fallback from all other error codes."
         }
       }
     },
     "QueryLanguage": "JSONata"
   }
   ```

## 4단계: 상태 머신 구성
<a name="state-machine-configure"></a>

상태 머신을 실행하기 전에 먼저 이전에 생성한 Lambda 함수에 연결해야 합니다.

1. **설계** 모드로 다시 전환하고 **CreateAccount**라는 **Lambda: 호출** 상태를 선택합니다.

1. **구성** 탭에서 **API 인수**를 찾습니다. **함수 이름**에서는 앞서 생성한 Lambda 함수를 선택합니다.

1. **생성**을 선택하고 역할을 검토한 다음 **확인**을 선택하여 상태 머신을 생성합니다.

## 5단계: 상태 머신 실행
<a name="error-conditions-execution"></a>

상태 머신을 생성하고 구성한 후 이를 실행하고 흐름을 검사할 수 있습니다.

1. 편집기에서 **실행**을 선택합니다.

   또는 **상태 머신** 목록에서 **실행 시작**을 선택합니다.

1. **실행 시작** 대화 상자에서 생성된 ID를 수락하고 **입력**에 다음 JSON을 입력합니다.

   ```
   { "Cause" : "Custom Function Error" }
   ```

1. **실행 시작**을 선택합니다.

Step Functions 콘솔은 실행 ID가 제목인 페이지로 이동합니다. 이는 *실행 세부 정보* 페이지로 알려져 있습니다. 워크플로가 진행되고 완료된 후 실행 결과를 검토할 수 있습니다.

실행 결과를 검토하려면 **그래프 보기**에서 개별 상태를 선택한 다음 [단계 세부 정보](concepts-view-execution-details.md#exec-details-intf-step-details) 창에서 개별 탭을 선택하여 입력, 출력 및 정의가 포함된 각 상태의 세부 정보를 각각 봅니다. *실행 세부 정보* 페이지에서 볼 수 있는 실행 정보에 대한 자세한 내용은 [실행 세부 정보 개요](concepts-view-execution-details.md#exec-details-interface-overview) 섹션을 참조하세요.

상태 머신은 Lambda 함수를 간접 호출하여 `CustomError`를 발생시킵니다. **그래프 보기**에서 **CreateAccount** 단계를 선택하여 상태 출력을 확인합니다. 상태 머신 출력은 다음 그림과 비슷한 형태가 됩니다.

![사용자 지정 오류를 포착하는 워크플로의 예시 스크린샷입니다.](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/tutorial-console-retry-state-machine-error-output.png)


**축하합니다\!**

 이제 Lambda 함수에서 발생하는 오류 조건을 포착하고 처리할 수 있는 상태 머신이 생겼습니다. 이 패턴을 사용하여 워크플로에서 강력한 오류 처리를 구현할 수 있습니다.

**참고**  
시간 초과 시 [Retry](concepts-error-handling.md#error-handling-retrying-after-an-error)하거나 오류가 발생하거나 시간이 초과될 때 `Catch`를 사용하여 특정 상태로 전환되는 상태 머신도 만들 수 있습니다. 오류 처리 기술의 예는 [Retry 및 Catch 사용 예제](concepts-error-handling.md#error-handling-examples)를 참조하십시오.