테이블 생성
- 구성할 테이블 스키마
- 참고로 실습은 한명의 고객은 여러개의 물품을 살 수 없다는 조건으로 구성
- 파티션 키 : customer_id
- 정렬 키 : transaction_date
- 기본 설정으로 하게 되면 Auto Scaling 포함됨
항목 생성
- AWS에서 직접 데이터를 넣을 수 있다.
- 다량의 데이터를 한번에 넣기 힘듬
- 간단한 테스트용으로, 실제 프로덕트에서는 사용 안함
- 어떻게 대량의 데이터를 넣을 수 있을까?
EX.
- IoT 기기와 연결하여 실시간 데이터를 불러온 후 DB에 적재
- S3 버켓에 파일 업로드 -> 람다 함수 발동 -> DynamoDB
실습에서는 람다 함수를 만들고, DynamoDB에 연결 시켜 데이터를 삽입 하는 방법으로 진행
- 정책 생성
- 역할 생성
- 람다 생성
Lambda 함수 생성
- DynamoDB에 직접 데이터를 삽입하는 권한을 가지고 있어야 함 (권한)
- 리소스 : DB의 여러개 테이블이 있다면 하나 하나의 테이블에 서비스를 적용 시킬지 아닐지
람다의 기본적인 요소들을 사용 가능하게 권한을 넣어줘야 함
IAM 역할에 생성한 정책 연결하기
- AWSLambdaBasicExecutionRole 선택
- 기본적으로 AWS에서 제공해주는 정책, 다른 하나는 생성한 정책
- 다시 Lambda로 돌아와서 기존 역할 사용, 기존 역할에서 생성한 역할 선택
함수 코드 작성
import boto3 // aws 사용 가능하게 sdk
def lambda_handler(event, context):
client = boto3.resource('dynamodb') // aws 리소스 명시
table = client.Table('aws-learner-dynamodb-table') // 테이블 이름
table.put_item(
Item={
'customer_id': '12MCX',
'transaction_date': '2020-08-02',
'item_category': 'Book',
'price': 18000
}
)
- 테스트 이벤트 구성, 따로 인자값 설정할 필요 없음
- DynamoDB에서 확인 결과 코드에서 작성한 값이 항목에 있는걸 확인할 수 있다.
다량의 데이터를 업로드 할 때는 어떻게???
- DynamoDB에서는 batch 쓰기 기능을 사용
- put item이 4번
- 오류 발생 batchwrite 권한이 없음
- 역할을 다시 수정
- 기존에 생성한 정책에서 BatchWriteItem 권한 설정
- 역할은 이미 정책을 포함하기 때문에 바뀐 정책이 적용 됨
- DynamoDB에서 확인해보면 데이터가 정상적으로 업로드 됨
스캔으로 조회 하기
- 스캔 방식으로 price 속성에 100000 보다 크거나 같음을 필터
쿼리로 조회 하기
- 정렬키는 선택 사항, 정렬키를 넣어주면 파티션키에 맞는 데이터를 가져오고 다시 정렬키에 근거하여 데이터를 sort함
- 처음에 실습 조건에 한 고객은 하나의 물품밖에 구매할 수 밖에 없다.
- 한 고객은 하나의 물품만
- NoSQL은 파티션 키는 중복을 허용
- 또한 다른 데이터 타입도 들어 갈 수 있다. (ex. Map,List 등)
- 데이터 포맷에 크게 제한을 받지 않음
https://www.inflearn.com/course/aws-%EC%9E%85%EB%AC%B8/dashboard