どうも、nippa です。
Python で AWS DynamoDB にアクセスするためのコードについてまとめておきます。
Boto3 を利用して、アクセスします。
環境
boto3 について
boto3 は Python 用 AWS 公式の SDK になります。
boto3 を使った AWS サービスのアクセス方法には、client
とresource
の 2 つの方法
がありますが、resource
は今後新機能は追加されないことが発表されています。
現在のresource
の inferface はライフサイクルが来るまでは、利用可能です。
AWS 公式ドキュメント resource
今後のことも踏まえて、今回はclient
を利用していきます。
boto3 のインストール
- poetry インストール
poetry add boto3
- pip インストール
pip install boto3
基本的な使い方
CRUD(create, read, update, delete)に基づいて操作をまとめておきます。今回はパー ティションキー(Partition key)、ソートキー(Sort key)がある場合です。
テーブル設計は特に考えていないので、操作を試すために作成しています。
また、関数としてコードは記載します。
create_table
test
テーブルの作成になります。テーブル作成が完了するまで、wait で待っています
。
id
をパーティションキーに、email
をソートキーに指定しています。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def create_table() -> None: table_name = "test" table = dynamodb.create_table( TableName=table_name, KeySchema=[ {"AttributeName": "id", "KeyType": "HASH"}, # Partition key {"AttributeName": "email", "KeyType": "RANGE"}, # Sort key ], AttributeDefinitions=[ {"AttributeName": "id", "AttributeType": "N"}, {"AttributeName": "email", "AttributeType": "S"}, ], BillingMode="PAY_PER_REQUEST", ) # table作成完了まで待つ dynamodb.get_waiter("table_exists").wait(TableName=table_name) print(f"Table {table_name} created successfully.") return
put_item
id(パーティションキー)と email(ソートキー)を指定して、属性情報に name、age を指定しています。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def put_item() -> None: table_name = "test" response = dynamodb.put_item( TableName=table_name, Item={ "id": {"N": "1"}, "email": {"S": "example@example.com"}, "name": {"S": "Yamada"}, "age": {"N": "30"}, }, ) print(response) return
get_item
id(パーティションキー)と email(ソートキー)を指定して、情報を取得します。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def get_item() -> None: table_name = "test" response = dynamodb.get_item( TableName=table_name, Key={ "id": {"N": "1"}, "email": {"S": "example@example.com"}, }, ) item = response.get("Item") if item: print(item) else: print("Item not found") return
update_item
id(パーティションキー)と email(ソートキー)を指定して、属性情報を更新します。
パーティションキー、ソートキーは更新できないので、ご注意ください。
パーティションキー、ソートキーを更新する場合は、新しく put_item でアイテムを作成 します。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def update_item() -> None: table_name = "test" response = dynamodb.update_item( TableName=table_name, Key={"id": {"N": "1"}, "email": {"S": "example@example.com"}}, UpdateExpression="SET age = :val1", ExpressionAttributeValues={":val1": {"N": "31"}}, ) print(response) return
delete_item
id(パーティションキー)と email(ソートキー)を指定して、アイテムを削除します。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def delete_item() -> None: table_name = "test" response = dynamodb.delete_item( TableName=table_name, Key={ "id": {"N": "1"}, "email": {"S": "example@example.com"}, }, ) print(response) return
delete_table
テーブル名を指定して、テーブルを削除します。
import boto3 dynamodb = boto3.client("dynamodb", region_name="us-west-2") def delete_table() -> None: table_name = "test" dynamodb.delete_table( TableName=table_name, ) return
感想
今回 boto3 を使って、AWS DynamoDB の一般的な CRUD の操作をまとめました。
boto3 は指定するキーがコード上からは参照しにくく、毎回調べていたので、その手間を 減らしたいと思いまとめました。
AWS DynamoDB は癖が強いので、使う際には注意が必要ですね。
ではでは、また次回。