본문 바로가기
AWS

[DDB] DynamoDB Streams + Lambda

by yonikim 2021. 6. 8.
728x90

DynamoDB Streams 을 활성화하면 DynamoDB 테이블의 시간 순서에 따라 항목 변경 사항이 있으면 이 정보를 수집하여 최대 24시간 동안 로그에 저장한다. 로그와 데이터 항목은 변경 전후 거의 실시간으로 나타나므로 데이터 변화를 다루는데 좋다. 바이너리 로그와 똑같은거 같다. (참조: [Node.js] bin log(바이너리 로그) 도입기 BUT FAIL)

 

순서는 아래와 같이 진행하면 된다.

1. AWS Lambda 함수 생성하기

2. IAM 정책 만들기

3. DynamoDB Streams 활성화하기 

4. AWS Lambda 함수 코드 작성해서 배포하기

 


DynamoDB Streams + Lambda


 

1. AWS Lambda 함수 생성 > [구성] 탭 > [권한] 탭 > [편집] 버튼 클릭

 

2. IAM 정책을 아래와 같이 만들어서 위 역할에 연결

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:ListStreams",
                "dynamodb:PutItem",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

 

3. DynamoDB > 테이블 선택 > [내보내기 및 스트림] 탭 > DynamoDB 스트림 [활성화] 버튼 클릭 

 

4. [트리거 생성] 버튼 클릭 > Lambda 함수 선택 

 

5. 코드 작성 후 [Deploy] 버튼 클릭

 

▷ index.js

* DynamoDB JSON 은 key, 데이터타입, value 의 형식으로 이뤄져 있기 때문에, 데이터를 좀더 쉽게 다루기 위해선 아래 코드에서와 같이 Convert 해주는게 좋다. 

{ key : { 'N' : value }, key2 : { 'S' : value } } → { key : value, key2 : value }

const AWS = require('aws-sdk')

AWS.config.update({
  region: 'ap-northeast-2',
  endpoint: "http://dynamodb.ap-northeast-2.amazonaws.com"
})

exports.handler = async (event, context, callback) => {
    console.log(JSON.stringify(event))
    const oldImages = event.Records.map(
        (record) => AWS.DynamoDB.Converter.unmarshall(record.dynamodb.OldImage)
    )
    const newImages = event.Records.map(
        (record) => AWS.DynamoDB.Converter.unmarshall(record.dynamodb.NewImage)
    )
    console.log(oldImages)
    console.log(newImages)
    
    callback(null, JSON.stringify(event));
};

 

6. CloudWatch 로그 확인

728x90

'AWS' 카테고리의 다른 글

[CloudWatch] CloudWatch 경보 설정하기 - 2  (0) 2021.06.17
[CloudWatch] CloudWatch 경보 설정하기 - 1  (0) 2021.06.17
[S3] AWS S3 버킷 만들기  (0) 2021.06.02
[DDB] DynamoDB 에 데이터 쓰기  (0) 2021.05.26
[DDB] DynamoDB 세팅하기  (0) 2021.05.26