🌿

【AWS】Lambdaからput_itemでDynamoDBのデータを更新する

2024/06/08に公開

はじめに

Lambdaでput_item()メソッドを使用しDynamoDBに登録したデータを更新します。

環境

  • Lambda:Python 3.12

DynamoDBのテーブル作成

DynamoDB > テーブル > テーブルの作成 から新しくテーブルを作成します。

Lambdaの作成

Lambda > 関数 > 関数の作成 から新しく関数を作成します。

ロールのアタッチ

Lambdaを作成した際にデフォルトの実行ロールで作成した場合は、DynamoDBへの書き込み権限を持っていないので許可ポリシーを追加します。
設定タブ > アクセス権限 > 実行ロール からロール名をクリックします。

許可を追加 > ポリシーをアタッチから、今回は既存のポリシーにAmazonDynamoDBFullAccessのポリシーを追加します。

Lambdaソース

Lambdaで実行するソースを作成します。
詳細はコメントアウトの通りです。

lambda_function.py
import boto3
import json

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('dynaom-put-table')

def lambda_handler(event, context):
    # PUTリクエストで上書きするデータをイベントから取得
    dynamo_id = event['dynamo_id']
    timestamp = event['timestamp']
    status = event['status']
    
    # 更新するアイテムを定義
    item = {
        "dynamoid": dynamo_id,
        "timestamp": timestamp,
        "status": status
    }
    
    try:
        # DynamoDBにアイテムを上書きする
        table.put_item(Item=item)
        return "Item successfully updated"

    except Exception as e:
        return "Error updating item:" + str(e)
イベントJSON1
{
    "dynamo_id": "test1_id",
    "timestamp": "2024060000000",
    "status":true
}

実行 & 結果確認

データの初回登録

上記ソースとイベントJSONでLambdaのテストを実行をクリックすると、下記のようにデータが書き込まれている事が確認できました。

登録していたデータの更新

イベントJSONのstatus属性だけ変更(true⇒false)して再度テストを実行してみます。

イベントJSON2
{
    "dynamo_id": "test1_id",
    "timestamp": "2024060000000",
    "status":false
}

次の画像のようにstatus属性がfalseに更新されている事が確認できました。

Discussion