この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
昨日投稿した以下エントリに引き続き、AWS Lambdaの入門実践エントリです。第2弾は『S3イベント』とAWS Lambdaを連動させたサンプルとなります。
目次
Lambda Functionの作成
まずはベースとなるLambda Functionを作成します。管理コンソールのLambdaメニューに遷移し、[Create a Lambda Function]をクリック。
Function作成にあたり必要な情報を設定。Role Nameはこちらの内容で作成したIAMを指定、Code Templateには[S3 Get Object]を選択します。指定完了したら[Create Lambda Function]を押下してFunctionを作成。
Advanced Settingにて、Memoryを512、Timeout(s)を5に設定します。
サンプルテンプレートのコードは以下の内容となっています。
console.log('Loading event');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
exports.handler = function(event, context) {
console.log('Received event:');
console.log(JSON.stringify(event, null, ' '));
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
s3.getObject({Bucket:bucket, Key:key},
function(err,data) {
if (err) {
console.log('error getting object ' + key + ' from bucket ' + bucket +
'. Make sure they exist and your bucket is in the same region as this function.');
context.done('error','error getting file'+err);
}
else {
console.log('CONTENT TYPE:',data.ContentType);
context.done(null,'');
}
}
);
};
ちなみにMemoryに関しては以下の設定値一覧からの選択が可能となっています。
Functionの作成が完了しました。
検証用S3バケットの作成
今回検証するのはS3バケットに関連するものですので、事前にS3バケットを1つ用意しておきます。決まりとしてはLambda Functionを作成した時と同じリージョンにバケットを作成する必要があるようです。
S3バケットにLambdaへの通知設定を付与
S3バケットが用意出来ましたので、このバケットがイベントをトリガーしたらLambdaへの通知を行う設定を行います。Lambda Functionの詳細を開き、[Configure event Source]をクリック。
Lambda Functionへの通知を行う為の『Invocation Role』を別途作成します。上記で作成したRoleとは異なる種類のロールとなります。
Invocation Roleの設定が完了しました。併せて検知対象となるS3バケットも設定し、[Submit]クリックで内容を反映させます。
動作検証
ではいよいよ、ファイルをアップロードするとどうなるかを検証してみたいと思います。シンプルなテキストファイルを1つ用意し、所定のバケットにアップロードしました。すると...
以下の様にログファイルがCloudWatch Logsに出力されていました!確認用にCloudWatch Logsの内容と生成したLambda Functionのコードを並べてみています。バケットにLambda Functionを紐付ける事で、所定のイベントが発生した時点でLambda Functionで定義したコードが実行される形となりました。
logsにおけるeventの中身を確認してみると、CloudTrailのログも生成されているようです。
まとめ
以上、『Getting Started』のサンプル2つ目、S3のイベント通知に関するチュートリアルを実践してみました。S3イベント通知をこのような形で利用出来るとなると、日々の業務でも色々活用が出来そうですね。一方でより深い理解を得るためには、関連ドキュメントの他の部分についても読み進めて行き、理解を深めていく必要がありそうです。この辺りは適宜進めていければと思います。こちらからは以上です。