DynamoDBローカルを使う


AWSのDynamoDBをローカル環境で試すことができるDynamoDBローカルのインストール方法などをまとめます。

DynamoDBローカルを起動するためにJavaが必要で、操作するのにAWS CliをインストールするためのpipをインストールするためのPython3.6が必要という蟻地獄。

環境は手元に作ってあったVagrantで、CentOS6.8です。


# Javaのインストール

DynamoDBの実行にJavaが必要になるので、入っていない場合はインストールしておきます。

```:インストール可能バージョンの確認
yum search openjdk
```

```:1.8をインストール
yum install java-1.8.0-openjdk
```

# DynamoDBのインストール

1. [ここ](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html?shortFooter=true) からダウンロード
2. 解凍してゲストOS内の適当なディレクトリに配置
3. 以下のコマンドで起動
4. `Ctrl-C` で停止

```:DynamoDBの起動
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
```
DynamoDBは、デフォルトではポート **8000** を使用します。


# Python3.6のインストール -> NG

DynamoDBの設定やデータの操作をするためにawscliを使用します。そのためにPythonが必要で、Python2.6はサポート対象外となったようなので、3系をインストールしたい。

```:リポジトリの設定
# sudo yum install -y https://centos6.iuscommunity.org/ius-release.rpm
```

```:インストール
# sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
```

```:リンク設定
# sudo ln -s /usr/bin/python3.6 /usr/bin/python3
# sudo unlink /usr/bin/python
# sudo ln -s /usr/bin/python3 /usr/bin/python
# sudo unlink /usr/bin/pip
# sudo ln -s /usr/bin/pip3.6 /usr/bin/pip
```

これでイケルと思ったが、 @kunitaya より

>Python2でLinuxの根幹コードが結構書かれてるので、標準のPythonを2から3に変えるのはオススメできないです。
yumとか、確かPythonだったような。
なので、Python3 は Python3 で利用した方がいいです。

というわけでリンクはもとに戻して `yum install python` で入れたPython2.6を使うことにした。


# AWSCLIのインストール

```:
sudo pip install awscli
```

Python2.6だと警告がでますが、インストールは可能です。

# aws configure

苦難はまだつづく。
AWSCLIコマンドを実行すると以下のメッセージが。

```
You must specify a region. You can also configure your region by running "aws configure".
```

ローカルなのに必要なのか。
configure設定を行います。

```console:configureの設定
# aws configure
AWS Access Key ID [None]: ************
AWS Secret Access Key [None]: ************
Default region name [None]: ap-northeast-1
Default output format [None]: json
```


# データの操作

ようやく確認できる。

```:tableを作成
aws dynamodb create-table \
    --table-name Image \
    --attribute-definitions \
        AttributeName=asset_no,AttributeType=S \
    --key-schema AttributeName=asset_no,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --stream-specification StreamEnabled=true,StreamViewType=NEW_IMAGE \
    --endpoint-url http://localhost:8000
```

```:tableの設定を表示
aws dynamodb describe-table \
    --table-name Image \
    --endpoint-url http://localhost:8000
```

```:tableの設定を更新
aws dynamodb update-table \
    --table-name Image \
    --provisioned-throughput ReadCapacityUnits=20,WriteCapacityUnits=10 \
    --endpoint-url http://localhost:8000
```

```:tableを削除
aws dynamodb delete-table \
    --table-name Image \
    --endpoint-url http://localhost:8000
```

```:itemを1件追加
aws dynamodb put-item \
    --table-name Image \
    --item '{"asset_no":{"S":"AAAAA"}, "item_code":{"S":"012345"}}' \
    --return-consumed-capacity TOTAL \
    --endpoint-url http://localhost:8000
```

```:itemをもう1件追加
aws dynamodb put-item \
    --table-name Image \
    --item '{"asset_no":{"S":"BBBBB"}, "item_code":{"S":"987654"}}' \
    --return-consumed-capacity TOTAL \
    --endpoint-url http://localhost:8000
```

```:itemを1件取得
aws dynamodb get-item \
    --table-name Image \
    --key '{"asset_no":{"S":"BBBBB"}}' \
    --return-consumed-capacity TOTAL \
    --endpoint-url http://localhost:8000
```

```:全データを取得
aws dynamodb scan \
    --table-name Image \
    --endpoint-url http://localhost:8000 \
    --return-consumed-capacity TOTAL
```

```:itemの件数を取得
aws dynamodb scan \
    --table-name Image \
    --query 'Count' \
    --endpoint-url http://localhost:8000 \
    --return-consumed-capacity TOTAL
```