Go で DynamoDB Local を使った時にいろいろハマったのでメモ
AWS 公式の Go 言語用 SDK がありますが、Developer Preview ということもあってかドキュメントがちょっと不足しているように思います。
私は Go のプログラムから DynamoDB を使いたかったのですが、検索するときのキーの指定の仕方とかがだいぶ特殊な感じだったので最初は苦労しましたが、とはいえ、AWS のマネージドサービスとしての DynamoDB を使う分には検索したりすれば多少情報が出てきますのでなんとかなります。
しかし DynamoDB Local を使うとなるとまったく情報がなく、だいぶつまづきました。
以下、いくつかハマったところと解決方法をメモしておきます。
1. 接続先として Endpoint を指定する必要がある
var ac aws.Config ac.Endpoint = aws.String("hostname:port")
という感じで DynamoDB Local が動いているアドレスを指定します。
これを指定しないと AWS の DynamoDB に接続しに行ってしまいます。
2. Region を指定する必要がある
これはたしか指定しないとエラーが起きていたはずなので、エラーメッセージにしたがって Region を指定しましょう。
DynamoDB Local ではリージョンとか関係ないはずなのですが、なんでも良いので指定する必要があります。
ac.Region = aws.String("ap-northeast-1")
という感じです。
3. SSL を Disable する必要がある
これはよくよく考えたら当然なのですが、DynamoDB Local には証明書とかを入れてないので SSL なしで接続します。
ac.DisableSSL = aws.Bool(true)
を設定します。
ここまできて、ようやく DynamoDB Local に接続できるようになったはずですが、もう一つ注意点があります。
4. 正しい Credentials を指定する必要がある
私の場合は、DynamoDB Local を Docker コンテナ上で実行しており、その DynamoDB Local に aws コマンドを使ってテスト用のデータを populate する際に、ダミーでもよいので AWS の Credentials 情報(~/.aws/credentials)が存在していないといけなかったので
[default] aws_access_key_id = dummy aws_secret_access_key = dummy
という内容のファイルを作成していました。
そしてその populate したデータを Go のプログラムから参照しようとすると、これと同じ内容を aws.Config.Credentials に設定しておかないといけませんでした。
(さもなければ、作ったはずのテーブルが存在しないというエラーになったりします)
ac.Credentials = credentials.NewStaticCredentials("dummy", "dummy", "dummy")
(第3引数の token は指定しなくても良さそうでしたが入れてみました)
これは DynamoDB Local には接続できているのにデータが見えないという挙動になるので、すごく悩みました。
なお、AWS 上の DynamoDB に接続するときは EC2 Instance Role を使ったので Credentials を指定する必要がありませんでした。
Amazon Web Services クラウドデザインパターン設計ガイド 改訂版
- 作者: 玉川憲,片山暁雄,鈴木宏康,野上忍,瀬戸島敏宏,坂西隆之,日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2015/05/28
- メディア: 単行本
- この商品を含むブログ (3件) を見る