Step Functions에서 X-Ray 트레이스 보기 - AWS Step Functions

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

Step Functions에서 X-Ray 트레이스 보기

이 자습서에서는 X-Ray를 사용하여 상태 시스템을 실행할 때 발생하는 오류를 추적하는 방법을 알아봅니다. AWS X-Ray를 사용하여 상태 시스템 구성 요소를 시각화하고 성능 병목 현상을 식별하며 오류가 발생한 요청 문제를 해결할 수 있습니다. 이 자습서에서는 오류를 무작위로 생성하는 여러 Lambda 함수를 만든 다음 X-Ray를 사용하여 추적 및 분석할 수 있습니다.

Lambda를 사용하는 Step Functions 상태 시스템 만들기 자습서는 Lambda 함수를 직접적으로 호출하는 상태 시스템을 만드는 과정을 안내합니다. 자습서를 완료했다면 2단계로 건너뛰고 이전에 만든 AWS Identity and Access Management (IAM) 역할을 사용하십시오.

1단계: Lambda에 대한 IAM 역할 생성

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

Lambda에서는 Lambda 함수를 생성할 때 IAM () 역할을 AWS Identity and Access Management 할당해야 합니다. Step Functions에서 상태 머신을 생성할 때 역할을 IAM 할당해야 하는 것과 같습니다.

IAM콘솔을 사용하여 서비스 연결 역할을 생성합니다.

역할을 만들려면(콘솔 사용)
  1. 에서 AWS Management Console 로그인하고 IAM 콘솔을 엽니다. https://console.aws.amazon.com/iam/

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

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

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

  5. 역할(예: AWSLambdaBasicExecutionRole)에 연결할 하나 이상의 권한 정책을 선택합니다. AWS Lambda 권한 모델을 참조하십시오.

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

  6. 역할 이름을 입력합니다.

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

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

2단계: Lambda 함수 생성

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

중요

Lambda 함수가 상태 AWS 리전 머신과 AWS 동일한 계정 아래에 있는지 확인하십시오.

  1. Lambda 콘솔을 열고 함수 생성을 선택합니다.

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

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

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

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

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

    4. 기존 역할이전에 만든 Lambda 역할을 선택합니다.

      참고

      생성한 IAM 역할이 목록에 표시되지 않는 경우에도 Lambda로 역할을 전파하는 데 몇 분이 걸릴 수 있습니다.

    5. 함수 생성(Create function)을 선택합니다.

      Lambda 함수를 생성할 때 페이지 오른쪽 상단에 있는 Amazon 리소스 이름 ARN () 을 기록해 두십시오. 예:

      arn:aws:lambda:us-east-1:123456789012:function:TestFunction1
  4. 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 트레이스를 사용하여 보고 분석할 수 있는 예제 오류를 생성하는 데 사용됩니다.

  5. 저장(Save)을 선택합니다.

3단계: Lambda 함수를 2개 더 만들기

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

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

  2. Lambda 콘솔에서 이제 Lambda 함수 3개(TestFunction1, TestFunction2TestFunction3)가 있는지 확인합니다.

4단계: 상태 시스템 만들기

이 단계에서는 Step Functions 콘솔을 사용하여 Task 상태 3개가 있는 상태 시스템을 만듭니다. 각 Task 상태는 Lambda 함수 3개 중 하나를 참조합니다.

  1. Step Functions 콘솔을 열고 상태 시스템 생성을 선택합니다.

  2. 템플릿 선택 대화 상자에서 공백을 선택합니다.

  3. 선택을 선택하여 에서 워크플로 스튜디오를 엽니다. 디자인 모드

  4. 이 자습서에서는 에서 상태 머신의 Amazon States Language (ASL) 정의를 작성합니다코드 편집기. 이렇게 하려면 코드를 선택합니다.

  5. 기존 보일러플레이트 코드를 제거하고 다음 코드를 붙여넣습니다. 태스크 상태 정의에서 예제를 ARNs 이전에 생성한 Lambda 함수로 대체해야 합니다. ARNs

    { "StartAt": "CallTestFunction1", "States": { "CallTestFunction1": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function1", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction2" }, "CallTestFunction2": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function2", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction3" }, "CallTestFunction3": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: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, CallTestFunction2CallTestFunction3)를 정의합니다. 각 상태는 Lambda 함수 3개 중 하나를 직접적으로 호출합니다. 자세한 내용은 상태 머신 구조를 참조하십시오.

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

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

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

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

    이전에 상태 컴퓨터에 대한 올바른 권한을 가진 IAM 역할을 생성한 후 이를 사용하려면 권한에서 기존 역할 선택을 선택한 다음 목록에서 역할을 선택합니다. 또는 역할 입력을 선택한 다음 해당 IAM 역할에 ARN ARN 대한 역할을 제공하십시오.

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

    역할 설정 보기를 선택하여 상태 머신 구성으로 돌아갈 수도 있습니다.

    참고

    Step IAM Functions가 생성하는 역할을 삭제하면 Step Functions에서 해당 역할을 나중에 다시 생성할 수 없습니다. 마찬가지로 역할을 수정하는 경우 (예: IAM 정책의 보안 주체에서 Step Functions 제거) Step Functions가 나중에 원래 설정을 복원할 수 없습니다.

5단계: 상태 시스템 실행

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

  1. 에 대해 TraceFunctions페이지에서 실행 시작을 선택합니다.

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

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

    1. (선택 사항) 실행을 식별하기 위해 이름을 지정하거나 생성된 기본 실행 이름을 사용할 수 있습니다.

      참고

      Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. ASCII-문자가 아닌 이름은 Amazon에서 CloudWatch 사용할 수 없으므로 측정치를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다. CloudWatch

    2. 실행 시작을 선택합니다.

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

      실행 결과를 검토하려면 그래프 보기에서 개별 상태를 선택한 다음 단계 세부 정보 창에서 개별 탭을 선택하여 입력, 출력 및 정의가 포함된 각 상태의 세부 정보를 각각 봅니다. 실행 세부 정보 페이지에서 볼 수 있는 실행 정보에 대한 자세한 내용은 실행 세부 정보 페이지 - 인터페이스 개요 섹션을 참조하세요.

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

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

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

    이 서비스는 오류 및 장애 호출 성공 비율을 토대로 각 노드의 색상을 다르게 표시해 노드의 상태를 보여줍니다:

    • 녹색은 성공적인 호출을 의미합니다

    • 빨간색은 서버 장애를 의미합니다(500 시리즈 오류)

    • 노란색은 클라이언트 오류를 의미합니다(400 시리즈 오류)

    • 보라색은 병목 오류를 의미합니다(429 요청 과다)

    세 가지 테스트 기능에 대한 X-Ray Trace 노드의 예시 스크린샷.

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

  5. X-Ray 트레이스 맵을 보고 각 실행에서 발생하는 내용을 확인합니다. 타임라인 보기에 세그먼트 및 하위 세그먼트 계층 구조가 표시됩니다. 목록의 첫 번째 항목이 세그먼트인데, 단일 요청의 서비스에 의해 기록된 모든 데이터를 나타냅니다. 세그먼트 아래에는 하위 세그먼트가 있습니다. 이 예제에서는 Lambda 함수로 기록된 하위 세그먼트를 보여줍니다.

    테스트 기능을 위한 X-Ray 타임라인 세그먼트 및 하위 세그먼트의 예시 스크린샷.

    X-Ray 트레이스를 이해하고 Step Functions에서 X-Ray를 사용하는 방법에 대한 자세한 내용은 Trace Step Functions에서 데이터를 요청합니다. AWS X-Ray 섹션을 참조하세요.