Step Functions 콘솔의 디버그 오류 - AWS Step Functions

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

Step Functions 콘솔의 디버그 오류

이전 입력 및 출력 구성 항목에서는 데이터 필터링 및 조작에 대해 배웠습니다. 스테이트 머신 구성 및 데이터 선택 시 오류가 발생할 수 있습니다. 이 마지막 항목에서는 Step Functions 콘솔을 사용하여 런타임 오류를 디버깅하는 방법을 소개합니다.

다음과 같은 런타임 오류가 발생할 수 있습니다.

  • 의 JSON 경로가 잘못되었습니다.Variable Choice상태의 필드입니다.

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

  • 입력 및 출력을 조작하기 위해 필터를 적용하는 중 잘못된 JSON 경로 표현식이 발생했습니다.

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

  • IAM권한 오류.

작은 정보

추가 오류 처리 옵션은 을 참조하십시오Step Functions 워크플로의 오류 처리.

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

상태의 변수 필드에 올바르지 않거나 확인할 수 없는 JSON 경로를 지정하거나 Choice 상태에 일치 규칙을 정의하지 않으면 워크플로를 실행하는 동안 오류가 발생합니다. 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 경로를 확인합니다.

      적용된 크레딧의 입력 값은 5000을 초과합니까? 상태는 숫자 값이지만 입력 값의 JSON 경로를 로 지정했습니다. $.Payload 스테이트 머신 실행 중에는 이 경로가 존재하지 않기 때문에 Choice 상태가 이 JSON 경로를 확인할 수 없습니다.

  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. 상태 시스템을 다시 실행합니다.

결론 및 다음 단계

축하합니다! 이제 Step 시작하기 자습서 Functions를 사용할 수 있게 되었습니다.

정리

이제 시작하기를 완료했으니 더 이상 사용하지 않을 리소스를 정리 (삭제) 하는 것이 좋습니다. AWS 리소스를 정리하면 계정에 추가 요금이 부과되는 것을 방지할 수 있습니다.