こんにちは!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について
http://recipe.kc-cloud.jp/archives/7435
Lambda編~初めてのLambda~
http://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では「Function(機能)」という入れ物を使ってコードの管理を行います。
Functionを作成するにあたって、テンプレート替わりになる「blueprint(青写真)」を選ぶことができます。
今回は「s3-get-object」を選択します。
この画面ではイベント発信元の設定を行います。
「Bucket」に対象のs3バケットを指定し、今回は「Event type」に「Object Created」を指定します。
Event Typeにはその他にも下記を指定することが出来ます。
Complete Multipart Upload
Copy
Delete
Delete Maker Created
Object Removed
Post
Put
Reduced Redundancy Lost Object
この画面ではFunctionの設定を行います。
Functionの名前、説明文、コードの形式(Node.js or Java 8)を設定します。
今回はblueprintをそのまま使用しますので、コード部分に手を加える必要はありません。
※なお、設定内容はアップロードされたオブジェクトのメタデータ情報を取得するというものです。
この画面では今回はIAMロールの設定を行います。
Suggested roleで示唆されている「S3 execution role」を設定します。
別ウィンドウが開き、IAMロールの作成を行えます。
「IAM Role」で「Create a new IAM Role」を選択するだけで作成ができます。
また、ポリシーを確認することも出来ます。
確認画面では、すぐに実行させるかどうかを選択します。
問題が無ければ「Create function」をクリックします。
StateがEnabledになっていれば設定完了です。
動作確認
それでは、イベント通知を設定したS3バケットにテキストファイルをアップロードしてみます。
アップロードを実行するとそれをトリガーにLambdaへと通知が為され、CloudWatch logsに出力されます。
該当のLog Streamsをクリックします。
ログが出力されており、ファイルのメタデータとして「CONTENT TYPE: text/plain」となっているのが確認できます。
いかがでしたでしょうか。
今回紹介したイベント通知機能を応用してS3バケットへの不正なファイルアップロードやファイル削除を検知するという使い方もできます。
次回もお楽しみに!!