튜토리얼: Amazon DynamoDB 스트림과 함께 AWS Lambda 사용

튜토리얼: Amazon DynamoDB 스트림과 함께 AWS Lambda 사용 (Tutorial: Using AWS Lambda with Amazon DynamoDB streams)

이 튜토리얼에서는 Amazon DynamoDB 테이블을 만들고, 테이블 업데이트를 캡처하는 스트림을 생성하고, 스트림에서 새 항목을 처리하는 Lambda 함수를 만듭니다. 이 튜토리얼에서는 콘솔만 사용합니다.

출처: AWS Lambda 개발자 안내서

본문

1단계: DynamoDB 테이블 및 스트림 만들기

이 단계에서는 LambdaExample이라는 DynamoDB 테이블을 만들고 테이블 업데이트를 기록하는 스트림을 활성화합니다.

테이블을 만들려면:

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/ 에서 Amazon DynamoDB 콘솔을 엽니다.
  2. Create table(테이블 생성) 을 선택합니다.
  3. Table name(테이블 이름) 에 LambdaExample을 입력합니다.
  4. Partition key(파티션 키) 에 id를 입력하고 유형은 Number(숫자) 로 둡니다.
  5. Sort key(정렬 키) 에 created_at을 입력하고 유형은 Number 로 둡니다.
  6. Create table 을 선택합니다.
  7. 테이블이 생성될 때까지 기다린 다음 테이블 이름을 선택합니다.
  8. Exports and streams(내보내기 및 스트림) 탭을 선택합니다.
  9. DynamoDB stream details(DynamoDB 스트림 세부 정보) 아래에서 Enable(활성화) 을 선택합니다.
  10. View type(보기 유형) 에서 New and old images(새 및 이전 이미지) 를 선택합니다.
  11. Enable stream(스트림 활성화) 을 선택합니다.

테이블에 데이터를 추가할 때 스트림은 각 변경 사항을 새 레코드로 기록합니다. Lambda 함수가 스트림 레코드를 처리할 때 각 레코드는 테이블에 대한 변경 사항을 나타냅니다. 예를 들어 테이블에 새 항목을 추가하면 스트림 레코드는 항목의 "새 이미지"를 포함합니다. 항목을 수정하면 스트림 레코드는 항목의 새 이미지와 이전 이미지를 모두 포함합니다. 항목을 삭제하면 스트림 레코드는 항목의 이전 이미지를 포함합니다. 이 튜토리얼의 Lambda 함수는 스트림 레코드를 읽고 새 이미지 또는 이전 이미지의 항목을 DynamoDB 테이블에 씁니다.

2단계: Lambda 실행 역할 만들기

이 단계에서는 Amazon DynamoDB의 데이터와 Amazon CloudWatch Logs의 로그에 액세스할 수 있는 실행 역할을 만듭니다.

실행 역할을 만들려면:

  1. AWS Identity and Access Management(IAM) 콘솔에서 https://console.aws.amazon.com/iam/ 의 Roles(역할) 페이지를 엽니다.
  2. Create role(역할 생성) 을 선택합니다.
  3. Trusted entity type(신뢰할 수 있는 엔터티 유형) 에서 AWS service 를 선택합니다.
  4. Use case(사용 사례) 에서 Lambda 를 선택합니다.
  5. Permissions(권한) 정책 목록에서 AWSLambdaDynamoDBExecutionRole을 선택합니다.
  6. Role name(역할 이름) 에 lambda-dynamodb-role을 입력합니다.
  7. Create role(역할 생성) 을 선택합니다.

3단계: 함수 만들기

이 단계에서는 DynamoDB Streams 이벤트를 처리하는 Lambda 함수를 만듭니다.

함수를 만들려면:

  1. Lambda 콘솔에서 https://console.aws.amazon.com/lambda/ 의 Functions(함수) 페이지를 엽니다.
  2. Create function(함수 생성) 을 선택합니다.
  3. Function name(함수 이름) 에 ProcessDynamoDBRecords를 입력합니다.
  4. Runtime(런타임) 에서 Python 3.x 를 선택합니다.
  5. Permissions(권한) 아래에서 Change default execution role(기본 실행 역할 변경) 을 확장합니다.
  6. Use an existing role(기존 역할 사용) 을 선택합니다.
  7. Existing role(기존 역할) 에서 lambda-dynamodb-role을 선택합니다.
  8. Create function 을 선택합니다.

