자습서 8: 콘솔에서 오류 디버깅 - AWS Step Functions

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

자습서 8: 콘솔에서 오류 디버깅

Step Functions로 작업할 때 다음과 같은 이유로 인해 런타임 오류가 발생할 수 있습니다.

  • Choice 상태의 변수 필드에 잘못 지정된 JSON 경로

  • 상태 시스템 정의 문제(예: Choice 상태에 정의된 규칙과 일치하는 규칙 없음)

  • 입력과 출력을 조작하기 위해 필터를 적용하는 중에 잘못된 JSON 경로 표현식

  • Lambda 함수 예외로 인한 작업 실패

  • IAM 권한 오류

이 자습서에서는 Step Functions 콘솔을 사용하여 이러한 몇몇 오류를 디버깅하는 방법을 알아봅니다. 자세한 내용은 Step Functions에서 오류 처리 섹션을 참조하세요.

잘못된 경로 Choice 상태 오류 디버깅

Choice 상태의 변수 필드에 잘못되었거나 확인할 수 없는 JSON 경로를 지정하거나 Choice 상태에 일치 규칙을 정의하지 않으면 워크플로를 실행하는 동안 오류가 발생합니다.

잘못된 경로 오류를 설명하기 위해 이 자습서에서는 워크플로의 Choice 상태 오류를 소개합니다. CreditCardWorkflow 상태 시스템을 사용하고 오류가 발생하도록 해당 정의를 편집하겠습니다.

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

  2. 편집을 선택하여 상태 시스템 정의를 편집합니다. 다음 코드에 강조 표시된 변경 사항을 상태 시스템 정의에 적용합니다.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$.Payload", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$.Payload", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }
  3. 저장을 선택한 다음 일단 저장을 선택합니다.

  4. 상태 시스템을 실행합니다.

  5. 상태 시스템 실행의 실행 세부 정보 페이지에서 다음 중 하나를 수행합니다.

    1. 오류 메시지에서 원인을 선택하여 실행 실패 원인을 확인합니다.

    2. 오류 메시지에서 단계 세부 정보 표기를 선택하여 오류가 발생한 단계를 확인합니다.

  6. 단계 세부 정보 섹션의 입력 및 출력 탭에서 고급 보기 토글 버튼을 선택하여 선택한 상태의 입력 및 출력 데이터 전송 경로를 확인합니다.

  7. 그래프 보기에서 Credit applied >= 5000?이 선택되어 있는지 확인하고 다음을 수행합니다.

    1. 입력 상자에서 상태의 입력 값을 봅니다.

    2. 정의 탭을 선택하고 변수 필드에 지정된 JSON 경로를 확인합니다.

      Credit applied >= 5000? 상태의 입력값은 숫자 값이지만 입력 값의 JSON 경로를 $.Payload로 지정했습니다. 상태 시스템 실행 중에는 이 JSON 경로가 존재하지 않으므로 Choice 상태에서 이 경로를 확인할 수 없습니다.

  8. 상태 시스템을 편집하여 변수 필드 값을 $로 지정합니다.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }

입력 및 출력 필터를 적용하는 동안 JSON 경로 표현식 오류 디버깅

입력 및 출력 필터를 사용할 때 잘못된 JSON 경로 식 지정으로 인해 런타임 오류가 발생할 수 있습니다.

다음 예제에서는 자습서 5에서 만든 WorkflowInputOutput 상태 시스템을 사용하고 ResultSelector 필터를 사용하여 작업 출력의 일부를 선택하는 시나리오를 보여줍니다.

  1. ResultSelector 필터를 적용하여 ID 확인 단계를 위한 작업 출력 일부를 선택합니다. 이렇게 하려면 상태 시스템 정의를 다음과 같이 편집합니다.

    { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity", "Payload": { "email": "jdoe@example.com", "ssn": "123-45-6789" } }, ... ... "ResultSelector": { "identity.$": "$.Payload.body.message" }", "End": true } } }
  2. 상태 시스템을 실행합니다.

  3. 상태 시스템 실행의 실행 세부 정보 페이지에서 다음을 수행합니다.

    1. 오류 메시지에서 원인을 선택하여 실행 실패 원인을 확인합니다.

    2. 오류 메시지에서 단계 세부 정보 표기를 선택하여 오류가 발생한 단계를 확인합니다.

  4. 오류 메시지에서는 $.Payload.body 노드의 콘텐츠가 이스케이프된 JSON 문자열입니다. JSON 경로 표기법을 사용하여 문자열을 참조할 수 없으므로 오류가 발생했습니다.

  5. $.Payload.body.message 노드를 참조하려면 다음을 수행합니다.

    1. 먼저 States.StringToJSON 내장 함수를 사용하여 문자열을 JSON 형식으로 변환합니다.

    2. 내장 함수 내에 있는 $.Payload.body.message 노드의 JSON 경로를 지정합니다.

      "ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
  6. 상태 시스템을 다시 실행합니다.