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

개요

이벤트 기반 아키텍처는 이벤트가 발생할 때마다 해당 이벤트를 처리하는 방식으로 시스템을 구축하는 것을 의미합니다. 이러한 아키텍처는 확장성과 유연성을 제공하며, 대규모의 분산 시스템 구축에 적합합니다.

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드를 실행하고 관리하는 데 필요한 모든 인프라를 AWS에서 자동으로 관리합니다. Step Functions는 AWS Lambda 함수 간의 비동기식 워크플로우를 생성하고 관리하는 데 사용됩니다.

이번 블로그에서는 AWS Lambda와 Step Functions를 결합하여 이벤트 기반 아키텍처를 구축하는 방법을 알아보겠습니다. 구체적으로는 Python을 사용한 예시를 다룰 것입니다.

Step 1: AWS Lambda 함수 생성

우선, AWS 콘솔에 로그인한 후 AWS Lambda 서비스로 이동해주세요. 새로운 Lambda 함수를 생성하기 위해 “함수 만들기”를 선택합니다.

함수 이름, 런타임, 코드 등 필요한 정보를 입력한 후에는 Python 코드를 작성할 수 있는 편집기 화면으로 이동합니다.

다음은 예시 코드입니다:

import json

def lambda_handler(event, context):
    message = event['message']
    processed_message = message.upper()
    
    response = {
        'statusCode': 200,
        'body': processed_message
    }
    
    return response

이 코드는 message라는 키를 포함하는 이벤트 객체를 받아서 해당 메시지를 대문자로 변환한 뒤 응답으로 반환합니다.

Step 2: Step Functions 워크플로우 생성

이제 AWS 콘솔에서 Step Functions 서비스로 이동해주세요. “워크플로우 생성”을 선택하여 새로운 워크플로우를 생성합니다.

워크플로우에서는 AWS Lambda 함수를 순차적으로 실행할 수 있는 상태 머신을 정의합니다. 상태 머신은 JSON 형식으로 작성되며, 각각의 상태는 Lambda 함수 또는 다른 AWS 서비스와의 상호작용을 나타냅니다.

다음은 예시 상태 머신(JSON 형식)입니다:

{
  "Comment": "Event-driven Architecture Example",
  "StartAt": "ProcessMessage",
  "States": {
    "ProcessMessage": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "End": true
    }
  }
}

이 예시에서는 하나의 상태만 정의되었으며, 해당 상태는 앞서 생성한 Lambda 함수를 실행하는 역할을 담당합니다. 이때, RESOURCE_ARN은 실제 Lambda 함수의 Amazon 리소스 이름으로 대체되어야 합니다.

Step 3: Step Functions 워크플로우 실행

이제 AWS Lambda 함수와 Step Functions 워크플로우가 준비되었습니다. 이벤트가 발생했을 때 Lambda 함수 및 워크플로우를 실행하는 방법에 대해 알아보겠습니다.

Lambda 함수를 실행하는 방법은 여러 가지가 있지만, 예시 코드에서는 이벤트 객체를 직접 넘겨주는 방식을 사용합니다.

다음은 Python 코드를 사용하여 Step Functions 워크플로우를 실행하는 예시입니다:

import boto3
import json

client = boto3.client('stepfunctions')

def trigger_event(event):
    response = client.start_execution(
        stateMachineArn='arn:aws:states:REGION:ACCOUNT_ID:stateMachine:STATE_MACHINE_NAME',
        input=json.dumps(event)
    )

    return response['executionArn']

이 코드는 event 객체를 JSON으로 변환한 뒤, 해당 이벤트를 입력으로 Step Functions 워크플로우를 실행합니다. 이때, STATE_MACHINE_ARN은 실제 워크플로우의 Amazon 리소스 이름으로 대체되어야 합니다.

결론

AWS Lambda와 Step Functions를 활용하여 이벤트 기반 아키텍처를 구축하는 방법에 대해 알아보았습니다. 이를 통해 확장 가능하고 유연한 분산 시스템을 개발할 수 있습니다.

AWS의 다른 서비스와의 통합을 통해 더 복잡한 아키텍처를 구성할 수도 있습니다. 이를 통해 다양한 비즈니스 요구 사항에 맞는 솔루션을 개발할 수 있습니다.

더 많은 자세한 정보는 AWS Lambda 문서Step Functions 문서를 참고해주세요.