Step Functions에 대해 정리하고 사용해봤습니다.

2022.02.24

안녕하세요, 임채정입니다.
이번 블로그에서는 Step Functions 서비스에 대해 알아보고 사용해봤습니다.

아젠다

  1. Step Functions 란
  2. 실제로 해보기
  3. 마무리

1. Step Functions 란

  • 워크플로를 정의하고 실행 및 관리할 수 있는 관리형 서비스
  • AWS 의 각 서비스를 구성 요소로 워크플로를 정의
  • 다양한 작업으로 구성된 복잡한 워크플로를 쉽게 정의가능
    • 예) 이미지를 여러 형식으로 변환하고 크기를 조정한 후 Amazon Rekognition으로 분석하는 프로세스는 각 작업을 Lambda 함수로 작성하고 워크플로로 정의하여 쉽게 수행 가능

사용법

Step Functions 은 시각적으로 워크플로를 작성할 수도 있고

코드로도 작성할 수 있습니다.

시각적으로 작성하는 것은 간단하게 할 수 있지만 한 번 코드로 작성해두면 따로 작성할 필요없이 바로 복사해서 작성할 수도 있기때문에 각각의 방법은 장단점이 있는 것같습니다.
자신에게 맞는 방법으로 Step Functions 을 사용해봅시다!

2. 실제로 해보기

이번에는 실제로 Step Functions 을 사용해보겠습니다.

실제로 작성할 Step Functions 은 다음과 같습니다.

시작하면 람다 함수를 실행해서 나오는 결과를 통해 Choice State 에서 Good Result 혹은 Not Good Result으로 이동하는 형태입니다.

람다 함수

먼저 Step Functions 의 상태 머신이 실행되면 가장 먼저 실행할 람다 함수를 작성하겠습니다.

람다함수는 간단하게 입력되는 값을 Lambda result = 문자열에 붙여 결과로 받아오겠습니다.

exports.handler = (event, context, callback) => {
    callback(null, "Lambda result = " + event.result);
};

실제로 작성한 함수의 결과를 보기 위해 새로운 이벤트를 작성해줍니다.
작성시 입력할 값은 코드에 결과가 잘 나올 수 있도록 다음과 같이 변경했습니다.

결과는 다음과 같이 잘 나왔습니다.

Test Event Name
FunctionTest

Response
"Lambda result = fail"

Function Logs
START RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f Version: $LATEST
END RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f
REPORT RequestId: 92bd6fac-aff0-4c54-915e-ad3186977a3f	Duration: 101.34 ms	Billed Duration: 102 ms	Memory Size: 128 MB	Max Memory Used: 56 MB

Request ID
92bd6fac-aff0-4c54-915e-ad3186977a3f

Step Functions

그럼 이번에는 Step Functions 의 상태 머신을 작성하겠습니다.

코드로 워크플로 작성하기를 선택하고 유형은 표준을 선택합니다.

그 다음 상태 머신을 정의하는 부분에 코드를 붙여넣어두고 새로고침 버튼을 눌러주면 다음과 같이 워크플로를 시각적으로도 확인할 수 있습니다.

이 때, 람다 함수가 들어갈 Task 부분의 Resource 에 림다 함수의 ARN을 복사에서 붙여넣습니다.
또한, good이라는 단어가 들어가면 Good Result, 들어가지 않으면 Not Good Result가 되도록 작성해줬습니다.

{
  "Comment": "example of the Amazon States Language using Pass states",
  "StartAt": "Invoke Lambda function",
  "States": {
    "Invoke Lambda function": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:stepFunctionLambda",
      "InputPath": "$",
      "Next": "Choice State"
    },
    "Choice State": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$",
          "StringMatches": "*good*",
          "Next": "Good Result"
        }
      ],
      "Default": "Not Good Result"
    },
    "Good Result": {
      "Type": "Pass",
      "Result": "Lambda Function's result is good",
      "End": true
    },
    "Not Good Result": {
      "Type": "Fail",
      "Error": "ErrorCode",
      "Cause": "Lambda Function's result is not good"
    }
  }
}

그 후 세부 정보 지정 설정부분은 전부 기본 설정으로 해두고 작성을 완료합니다.

그러면 성공적으로 Step Functions 의 상태머신을 작성 했습니다.

결과 테스트

이번에는 테스트를 해보겠습니다.

만들어둔 상태 머신의 실행 시작을 클릭합니다.

실행할 때 입력값으로 good를 넣어주겠습니다.

그러면 결과는 성공이 나오고

자세히 살펴보면 람다 함수에서는 입력값이 good이 들어가서
출력값으로 "Lambda result = good"이 나왔습니다.

그게 Choice State에서 문장에 good이 들어가 있기 때문에 Good Result로 이동합니다.

Good Result의 결과를 자세히 보면
입력값인 "Lambda result = good"good이라는 단어가 포함되어 있어 출력값으로 "Lambda Function's result is good" 가 된 것으로 상태가 성공된 것을 확인할 수 있습니다.

또한 이벤트 내역을 통해 어떤 이벤트가 발생했는지도 확인할 수 있습니다.

그럼 아까는good을 넣어 실행했다면 이번에는 다른 입력값인 bed를 넣어 실행해보겠습니다.

결과는 실패가 되었습니다.

아까와 달리 입력값이 bed 이기 때문에 람다 함수의 결과도 다르게 출력됩니다.

그 때문에 Choice State에서 Not Good Result 로 이동합니다.
그래서 결과는 실패하고 에러가 나왔습니다.

실패한 결과에 대한 이벤트 또한 아까와 같이 이벤트 실행 내역에서 확인 할 수 있습니다.

3. 마무리

이번에는 Step Functions 에 대해 정리해봤습니다.
이번 블로그에서는 간단하게 실행을 해봤지만 많은 상태(State)을 사용해서 더 하고 복잡하고 상태 머신을 사용할 수 있기 때문에 다양한 상태(State)를 활용해서 Step Functions 사용할 수 있도록 공부하는 것도 재미있을 것같습니다!