AWS Lambda編~S3イベント通知機能を実装する~

Pocket

こんにちは!Narimasaです!

今回はAWS Lambdaを使ってS3のイベント通知機能を実装してみます。

トピックス

・AWS Lambdaが東京リージョン上陸
サーバレスでコードを実行できるAWS Lambdaが東京リージョンでも利用できるようになりました。

AWSLambdaが東京リージョンで利用可能に
http://aws.typepad.com/aws_japan/2015/06/aws-lambda-availbale-in-tokyo.html

※AWS Lambdaについては弊社記事でもご紹介しています。

AWS Lambdaについて
https://recipe.kc-cloud.jp/archives/7435

Lambda編~初めてのLambda~
https://recipe.kc-cloud.jp/archives/7427

・S3のイベント通知機能
S3のバケットに対し新しいオブジェクトが追加されたり、既存オブジェクトが上書きされた時に通知を送ることが出来ます。
送り先にはSQSやSNSの他、本記事で扱うAWS Lambdaを選択することができます。

[AWS発表]S3の新しいイベント通知機能
http://aws.typepad.com/aws_japan/2014/11/s3-event-notification.html

それでは、設定していきます。
※事前にS3のバケットをご用意下さい。

設定手順

せっかくなので、東京リージョンでLambdaを設定していきたいと思います。
「Get Started Now」をクリックします。

lambda-01

Lambdaでは「Function(機能)」という入れ物を使ってコードの管理を行います。
Functionを作成するにあたって、テンプレート替わりになる「blueprint(青写真)」を選ぶことができます。

今回は「s3-get-object」を選択します。

lambda-02

この画面ではイベント発信元の設定を行います。
「Bucket」に対象のs3バケットを指定し、今回は「Event type」に「Object Created」を指定します。

Event Typeにはその他にも下記を指定することが出来ます。
Complete Multipart Upload
Copy
Delete
Delete Maker Created
Object Removed
Post
Put
Reduced Redundancy Lost Object

lambda-03

この画面ではFunctionの設定を行います。
Functionの名前、説明文、コードの形式(Node.js or Java 8)を設定します。

lambda-04

今回はblueprintをそのまま使用しますので、コード部分に手を加える必要はありません。
※なお、設定内容はアップロードされたオブジェクトのメタデータ情報を取得するというものです。

lambda-05

この画面では今回はIAMロールの設定を行います。
Suggested roleで示唆されている「S3 execution role」を設定します。

lambda-06

別ウィンドウが開き、IAMロールの作成を行えます。
「IAM Role」で「Create a new IAM Role」を選択するだけで作成ができます。
また、ポリシーを確認することも出来ます。

lambda-07

確認画面では、すぐに実行させるかどうかを選択します。
問題が無ければ「Create function」をクリックします。

lambda-08

StateがEnabledになっていれば設定完了です。

lambda-09

動作確認

それでは、イベント通知を設定したS3バケットにテキストファイルをアップロードしてみます。
アップロードを実行するとそれをトリガーにLambdaへと通知が為され、CloudWatch logsに出力されます。

lambda-10

該当のLog Streamsをクリックします。

lambda-11

ログが出力されており、ファイルのメタデータとして「CONTENT TYPE: text/plain」となっているのが確認できます。

lambda-12

いかがでしたでしょうか。

今回紹介したイベント通知機能を応用してS3バケットへの不正なファイルアップロードやファイル削除を検知するという使い方もできます。
次回もお楽しみに!!