2020년 11월 30일 기록
AWS Step Functions은 시각적 워크플로우를 사용해 분산 애플리케이션 및 마이크로서비스의 구성 요소를 손쉽게 조정하도록 해주는 웹 서비스이다. 각각 기능 또는 작업을 수행하는 개별 구성 요소를 사용하여 애플리케이션을 구축하면 애플리케이션을 빠르게 확장하거나 변경할 수 있다.
쉽게 말하면 AWS의 여러 컴퓨팅 자원들의 수행 순서를 설정할 수 있는 서비스이다. 이번 프로젝트에서는 하나의 람다에서 모든 작업을 처리하지 않고, 람다를 기능별로 분산시켜 순차적으로 실행되도록 하기 위해 사용할 예정이다.
AWS Step Functions는 각 단계가 이전 단계의 출력으로 입력되는 단계로 구성된 워크 플로우를 설계하고 실행할 수 있도록 함으로써, 작업을 보다 쉽게 조정할 수 있게 하는 완전 관리형 서비스다.
각 단계는 State라 불린다. 이들은 각자의 Type으로 어떤 명령을 수행하는지 나타낸다.
(여기서는 순차적으로 실행되도록 구성했지만, Choice State를 이용해 병렬 구성도 가능하다.)
import json
def lambda_handler(event, context):
if (event["name"] == "PSY"):
return {"song" : "gangnam style"}
else:
return {"song" : "i dont know"}
import json
def lambda_handler(event, context):
if (event["song"] == "gangnam style"):
return {"lyrics" : "oh oh oh oh oh pan gangnam style"}
else:
return {"lyrics" : "i don't know"}
두 람다 함수를 생성하고, ARN을 얻을 수 있다.
AWS의 Step Functions 콘솔로 들어가서 상태 머신을 생성한다.
{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "song",
"States": {
"song": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:425701337758:function:stepTest1",
"Next": "lyrics"
},
"lyrics": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:425701337758:function:stepTest2",
"End": true
}
}
}
stepTest1 람다 함수를 먼저 호출하고, 그 다음 stepTest2 람다 함수를 호출하는 step function 코드다. 내부적으로 입력값에 따라 다른 결과를 출력하게 될 것이다.
{"name": "PSY"}
를 입력으로 주고 실행시켰을 때
다음과 같은 출력 결과가 나오면 성공이다.
이번 프로젝트에서는 S3에 이미지를 업로드했을 때 CloudTrail과 CloudWatch를 사용해 트리거를 등록, Step Functions이 호출되도록 구현해볼 예정이다.