6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【技術検証】S3アップロードからLambda経由でDynamoDBに保存する構成を検証してみた

Posted at

はじめに

まずはじめに、前回の記事の続きとなります。簡単に前回の振り返りをすると、S3バケットにファイルがアップロードされたことをトリガーに、Lambda関数を実行する構成を構築しました。

前回の検証記事はこちらです!

CloudWatch のログも確認しましたが、想定通りファイル名がログに出力されていました(前回の検証結果です)。

Screenshot 2025-06-19 at 23.03.27.png

AWSのサーバーレス構成の基礎的な組み合わせであり、さまざまな場面で応用できると感じたため、今回はその構成にDynamoDBを加えて、連携する構成を試してみることにしました。

簡単な内容ではありますが、備忘録も兼ねて記事として残しておきます...!!

書こうと思ったきっかけ

サーバレスなアーキテクチャー構成に強くなりたいという思いから、最近は積極的にサーバレスサービスを触るようにしています。

その中で、S3バケットへのファイルアップロードをトリガーにして、Lambda関数を起動させ、そのままDynamoDBにデータを保存するという流れはまだ自分で試していなかったので、今回改めて手軽に検証してみました。

今回はこんな感じの構成を試してみました!

Screenshot 2025-06-20 at 21.56.45.png

引用画像:https://aws.amazon.com/blogs/compute/creating-a-scalable-serverless-import-process-for-amazon-dynamodb/

実際にやってみた

S3バケットの作成、Lambda関数の作成、S3トリガーの設定については、前回の記事で詳しく手順をまとめています。

ハンズオンされる方は、ぜひそちらを読んでから本記事を読み進めていただくのがおすすめです...!!

内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです...!

DynamoDBテーブルの作成

Lambdaからアップロードファイルの情報を保存するためのテーブルを作成します。

aws dynamodb create-table \
  --table-name UploadedFiles \
  --attribute-definitions AttributeName=FileName,AttributeType=S \
  --key-schema AttributeName=FileName,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST
  • テーブル名:UploadedFiles
  • パーティションキー:FileName(文字列)

こんな感じで問題なく実行できました!

Screenshot 2025-06-20 at 22.02.53.png

マネコン上でも想定通りテーブルが作成されていることが確認できました!

Screenshot 2025-06-20 at 22.03.48.png

Lambda関数にDynamoDBの処理を追加

Lambda関数にDynamoDBへの書き込み処理を追加します。

import json
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('UploadedFiles')

def lambda_handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key']

        # CloudWatchログ出力
        print(f"S3バケット: {bucket}, アップロードファイル: {key}")

        # DynamoDBに保存
        table.put_item(Item={
            'FileName': key,
            'BucketName': bucket
        })

    return {
        'statusCode': 200,
        'body': json.dumps('保存完了')
    }

実際にコードを貼り付けたあとは、下図の赤枠で示した「デプロイ」ボタンをクリックして反映してください!

Screenshot 2025-06-20 at 22.06.46.png

IAMロールの設定

  • IAM > ロール > 対象のLambda関数ロール
  • 「インラインポリシーの追加」または「ポリシーをアタッチ」で、AmazonDynamoDBFullAccess を許可

Screenshot 2025-06-20 at 22.08.41.png

※実際の運用では、必ず最小権限のポリシーを設定してください!今回はあくまで動作検証のために、便宜上フル権限を付与しています。

動作確認(S3アップロード → DynamoDB登録)

echo "hello dynamodb" > test2.txt
aws s3 cp test2.txt s3://my-upload-bucket-honda/

私はこんな感じで、CloudShell 上から実行してみました!

Screenshot 2025-06-20 at 22.10.54.png

実際のマネコン画面

Screenshot 2025-06-20 at 22.12.30.png

DynamoDBにデータが登録されているか確認:

Screenshot 2025-06-20 at 22.14.04.png

CLIで確認するためのコマンドは以下の通りです。興味のある方はぜひお試しください〜

aws dynamodb get-item \
  --table-name UploadedFiles \
  --key '{"FileName": {"S": "test2.txt"}}'

FileNameBucketName が登録されていれば成功です!

こんな感じです...!

Screenshot 2025-06-20 at 22.20.31.png

まとめ

ここまで読んでいただき、ありがとうございました!今回は、S3トリガー を使って、アップロードをきっかけにLambdaが起動するよう設定し、DynamoDB にファイル情報を保存する仕組みも加えました。

この週末は、CSVとか画像サムネイルとか、実用的なLambda処理にも手を出してみようと思ってます〜😆

参考文献

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?