🔶
【AWS】Lambdaを使用しDynamoDBに読み書きする
はじめに
本記事ではLambdaを使用しDynamoDBに読み書きした手順を備忘録形式で残したものになります。
LambdaからDynamoDBに書き込み動作とDynamoDBに登録された内容をLambdaで取得する方法について記載いたします。
前提
実行に必要となるIAMポリシーは当たっていることを想定しています。
環境
Lambda(python 3.12)
DynamoDBの作成
次の記事のDynamoDB側の準備の手順に沿いDynamoDBのテーブルを作成します。
パーティションキーとソートキーには任意のものを入力しておきます。
LambdaからDynmoDBへの書き込み
DynamoDBへ書き込むようにwrite-dynamodb-0605
の名前でLambda関数を作成しました。
ソースは下記のとおりです。
lambda_function.py
import boto3
import time
def lambda_handler(event, context):
try:
# DynamoDBクライアントを作成
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('dynamoTable-0605')
# DynamoDBに挿入するデータ
item = {
'dynamoid': 'testhogehgoe00',
'string_value1': 'string_value11のデータ',
'string_value2': 'string_value22のデータ',
'json_value': {'key11': 'value11', 'key22': 'value22'},
'timestamp': int(time.time())
}
# データを挿入
table.put_item(Item=item)
return {
'statusCode': 200,
'body': 'Data inserted successfully'
}
except Exception as e:
return {
'statusCode': 500,
'body': f'Error inserting data: {str(e)}'
}
イベントJSON
{
"Records": [
{
"EventSource": "aws:dynamodb",
"EventName": "INSERT",
"Dynamodb": {
"NewImage": {
"dynamoid": {
"S": "testhogehgoe"
},
"string_value1": {
"S": "string_value1のデータ"
},
"string_value2": {
"S": "string_value2のデータ"
},
"json_value": {
"M": {
"key1": {
"S": "value1"
},
"key2": {
"S": "value2"
}
}
},
"timestamp": {
"N": "1659773200000"
}
}
}
}
]
}
Lambdaのテスト
から実行してみると3秒ほどで下記のようにレスポンスが返ってきました。
{
"statusCode": 200,
"body": "Data inserted successfully"
}
DynamoDBの対象のテーブルを確認してみると、データが更新されている事が確認できます。
DynmoDBに登録したデータをLambdaで取得する
DynamoDBのデータを取得する用のLambda関数をread-dynamodb-0605
の名前で作成しました。
ソースは下記のとおりです。
lambda_function.py
import boto3
import json
def lambda_handler(event, context):
try:
# DynamoDBクライアントを作成
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('dynamoTable-0605')
responseall = table.scan()
print(responseall)
response = table.get_item(
Key={
#主キー情報を設定
'dynamoid': 'testhogehgoe00',
'timestamp': 1717517209
}
)
print('レスポンスを出力')
print(response)
item = response.get('Item')
if not item:
# データが見つからない場合はエラーを返す
return {
'statusCode': 404,
'body': 'Data not found'
}
# 取得したデータを処理
processed_data = {
'dynamoid': item['dynamoid'],
'string_value1': item['string_value1'],
'string_value2': item['string_value2'],
'json_value': item['json_value'],
'timestamp': item['timestamp']
}
# 処理結果をログに出力
print('処理結果をログに出力')
print(processed_data)
return {
'statusCode': 200,
'body': 'Data processed successfully'
}
except Exception as e:
# エラーが発生した場合はエラーログを出力
print(f'Error processing data: {e}')
return {
'statusCode': 500,
'body': f'Error processing data: {str(e)}'
}
Lambdaのテスト
から実行してみると3秒ほどで下記のようにレスポンスが返ってきました。
Response
{
"statusCode": 200,
"body": "Data processed successfully"
}
DynamoDBのテーブルに登録した結果がログに出力されていることを確認できます。
Function Logs
~~~
{'Items': [{'string_value1': 'string_value11のデータ', 'string_value2': 'string_value22のデータ', 'dynamoid': 'testhogehgoe00', 'json_value': {'key11': 'value11', 'key22': 'value22'}, 'timestamp': Decimal('1717517209')},
レスポンスを出力
{'Item': {'string_value1': 'string_value11のデータ', 'string_value2': 'string_value22のデータ', 'dynamoid': 'testhogehgoe00', 'json_value': {'key11': 'value11', 'key22': 'value22'}, 'timestamp': Decimal('1717517209')},
処理結果をログに出力
{'dynamoid': 'testhogehgoe00', 'string_value1': 'string_value11のデータ', 'string_value2': 'string_value22のデータ', 'json_value': {'key11': 'value11', 'key22': 'value22'}, 'timestamp': Decimal('1717517209')}
~~~
Discussion