Open4
ローカルのDocker上でDynamoDBを動かしてみる
とにかく動かす(最低限動く状態へ)
準備
- docker-compose.ymlの記載
version: '3'
services:
dynamodb:
image: amazon/dynamodb-local
ports:
- "8000:8000"
- シェルスクリプトでテーブル定義
#!/bin/bash
aws dynamodb create-table --endpoint-url http://localhost:8000 \
--table-name YourTableName \
--attribute-definitions AttributeName=YourPrimaryKey,AttributeType=S \
--key-schema AttributeName=YourPrimaryKey,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
- シェルスクリプトを実行可能にしておく
% chmod +x init-dynamodb.sh
起動
- docker起動
% docker-compose up dynamodb
[+] Running 5/5
✔ dynamodb 4 layers [⣿⣿⣿⣿] 0B/0B Pulled 35.5s
✔ 0dfb0edac9a7 Pull complete 12.2s
✔ 5ffbcc73bc8b Pull complete 16.7s
✔ 4f4fb700ef54 Pull complete 4.7s
✔ 96b4d4d353f8 Pull complete 18.8s
[+] Running 1/1
✔ Container prince-hotel-server-dynamodb-1 Created 0.2s
Attaching to prince-hotel-server-dynamodb-1
prince-hotel-server-dynamodb-1 | Initializing DynamoDB Local with the following configuration:
prince-hotel-server-dynamodb-1 | Port: 8000
prince-hotel-server-dynamodb-1 | InMemory: true
prince-hotel-server-dynamodb-1 | DbPath: null
prince-hotel-server-dynamodb-1 | SharedDb: false
prince-hotel-server-dynamodb-1 | shouldDelayTransientStatuses: false
prince-hotel-server-dynamodb-1 | CorsParams: null
prince-hotel-server-dynamodb-1 |
- シェルスクリプト実行
% ./dynamodb-init.sh
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "YourPrimaryKey",
"AttributeType": "S"
}
],
"TableName": "YourTableName",
"KeySchema": [
{
"AttributeName": "YourPrimaryKey",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2023-09-27T14:01:10.844000+09:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
"LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
:...skipping...
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "YourPrimaryKey",
"AttributeType": "S"
}
],
"TableName": "YourTableName",
"KeySchema": [
{
"AttributeName": "YourPrimaryKey",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2023-09-27T14:01:10.844000+09:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
"LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
:...skipping...
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "YourPrimaryKey",
"AttributeType": "S"
}
],
"TableName": "YourTableName",
"KeySchema": [
{
"AttributeName": "YourPrimaryKey",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2023-09-27T14:01:10.844000+09:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
"LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
:...skipping...
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "YourPrimaryKey",
"AttributeType": "S"
}
],
"TableName": "YourTableName",
"KeySchema": [
{
"AttributeName": "YourPrimaryKey",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2023-09-27T14:01:10.844000+09:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
"LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
:...skipping...
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "YourPrimaryKey",
"AttributeType": "S"
}
],
"TableName": "YourTableName",
"KeySchema": [
{
"AttributeName": "YourPrimaryKey",
"KeyType": "HASH"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2023-09-27T14:01:10.844000+09:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
"LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/YourTableName"
}
}
~
~
~
~
~
- 動作確認
ちゃんと動いているのか不安だったので確認
% aws dynamodb list-tables --endpoint-url http://localhost:8000
{
"TableNames": [
"YourTableName"
]
}
動作確認のためのコマンド
- テーブルの作成
% aws dynamodb create-table --endpoint-url http://localhost:8000 --table-name MyTable --attribute-definitions AttributeName=id,AttributeType=N --key-schema AttributeName=id,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
- テーブルの一覧表示
% aws dynamodb list-tables --endpoint-url http://localhost:8000
- データの挿入 (PutItem)
% aws dynamodb put-item --table-name MyTable --item '{"id": {"N": "1"}, "name": {"S": "John Doe"}}' --endpoint-url http://localhost:8000
- データの取得 (GetItem)
% aws dynamodb get-item --table-name MyTable --key '{"id": {"N": "1"}}' --endpoint-url http://localhost:8000
- データの検索 (Scan)
% aws dynamodb scan --table-name MyTable --endpoint-url http://localhost:8000
↑で記載を省いていること
- aws権限周りの設定
プロジェクト内への導入なので、完全に一からではない。
完全に一からの導入については、GPTの説明がわかりやすかった
- Dockerイメージの取得
まず、Amazon公式提供のDynamoDBのDockerイメージをローカルに取得します。ターミナルを開き、以下のコマンドを実行してください。
docker pull amazon/dynamodb-local - Dockerコンテナの実行
次に、Dockerコンテナを実行します。以下のコマンドでは、8000番ポートでDockerコンテナを起動します。
docker run -p 8000:8000 amazon/dynamodb-local
これで、Docker上でローカルDynamoDBが起動しました。 - AWS CLIのインストール
DynamoDBをコマンドラインで操作するには、AWS CLI (Command Line Interface) をインストールする必要があります。以下のコマンドでインストールできます。
Macの場合:
brew install awscli
Windowsの場合:
pip install --user awscli - AWS CLIの設定
AWS CLIを使用するために、環境を設定する必要があります。以下のコマンドを実行してください。
aws configure
これにより、アクセスキー、シークレットキー、リージョン、出力形式を入力するように求められます。ローカルのDynamoDBで操作するため、適当な値を入力してください。
例:
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: us-west-2
Default output format [None]: json
これでAWS CLIの設定が完了です。
参考