【AWS入門】LambdaとS3の連携方法を完全解説!トリガー設定・ファイル処理の自動化手順
生徒
「先生、AWS LambdaとS3を連携してファイル処理を自動化したいんですが、どうやればいいか分かりません…」
先生
「LambdaとS3の連携は、イベント駆動の仕組みを使えば簡単にできますよ。特にS3バケットにファイルがアップロードされたときにLambdaを自動で呼び出す設定ができます。」
生徒
「それって、たとえばCSVファイルをアップロードしたら、自動的に処理される感じですか?」
先生
「その通りです。それじゃあ、S3トリガーの設定方法とLambda関数の実装方法を詳しく見ていきましょう。」
1. AWS LambdaとS3の基本的な連携の仕組み
AWS LambdaとAmazon S3は、イベント駆動の仕組みを活用して連携できます。たとえば、S3バケットにファイルがアップロードされたタイミングでLambda関数を自動的に起動し、そのファイルを処理するといった流れが実現できます。
この仕組みは、サーバーレスアーキテクチャに最適で、ファイル処理の自動化・画像リサイズ・CSV解析・ログ整形など、さまざまな用途に活用できます。
2. S3バケットにトリガーを設定する手順
S3バケットに対してLambdaトリガーを設定するには、以下の手順で行います。
- AWSマネジメントコンソールでS3を開く
- 対象のバケットを選択
- 「プロパティ」タブを開く
- 「イベント通知」セクションで新しい通知を作成
- Lambda関数を指定してイベントタイプ(例:
PUT)を設定
これで、指定した条件に一致するファイルがアップロードされたときに、Lambda関数がトリガーされるようになります。
3. Lambda関数でS3ファイルを処理する基本コード
以下は、S3にアップロードされたファイルのキー(ファイル名)を取得してログに出力するシンプルなLambda関数の例です。(Node.jsの場合)
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event) => {
const record = event.Records[0];
const bucket = record.s3.bucket.name;
const key = decodeURIComponent(record.s3.object.key.replace(/\+/g, ' '));
console.log("バケット名:", bucket);
console.log("ファイルキー:", key);
};
このようにLambda関数のeventオブジェクトには、S3からの通知情報が入っており、アップロードされたファイルの情報が取得できます。
4. S3とLambda連携時のIAMロール設定
Lambda関数がS3のファイルにアクセスするには、適切なIAMロールとポリシー設定が必要です。例えば以下のようなS3読み取り権限をロールに付与します。
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
このポリシーをLambdaの実行ロールに設定することで、ファイルの取得や処理が行えるようになります。
5. LambdaとS3連携の活用例
LambdaとS3の連携はさまざまな場面で活用されています。以下はその代表的な例です。
- アップロードされたCSVファイルを解析してDynamoDBに保存
- アップロード画像をリサイズし別のS3フォルダへ保存
- テキストログを整形してAthena用に保存
- ZIPファイルを展開してコンテンツを保存
このように、S3連携はサーバーレス開発において中心的な役割を担うことが多いです。
6. S3トリガーとLambdaの連携時の注意点
トリガー設定やLambda関数の実装時には、いくつかの注意点があります。
- Lambda関数のタイムアウトを適切に設定する
- ファイルサイズが大きい場合は分割処理を検討する
- トリガー設定時のプレフィックス・サフィックスを活用して対象を絞る
例えば、.csvファイルだけを対象にするには、「サフィックス」に「.csv」を指定するとよいでしょう。
7. LambdaとS3を使った処理の自動化でできること
LambdaとS3を組み合わせることで、次のような自動処理が実現できます。
- バッチ処理の自動化
- 画像や動画の変換処理
- 分析用ログの整形と保存
- データの検証と通知
これらの処理をサーバーレスで行えるため、インフラ管理の手間を大幅に減らすことができます。