[AWS] Step Functions (2)

곽우현·2022년 5월 11일
0

AWS

목록 보기
4/6
post-thumbnail
post-custom-banner

Step Functions (1) 에서 학습했던 내용을 바탕으로 2번째는 Step Functions를 구축하고 API Gateway를 사용하여 호출하는 방법에 대해서 알아보려고 한다.


상태 머신 생성

  • ‘시각적으로 워크플로 설계’는 마우스 드래그/드롭 방식으로 워크플로우를 설계하는 방식이다.
  • ‘코드로 워크플로우 작성’은 JSON 기반 Amazon States Language를 사용하여 워크플로우를 설계하는 방식이다.
  • ‘표준 유형’과 ‘Express 유형’은 서비스에 맞게 해주시면 됩니다. 두개 다 진행 해보았다.
  • ‘코드로 워크플로우 작성’‘표준 유형’을 선택하게 되면 밑에 ‘정의’ 부분에 코드를 작성할 수 있게 된다.

기본적인 구조이다. 나는 이 구조를 기존에 생성했던 Lambda 함수를 기반으로 다시 구조를 만들어봤다.

Task 타입 -> Pass 타입 -> Choice 타입 -> Task 타입 으로 진행했다.

  1. 입력값으로 데이터를 넣어서 first functions를 실행한다. first functions의 Type은 Task이고 Resource 는 실행시킬 Lambda 함수의 Arn을 넣어준다.
  2. first functions 람다 함수가 실행되고 코드에 맞는 return값이 Pass 타입으로 간다. first functions 람다 함수는 입력 데이터인 status값(0or1)을 받아 statusCode와 함께 바로 리턴해주는 간단한 함수이다.
  3. Pass 타입(디버깅용)은 위에서 받은 input을 output으로 그대로 리턴해준다.
  4. 리턴된 값으로 status choice라는 choice 타입에서 리턴값을 검사한다. 0이면 books 람다 함수를, 1이면 emps 람다 함수를 호출한다.

작업 코드

{
  "Comment": "wkwak step functions test",
  "StartAt": "first functions",
  "States": {
    "first functions": {
      "Comment": "lambda status 지정 함수",
      "Type": "Task",
      "Resource": "{ arn 채워주세요 }",
      "InputPath": "$.data",
      "Next": "Pass"
    },
    "Pass": {
      "Comment": "디버깅용",
      "Type": "Pass",
      "Next": "status choice"
    },
    "status choice": {
      "Comment": "람다 함수를 이용한 분기처리 return Status",
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.Status",
          "NumericEquals": 0,
          "Next": "books"
        },
        {
          "Variable": "$.Status",
          "NumericEquals": 1,
          "Next": "emps"
        }
      ],
      "Default": "books"
    },
    "books": {
      "Type": "Task",
      "Resource": "{ arn 채워주세요 }",
      "OutputPath": "$.data",
      "ResultPath": "$.data",
      "End": true
    },
    "emps": {
      "Type": "Task",
      "Resource": "{ arn 채워주세요 }",
      "OutputPath": "$.data",
      "ResultPath": "$.data",
      "End": true
    }
  }
}

로깅, 권한

권한은 AWSLambdaRole을 추가하였다.

실행

Step Functions가 정상적으로 생성되었고, 정의 코드를 작성했다면 실행을 해본다.

입력사항에는 데이터를 JSON 형태로 넣었다. 내 첫번째 함수인 first functions에서 받아야 할 event 데이터이다.

결과

단계가 정상적으로 동작을 하고, 각 단계를 클릭하여 입력과 출력값을 볼 수 있다.

입력값에 status를 1이 아닌 0을 보내게되면 books 람다 함수가 아닌, emps 람다 함수가 실행된다.
데이터 흐름 시뮬레이터는 위에서 InputPath, OutputPath 등에 관한 AWS의 예시이다.

API Gateway로 Step Functions 호출

위처럼 실행 시작으로 정상 동작을 한다면 API Gateway에서도 Step Functions를 호출할 수 있다. API Gateway에서 리소스를 원하는 엔드포인트로 생성하고, first functions라는 람다 함수가 status라는 데이터를 받아야 하기때문에 POST로 메소드를 생성한다.

통합 유형은 API Gateway가 AWS 서비스인 Step Functions를 호출해야하기 때문에 AWS 서비스를 선택한다.
Step Functions가 위치한 리전을 선택하고, 작업은 StartExecution을 넣어준다. StrartExecution은 AWS에서 지정한 Step Functions를 호출하기 위한 약속 인거 같다.

실행 역할 부분은 하나 생성을 하고, AWSStepFunctionsFullAccess 권한을 추가하였다.

준비가 완료되었고 요청 본문에 다음과 같이 넣어준다.

{
    "stateMachineArn": "arn:aws:states:ap-northeast-2:*****",
    "input": "{ \"data\" : {\"status\" : 1} }"
}

stateMachineArn은 본인이 만든 Step Functions의 Arn값을 넣는다.
input은 보낼 데이터인데, 이렇게 String 형식으로 보내야지만 Step Functions에서 받는것 같다.
StartExecution 이 링크에 형식이 나와있다.

결과

테스트 진행시 정상적으로 작동된다. 응답 본문에 나온 값은 어떤 Step Functions를 실행했는지와 실행된 시간이 Return된다.
Arn: 뒤에 문자열의 의미는 Step Functions의 실행 이름이다. Step Functions 서비스로 돌아가 실행 내역을 보게되면 방금 API Gateway에서 실행시킨 내역이 존재한다.

profile
주니어 Java 개발자
post-custom-banner

0개의 댓글