🌿
【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