2020년 11월 30일 기록 - 1

AWS Step Functions

AWS Step Functions은 시각적 워크플로우를 사용해 분산 애플리케이션 및 마이크로서비스의 구성 요소를 손쉽게 조정하도록 해주는 웹 서비스이다. 각각 기능 또는 작업을 수행하는 개별 구성 요소를 사용하여 애플리케이션을 구축하면 애플리케이션을 빠르게 확장하거나 변경할 수 있다.

쉽게 말하면 AWS의 여러 컴퓨팅 자원들의 수행 순서를 설정할 수 있는 서비스이다. 이번 프로젝트에서는 하나의 람다에서 모든 작업을 처리하지 않고, 람다를 기능별로 분산시켜 순차적으로 실행되도록 하기 위해 사용할 예정이다.

AWS Step Functions는 각 단계가 이전 단계의 출력으로 입력되는 단계로 구성된 워크 플로우를 설계하고 실행할 수 있도록 함으로써, 작업을 보다 쉽게 조정할 수 있게 하는 완전 관리형 서비스다.

State

각 단계는 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 콘솔로 들어가서 상태 머신을 생성한다.

이미지 4

{
  "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"}를 입력으로 주고 실행시켰을 때

이미지 5

다음과 같은 출력 결과가 나오면 성공이다.

이번 프로젝트에서는 S3에 이미지를 업로드했을 때 CloudTrail과 CloudWatch를 사용해 트리거를 등록, Step Functions이 호출되도록 구현해볼 예정이다.

위 예제 출처 : https://velog.io/@daeyoon/AWS-step-function