바로 Step Function을 만들어 보도록 하겠습니다. Step Function을 만드는 방법중에 그래픽으로 이를 짜는 것이 추가되었는데, 이 대신 코드로 간단히 이전에 만들어논 Lambda function을 기반으로 만들어보도록 하겠습니다.
바로 상태 머신 정의로 들어와서 코드조각을 바로 수정해 보도록 하겠습니다.
이런 화면에 코드조각에는 아래와 같이 적혀 있습니다.
Code Block ( Default )
{
"Comment": "A simple AWS Step functions with Lambda",
"StartAt": "Start",
"States": {
"Start": {
"Type": "Pass",
"Result": "Hello",
"Next": "World"
},
"World": {
"Type": "Pass",
"Result": "World",
"End": true
}
}
}
제가 Comment만 살짝 수정한 것인데, 우선 StartAt은 시작할 상태를 지정해 주는 것입니다. 위 그림에서 노란 Start동그라미가 시작 State입니다. 그리고 Type은 Pass인데 이는 그 아래 Result, Next를 적게 되어 있습니다. 이는 Hello를 결괏값으로 주고, 다음 State인World로 가라는 의미입니다. 그리고 World State에서도 위와 동일하게 진행되다 World를 반환하고 End State로 가서 끝나게 되는 과정입니다.
하지만 저희는 입력값에 따라 분기되어 서로 다른 Lambda Function이 실행되게끔 하고 싶은 겁니다. 따라서 저희는 Start State의 Type을 Pass대신 Choice로 적어줍니다. 그리고 아래와 같이 일단 변경합니다.
Code Block ( Modified )
{
"Comment": "A simple AWS Step functions with Lambda",
"StartAt": "Start",
"States": {
"Start": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.type",
"StringEquals": "first",
"Next": "lambdastep1"
},
{
"Variable": "$.type",
"StringEquals": "second",
"Next": "lambdastep2"
}
]
},
"lambdastep1": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-2:154309361967:function:lambdastep1",
"End": true
},
"lambdastep2": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-2:154309361967:function:lambdastep2",
"End": true
}
}
}
위 코드의 의미는 일단 Start State에서 분기하는데, 반환된 객체의 type값을 확인했는데 "first"와 같으면 lambdastep1 State로 만약 아니라면 lambdastep2 State로 가라는 의미입니다. 그리고 이 둘이 무엇인지 정의해주고, 각각의 Type을 "Task"로 지정해 주었습니다. 이는 그냥 함수라고 보시면 됩니다. lambdaStep1 State로 오면 이전에 만들었던 lambdaStep1 Lambda Function의 ARN을 넣고 lambdaStep2 State에서도 똑같이 해주고 바로 End State로 보내버리는 코드입니다.
그리고 바로 세부 정보 지정에서, 상태 머신의 이름과, 이전에 만들었던 권한을 설정해 주도록 합니다.
그리고 바로 실행을 시뮬레이션 하기 위해서, type을 "first"로 주고 돌리게 되면 아래와 같은 그림이 보여지게 됩니다.
Start -> lambdaStep1 -> End 즉 우리가 원하던 바 대로 정확히 흘러가는 것을 보실 수 있습니다.
그리고 Cloud Watch에서도 잘 찍히는 것을 보실 수 있습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - (DynamoDB) DynamoDB 개요와 Index 구성 (0) | 2022.07.20 |
---|---|
[ DevOps ] - (DynamoDB) 데이터 아키텍처의 변화 (0) | 2022.07.20 |
[ DevOps ] - (AWS Lambda) Step Functions 권한 설정 (0) | 2022.07.20 |
[ DevOps ] - (AWS Lambda) EFS 파일시스템 생성 + 연동 (0) | 2022.07.20 |
[ DevOps ] - (AWS Lambda) Layers (0) | 2022.07.19 |