LambdaとS3の連携


 はじめに

 今回はLambdaとS3の連携を構築してみたので、それをメモがてらこちらにアウトプットしようと思います。
 AWSの資格の勉強ばかりで飽きてきた部分もあったので息抜きがてらやりました。
 
 よろしくお願いします(。・ω・)ノ゙

 構成内容

今回構成するのはこんな感じです。
S3に画像がアップロードされたらLambdaへイベント通知がされテストコードが実行されるよう構築していきます。

 Lambdaの構築

コンソール画面からLambdaの構築画面に遷移し作成していきます。

  ・関数名は適当で大丈夫です
  ・今回ランタイムのほうはPython3.7の方を使用していきます
  ・実行ロールにある「基本的なLambdaアクセス権限で新しいロールを作成」にチェックが入ってることを確認してから作成していきます

 今のままだとステータスコード200が返ってくるようになっているので、printでイベントの内容を表示させるように書き換える。

import json

def lambda_handler(event, context):
    # TODO implement
    print(event) ←ここに記入
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

 S3の作成

 ◆バケットの作成

  ・バケット名は一意である必要があります
  ・リージョンはLambdaを構築した同じリージョンである必要がある
  ・今回はパブリックにアクセスさせる要件はないのでブロックのままでおk
  ・あとの項目はデフォルトで作成

 ◆S3のイベント通知の設定
  S3のプロパティの中にあるイベント通知を設定していきます
 
   ・イベント名は任意
   ・プレフィックスとサフィックスがあるが今回はサフィックスのオプションで通知させます
   ・「.jpg」で終わる画像がアップロードされた場合のみイベント通知が発動します
   ・イベントタイプはファイルがアップロードされたらLambdaをキックしたいのですべてのオブジェクト作成イベントにチェックをいれます


 
  ◆送信先
  S3がLambdaにキックできるような設定しなければなりません。先ほど構築したLambdaを選択します
  これでひとまずS3に画像をアップロードするとLambdaが起動するようになりました。
 

 アクセス権限・トリガー

 Lambda関数の設定を覗いてみるとトリガーのところに上記で作成したS3があると思います。
 アクセス権限の方をみると、CloudWacth logs以外にもリソースベースのポリシーの欄に新しくS3にLambdaを呼び出すアクションが許可されてると思います。
 このリソースベースのポリシーには「このS3バケットからだったら操作してもいいよ!」ということが書かれています。

 おわりに

 S3から画像をアップロードすると、イベント通知がLambdaにキックされログを見てみるとLambdaに渡されたイベントのほうが確認できるようになりました。
 実際に手を動かしてやってみたほうがやっぱり面白いですね!!!!また機会があれば他のこともチャレンジしてみようと思います!

 (。・ω・)ノ゙バイバイ