Lambda×S3でファイルを自動整理!イベント通知で日付フォルダに振り分ける方法 – Zenet Tech Blog

 

はじめに

ゼネットシステム事業部の方です。

AWSを利用していると、S3に大量のファイルが溜まっていき、整理や管理が大変になることがあります。
手動で整理するのは手間がかかり、ミスも発生しやすくなります。

本記事では、S3イベント通知をトリガーにLambda関数を動かしてファイルを自動整理する方法を紹介します。
IAM権限やバケットポリシーを最小限にしつつ、日付ごとにフォルダに振り分ける例で解説します。

課題

S3運用でよくある課題は以下です:

  • ファイルが増え続けて整理が大変

  • 日付ごとに自動で分類したい

  • 一定期間経過したファイルを自動削除したい

  • 手動操作によるヒューマンエラーを防ぎたい

これらの課題は、Lambda + S3イベント通知 + CloudWatch Logs を組み合わせることで解決できます。

実装アーキテクチャ

  1. ユーザが S3 バケットにファイルをアップロード

  2. ObjectCreated イベントをトリガーに Lambda 関数が起動

  3. Lambda がファイルを日付フォルダ(例:2025/10/16/)に整理(コピー+削除)

  4. CloudWatch Logs に処理状況を出力

構成図

実装手順

1. S3バケット作成

まず、アップロード先となる S3 バケットを作成します。
例では test-hou というバケット名を使用します。

S3バケット作成

2. Lambda関数作成

  1. Lambda コンソールで新しい関数を作成します。
      1. ランタイム: Python 3.13

      2. 実行ロール: 後述のIAMポリシーを付与したロールを使用

  1. Lambdaの一般設定で「タイムアウト」を1分程度に変更してください(ファイル操作に余裕を持たせるため)。

    Lambda一般設定-タイムアウト
  2. 以下のコードをデプロイします。
    import boto3
    import os
    from datetime import datetime, timezone
    
    s3 = boto3.client('s3')
    
    def lambda_handler(event, context):
        # S3イベントからバケット名とファイルキーを取得
        bucket = event['Records'][0]['s3']['bucket']['name']
        key = event['Records'][0]['s3']['object']['key']
        print(f"イベント受信: {event}")
    
        # オブジェクトの最終更新日を取得
        response = s3.head_object(Bucket=bucket, Key=key)
        last_modified = response['LastModified'].astimezone(timezone.utc).date()
        today = datetime.now(timezone.utc).date()
        print(f"ファイル更新日: {last_modified}, 本日の日付: {today}")
    
        # 日付フォルダへ移動
        folder_path = today.strftime('%Y/%m/%d')
        new_key = f"{folder_path}/{os.path.basename(key)}"
    
        # ファイルをコピーして元ファイルを削除
        s3.copy_object(Bucket=bucket, CopySource={'Bucket': bucket, 'Key': key}, Key=new_key)
        s3.delete_object(Bucket=bucket, Key=key)
    
        print(f"✅ 整理完了: {key} → {new_key}")
    
    

3. トリガー設定(S3イベント通知)

Lambda関数の設定画面から、トリガーを追加します。
トリガータイプに S3 を選択し、以下のように設定します。

  • イベントタイプ:All object create events(すべてのオブジェクト作成イベント)

  • プレフィックス・サフィックス:全ファイル対象の場合は指定しない

関数にトリガーを追加

 

トリガー設定

トリガー詳細設定

トリガー設定成功画面

設定を保存すると、「トリガーが正常に追加されました」と表示されます。

4. Lambda実行ロール権限




元の記事を確認する

関連記事