🌿
【AWS】Lambdaからput_itemでDynamoDBのデータを更新する
はじめに
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