AWS Lambdaを始めてみる(2).Amazon S3イベントを扱う

2014.11.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

昨日投稿した以下エントリに引き続き、AWS Lambdaの入門実践エントリです。第2弾は『S3イベント』とAWS Lambdaを連動させたサンプルとなります。

目次

Lambda Functionの作成

まずはベースとなるLambda Functionを作成します。管理コンソールのLambdaメニューに遷移し、[Create a Lambda Function]をクリック。

getting-started-lambda2nd-01

getting-started-lambda2nd-02

Function作成にあたり必要な情報を設定。Role Nameはこちらの内容で作成したIAMを指定、Code Templateには[S3 Get Object]を選択します。指定完了したら[Create Lambda Function]を押下してFunctionを作成。

Advanced Settingにて、Memoryを512、Timeout(s)を5に設定します。

getting-started-lambda2nd-03

サンプルテンプレートのコードは以下の内容となっています。

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に関しては以下の設定値一覧からの選択が可能となっています。

getting-started-lambda2nd-04

Functionの作成が完了しました。

getting-started-lambda2nd-05

検証用S3バケットの作成

今回検証するのはS3バケットに関連するものですので、事前にS3バケットを1つ用意しておきます。決まりとしてはLambda Functionを作成した時と同じリージョンにバケットを作成する必要があるようです。

getting-started-lambda2nd-11

S3バケットにLambdaへの通知設定を付与

S3バケットが用意出来ましたので、このバケットがイベントをトリガーしたらLambdaへの通知を行う設定を行います。Lambda Functionの詳細を開き、[Configure event Source]をクリック。

getting-started-lambda2nd-21

Lambda Functionへの通知を行う為の『Invocation Role』を別途作成します。上記で作成したRoleとは異なる種類のロールとなります。

getting-started-lambda2nd-22

Invocation Roleの設定が完了しました。併せて検知対象となるS3バケットも設定し、[Submit]クリックで内容を反映させます。

getting-started-lambda2nd-23

動作検証

ではいよいよ、ファイルをアップロードするとどうなるかを検証してみたいと思います。シンプルなテキストファイルを1つ用意し、所定のバケットにアップロードしました。すると...

getting-started-lambda2nd-15

以下の様にログファイルがCloudWatch Logsに出力されていました!確認用にCloudWatch Logsの内容と生成したLambda Functionのコードを並べてみています。バケットにLambda Functionを紐付ける事で、所定のイベントが発生した時点でLambda Functionで定義したコードが実行される形となりました。

getting-started-lambda2nd-13

getting-started-lambda2nd-12

logsにおけるeventの中身を確認してみると、CloudTrailのログも生成されているようです。

getting-started-lambda2nd-14

まとめ

以上、『Getting Started』のサンプル2つ目、S3のイベント通知に関するチュートリアルを実践してみました。S3イベント通知をこのような形で利用出来るとなると、日々の業務でも色々活用が出来そうですね。一方でより深い理解を得るためには、関連ドキュメントの他の部分についても読み進めて行き、理解を深めていく必要がありそうです。この辺りは適宜進めていければと思います。こちらからは以上です。

参考情報: