테이블 생성
![](https://velog.velcdn.com/images/black2code/post/a6c141d5-4c01-460e-a32a-fddee3eb6373/image.png)
- 구성할 테이블 스키마
- 참고로 실습은 한명의 고객은 여러개의 물품을 살 수 없다는 조건으로 구성
![](https://velog.velcdn.com/images/black2code/post/0f5c7198-d919-4875-a8ae-2563fc544d09/image.png)
- 파티션 키 : customer_id
- 정렬 키 : transaction_date
![](https://velog.velcdn.com/images/black2code/post/45bf3166-9f77-4873-93ab-7dfa45f9ceb8/image.png)
- 기본 설정으로 하게 되면 Auto Scaling 포함됨
항목 생성
![](https://velog.velcdn.com/images/black2code/post/07b74ce1-68c7-4ca8-8aee-63ae4b03ec5f/image.png)
- AWS에서 직접 데이터를 넣을 수 있다.
- 다량의 데이터를 한번에 넣기 힘듬
- 간단한 테스트용으로, 실제 프로덕트에서는 사용 안함
- 어떻게 대량의 데이터를 넣을 수 있을까?
EX.
- IoT 기기와 연결하여 실시간 데이터를 불러온 후 DB에 적재
- S3 버켓에 파일 업로드 -> 람다 함수 발동 -> DynamoDB
실습에서는 람다 함수를 만들고, DynamoDB에 연결 시켜 데이터를 삽입 하는 방법으로 진행
- 정책 생성
- 역할 생성
- 람다 생성
Lambda 함수 생성
![](https://velog.velcdn.com/images/black2code/post/d1975ae0-33e6-4970-b909-9e611f7d8877/image.png)
- DynamoDB에 직접 데이터를 삽입하는 권한을 가지고 있어야 함 (권한)
![](https://velog.velcdn.com/images/black2code/post/36d1a083-6be0-4c71-a0dd-edb6be103624/image.png)
![](https://velog.velcdn.com/images/black2code/post/0ef0b450-62b1-4575-8c2d-9bd3fd029b0d/image.png)
![](https://velog.velcdn.com/images/black2code/post/9dcbc29c-d038-4da9-99bd-1c71b9f54386/image.png)
- 리소스 : DB의 여러개 테이블이 있다면 하나 하나의 테이블에 서비스를 적용 시킬지 아닐지
![](https://velog.velcdn.com/images/black2code/post/7123d422-93b8-4597-b34a-2ef23256eb0f/image.png)
![](https://velog.velcdn.com/images/black2code/post/3bf1630e-7458-4239-8a0e-f2df1a3c908a/image.png)
![](https://velog.velcdn.com/images/black2code/post/26805c65-3af8-49ee-b0b6-f9ba93a53547/image.png)
![](https://velog.velcdn.com/images/black2code/post/c908ca7f-3365-46ab-a8fa-48d13b84ac1d/image.png)
![](https://velog.velcdn.com/images/black2code/post/6a8ee98d-3fef-4d59-bfc5-eafa46af2a0c/image.png)
![](https://velog.velcdn.com/images/black2code/post/eab4b405-6563-43a4-b0ad-9393533eb5c1/image.png)
람다의 기본적인 요소들을 사용 가능하게 권한을 넣어줘야 함
IAM 역할에 생성한 정책 연결하기
![](https://velog.velcdn.com/images/black2code/post/633712d0-9a6e-4e25-9753-8e7212ee57a8/image.png)
![](https://velog.velcdn.com/images/black2code/post/c787f906-3e26-43e0-a14d-642837a18406/image.png)
- AWSLambdaBasicExecutionRole 선택
![](https://velog.velcdn.com/images/black2code/post/588838df-1d09-49ad-bb8a-171c7d925562/image.png)
- 기본적으로 AWS에서 제공해주는 정책, 다른 하나는 생성한 정책
![](https://velog.velcdn.com/images/black2code/post/86c04792-f32d-4527-9e9c-db131e85d49a/image.png)
- 다시 Lambda로 돌아와서 기존 역할 사용, 기존 역할에서 생성한 역할 선택
함수 코드 작성
![](https://velog.velcdn.com/images/black2code/post/bd70f284-537f-476a-8c35-a5749870afa3/image.png)
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
}
)
![](https://velog.velcdn.com/images/black2code/post/2b5bff2b-cf75-4530-b5c5-d11ffc77e4b9/image.png)
- 테스트 이벤트 구성, 따로 인자값 설정할 필요 없음
![](https://velog.velcdn.com/images/black2code/post/e99f2ee9-b8fa-40db-9c88-e638e2c5360f/image.png)
![](https://velog.velcdn.com/images/black2code/post/6348ca4e-5fcb-46f1-ab01-3d1c1048c75f/image.png)
- DynamoDB에서 확인 결과 코드에서 작성한 값이 항목에 있는걸 확인할 수 있다.
다량의 데이터를 업로드 할 때는 어떻게???
- DynamoDB에서는 batch 쓰기 기능을 사용
- put item이 4번
![](https://velog.velcdn.com/images/black2code/post/1446fa11-3e6e-4656-b170-b06f9934c837/image.png)
![](https://velog.velcdn.com/images/black2code/post/cd772b59-3ff7-492d-8db0-12e7deb2a138/image.png)
- 오류 발생 batchwrite 권한이 없음
- 역할을 다시 수정
![](https://velog.velcdn.com/images/black2code/post/e62c0295-f1ae-414f-9e2d-33f62c32bd09/image.png)
- 기존에 생성한 정책에서 BatchWriteItem 권한 설정
- 역할은 이미 정책을 포함하기 때문에 바뀐 정책이 적용 됨
![](https://velog.velcdn.com/images/black2code/post/9a6635b9-4fef-4e4b-aea9-58f3e3ea2100/image.png)
![](https://velog.velcdn.com/images/black2code/post/00ea96f0-ea6f-4a96-a748-4b0463ca091f/image.png)
- DynamoDB에서 확인해보면 데이터가 정상적으로 업로드 됨
스캔으로 조회 하기
![](https://velog.velcdn.com/images/black2code/post/4d5b8678-97aa-4d0a-ae77-a6602f44b4e9/image.png)
- 스캔 방식으로 price 속성에 100000 보다 크거나 같음을 필터
![](https://velog.velcdn.com/images/black2code/post/7fae0e28-0b2a-421d-9dc3-fd0e0bfea02c/image.png)
쿼리로 조회 하기
- 정렬키는 선택 사항, 정렬키를 넣어주면 파티션키에 맞는 데이터를 가져오고 다시 정렬키에 근거하여 데이터를 sort함
- 처음에 실습 조건에 한 고객은 하나의 물품밖에 구매할 수 밖에 없다.
![](https://velog.velcdn.com/images/black2code/post/32919e79-c516-4fa4-89e8-66468776fc37/image.png)
![](https://velog.velcdn.com/images/black2code/post/3e5c4690-5c1b-44d8-8363-8a0a6a0bc282/image.png)
- 한 고객은 하나의 물품만
- NoSQL은 파티션 키는 중복을 허용
- 또한 다른 데이터 타입도 들어 갈 수 있다. (ex. Map,List 등)
- 데이터 포맷에 크게 제한을 받지 않음
https://www.inflearn.com/course/aws-%EC%9E%85%EB%AC%B8/dashboard