[파이썬] AWS Lambda와 Step Functions를 활용한 이벤트 기반 아키텍처

이벤트 기반 아키텍처(Event-driven architecture)는 시스템의 컴포넌트들이 서로간의 상호작용을 이벤트라는 메시지를 통해 처리하는 방식의 아키텍처 패턴입니다. 이 방식은 시스템이 비동기적이고 확장 가능하며 유연성이 높은 특징을 가지게 됩니다.

AWS Lambda와 Step Functions은 이벤트 기반 아키텍처를 구현하기 위해 매우 강력한 도구들입니다. Lambda는 서버리스 컴퓨팅 서비스로, 특정 이벤트가 발생했을 때 코드를 실행하도록 설정할 수 있습니다. Step Functions은 상태 기계를 정의하고 관리하는 서비스로, 여러개의 Lambda 함수를 조합하여 복잡한 워크플로우를 구현할 수 있습니다.

AWS Lambda 소개

AWS Lambda는 이벤트에 응답하여 코드를 실행하는 서버리스 컴퓨팅 서비스입니다. 여러분은 실제 서버를 프로비저닝하거나 관리할 필요 없이, Lambda 함수를 만들고 트리거 조건을 설정하여 코드를 실행시킬 수 있습니다.

예를 들어, 사용자가 S3 버킷에 새 파일을 업로드했을 때 그에 대한 이벤트를 받고 해당 파일을 처리하는 Lambda 함수를 만들 수 있습니다. 또는, Amazon CloudWatch 이벤트 규칙으로 매일 특정 시간에 코드를 실행시킬 수도 있습니다.

아래는 Python으로 작성된 간단한 Lambda 함수의 예입니다.

import json

def lambda_handler(event, context):
    # 이벤트 처리 로직 작성
    # ...
    
    # 결과 반환
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

AWS Step Functions 소개

AWS Step Functions는 워크플로우를 정의하고 관리하는 서비스입니다. 각각의 단계는 상태(State)라고 불리며, 단계들은 시각적으로 연결하여 워크플로우를 구성합니다.

Step Functions는 Lambda 함수뿐만 아니라 다른 AWS 서비스와도 통합이 가능합니다. 예를 들어 S3 이벤트를 받아 Lambda 함수로 전달하고, 그 결과를 이용해 DynamoDB에 데이터를 저장하는 워크플로우를 구현할 수 있습니다.

아래는 Step Functions에서 정의된 워크플로우의 예입니다.

{
  "Comment": "A Hello World example of the Amazon States Language using a Pass state",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello, Step Functions!",
      "End": true
    }
  }
}

Lambda와 Step Functions를 함께 사용하기

Lambda와 Step Functions을 함께 사용하면 복잡한 워크플로우를 구현하고 실행할 수 있습니다. Step Functions에서 각각의 단계는 Lambda 함수를 호출하는 방식으로 정의됩니다.

아래는 Lambda 함수를 호출하는 단계를 가지는 Step Functions의 예입니다.

{
  "Comment": "A Hello World example of the Amazon States Language using a Pass state and Lambda function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "End": true
    }
  }
}

실제 Lambda 함수를 호출하기 위해 arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME 부분을 해당 Lambda 함수의 ARN(Amazon Resource Name)으로 대체해야 합니다.

이렇게 정의된 Step Functions 워크플로우는 API 호출을 통해 실행할 수 있으며, 각각의 단계는 이전 단계의 결과를 입력으로 받아 다음 단계로 전달할 수 있습니다.

Lambda와 Step Functions을 함께 사용하면 복잡한 이벤트 기반 아키텍처를 구현할 수 있으며, 시스템의 유연성과 확장성을 크게 향상시킬 수 있는 장점을 가지게 됩니다.

참고: AWS Lambda, AWS Step Functions의 자세한 내용과 예제는 AWS 문서를 참고하시기 바랍니다.