

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

# Step Functions에서 X-Ray 트레이스 보기
<a name="tutorial-xray-traces"></a>

이 자습서에서는 X-Ray를 사용하여 상태 머신을 실행할 때 발생하는 오류를 추적하는 방법을 알아봅니다. [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)를 사용하여 상태 머신 구성 요소를 시각화하고 성능 병목 현상을 식별하며 오류가 발생한 요청 문제를 해결할 수 있습니다. 이 자습서에서는 오류를 무작위로 생성하는 여러 Lambda 함수를 만든 다음 X-Ray를 사용하여 추적 및 분석할 수 있습니다.

[Lambda를 사용하는 Step Functions 상태 머신 만들기](tutorial-creating-lambda-state-machine.md) 자습서는 Lambda 함수를 직접적으로 호출하는 상태 머신을 만드는 과정을 안내합니다. 해당 자습서를 마쳤으면 [2단계](#create-xray-lambda-state-machine-step-4)로 건너뛰고 이전에 만든 AWS Identity and Access Management (IAM) 역할을 사용합니다.

## 1단계: Lambda에 대한 IAM 역할 만들기
<a name="create-xray-lambda-state-machine-step-1"></a>

 AWS Lambda 및 모두 코드를 실행하고 AWS 리소스(예: Amazon S3 버킷에 저장된 데이터)에 액세스할 AWS Step Functions 수 있습니다. 보안 유지를 위해 Lambda 및 Step Functions에 이러한 리소스에 대한 액세스 권한을 부여해야 합니다.

Lambda는 Lambda 함수를 생성할 때 AWS Identity and Access Management (IAM) 역할을 할당해야 합니다. 동일한 방식으로 Step Functions는 상태 시스템을 생성할 때 IAM 역할을 할당해야 합니다.

### Lambda와 함께 사용할 역할을 생성하려면
<a name="create-xray-lambda-state-machine-to-create-a-role-for-use-with-lambda"></a>

IAM 콘솔을 사용하여 서비스 연결 역할을 만들 수 있습니다.

**역할을 만들려면(콘솔 사용)**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택합니다. 그런 다음 **역할 생성**을 선택합니다.

1. **AWS 서비스** 역할 유형을 선택한 다음 **Lambda**를 선택합니다.

1. **Lambda** 사용 사례를 선택합니다. 사용 사례는 서비스에 필요한 신뢰 정책을 포함하기 위해 서비스에서 정합니다. 그런 다음 **다음: 권한**을 선택합니다.

1. 역할(예: `AWSLambdaBasicExecutionRole`)에 연결할 하나 이상의 권한 정책을 선택합니다. [AWS Lambda 권한 모델](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)을 참조하십시오.

    역할에 부여하려는 권한을 할당하는 정책 옆의 확인란을 선택한 후 **다음: 검토**를 선택합니다.

1. **역할 이름**을 입력합니다.

1. (선택 사항) **역할 설명(Role description)**에서 새로운 서비스 연결 역할에 대한 설명을 편집합니다.

1. 역할을 검토한 다음 **역할 생성**을 선택합니다.

## 2단계: Lambda 함수 생성
<a name="create-xray-lambda-state-machine-step-2"></a>

Lambda 함수는 무작위로 오류나 제한 시간을 발생시켜 X-Ray에서 볼 수 있는 예제 데이터를 생성합니다.

**중요**  
Lambda 함수가 상태 시스템과 동일한 AWS 계정 및 AWS 리전 에 있는지 확인합니다.

1. [Lambda 콘솔](https://console.aws.amazon.com/lambda/home)을 열고 **함수 생성**을 선택합니다.

1. [**Create function**] 섹션에서 [**Author from scratch**]를 선택합니다.

1. **기본 정보** 섹션에서 Lambda 함수를 구성합니다.

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

   1. **런타임**에서 **Node.js 18.x**를 선택합니다.

   1. [**역할**]에서 [**기존 역할 선택**]을 선택합니다.

   1. **기존 역할**에 [이전에 만든 Lambda 역할](#create-xray-lambda-state-machine-to-create-a-role-for-use-with-lambda)을 선택합니다.
**참고**  
만든 IAM 역할이 목록에 표시되지 않으면 역할이 Lambda에 전파될 때까지 몇 분 더 기다려야 할 수 있습니다.

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

      Lambda 함수가 생성되면 페이지 오른쪽 상단 모서리에 있는 Amazon 리소스 이름(ARN)을 기록해 둡니다. 예제:

      ```
      arn:aws:lambda:{{region}}:123456789012:function:TestFunction1
      ```

1. Lambda 함수의 다음 코드를 **{{TestFunction1}}** 페이지의 **함수 코드** 섹션에 복사합니다.

   ```
   function getRandomSeconds(max) {
       return Math.floor(Math.random() * Math.floor(max)) * 1000;
   }
   function sleep(ms) {
       return new Promise(resolve => setTimeout(resolve, ms));
   }
   export const handler = async (event) => {
       if(getRandomSeconds(4) === 0) {
           throw new Error("Something went wrong!");
       }   
       let wait_time = getRandomSeconds(5);
       await sleep(wait_time);
       return { 'response': true }
   };
   ```

   이 코드는 시간이 임의로 설정된 실패를 만듭니다. 이 실패는 상태 머신에서 X-Ray 트레이스를 사용하여 보고 분석할 수 있는 예제 오류를 생성하는 데 사용됩니다.

1. **저장**을 선택합니다.

## 3단계: Lambda 함수를 2개 더 만들기
<a name="create-xray-lambda-state-machine-step-3"></a>

Lambda 함수를 2개 더 만듭니다.

1. 2단계를 반복하여 Lambda 함수를 2개 더 만듭니다. 다음 함수의 경우 **함수 이름**에 `TestFunction2`를 입력합니다. 마지막 함수의 경우 **함수 이름**에 `TestFunction3`을 입력합니다.

1. Lambda 콘솔에서 이제 Lambda 함수 3개(`TestFunction1`, `TestFunction2` 및 `TestFunction3`)가 있는지 확인합니다.

## 4단계: 상태 머신 만들기
<a name="create-xray-lambda-state-machine-step-4"></a>

이 단계에서는 [Step Functions 콘솔](https://console.aws.amazon.com/states/home?region=us-east-1#/)을 사용하여 `Task` 상태 3개가 있는 상태 머신을 만듭니다. 각 `Task` 상태는 Lambda 함수 3개 중 하나를 참조합니다.

1. [AWS Step Functions 콘솔](https://console.aws.amazon.com/states/home)을 열고 메뉴에서 **상태 머신**을 선택한 다음 **상태 머신 생성**을 선택합니다.
**중요**  
상태 시스템이 [2단계 및 ](#create-xray-lambda-state-machine-step-2)[3단계](#create-xray-lambda-state-machine-step-3)에서 이전에 생성한 Lambda 함수와 동일한 AWS 계정 및 리전에 있는지 확인합니다.

1. **새로 생성**을 선택합니다.

1. 상태 머신의 이름을 지정한 다음 **계속**을 선택하여 Workflow Studio에서 상태 머신을 편집합니다.

1. 이 자습서에서는 [코드 편집기](workflow-studio.md#wfs-interface-code-editor)에서 상태 머신의 [Amazon States Language](concepts-amazon-states-language.md)(ASL) 정의를 작성합니다. 이렇게 하려면 **코드**를 선택합니다.

1. 기존 보일러플레이트 코드를 제거하고 다음 코드를 붙여넣습니다. Task 상태 정의에서 예제 ARN을 생성한 Lambda 함수의 ARN으로 바꿔야 합니다.

   ```
   {
     "StartAt": "CallTestFunction1",
     "States": {
       "CallTestFunction1": {
         "Type": "Task",
         "Resource": "{{arn:aws:lambda:{{region}}:123456789012:function:test-function1}}",
         "Catch": [
           {
             "ErrorEquals": [
               "States.TaskFailed"
             ],
             "Next": "AfterTaskFailed"
           }
         ],
         "Next": "CallTestFunction2"
       },
       "CallTestFunction2": {
         "Type": "Task",
         "Resource": "{{arn:aws:lambda:{{region}}:123456789012:function:test-function2}}",
         "Catch": [
           {
             "ErrorEquals": [
               "States.TaskFailed"
             ],
             "Next": "AfterTaskFailed"
           }
         ],
         "Next": "CallTestFunction3"
       },
       "CallTestFunction3": {
         "Type": "Task",
         "Resource": "{{arn:aws:lambda:{{region}}:123456789012:function:test-function3}}",
         "TimeoutSeconds": 5,
         "Catch": [
           {
             "ErrorEquals": [
               "States.Timeout"
             ],
             "Next": "AfterTimeout"
           },
           {
             "ErrorEquals": [
               "States.TaskFailed"
             ],
             "Next": "AfterTaskFailed"
           }
         ],
         "Next": "Succeed"
       },
       "Succeed": {
         "Type": "Succeed"
       },
       "AfterTimeout": {
         "Type": "Fail"
       },
       "AfterTaskFailed": {
         "Type": "Fail"
       }
     }
   }
   ```

   이 예제는 Amazon States Language를 사용하는 상태 머신에 대한 설명입니다. `Task` 상태 3개(`CallTestFunction1`, `CallTestFunction2` 및 `CallTestFunction3`)를 정의합니다. 각 상태는 Lambda 함수 3개 중 하나를 직접적으로 호출합니다. 자세한 내용은 [상태 머신 구조](statemachine-structure.md)를 참조하십시오.

1. 상태 머신 이름을 지정합니다. 이렇게 하려면 기본 상태 머신 이름인 **MyStateMachine** 옆에 있는 편집 아이콘을 선택합니다. 그런 다음 **상태 머신 구성**에서 **상태 머신 이름** 상자에 이름을 지정합니다.

   이 튜토리얼에서는 이름 **TraceFunctions**를 입력합니다.

1. (선택 사항) **상태 머신 구성**에서 상태 머신 유형 및 실행 역할과 같은 기타 워크플로 설정을 지정합니다.

   이 자습서의 경우 **추가 구성**에서 **X-Ray 추적 활성화**를 선택합니다. **상태 머신 설정**의 다른 모든 기본 선택 항목을 그대로 둡니다.

   상태 머신에 대한 올바른 권한을 사용하여 [이전에 IAM 역할을 만들었고](procedure-create-iam-role.md) 이를 사용하려면 **권한**에서 **기존 역할 선택**을 선택한 다음 목록에서 역할을 선택합니다. 또는 **역할 ARN 입력**을 선택한 다음 IAM 역할에 대한 ARN을 제공합니다.

1. **역할 생성 확인** 대화 상자에서 **확인**을 선택하여 계속합니다.

   **역할 설정 보기**를 선택하여 **상태 머신 구성**으로 돌아갈 수도 있습니다.
**참고**  
Step Functions에서 만드는 IAM 역할을 삭제하면 나중에 Step Functions에서 이 역할을 다시 만들 수 없습니다. 마찬가지로, 역할을 수정하면(예: IAM 정책의 주요에서 Step Functions 제거) 나중에 Step Functions에서 해당 원본 설정을 복원할 수 없습니다.

## 5단계: 상태 머신 실행
<a name="create-xray-lambda-state-machine-step-5"></a>

상태 머신 실행은 워크플로를 실행하여 작업을 수행하는 인스턴스입니다.

1. **{{TraceFunctions}}** 페이지에서 **실행 시작**을 선택합니다.

   [**New execution**] 페이지가 표시됩니다.

1. **실행 시작** 대화 상자에서 다음을 수행합니다.

   1. (선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.
**비 ASCII 이름 및 로깅**  
Step Functions는 비 ASCII 문자가 포함된 상태 머신, 실행, 활동 및 레이블 이름을 허용합니다. 이러한 문자는 Amazon CloudWatch에서 데이터 로깅을 방지하므로 Step Functions 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다.

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

   1. Step Functions 콘솔은 실행 ID가 제목인 페이지로 이동합니다. 이 페이지를 *실행 세부 정보* 페이지라고 합니다. 실행이 진행되는 동안 또는 완료된 후에 이 페이지에서 실행 결과를 검토할 수 있습니다.

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

      여러 번(최소 3번 이상) 실행합니다.

1. 실행이 완료되면 **X-Ray 트레이스 맵** 링크를 따릅니다. 실행이 아직 실행 중인 동안에도 트레이스를 볼 수 있지만 X-Ray 트레이스 맵을 보기 전에 실행 결과를 확인하는 것이 좋습니다.

1. 서비스 맵을 보고 오류가 발생한 위치, 지연 시간이 긴 연결 또는 실패한 요청의 트레이스를 식별할 수 있습니다. 이 예시에서는 각 함수에 수신되는 트래픽 양을 확인할 수 있습니다. `TestFunction2`는 `TestFunction3`보다 자주 많이 직접적으로 호출되었고 `TestFunction1`은 `TestFunction2`보다 두 배 넘게 더 자주 직접적으로 호출되었습니다.

   이 서비스는 오류 및 장애 호출 성공 비율을 토대로 각 노드의 색상을 다르게 표시해 노드의 상태를 보여줍니다:
   +  **녹색**은 성공적인 호출을 의미합니다 
   +  **빨간색**은 서버 장애를 의미합니다(500 시리즈 오류) 
   +  **노란색**은 클라이언트 오류를 의미합니다(400 시리즈 오류) 
   +  **보라색**은 병목 오류를 의미합니다(429 요청 과다)   
![세 가지 테스트 함수에 대한 X-Ray 트레이스 노드의 예시 스크린샷입니다.](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/tutorial-xray-service.png)

   서비스 노드를 선택하여 해당 노드에 대한 요청을 보거나 두 노드 간의 엣지를 선택하여 해당 연결을 이동하는 요청을 볼 수 있습니다.

1. X-Ray 트레이스 맵을 보고 각 실행에서 발생하는 내용을 확인합니다. 타임라인 보기에 세그먼트 및 하위 세그먼트 계층 구조가 표시됩니다. 목록의 첫 번째 항목이 세그먼트인데, 단일 요청의 서비스에 의해 기록된 모든 데이터를 나타냅니다. 세그먼트 아래에는 하위 세그먼트가 있습니다. 이 예제에서는 Lambda 함수로 기록된 하위 세그먼트를 보여줍니다.  
![테스트 함수에 대한 X-Ray 타임라인 세그먼트 및 하위 세그먼트의 예시 스크린샷입니다.](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/tutorial-xray-trace.png)

   X-Ray 트레이스를 이해하고 Step Functions에서 X-Ray를 사용하는 방법에 대한 자세한 내용은 [에서 Step Functions 요청 데이터 추적 AWS X-Ray](concepts-xray-tracing.md) 섹션을 참조하세요.