[파이썬] AWS Lambda와 Amazon DynamoDB 연동

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드를 실행하고 스케일링할 수 있는 기능을 제공합니다. Amazon DynamoDB는 완전 관리형 NoSQL 데이터베이스로, 확장성과 성능을 제공합니다. 이 블로그 포스트에서는 AWS Lambda와 Amazon DynamoDB를 연동하는 방법을 알아보겠습니다.

준비 사항

DynamoDB 테이블 생성

먼저, DynamoDB 테이블을 생성해야 합니다. 이 예제에서는 “Books”라는 테이블을 생성하겠습니다. “title”과 “author” 두 개의 속성을 가지고 있습니다.

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.create_table(
    TableName='Books',
    KeySchema=[
        {
            'AttributeName': 'title',
            'KeyType': 'HASH'  # Partition key
        }
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'title',
            'AttributeType': 'S'
        }
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 5,
        'WriteCapacityUnits': 5
    }
)

table.wait_until_exists()

Lambda 함수 생성

AWS Lambda 콘솔에서 새로운 Lambda 함수를 생성합니다. 이 함수는 DynamoDB 테이블에 데이터를 쓰기 위한 역할을 합니다.

import boto3

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Books')

    response = table.put_item(
        Item={
            'title': 'The Great Gatsby',
            'author': 'F. Scott Fitzgerald'
        }
    )

    return {
        'statusCode': 200,
        'body': 'Item inserted successfully'
    }

Lambda 함수와 DynamoDB 연동 설정

Lambda 함수와 DynamoDB를 연동하기 위해 이벤트 소스 매핑을 설정해야 합니다. AWS 콘솔에서 Lambda 함수를 선택하고, “Add trigger”를 클릭하여 DynamoDB 테이블과 연결합니다. 이렇게 설정하면, DynamoDB 테이블에 새로운 항목이 추가될 때마다 Lambda 함수가 실행됩니다.

테스트

이제 모든 설정이 완료되었습니다. DynamoDB 테이블에 새로운 항목을 추가하면, Lambda 함수가 트리거되어 실행됩니다. Lambda 함수는 DynamoDB 테이블에 데이터를 씁니다.

import boto3

def test_lambda_handler():
    client = boto3.client('lambda')
    response = client.invoke(
        FunctionName='your-lambda-function-name',
        InvocationType='RequestResponse'
    )
    result = response['Payload'].read().decode('utf-8')

    assert response['StatusCode'] == 200
    assert result == 'Item inserted successfully'

이제 AWS Lambda와 Amazon DynamoDB를 연동하는 방법을 알아보았습니다. Lambda 함수가 DynamoDB와 상호작용하면서 서버리스 환경에서 데이터를 쉽게 관리할 수 있습니다.