1. SQS 생성 (CallBackQueue)
2. Lambda 함수 생성
1) Role 생성
2) Python Lambda 함수 생성
3) Timeout 시간 늘림
Step functions의 경우 ASL(Amazon States Language) 으로 작성을 해야하는데 처음에는 쫌 까다롭지만 익숙해지면 특정 포맷을 돌려쓰면서 빠르게 작성해나갈 수 있다. 또한 Step Functions에서는 workflow를 drag and drop으로 생성할 수 있도록 UI를 제공하는데 이 기능을 사용하면 아주 쉽고 직관적으로 State Machine을 설계할 수 있다.
{
"Comment": "A description of my state machine",
"StartAt": "SQS SendMessage",
"States": {
"SQS SendMessage": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"MessageBody": {
"input.$": "$",
"MyTaskToken.$": "$$.Task.Token"
},
"QueueUrl": "https://sqs.ap-northeast-2.amazonaws.com/123456789123/CallBackQueue"
},
"Next": "Pass"
},
"Pass": {
"Type": "Pass",
"End": true
}
}
}
import json
import boto3
import time
# step functions 커넥터 생성
step = boto3.client('stepfunctions')
def lambda_handler(event, context):
print(event)
main_message=json.loads(event['Records'][0]['body'])
print("Main Message Part : {}".format(main_message))
step_function_input=main_message['input']
# Trigger된 SQS로부터 step function token 추출
task_token=main_message['MyTaskToken']
print("The task token is : {}".format(task_token))
time.sleep(7)
# send_task_success 메소드에 token을 함께 넣어서 보냄
response = step.send_task_success(
taskToken=task_token,
output=json.dumps({'body':'Return from Lambda Callback'})
)
Step Functions -> SQS로 메세지 push
SQS에 input이 들어오면 Lambda가 실행 (SQS -> Lambda)
Lambda에서 Token 추출하여 success 메소드와 함께 step functions로 전송 (Lambda -> Step functions)