AWS Lambdaを始めてみる(2).Amazon S3イベントを扱う
昨日投稿した以下エントリに引き続き、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イベント通知をこのような形で利用出来るとなると、日々の業務でも色々活用が出来そうですね。一方でより深い理解を得るためには、関連ドキュメントの他の部分についても読み進めて行き、理解を深めていく必要がありそうです。この辺りは適宜進めていければと思います。こちらからは以上です。