AWS S3イベント通知を設定してLambdaをトリガーする方法を初心者向けに解説!
生徒
「AWSエススリーのバケツにファイルを入れたときに、自動で何か動かすことってできるんですか?」
先生
「はい、できますよ。S3イベント通知という仕組みを使えば、ファイルが追加されたときにLambda(ラムダ)というサービスを動かすことができます。」
生徒
「ラムダってなんですか?あと、イベント通知ってどうやって設定するんですか?」
先生
「では、Lambda(ラムダ)の簡単な意味と、S3(エススリー)でイベント通知を設定する手順をやさしく説明していきますね!」
1. AWS S3(エススリー)とは?
AWS(エーダブリューエス)のS3は、正式には「Amazon Simple Storage Service(アマゾン・シンプル・ストレージ・サービス)」といいます。読み方はエススリーです。簡単にいうと、インターネット上にファイルを保存するためのクラウドストレージです。
S3では、ファイルを保存する場所のことを「バケット(Bucket)」と呼びます。画像やPDF、動画、テキストファイルなどを保存できます。
2. イベント通知(Event Notification)とは?
イベント通知(読み方:イベントツウチ)とは、S3のバケットで何かの「動き(イベント)」があったときに、それを別のサービスに「お知らせ」する仕組みです。
例えば、バケットにファイルがアップロードされた(追加された)とき、削除されたとき、などのイベントがあります。このような動きをトリガー(きっかけ)として、他のAWSサービスを動かすことができます。
3. Lambda(ラムダ)とは?
AWS Lambda(エーダブリューエス・ラムダ)は、サーバーを用意しなくてもプログラムを実行できるサービスです。読み方はラムダです。
Lambdaは、「関数(かんすう)」という単位で動作します。たとえば、「ファイルがアップロードされたらログを出す」「画像のサイズを変更する」などの処理を、Lambdaで自動的に実行できます。
4. S3イベント通知でLambdaをトリガーする流れ
ここでは、S3バケットにファイルが追加されたときに、Lambda関数が自動的に動く仕組みを作る手順を説明します。
- ① S3バケットを作成する
- ② Lambda関数を作成する
- ③ Lambda関数に必要なアクセス権限(IAMロール)を設定する
- ④ S3のイベント通知を設定して、Lambdaをトリガーにする
5. 実際の設定手順(初心者向け)
以下に、パソコンが苦手な人でもわかるように1つずつ手順を書きます。
① S3バケットの作成
AWSマネジメントコンソールにログインして、「S3」と検索します。そして「バケットを作成」ボタンを押し、バケット名(例:my-s3-lambda-bucket)を入力して、そのまま作成します。
② Lambda関数の作成
次に、同じくコンソールで「Lambda」と検索し、「関数の作成」を選びます。関数名は自由ですが、例としてs3TriggerFunctionなどにしましょう。
ランタイム(実行環境)は「Python(パイソン)3.12」や「Node.js(ノードジェイエス)18.x」などを選べます。ここではPythonを選んだとします。
③ Lambdaのアクセス権限を設定
Lambda関数には、S3からの通知を受け取るための「IAMロール(読み方:アイエーエム・ロール)」という権限設定が必要です。作成時に自動で作られますが、足りないときは「AmazonS3FullAccess(アマゾン・エススリー・フルアクセス)」などのポリシーを付け加えてください。
④ S3バケットにイベント通知を追加
作成したS3バケットに戻り、「プロパティ」タブを開きます。下の方に「イベント通知」というセクションがあります。
「通知を追加」をクリックし、名前(例:s3ToLambda)を入力します。「イベントタイプ」はPUT(ファイルのアップロード)を選びます。
通知先に「Lambda関数」を選び、先ほど作った関数名を選択してください。
最後に「変更の保存」をクリックすれば設定完了です。
6. 動作テストのやり方
ここまで設定できたら、試しにS3バケットに画像やテキストファイルをアップロードしてみましょう。Lambda関数がトリガーされ、自動的にプログラムが実行されます。
Lambdaのログは「CloudWatch(クラウドウォッチ)」というサービスに記録されます。そこを見れば、ちゃんと動作したかどうか確認できます。
7. よくあるトラブルと対処法
- Lambdaが呼び出されない: S3イベント通知の設定ミスが多いです。関数名が正しいか、通知イベントが
PUTになっているか確認しましょう。 - アクセス権限エラー: LambdaにS3へのアクセス許可があるか確認してください。IAMポリシーを見直すと解決します。
まとめ
今回は、AWS S3イベント通知を使ってLambda関数を自動的にトリガーする仕組みについて、初心者でも分かるように丁寧に解説してきました。
特に注目すべきポイントは、S3バケットでファイルの追加(アップロード)などのイベントが発生したときに、自動でサーバーレスのLambda関数が実行されるという点です。
この組み合わせにより、例えば画像の自動リサイズ、ログの記録、データの自動加工など、さまざまな自動処理が可能になります。
S3とLambdaの組み合わせでできること
初心者が最初につまづきやすいIAMロールの設定やイベント通知の条件指定も、ひとつずつステップを追えば決して難しいものではありません。
実際のシステム運用では、ログ記録や監視にも注意を払い、CloudWatchとの連携でログ確認を行うことも重要です。
S3イベント通知のサンプル構成まとめ
以下に、実際の構成例を簡単にまとめておきます:
{
"LambdaFunctionConfigurations": [
{
"LambdaFunctionArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:s3TriggerFunction",
"Events": ["s3:ObjectCreated:Put"],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "suffix",
"Value": ".jpg"
}
]
}
}
}
]
}
このように、画像(.jpg)がアップロードされたときだけLambda関数を動かすなど、条件付きのトリガーも柔軟に設定可能です。
このフィルタリング機能を使うことで、不要なイベント処理を減らし、コストやリソースの最適化にもつながります。
Lambda関数内のサンプルコード(Python)
import json
def lambda_handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print(f"バケット名: {bucket}")
print(f"ファイルキー: {key}")
return {
'statusCode': 200,
'body': json.dumps('S3アップロードイベントを受信しました')
}
Lambda関数内では、このようにeventオブジェクトからS3バケット名やファイル名を取り出して処理するのが基本です。
初心者にとっては、最初にログを出すだけでも十分な学習体験になります。
今後の発展的な活用例
- 画像アップロード → 自動でサムネイル画像を生成し、別のS3バケットに保存
- PDFファイルをアップロード → テキスト抽出して全文検索用に保存
- 動画ファイルアップロード → 自動でSNS向けの短縮動画を生成
- CSVアップロード → 自動でDynamoDBやRDSにデータを保存
このように、AWSのサーバーレスアーキテクチャを活用すれば、コード量を最小限にしつつ、信頼性の高い処理が可能になります。
初心者の方も、まずは基本の設定からはじめて、少しずつ自動化の幅を広げていくのがおすすめです。
生徒
「今日の内容で、S3にファイルを入れたら自動でLambdaが動くってことは、すごく便利だと思いました!」
先生
「そうですね。手作業を減らして自動化できる点がクラウドの魅力の一つです。Lambdaはサーバーを持たなくても動くので、運用も楽になります。」
生徒
「IAMロールの設定がちょっと難しそうでしたけど、具体例を見たら分かりやすくなりました。」
先生
「最初は混乱しますが、実際に手を動かしてみると理解が深まりますよ。失敗してもログを見れば原因を特定できますから、CloudWatchもぜひ活用してみてくださいね。」
生徒
「はい!今度は画像をアップしたらサムネイルを自動で作る処理にチャレンジしてみたいです!」
先生
「いいですね!その流れで画像処理ライブラリや別のS3バケットの使い方も学べますよ。どんどんステップアップしていきましょう!」