IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python Boto3でAWS DynamoDBの基本操作

どうも、nippa です。

PythonAWS DynamoDB にアクセスするためのコードについてまとめておきます。

Boto3 を利用して、アクセスします。

環境

boto3 について

boto3 は PythonAWS 公式の SDK になります。

boto3 を使った AWS サービスのアクセス方法には、clientresourceの 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 は癖が強いので、使う際には注意が必要ですね。

ではでは、また次回。