IT

[DynamoDB] AWS DynamoDB Local 환경 셋팅, SAM, Typescript 연동

정미나 2020. 10. 16. 19:30

0. 준비사항 : Docker, AWS CLI 설치

1. Docker에서 DynamoDB Local 이미지를 가져와 컨테이너 실행

> pull amazon/dynamodb-local

> docker run -d -p 8000:8000 amazon/dynamodb-local

 

2. DynamoDB Workbench 설치(모델링 툴)

※ DynamoDB CLI 사용에 자신있으면 굳이 설치하지 않아도 됨

- 다운로드

 

Download NoSQL Workbench - Amazon DynamoDB

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

- 사용 가이드

 

NoSQL Workbench로 데이터 모델 제작 - Amazon DynamoDB

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

Local connection 생성 후 credentials 확인 (Access key ID, Secret access key)

 

3. AWS CLI Profile 설정

: 위에서 확인한 Key값을 넣어준다.

> aws configure --profile DDB

AWS Access Key ID [****************]: xxxxxx  

AWS Secret Access Key [****************]: xxxxx  

Default region name [none]: localhost

Default output format [none]: json

 

4. 테이블 생성 및 데이터 INSERT

TEST 테이블 생성

 

Put Item (Data Insert)

 

Put Item 시 새로운 Attribute 추가도 가능

 

5. CLI로 확인

: 전체 테이블 리스트

> aws dynamodb list-tables --endpoint-url http://localhost:8000 --profile DDB

 

: TEST 테이블 스캔

모든 명령어에 endpoint-url과 profile 옵션 추가

 

6. AWS SAM(feat.Typescript)과 연결

import { table, hashKey, rangeKey, attribute } from '@aws/dynamodb-data-mapper-annotations';

@table('TEST')
class TableMapper {

     @hashKey()
     ID?: string;

     @rangeKey()
     NAME?: string;

     @attribute()
     JOB?: string;

}

export default TableMapper;

 

const mapper = new DataMapper({
     client: new DynamoDB({
         region: "localhost",
         endpoint: "http://host.docker.internal:8000"
     })

 

7. 참고사항

Workbench를 이용하지 않고 CLI 이용 시 (OS Windows)


aws dynamodb create-table ^
--table-name TEST ^
--attribute-definitions AttributeName=ID,AttributeType=S AttributeName=NAME,AttributeType=S ^
--key-schema AttributeName=ID,KeyType=HASH AttributeName=NAME,KeyType=RANGE ^
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 ^
--endpoint-url http://localhost:8000 --profile DDB


aws dynamodb put-item ^
--table-name TEST ^
--item "{\"ID\": {\"S\": \"IamMina\"}, \"NAME\": {\"S\": \"JungMina\"}}" ^
--endpoint-url http://localhost:8000 --profile DDB ^
--return-consumed-capacity TOTAL