4단계: 함수 코드 추가

이 단계에서는 DynamoDB Streams 이벤트를 처리하는 샘플 코드를 추가합니다.

코드를 추가하려면:

  1. Function code(함수 코드) 창에서 index.py 의 내용을 다음 코드로 교체합니다:
import json
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('LambdaExample')

def lambda_handler(event, context):
    print(f"Received event: {json.dumps(event)}")
    for record in event['Records']:
        if record['eventName'] == 'INSERT':
            new_image = record['dynamodb'].get('NewImage')
            print(f"New item: {new_image}")
        elif record['eventName'] == 'MODIFY':
            old_image = record['dynamodb'].get('OldImage')
            new_image = record['dynamodb'].get('NewImage')
            print(f"Item modified. Old: {old_image} New: {new_image}")
        elif record['eventName'] == 'REMOVE':
            old_image = record['dynamodb'].get('OldImage')
            print(f"Item removed: {old_image}")
    return 'Successfully processed records'
  1. Deploy(배포) 를 선택합니다.

5단계: 이벤트 소스 추가

이 단계에서는 DynamoDB 스트림을 이벤트 소스로 함수에 추가합니다.

이벤트 소스를 추가하려면:

  1. Configuration(구성) 탭을 선택합니다.
  2. 왼쪽 메뉴에서 Triggers(트리거) 를 선택합니다.
  3. Add trigger(트리거 추가) 를 선택합니다.
  4. Trigger configuration(트리거 구성) 에서 소스 목록을 펼치고 DynamoDB 를 선택합니다.
  5. DynamoDB table(테이블) 에서 LambdaExample을 선택합니다.
  6. Batch size(배치 크기) 를 10으로 둡니다.
  7. Starting position(시작 위치) 에서 Latest(최신) 를 선택합니다.
  8. Add 를 선택합니다.

6단계: 함수 테스트

이 단계에서는 테이블에 항목을 추가하고 Lambda 함수가 스트림 레코드를 처리하는지 확인합니다.

함수를 테스트하려면:

  1. DynamoDB 콘솔에서 Tables(테이블) 페이지를 엽니다.
  2. LambdaExample 테이블을 선택합니다.
  3. Explore items(항목 탐색) 탭을 선택합니다.
  4. Create item(항목 생성) 을 선택합니다.
  5. id 값을 입력합니다(예: 1).
  6. created_at 값을 입력합니다(예: 1234567890).
  7. Create item 을 선택합니다.
  8. Lambda 콘솔의 Functions 페이지를 열고 ProcessDynamoDBRecords 함수를 선택합니다.
  9. Monitor(모니터링) 탭을 선택하고 View logs in CloudWatch(CloudWatch에서 로그 보기) 를 선택합니다.
  10. 새 항목이 추가되었음을 나타내는 로그가 표시되어야 합니다.

7단계: 정리

더 이상 리소스를 사용하지 않으려면 삭제하세요.

함수와 테이블을 삭제하려면:

  1. Lambda 콘솔의 Functions 페이지를 엽니다.
  2. ProcessDynamoDBRecords 함수를 선택합니다.
  3. Actions(작업), Delete(삭제) 를 선택합니다.
  4. 텍스트 입력 필드에 confirm을 입력하고 Delete 를 선택합니다.
  5. DynamoDB 콘솔의 Tables 페이지를 엽니다.
  6. LambdaExample 테이블을 선택하고 Delete 를 선택합니다.
  7. 텍스트 입력 필드에 confirm을 입력하고 Delete 를 선택합니다.

더 알아보기 (Learn more)

  • DynamoDB Streams를 Lambda 이벤트 소스로 사용
  • Lambda 이벤트 소스 매핑
  • DynamoDB 및 Lambda 통합