LambdaでDynamoDBにアクセスする記述方法(Python) | AWS豆知識

  • import

  • テーブル取得

  • 書き込み

  • 読み出し

  • 消去

Lambda関数に付与する権限

権限を付与するためにはIAMロールを利用する。
IAMについては「IAM ロール ポリシーについて」を、
実際に付与する権限の書き方例については「Lambda関数に付与するIAMロールについて」を山参照

import

import boto3
from boto3.dynamodb.conditions import Key, Attr

テーブル取得

# dynamoDBオブジェクト
self.dynamodb = boto3.resource('dynamodb')

# テーブル取得
targetTable = self.dynamodb.Table('DynamoDBに存在するテーブル名')

書き込み

# 登録データ
registerData = {
    "name": "名前",
    "RegisterDate": "登録日"
}

# 値を書き込む
queryResult = targetTable.put_item(
    Item = registerData
}

読み出し

# 全件取得
queryResult = targetTable.scan()

# DeviceId が DeviceA のものを取得
# Keyに指定している「DeviceId」がパーティションキーである必要がある。
queryResult = targetTable.query(
    KeyConditionExpression = Key( "DeviceId" ).eq( "DeviceA" )
)

# DeviceId が DeviceA のものを取得(LSI 登録日の昇順で取得)
# LSI:ローカルセカンダリインデックス
# DynamoDB側で「DeviceId-RegisterDate-index」という名前でインデックスが登録されている
queryResult = targetTable.query(
    IndexName = "DeviceId-RegisterDate-index",
    KeyConditionExpression = Key( "DeviceId" ).eq( "DeviceA" )
)

# 指定された顧客名の貸出情報を取得(GSI 貸出日時の昇順で取得)
# GSI:グローバルセカンダリインデックス
# DynamoDB側で「ClientName-RentalDate-index」という名前でインデックスが登録されている
queryResult = targetTable.query(
    IndexName = "ClientName-RentalDate-index",
    KeyConditionExpression = Key( "ClientName" ).eq( clientName )
)

消去

# 消去
queryResult = targetTable.delete_item(
    Key = { "DeviceId": deviceId }
)

# LSIやGSIで設定された2項目でデータを指定して消去
queryResult = targetTable.delete_item(
    Key = { "DeviceId": deviceId, "RegisterDate": registerDate }
)