Step Functions (1) 에서 학습했던 내용을 바탕으로 2번째는 Step Functions
를 구축하고 API Gateway
를 사용하여 호출하는 방법에 대해서 알아보려고 한다.
상태 머신 생성
기본적인 구조이다. 나는 이 구조를 기존에 생성했던 Lambda
함수를 기반으로 다시 구조를 만들어봤다.
Task 타입 -> Pass 타입 -> Choice 타입 -> Task 타입 으로 진행했다.
first functions
를 실행한다. first functions
의 Type은 Task
이고 Resource 는 실행시킬 Lambda 함수의 Arn을 넣어준다. first functions
람다 함수가 실행되고 코드에 맞는 return
값이 Pass 타입으로 간다. first functions
람다 함수는 입력 데이터인 status값(0or1)을 받아 statusCode와 함께 바로 리턴해주는 간단한 함수이다.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
에서 실행시킨 내역이 존재한다.