【AWS】PynamoDBを使ってみた

PynamoDBを使ってAWSのDynamoDBを操作してみました。

アナコンダでpynamodbをインストール済みです。

データモデルの定義

models.py

from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute


class UserModel(Model):
    """
    A DynamoDB User
    """
    class Meta:
        aws_access_key_id = 'キー'
        aws_secret_access_key = 'シークレット'
        table_name = 'dynamodb-user'
        region = 'us-west-2'
    email = UnicodeAttribute(hash_key=True)
    first_name = UnicodeAttribute()
    last_name = UnicodeAttribute()

AWSのルートもしくはIAMユーザのアクセスキーなどの認証情報を記載することで、 DynamoDBへアクセスすることができます。

ローカルのフォルダに認証情報が格納されていれば、コードに記載する必要はないかもしれません。

hashキーは、必ず1つ含めないといけないもので、データを検索するときなどに使います。

テーブルの作成

python consoleから以下のコマンドを入力しテーブルを作成します。

import models
models.UserModel.create_table(read_capacity_units=1, write_capacity_units=1)

キャパシティユニットは、1秒間に何回読み書きができるかを示す値です。

A read capacity unit represents one strongly consistent read per second, or two eventually consistent reads per second, for an item up to 4 KB in size.

データの挿入

user = models.UserModel('koko@example.com', first_name='Ain', last_name='Stain')
user.save()

データの検索

データの全検索、アイテム数、ハッシュキーで検索です。

アイテム数はリアルタイムでは更新されず、6時間ほど経つと更新されるようです。いつまで経っても0のままで焦りました。

import models

# テーブル全検索

for i in models.UserModel.scan():
    print(i.email + ":" + i.first_name + ":" + i.last_name)

# テーブルの項目数カウント

print(models.UserModel.count())

# ハッシュキーで検索

try:
    ret = models.UserModel.get("koko@example.com")
    print(ret)
except models.UserModel.DoesNotExist:
    print("not found")

更新

# 更新
user = models.UserModel.get('test@example.com')
user.first_name = 'Robert'
user.save()