튜토리얼: Amazon DynamoDB 스트림과 함께 AWS Lambda 사용
튜토리얼: Amazon DynamoDB 스트림과 함께 AWS Lambda 사용 (Tutorial: Using AWS Lambda with Amazon DynamoDB streams)
이 튜토리얼에서는 Amazon DynamoDB 테이블을 만들고, 테이블 업데이트를 캡처하는 스트림을 생성하고, 스트림에서 새 항목을 처리하는 Lambda 함수를 만듭니다. 이 튜토리얼에서는 콘솔만 사용합니다.
본문
1단계: DynamoDB 테이블 및 스트림 만들기
이 단계에서는 LambdaExample이라는 DynamoDB 테이블을 만들고 테이블 업데이트를 기록하는 스트림을 활성화합니다.
테이블을 만들려면:
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/ 에서 Amazon DynamoDB 콘솔을 엽니다.
- Create table(테이블 생성) 을 선택합니다.
- Table name(테이블 이름) 에
LambdaExample을 입력합니다. - Partition key(파티션 키) 에
id를 입력하고 유형은 Number(숫자) 로 둡니다. - Sort key(정렬 키) 에
created_at을 입력하고 유형은 Number 로 둡니다. - Create table 을 선택합니다.
- 테이블이 생성될 때까지 기다린 다음 테이블 이름을 선택합니다.
- Exports and streams(내보내기 및 스트림) 탭을 선택합니다.
- DynamoDB stream details(DynamoDB 스트림 세부 정보) 아래에서 Enable(활성화) 을 선택합니다.
- View type(보기 유형) 에서 New and old images(새 및 이전 이미지) 를 선택합니다.
- Enable stream(스트림 활성화) 을 선택합니다.
테이블에 데이터를 추가할 때 스트림은 각 변경 사항을 새 레코드로 기록합니다. Lambda 함수가 스트림 레코드를 처리할 때 각 레코드는 테이블에 대한 변경 사항을 나타냅니다. 예를 들어 테이블에 새 항목을 추가하면 스트림 레코드는 항목의 "새 이미지"를 포함합니다. 항목을 수정하면 스트림 레코드는 항목의 새 이미지와 이전 이미지를 모두 포함합니다. 항목을 삭제하면 스트림 레코드는 항목의 이전 이미지를 포함합니다. 이 튜토리얼의 Lambda 함수는 스트림 레코드를 읽고 새 이미지 또는 이전 이미지의 항목을 DynamoDB 테이블에 씁니다.
2단계: Lambda 실행 역할 만들기
이 단계에서는 Amazon DynamoDB의 데이터와 Amazon CloudWatch Logs의 로그에 액세스할 수 있는 실행 역할을 만듭니다.
실행 역할을 만들려면:
- AWS Identity and Access Management(IAM) 콘솔에서 https://console.aws.amazon.com/iam/ 의 Roles(역할) 페이지를 엽니다.
- Create role(역할 생성) 을 선택합니다.
- Trusted entity type(신뢰할 수 있는 엔터티 유형) 에서 AWS service 를 선택합니다.
- Use case(사용 사례) 에서 Lambda 를 선택합니다.
- Permissions(권한) 정책 목록에서
AWSLambdaDynamoDBExecutionRole을 선택합니다. - Role name(역할 이름) 에
lambda-dynamodb-role을 입력합니다. - Create role(역할 생성) 을 선택합니다.
3단계: 함수 만들기
이 단계에서는 DynamoDB Streams 이벤트를 처리하는 Lambda 함수를 만듭니다.
함수를 만들려면:
- Lambda 콘솔에서 https://console.aws.amazon.com/lambda/ 의 Functions(함수) 페이지를 엽니다.
- Create function(함수 생성) 을 선택합니다.
- Function name(함수 이름) 에
ProcessDynamoDBRecords를 입력합니다. - Runtime(런타임) 에서 Python 3.x 를 선택합니다.
- Permissions(권한) 아래에서 Change default execution role(기본 실행 역할 변경) 을 확장합니다.
- Use an existing role(기존 역할 사용) 을 선택합니다.
- Existing role(기존 역할) 에서
lambda-dynamodb-role을 선택합니다. - Create function 을 선택합니다.
4단계: 함수 코드 추가
이 단계에서는 DynamoDB Streams 이벤트를 처리하는 샘플 코드를 추가합니다.
코드를 추가하려면:
- 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'
- Deploy(배포) 를 선택합니다.
5단계: 이벤트 소스 추가
이 단계에서는 DynamoDB 스트림을 이벤트 소스로 함수에 추가합니다.
이벤트 소스를 추가하려면:
- Configuration(구성) 탭을 선택합니다.
- 왼쪽 메뉴에서 Triggers(트리거) 를 선택합니다.
- Add trigger(트리거 추가) 를 선택합니다.
- Trigger configuration(트리거 구성) 에서 소스 목록을 펼치고 DynamoDB 를 선택합니다.
- DynamoDB table(테이블) 에서
LambdaExample을 선택합니다. - Batch size(배치 크기) 를 10으로 둡니다.
- Starting position(시작 위치) 에서 Latest(최신) 를 선택합니다.
- Add 를 선택합니다.
6단계: 함수 테스트
이 단계에서는 테이블에 항목을 추가하고 Lambda 함수가 스트림 레코드를 처리하는지 확인합니다.
함수를 테스트하려면:
- DynamoDB 콘솔에서 Tables(테이블) 페이지를 엽니다.
LambdaExample테이블을 선택합니다.- Explore items(항목 탐색) 탭을 선택합니다.
- Create item(항목 생성) 을 선택합니다.
- id 값을 입력합니다(예: 1).
- created_at 값을 입력합니다(예: 1234567890).
- Create item 을 선택합니다.
- Lambda 콘솔의 Functions 페이지를 열고
ProcessDynamoDBRecords함수를 선택합니다. - Monitor(모니터링) 탭을 선택하고 View logs in CloudWatch(CloudWatch에서 로그 보기) 를 선택합니다.
- 새 항목이 추가되었음을 나타내는 로그가 표시되어야 합니다.
7단계: 정리
더 이상 리소스를 사용하지 않으려면 삭제하세요.
함수와 테이블을 삭제하려면:
- Lambda 콘솔의 Functions 페이지를 엽니다.
ProcessDynamoDBRecords함수를 선택합니다.- Actions(작업), Delete(삭제) 를 선택합니다.
- 텍스트 입력 필드에
confirm을 입력하고 Delete 를 선택합니다. - DynamoDB 콘솔의 Tables 페이지를 엽니다.
LambdaExample테이블을 선택하고 Delete 를 선택합니다.- 텍스트 입력 필드에
confirm을 입력하고 Delete 를 선택합니다.
더 알아보기 (Learn more)
- DynamoDB Streams를 Lambda 이벤트 소스로 사용
- Lambda 이벤트 소스 매핑
- DynamoDB 및 Lambda 통합