[파이썬] AWS Lambda와 DynamoDB를 활용한 데이터 처리

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드 실행을 위한 서버 관리 없이 애플리케이션 코드를 실행할 수 있습니다. DynamoDB는 NoSQL 데이터베이스로, 확장성이 뛰어나고 신속한 데이터 처리를 지원합니다. 이 두 가지 서비스를 함께 사용하여 데이터 처리를 효율적으로 할 수 있습니다.

Lambda 함수 작성

Lambda 함수는 다양한 이벤트 트리거에서 실행될 수 있습니다. 이 예제에서는 S3 버킷에 업로드된 파일을 처리하는 Lambda 함수를 작성해보겠습니다.

import boto3

def lambda_handler(event, context):
    # S3 이벤트에서 파일 정보 가져오기
    s3_client = boto3.client('s3')
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    file_key = event['Records'][0]['s3']['object']['key']

    # DynamoDB에 데이터 쓰기
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('my-table')
    table.put_item(Item={'file_key': file_key, 'bucket_name': bucket_name})

    # 처리 완료 메시지 반환
    return {
        'statusCode': 200,
        'body': 'File processed successfully!'
    }

위의 코드는 Lambda 함수의 핵심 로직을 담고 있습니다. 우선 boto3 라이브러리를 사용하여 S3 클라이언트 객체를 생성합니다. 이후에는 이벤트 정보를 이용해서 S3 버킷과 파일 키를 가져옵니다.

그 다음, DynamoDB 테이블에 데이터를 쓰기 위해 boto3 라이브러리를 사용하여 DynamoDB 리소스 객체를 생성합니다. put_item 메서드를 사용해서 파일 키와 버킷명을 저장합니다.

마지막으로, 처리 완료 메시지를 반환합니다.

Lambda 함수 배포

Lambda 함수를 배포하기 위해서는 AWS 콘솔이나 AWS CLI를 사용할 수 있습니다. 여기서는 AWS 콘솔을 사용한 예제를 보여드리겠습니다.

  1. AWS Management Console에 로그인하고, Lambda 서비스로 이동합니다.
  2. Lambda 함수 생성 페이지에서 “함수 만들기”를 선택합니다.
  3. 함수 생성 페이지에서 “이벤트 소스 설정하지 않음”을 선택한 뒤, 함수 이름을 입력하고 “함수 생성”을 선택합니다.
  4. 함수 코드 편집기에서, 위에서 작성한 Lambda 함수 코드를 붙여넣습니다.
  5. 필요한 경우, 런타임, 실행 역할 등을 설정합니다.
  6. “배포” 버튼을 선택하여 Lambda 함수를 배포합니다.

DynamoDB 설정

Lambda 함수에서 사용할 DynamoDB 테이블을 설정해야 합니다.

  1. 제어판에서 DynamoDB 서비스로 이동합니다.
  2. “테이블 만들기”를 선택합니다.
  3. 테이블 이름을 입력하고, 기본 설정을 수정하거나 그대로 두고 “만들기”를 선택합니다.

테스트

이제 Lambda 함수가 작동하는지 테스트해 보겠습니다.

  1. AWS Management Console에서 Lambda 함수로 이동합니다.
  2. Lambda 함수 목록에서 방금 만든 함수를 선택합니다.
  3. 상단 편집기 오른쪽에 있는 “테스트” 버튼을 선택합니다.
  4. 테스트 이벤트로 {"Records": [{"s3": {"bucket": {"name": "my-bucket"}, "object": {"key": "my-file.txt"}}}]}을 입력합니다.
  5. “테스트” 버튼을 클릭하여 테스트를 실행합니다.

테스트가 성공하면, DynamoDB 테이블에 데이터가 저장되었는지 확인할 수 있습니다.

결론

이 블로그 포스트에서는 AWS Lambda와 DynamoDB를 활용하여 데이터 처리를 할 수 있는 방법에 대해 알아보았습니다. 이를 통해 서버리스 아키텍처를 구축하고 빠르고 확장 가능한 데이터 처리를 할 수 있습니다.