AWS lambda をpythonコードで使ってみる〜S3からのイベント設定編
概要
残りの設定を追加し、Amazon S3 がオブジェクト作成イベントを AWS Lambda に発行し、Lambda 関数を呼び出せるようにします。
参考サイト
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example-configure-event-source.html
やってみたこと
ステップ 3: イベントソースを追加する(イベントを発行するように Amazon S3 を設定する)
- Lambda 関数のアクセスポリシーに、この関数の呼び出しを Amazon S3 に許可するアクセス権限を追加します。
- 通知設定をソースバケットに追加します。通知設定で、以下の項目を指定します。
ステップ 3.1: Lambda 関数のアクセス権限ポリシーにアクセス権限を追加する
そのまま引用
- 以下の Lambda CLI add-permission コマンドを実行して、Amazon S3 サービスプリンシパル(s3.amazonaws.com)に lambda:InvokeFunction アクションを実行するためのアクセス権限を付与します。次の条件を満たす場合にのみ関数を呼び出すアクセス権限が Amazon S3 に付与されることに注意してください。
$ aws lambda add-permission \ --function-name CreateThumbnail \ --region us-west-2 \ --statement-id some-unique-id \ --action "lambda:InvokeFunction" \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::sourcebucket \ --source-account bucket-owner-account-id \ --profile adminuser
* bucket-owrner-accunt-idは バケット作ったアカウントのid。12桁の数字。コンソール画面のアカウント設定とかから確認できる。
$ aws lambda get-policy \ --function-name function-name \ --profile adminuser
ステップ 3.2: バケットの通知を設定する
オブジェクト作成イベントを Lambda に発行するよう Amazon S3 にリクエストするため、ソースバケットで通知設定を追加します。設定で、次のように指定します。
街灯のS3バケットのプロパティ画面を開く->イベントの項目を開く
イベントタイプ - このチュートリアルでは、ObjectCreated (All) Amazon S3 イベントタイプを選択します。
- Lambda 関数 - これは Amazon S3 が呼び出す Lambda 関数です。
ステップ 3.3: セットアップのテスト
S3コンソールから画像をアップしてみる。。。。無事resizeにアップされているのを確認! 結構単純な機能だけど、設定に時間かかったなぁ(^ ^;)
やってみた感想
- 初心者にはセットアップが難しい。チュートリアルみながらでもかなり時間がかかった。特にroleとかの設定が、やや煩雑に感じたなぁ。
- 静的サイト+lambdaというのは簡単に動的サイトぽく見せられるということでありかもしれない。いわゆるこれがサーバーレスアーキテクチャーというやつなのかなぁ。
- 逆に、動的サイトで作成しているなら、初めからlambdaありきで作成しなくてもいいかも。件数が増えて処理が重くなってくるとか、その時に、選択肢として考えるのはありなのかなぁ。
- あと、本番のサイトを修正して、lambdaのコードの修正とかをしなければいけない場合にちょっとめんどくさそう。多分実際はlambdaのコードを修正というか、新しいlambdaを作る感じになると思うけど、どうなんだろうな。