동기 부여가 낮은 다이나모DB 입문

소개



여러가지 번역이 있어, 다이나모 DB를 연습해 봅니다.

사전 지식



MySQL과 같은 지식은 조금 있습니다.
Firebase에서 NoSQL을 만진 적이 있습니다.

절차



AWS에 계정을 만들었다고 가정합니다.
pip3도 설치되어 있다고 가정합니다.

(1) AWS CLI 설치



pip3에서 AWS CLI를 설치합니다.
pip3 install awscli --upgrade --user

(2) 테이블 작성



AWS에 로그인하고 DynamoDB를 선택합니다.
데카데카와 나오는 테이블 만들기를 클릭합니다.


테이블 이름을 [moti]로, 기본 키를 [downs]로 설정합니다.
그런 다음 정렬 키를 [num]으로 설정합니다.

잘 모르기 때문에 「기본」인 채 작성합니다.



할 수 있었던 것 같습니다.

(3) aws로 계정을 만듭니다.



IAM이라는 것을 만들지 않으면 AWS CLI에서 사용할 수 없기 때문에 만듭니다.
IAM을 선택하고 사용자를 추가합니다.



프로그램에서 액세스를 확인합니다.



다이나모 DB 계열의 권한을 허용합니다.


태그를 만들지 않고 진행합니다.

액세스 키와 비밀 키를 복사해 둡니다.


아래와 같이 awscli에 로그인합니다.
$ aws configure --profile hashito
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxx
Default region name [None]: hashito
Default output format [None]: 

※맨 아래에도 있습니다만...이것 실수하고 있습니다...
Region→ap-northeast-1, output format은 text등이 좋습니다.

(4) awscli로 조작합니다



이런 느낌의 명령으로 데이터를 추가하는 것 같습니다.

$aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "2"}, "created_at": { "S": "1544741492" }, "message": { "S": "aaaaaaaaaaaaaa" } }'

잘 읽으면 알지만 기본적으로 JSON 형식 중첩되어 있습니다.
맨 위에 있는 레이어가 속성의 키 이름이고 다음 레이어가 속성(S는 String, N은 Number적인 느낌)입니다.
{"key name":{"type char":"var"}} 같은 느낌이네요

추가됨


테이블 목록
$ aws dynamodb list-tables
TABLENAMES  moti

데이터 획득
$aws dynamodb get-item --table-name moti --key '{ "downs": { "S": "1" }, "num": { "S": "2"}}'
CREATED_AT  1544741492
DOWNS   1
MESSAGE aaaaaaaaaaaaaa
NUM 2

(5) 여러가지 시험한다.



기본 키가 동일하면 어떻게됩니까?


$aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "2"}, "created_at": { "S": "1544741492" }, "message": { "S": "aaaaaaaaaaaaaa" } }'
$aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "3"} }'


덮어쓰지 않고 별도의 데이터로 처리됩니다.



기본 키와 정렬이 동일하면 어떻게됩니까?


$aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "2"}, "created_at": { "S": "1544741492" }, "message": { "S": "aaaaaaaaaaaaaa" } }'
$aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "2"} }'

덮어씁니다.


몇 가지를 함께 가져 오는 방법?



실수로 데이터를 추가합니다.
$ aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "3"} }'
$ aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "1" }, "num": { "S": "2"} }'
$ aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "2" }, "num": { "S": "2"} }'
$ aws dynamodb put-item --table-name moti --item '{ "downs": { "S": "3" }, "num": { "S": "2"} }'

$ aws dynamodb query --table-name moti --key-condition-expression 'downs =:_downs' --expression-attribute-values '{ ":_downs": { "S": "1" }}'
None    2   2
DOWNS   1
NUM 2
DOWNS   1
NUM 3
--expression-attribute-values 그래서 변수를 정의하고, --key-condition-expression 에서 where처럼 하는 것 같네요.

감상



NoSql을 처음 만져 보았습니다 만 즐겁습니다.
다만 SQL적인 것이 다소 어렵다…
원래, 너무 이것으로 조건 구분해서 가져오지 않을지도 모릅니다.

(막힌)



(걸린) 'aws'명령 없음



설치해야 하는 aws 명령이 존재하지 않았습니다.
$ aws help
-bash: aws: command not found

분명히 Python3-pip 설치 폴더에 경로가 없었기 때문이었습니다.
먼저 Python3-pip으로 설치한 폴더를 확인합니다.
$ pip3 show awscli
Name: awscli
Version: 1.18.0
Summary: Universal Command Line Environment for AWS.
Home-page: http://aws.amazon.com/cli/
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /Users/{user}/Library/Python/3.8/lib/python/site-packages
Requires: botocore, PyYAML, docutils, s3transfer, rsa, colorama
Required-by: 

여기에 없는 것 같습니다...
이 기사를 참고로…

AWS CLI 경로 통과
htps : // 이 m/pぅm_시가/이고 ms/5214510f9786898c987f

내가 여기 있었어.
$export PATH=/Users/{user}/Library/Python/3.7/bin:$PATH
$aws -help
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: the following arguments are required: command


(막힌) Could not connect to the endpoint URL: "https://dynamodb.hashito.amazonaws.com/" 라고 나온다.



너무 많이 설정되어 aws configure 에서 설정한 리전이 다른 것 같습니다.

AWS Access Key ID [****************]: 
AWS Secret Access Key [****************]: 
Default region name [hashito]: ap-northeast-1
Default output format [hashito]: text

다시 설정했습니다.

좋은 웹페이지 즐겨찾기