AWS

[AWS] DynamoDB 실습

어코링 2024. 2. 14. 19:31

https://us-east-1.console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin&region=us-east-1

 

https://us-east-1.console.aws.amazon.com/console/home?nc2=h_ct®ion=us-east-1&src=header-signin

 

us-east-1.console.aws.amazon.com

콘솔로 들어가서 DynamoDB를 검색해서 들어가준다.

테이블 생성 click

테이블 생성

<테이블 스키마>

테이블 세부 정보

테이블 이름 : aws-learner-dynamodb-table

파티션 키 : customer_id (문자열)

파티션 키 고객 아이디⭢ 테이블 내에서 사용되어질 고유 키이며 중복되어질 수 없는 것을 선택해야한다. 

정렬 키 : transaction_date (문자열)

구매일자를 설정해야 최근에 구매한 고객 데이터를 더 빨리 쿼리에서 찾아올 수 있다.

테이블 설정

태그

테이블 생성 click

테이블 상세보기

개요

일반 정보

추가 정보

Amazon 리소스 이름(ARN) : AWS에서만 통용되는 이테이블의 고유 identification 

이것을 가지고 다른 리소스에서 참조할 수도 있고 코딩으로 테이블을 찾는데 사용되어진다.

일반적으로 모든 ARN은 리소스 이름, 계정아이디, 리소스 내에서 세부정보 이런 형태를 갖추고 있다.

항목 요약

테이블이 비어있음

테이블 용량 지표

인덱스

모니터링

경보

경보를 만든다면 새탭이 뜨면서 클라우드워치 경보 섹션으로 옮겨진다.

https://eocoring.tistory.com/43

 

[AWS] Lambda 실습2 (Lambda 함수 실행 / cloudwatch)

파이프라인 Lambda를 하나 만들고 이 Lambda가 S3 버킷을 24시간 지켜볼 것이다. S3에 어떤 Object가 업로드, putObject 이벤트가 발생할 시 이 Lambda 함수를 Lambda 해라. 만약 S3 버킷에 날씨 온도에 관한 JSON

eocoring.tistory.com

⭡클라우드워치 경보 실습

CloudWatch 지표

클라우드워치 대시보드


테이블 데이터 삽입

표 항목 탐색 click

테이블을 쿼리하는 기능

반환된 항목 (0) ⭢ 테이블이 비어있기때문

항목 생성 click

 

 

 

<테이블 스키마>


다양한 데이터 타입을 선택해서 새로운 속성을 추가할 수 있는 것

입력을 마쳤다면 항목 생성  click

 

이렇게 레코드를 하나 넣어보는 것은 완료.

그렇다면 한번에 여러 데이터를 넣고 싶다면?

다량의 데이터 넣기

 

첫번째, IoT라는 AWS 리로스를 사용해서 실시간으로 데이터를 받아들이고 이를 실시간으로 테이블에 데이터를 삽입
두번째, S3 버킷에 파일이 업로드 될 경우 이를 event라고 간주하고 event가 감지되었을 때 Lambda 함수를 발동시켜 전처리 과정을 거친 후 DynamoDB 테이블에 데이터를 넣는 방법

 

본 실습에선 두번째 방법으로 진행하였다.

 

Lambda 함수를 만들어주겠다.

 

함수 이름 : awslearner-lambda-data-insertion

런타임 : Python 3.12

아키텍처 : x86_64

IAM 콘솔 click

역할생성

다음 click

권한 선택하고 다음 click

역할 생성 click

기존 역할 사용 선택후 함수 생성

import boto3

def lambda_handler(event, context):
    client = boto3.resource('dynamodb')
    table = client.Table('aws-learner-dynamodb-table')

    table.put_item(
        Item={
            'customer_id': '12MCX',
            'transaction_date': '2020-08-02',
            'item_category': 'Book',
            'price': 18000
        }
    )

코드를 넣어주었다.

boto3 라이브러리를 호툴하고

lambda 함수를 정의하였다.

dynamodb 리소스를 사용할 것이다.

aws-learner-dynamodb-table 이름을 가지고 삭제 변경 삽입이 가능하다.

이번 실습에서는 put으로 데이터 삽입을 진행.

 

deploy로 함수를 적용시켰다.

 

테스트 이벤트 구성

이벤트 이름 : lambda_event

 

테스트를 돌리고 lambda함수를 확인했다.

 

이렇게 두개의 데이터가 들어있는 것을 확인했다.

하나는 lambda함수에 의해서 삽입된 레코드이다.

 

lambda함수를 열어보면.

 

put_item에있는 값이 삽입되어진 것

이 lambda함수는 한번에 한번의 레코드만 삽입할 수있다.

그렇다면 여러개의 레코드를 삽입하고 싶다면, 코드수정이 필요하다.

# 2. 코드 - 다이나모디비 다량의 데이터 업로드
import boto3

def lambda_handler(event, context):
    client = boto3.resource('dynamodb')
    table = client.Table('aws-learner-dynamodb-table')
    
    with table.batch_writer() as batch:
        batch.put_item(
            Item={
                'customer_id': '95IUZ',
                'transaction_date': '2020-10-24',
                'item_category': 'Desk',
                'price': 120000
            }
        )
        
        batch.put_item(
            Item={
                'customer_id': '72MUE',
                'transaction_date': '2020-10-28',
                'item_category': 'Chair',
                'price': 250000
            }
        )
        
        batch.put_item(
            Item={
                'customer_id': '28POR',
                'transaction_date': '2020-11-05',
                'item_category': 'Shampoo',
                'price': 50000
            }
        )
        
        batch.put_item(
            Item={
                'customer_id': '43NCH',
                'transaction_date': '2020-10-12',
                'item_category': 'Pulse',
                'price': 320000
            }
        )

 

4개의 레코드가 한번에 삽입될 코드

새로운 코드를 넣어주고 deploy를 하고 다시 test

실패 

AccessDeniedException BatchWriteItem operation 권한이 없다.

BatchWriteItem 쓰는 권한을 주면 되겠다.

IAM에 가서 권한을 부여해주겠다.

만든 정책을 찾아서 들어가주자.

BatchWriteItem 권한을 추가하자.

권한이 추가된것을 확인했다.

다시 Lambda함수를 실행하자.

 

위와 달리 에러베시지 없이 Status : Succeeded

그러면 DynamoDB에 가서 데이터가 DB에 잘 저장이 되었는지 확인해보자.

잘 추가가 되었다


Query와 Scan

Scan

필터에 아무런 값을 넣지 않고 실행을 누르면 * 모든 값이 나온다.

 

필터에 조건을 추가해 보겠다.

 

price가 100000보다 큰 값들만 반환이 되어서 보여준다.

Query

쿼리는 파티션 키 필수

해당하는 값 하나 반환