Celery와 AWS Lambda를 연동하여 비동기 함수 실행

소개

비동기 함수 실행은 웹 애플리케이션에서 많은 시간이 소요되는 작업을 백그라운드에서 처리할 수 있게 해주는 중요한 기술입니다. Celery는 파이썬으로 작성된 분산 작업 큐 시스템으로, 비동기 작업을 처리하기 위해 널리 사용됩니다. AWS Lambda는 이벤트 기반의 서버리스 컴퓨팅 플랫폼으로, 서버 관리 없이 코드를 실행할 수 있습니다.

이번 글에서는 Celery와 AWS Lambda를 연동하여 비동기 함수 실행을 구현하는 방법을 소개하겠습니다.

준비 사항

  1. AWS 계정
  2. AWS Lambda
  3. Celery
  4. Boto3

AWS Lambda 설정하기

  1. AWS 계정에 로그인한 후 AWS Lambda 서비스로 이동합니다.
  2. “함수 생성”을 선택합니다.
  3. “작성 기반”에서 “파이썬 3.7”을 선택합니다.
  4. 트리거를 설정합니다. 여기서는 직접 호출을 선택합니다.
  5. 코드를 업로드하기 위해 “코드 업로드” 버튼을 클릭합니다.
  6. 필요한 코드를 업로드하고 필요한 환경 변수를 설정합니다.
  7. “저장” 버튼을 클릭하여 설정을 완료합니다.

Celery 설정하기

  1. Celery를 설치합니다.
  2. Celery 설정 파일을 만듭니다. 여기서는 celery.py 파일을 생성합니다.
  3. celery.py 파일에 필요한 설정을 추가합니다.
  4. Celery 워커를 실행합니다.

Lambda 함수에서 Celery 사용하기

  1. Boto3를 사용하여 Lambda 함수를 호출하는 코드를 작성합니다.
  2. Celery 워커가 실행 중인지 확인합니다.
  3. Boto3를 사용하여 AWS Lambda 함수를 비동기적으로 호출합니다.
  4. 결과를 확인하고 필요한 처리를 진행합니다.

예제 코드

import boto3

# Lambda 함수 호출을 위한 클라이언트 생성
lambda_client = boto3.client('lambda', region_name='ap-northeast-2')

# Celery 워커 확인
# ...

# 비동기적으로 Lambda 함수 호출
def invoke_lambda_function(function_name, payload):
    response = lambda_client.invoke(
        FunctionName=function_name,
        InvocationType='Event',  # 비동기 호출
        Payload=payload
    )

    # 결과 확인
    # ...

# Lambda 함수 호출 예시
invoke_lambda_function('my_lambda_function', {'key1': 'value1', 'key2': 'value2'})

마무리

이번 글에서는 Celery와 AWS Lambda를 연동하여 비동기 함수 실행을 구현하는 방법에 대해 알아보았습니다. 이를 통해 웹 애플리케이션에서 복잡한 작업을 비동기적으로 처리할 수 있게 됩니다. Celery와 AWS Lambda를 함께 사용하여 효율적이고 확장 가능한 애플리케이션을 구축해보세요.

#Celery #AWSLambda