makes-trail / application-sample

アプリ開発準備
0 stars 0 forks source link

技術検証 - DynamoDBをローカルで動かす #4

Closed kawabata2018 closed 3 years ago

kawabata2018 commented 3 years ago

背景

To do

完了条件

kawabata2018 commented 3 years ago

https://www.npmjs.com/package/dynamodb-admin

npm install -g dynamodb-admin

# For Windows: 
export DYNAMO_ENDPOINT=http://localhost:8000
dynamodb-admin

# For Mac/Linux: 
DYNAMO_ENDPOINT=http://localhost:8000 dynamodb-admin
kawabata2018 commented 3 years ago

dynamodb-adminが使えない?

実行環境

発生状況

version: "3"

services:
  dynamodb:
    image: amazon/dynamodb-local
    command: -jar DynamoDBLocal.jar -dbPath ./data -sharedDb
    volumes:
      - dynamodb-data:/home/dynamodblocal/data
    ports:
      - "8000:8000"
  dynamodb-admin:
    image: aaronshaf/dynamodb-admin
    environment:
      - DYNAMO_ENDPOINT=dynamodb:8000
    ports:
      - "8001:8001"
    depends_on:
      - dynamodb

volumes:
  dynamodb-data:
command: -jar DynamoDBLocal.jar -dbPath /home/dynamodblocal/data -sharedDb
↓
command: -jar DynamoDBLocal.jar -inMemory

予想される発生原因

[dynamodblocal@f4db8135503f ~]$ whoami
dynamodblocal
[dynamodblocal@f4db8135503f ~]$ pwd
/home/dynamodblocal
[dynamodblocal@f4db8135503f ~]$ ls -l
total 3744
-rw-r--r-- 1 root root 3803609 Dec 17 21:21 DynamoDBLocal.jar
drwxr-xr-x 2 root root    4096 Dec 17 21:21 DynamoDBLocal_lib
-rw-r--r-- 1 root root    8644 Dec 17 21:21 LICENSE.txt
-rw-r--r-- 1 root root    3289 Dec 17 21:21 README.txt
drwxr-xr-x 2 root root    4096 Jan  3 04:13 data
drwxr-xr-x 2 root root    4096 Dec 17 21:21 third_party_licenses
[dynamodblocal@f4db8135503f ~]$ 

解決策

1. rootユーザで起動する

version: "3"

services:
  dynamodb:
    image: amazon/dynamodb-local
    # これを追加する
    user: root
    command: -jar DynamoDBLocal.jar -dbPath ./data -sharedDb
    volumes:
      - dynamodb-data:/home/dynamodblocal/data
    ports:
      - "8000:8000"
  dynamodb-admin:
    image: aaronshaf/dynamodb-admin
    environment:
      - DYNAMO_ENDPOINT=dynamodb:8000
    ports:
      - "8001:8001"
    depends_on:
      - dynamodb

volumes:
  dynamodb-data:

結果👍

image

2. /home/dynamodblocal/dataの所有者をdynamodblocalに変更する

# ./dynamodb-local/Dockerfile

FROM amazon/dynamodb-local

WORKDIR /home/dynamodblocal

RUN mkdir data && chown -R 1000 data
version: "3"

services:
  dynamodb:
    build: ./dynamodb-local
    command: -jar DynamoDBLocal.jar -dbPath ./data -sharedDb
    volumes:
      - dynamodb-data:/home/dynamodblocal/data
    ports:
      - "8000:8000"
  dynamodb-admin:
    image: aaronshaf/dynamodb-admin
    environment:
      - DYNAMO_ENDPOINT=dynamodb:8000
    ports:
      - "8001:8001"
    depends_on:
      - dynamodb

volumes:
  dynamodb-data:

結果👍

[dynamodblocal@0d2515083911 ~]$ whoami
dynamodblocal
[dynamodblocal@0d2515083911 ~]$ 
[dynamodblocal@0d2515083911 ~]$ id dynamodblocal
uid=1000(dynamodblocal) gid=1000(dynamodblocal) groups=1000(dynamodblocal)
[dynamodblocal@0d2515083911 ~]$ 
[dynamodblocal@0d2515083911 ~]$ ls -l
total 3744
-rw-r--r-- 1 root          root          3803609 Dec 17 21:21 DynamoDBLocal.jar
drwxr-xr-x 2 root          root             4096 Dec 17 21:21 DynamoDBLocal_lib
-rw-r--r-- 1 root          root             8644 Dec 17 21:21 LICENSE.txt
-rw-r--r-- 1 root          root             3289 Dec 17 21:21 README.txt
drwxr-xr-x 2 dynamodblocal dynamodblocal    4096 Jan  3 05:19 data
drwxr-xr-x 2 root          root             4096 Dec 17 21:21 third_party_licenses

参考

kawabata2018 commented 3 years ago

CRUD

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GettingStarted.Python.html

kawabata2018 commented 3 years ago

データ型について

https://dev.classmethod.jp/articles/dynamodb-data-export/

DynamoDBにスカラー型(いわゆるプリミティブな型)として格納できるのは以下の5種類(日付型とかはない)

めんどくさいのは、PythonでDynamoDBの項目(RDBで言うところのレコード)を取得したときに数値型はdecimal.Decimal型として扱われる。取得した項目をjson.dumps()で出力しようとしてもデフォルトでDecimal型はシリアライズしてくれない。

kawabata2018 commented 3 years ago

これにてDynamoDB調査は終了

close