🔗 Step 5: S3イベント設定
⏱️ このステップの所要時間
約10分
🎯 このステップのゴール
- S3バケットからLambda関数を自動実行するトリガーを設定する
- イベント駆動アーキテクチャの仕組みを理解する
- 無限ループを防ぐフィルター設定を行う
📚 S3イベント通知とは?
S3イベント通知 は、S3バケット内でオブジェクトの作成、削除、更新が発生した際に、自動的に他のAWSサービスに通知する機能です。
- リアルタイム処理: ファイルアップロード直後に処理開始
- 自動化: 手動操作不要で一連の処理を実行
- スケーラブル: 同時に複数のファイル処理が可能
- 効率的: 必要な時のみLambda関数が実行される
今回の設定では、画像がアップロードされた瞬間にLambda関数が起動し、自動的にサムネイルを生成します。
🚀 Step 4-1: Lambdaトリガーの追加
Lambda関数へ移動
- 「サービス」 → 「Lambda」 を選択
- 前のステップで作成した関数
あなたのユーザー名-image-processor
をクリック
トリガータブへ移動
- Lambda関数の詳細画面で 「設定」 タブをクリック
- 左側のメニューから 「トリガー」 を選択
- 「トリガーを追加」 ボタンをクリック
⚙️ Step 4-2: S3トリガーの設定
ソースの選択
トリガーソースとして 「S3」 を選択
バケットの選択
必ずステップ1で作成したあなた自身のバケットを選択してください。 他の人のバケットを選択すると、権限エラーが発生します。
バケット: 2025-tohoku-it-あなたのユーザー名-images
例: 2025-tohoku-it-giovanni-images
イベントタイプの選択
イベントタイプ: すべてのオブジェクト作成イベント
これにより、PUT、POST、COPYなど、すべての方法でオブジェクトが作成された際にLambda関数が実行されます。
フィルターの設定(重要)
Lambda関数がサムネイルをS3に保存することで、再度Lambda関数が起動してしまう無限ループを防ぐため、必ず、以下のプレフィックスの設定を行なってください。 また、検知ができるようになったので、以下のサイトを参照してください https://aws.amazon.com/jp/about-aws/whats-new/2024/10/aws-lambda-detects-stops-recursive-loops-lambda-s3/
プレフィックスフィルタを使用(絶対推奨)
プレフィックス: uploads/
サフィックス: (空欄のまま)
後のStep で画像をアップロードする手順がありますが、画像を uploads/
フォルダにアップロードしてください。
Step 4のLambda関数のコードには、thumbnails/
フォルダからのイベントを無視する処理が実装されています。この場合、画像をバケットのルートに直接アップロードできます。
方法1のプレフィックスフィルタを使用することを推奨します。これにより、Lambda関数の無駄な起動を防ぎ、コストを削減できます。
トリガーの作成
設定内容を確認したら 「追加」 ボタンをクリック
🔍 Step 4-3: 設定の確認
トリガー一覧での確認
- Lambda関数の 「トリガー」 タブに戻る
- 作成したS3トリガーが表示されていることを確認
表示例:
S3: 2025-tohoku-it-あなたのユーザー名-images
イベント: 2025-tohoku-it-s3:ObjectCreated:*
有効: はい
S3バケット側での確認
- 「サービス」 → 「S3」 を選択
2025-tohoku-it-あなたのユーザー名-images
バケットをクリック- 「プロパティ」 タブを選択
- 「イベント通知」 セクションを確認
- 作成したイベント通知設定が表示されていることを確認
✅ 完了確認チェックリスト
以下のすべてが完了していることを確認:
トリガー設定
- Lambda関数に S3 トリガーを追加した
- ソースとして正しいS3バケットを選択した
- イベントタイプを「すべてのオブジェクト作成イベント」に設定した
- 無限ループ防止のためのフィルタ設定を行った
- トリガーが「有効」状態になっている
確認作業
- Lambda関数のトリガータブでS3トリガーが表示される
- S3バケットのプロパティでイベント通知が確認できる
🚨 トラブルシューティング
Q: 「バケットにアクセスできません」エラーが出る
A: 以下を確認してください:
- 正しいバケット名を選択しているか
- Lambda関数のIAMロールにS3の読み取り権限があるか
- バケットとLambda関数が同じリージョンにあるか
Q: トリガーが作成されない
A: 以下を確認してください:
- バケット名に誤字がないか
- そのバケットに既に他のLambda関数のトリガーがないか
- IAMロールに適切な権限があるか
Q: 同じバケットに複数のトリガーを設定できますか?
A: 可能ですが、今回のハンズオンでは1つのトリガーのみ設定してください。複数設定すると意図しない動作が発生する可能性があります。
Q: 画像が無限に作成され続ける
A: 以下を確認してください:
- S3イベントのプレフィックスフィルタが設定されているか
- Lambda関数のコードに
thumbnails/
フォルダをスキップする処理が含まれているか - 上記のいずれか一方が必ず設定されている必要があります
🎊 Step 5 完了!
S3イベント設定が完了しました。これで画像をアップロードすると自動的にサムネイルが生成される準備が整いました!
📝 このステップで学んだこと
- ✅ S3イベント通知の仕組み
- ✅ Lambda関数のトリガー設定方法
- ✅ 無限ループの防止方法
- ✅ イベント駆動アーキテクチャの実装
📚 参考:S3イベントの種類
S3では様々なイベントタイプが利用可能です:
イベントタイプ | 説明 |
---|---|
s3:ObjectCreated:* | すべての作成イベント |
s3:ObjectCreated:Put | PUTリクエストによる作成 |
s3:ObjectCreated:Post | POSTリクエストによる作成 |
s3:ObjectCreated:Copy | COPYリクエストによる作成 |
s3:ObjectRemoved:* | すべての削除イベント |
今回は s3:ObjectCreated:*
を使用して、すべての作成方法に対応しています。
🔗 次のステップの準備
次のStep 6では、生成されたサムネイル画像を世界中に高速配信するためのCloudFrontを設定します。
CloudFrontの利点:
- 高速配信: エッジロケーションからの配信
- コスト削減: S3からの直接アクセスを削減
- セキュリティ: S3バケットを非公開に保持
- キャッシュ: 頻繁にアクセスされる画像を高速表示
💡 次に期待できること
🚨 アップロード時の注意事項
プレフィックスフィルタを設定した場合:
- 画像を
uploads/
フォルダにアップロードしてください - 例:
uploads/sample.jpg
プレフィックスフィルタを設定していない場合:
- バケットのルートに直接アップロード可能
- Lambda関数が
thumbnails/
フォルダを自動的に除外
Step 6の完了後は、実際に画像をアップロードして:
- 📸 画像をS3にアップロード
- ⚡ Lambda関数が自動実行
- 🖼️ 3つのサイズのサムネイル生成
- 📊 DynamoDBにメタデータ保存
- 🌐 CloudFront経由で高速配信
という一連の流れを体験できます!