はじめに
今回はAmazon S3にオブジェクトを保存した際にAWS Lambdaが起動する仕組みを作成します。
動きとしてはS3に手動でオブジェクト(sample.jpg)を保存した際に、Lambdaが起動して”オブジェクトが保存されました”というログを表示する処理を行います。
構成図
実装
1.Lambdaを設定する
1.1 AWSマネジメントコンソールからLambdaを検索する
1.検索ウィンドウよりLambdaと打ち込む
2.関数の作成を押下する
1.2 Lambda関数の作成をする
1.関数を新しく作成するので『一から作成』を選択
2.関数名は今回作成する関数の名前になるので各自で命名する
3.ランタイムで関数を実行するための言語を選択する(今回はPython3.9を選択しています)
4.以降はデフォルトのまま(実行ロールについても『基本的なLambdaアクセス権限で新しいロールを作成』のままで作成する)
1.3 作成されたLambda関数にコードを記述する
1.作成されたLambda関数のコードソースにはステータスコード200がリターンされる仕様が記述されている
2.コード5行目に”オブジェクトが保存されました”を表示されるように記述する
3.『Deploy』を押下して反映をさせる(押さないと反映されないので注意)
1.4 テストでLambda関数を確認する
1.『テスト』タグを選択して画面遷移する
2.テンプレート 一般『Hello World』を選択して任意の名前を打ちこむ
3.『テスト』ボタンを押下する
4.実行結果が表示される(『ログ出力』の画面において”オブジェクトが保存されました”が表示されていることが確認できる)
ここまででLambdaの設定は終了です
2.S3を作成する
2.1 S3でバケットを作成する
2.バケット名に一意の名前をつける
3.AWSリージョンはLambdaのあるリージョンと同じであるか確認をする
4.画面下の『バケットを作成』を押下する
2.2 バケットにLambdaと連携するように設定をする
1.作成されたバケットのプロパティを選択する
2.イベント通知の『イベント通知を作成』を押下する
3.イベント通知の名前を任意でつける
※プレフィックスは接頭語・サフィックスは接尾語として、保存されるファイル名に対しての指示をすることができる
(例)『サフィックス』欄に『.jpg』とした場合、『〜.jpg』のみに対応したイベント通知を設定することができる
4.イベントタイプを選択する(粒度を細かくできますが、今回は『すべてのオブジェクト作成イベント』としてチェックをしています)
5.Lambda関数の項目より__1.Lambdaを設定する__で作成した『Lambda関数名』を選択する
6.変更の保存を押下する
ここまででS3の設定は終了です
3.再度Lambdaの画面に移動して設定を確認する
3.1 画面の確認を確認する
1.トリガーとして先ほど作成したS3が確認することができる
2.イベントタイプが__2.2-4.イベントタイプを選択する__で選択したタイプになっていることが確認できる
3.通知名が__2.2-3.イベント通知の名前を任意でつける__でつけた名前が表示されていることが確認できる
3.2 『設定』の『アクセス権限』を確認する
1.リソースの概要からLambdaがアクセス許可をした『Amazon CloudWatch Logs』が表示されていることが確認できる
→logs:CreateLogGroup(ロググループ作成の許可)
→logs:CreateLogStream(ログストリーム作成の許可)
→logs:PutLogEvents(ログイベント更新)
2.リソースベースのポリシー
S3のバケットがLambdaを使用することが許可されていることを確認できる
ここまででLambdaの設定確認は終了です
4.S3にオブジェクトを保存した際にLambdaが挙動するか確認する
4.1 S3にオブジェクトをアップロードする
4.2 CloudWatchからLambdaの挙動を確認する
1.lambdaの『モニタリング』タグから『CloudWatchのログを表示』を押下する
2.CloudWatchのロググループ画面に遷移して、ログストリームを選択する
3.オブジェクトがS3に保存された際に”オブジェクトが保存されました”と表示されていることを確認することができる
ここまでで挙動の確認は終了です
最後に
来週もLambdaを利用した構築をハンズオンの学習をしていきます
参照
サイト
AWS CloudTechのLambda講座
書籍
Amazon Web Services パターン別構築・運用ガイド 改訂第2版