自由気ままに書いちゃおう

好きなことをつらつらと・・・

AWS 初めてのLambda(本当の初心者向け3)

前回、前々回からの続きです。

www.guri2o1667.work

www.guri2o1667.work

 

今回は、テストデータではなく
実際にトリガーを利用してLambdaを実行してみたいと思います。
トリガーはS3を選びました。

■はじめに

テストデータと違い、
Lambdaのコンソールから動作状況を確認することができないため、
Lambdaの起動状況を確認する方法(CloudwatchLogsを利用)を記載します。
その後、実際にS3を使いLambdaを起動させてみます。

■Lambdaの起動状況を確認する

Lambdaが起動すると、
そのログは自動的にAWS CloudwatchLogsに格納されるようになっています。
確認方法は以下の通りです。

1.Cloudwatchをクリックします。

f:id:guri2o1667:20200704122212p:plain


2.「ログ」>「ロググループ」をクリックします。

f:id:guri2o1667:20200704122319p:plain

3.Lambda関数(ここでは、test1)が存在することを確認します。

f:id:guri2o1667:20200704122406p:plain


ここで確認した通り、Lambda関数を特に意識せずに作成した場合には、
/aws/lambda/関数名 という形で自動的にロググループが作成されています。

4.対象のロググループをクリックします。
ここでは、/aws/lambda/test1 をクリックします。

5.画面下に「ログストリーム」タブがあり、そこにLambdaの起動履歴が表示されています。

f:id:guri2o1667:20200704122650p:plain


6.試しにログストリームの内容を開いてみます。
ここでは、上記画像のものを開きます。

f:id:guri2o1667:20200704122818p:plain

こんな感じに、元々テストデータを利用していた時のログ出力内容が、
CloudwatchLogs(ロググループ)に出力されていることがわかります。


以降から本題です。
今回はS3バケットにテキストファイルが格納された際に、Lambdaが起動するようにしたいと思います。

■作業イメージ

f:id:guri2o1667:20200704132956p:plain

■流れ

1.S3バケットの作成
2.Lambda関数の修正
3.トリガーの設定
4.S3バケットにテキストファイルを格納&Lambdaの起動状態を確認

■1.S3バケットの作成(testlambdapractice>folder1)

1.S3を開きます。

f:id:guri2o1667:20200704123140p:plain


2.「バケットを作成する」をクリックします。

f:id:guri2o1667:20200704123209p:plain

3.「①名前とリージョン」で以下の通り入力し、「次へ」をクリックします。
記載していないところはデフォルトのままです。
バケット名: ※お好き名前で

f:id:guri2o1667:20200704123423p:plain


4.「②オプションの設定」は何も入力せず、「次へ」をクリックします。

f:id:guri2o1667:20200704123532p:plain


5.「③アクセス許可の設定」ではデフォルトのまま、「次へ」をクリックします。
※デフォルトで、「パブリックアクセスをすべてブロック」のチェックが入っているかと思いますが、チェックが入っていない場合には、チェックしてください。

f:id:guri2o1667:20200704123725p:plain

6.「④確認」にて設定内容に間違いないことを確認し、「バケットを作成」をクリックします。

f:id:guri2o1667:20200704123817p:plain


7.作成したバケットが表示されていることを確認し、クリックします。
※ここでは、lambdatestpractice です。

f:id:guri2o1667:20200704130959p:plain

8.「フォルダの作成」をクリックします。

f:id:guri2o1667:20200704131038p:plain


9.任意の名前を入力し、「保存」をクリックします。
ここでは、「folder1」としました。

f:id:guri2o1667:20200704131202p:plain

 

■2.Lambda関数の修正

既にtest1というLambda関数を作成している為、これを少し修正したいと思います。
修正後のコードは以下の通りです。

import json
from datetime import datetime

def lambda_handler(event, context):
    print("■■■■■■■ テキストが格納されたため、Lambdaが起動しました。起動時刻> " + datetime.now().strftime("%Y/%m/%d %H:%M:%S") )



■3.トリガーの設定

今回は、トリガーにS3を選んだため、
事前にtestlambdapracticeバケットにfolder1フォルダーを作成しました。

ここでは、当該フォルダーに拡張子がtxtのものが格納された際に、
Lambdaが起動するように設定します。

1.「トリガーを追加」をクリックします。

f:id:guri2o1667:20200704135446p:plain

2.プルダウンメニューから「S3」を選択します。

f:id:guri2o1667:20200704135530p:plain

3.以下の通り入力し、画面右下の「追加」をクリックします。
バケット: testlambdapractice
イベントタイプ: すべてのオブジェクト作成イベント
プレフィックス: floder1/
サフィックス:  .txt
トリガーの有効化: チェックされていること
再帰呼び出し: チェックを入れること

f:id:guri2o1667:20200704140831p:plain

f:id:guri2o1667:20200704135821p:plain


4.以下が表示されていることを確認します。また、デザイナー部分にS3が追加されていることも併せて確認します。

f:id:guri2o1667:20200704135913p:plain

f:id:guri2o1667:20200704135948p:plain


これでやっと準備が完了です。次は実際にS3にテキストファイル(拡張子がtxt)のものを格納してみます。

■4.S3バケットにテキストファイルを格納&Lambdaの起動状態を確認

1.適当に拡張子がtxtのものをデスクトップ上に一つ作成します。
ここでは、text1.txt を作成したことにします。
※別にデスクトップ以外でも構いません。便宜上、デスクトップとしました。

2.現在の時刻を確認し、text1.txt を S3バケットに格納します。
ここでは、testlambdapractice/folder1/の中にtext1.txtを格納します。
S3へのアップロード手順の詳細は割愛します。
大事なのは、トリガーとして設定したバケット(フォルダー)に拡張子txtのものが格納されることです。

f:id:guri2o1667:20200704140520p:plain

3.CloudWatchのロググループを選択し、ログストリームを確認します。
※詳細な手順は、本記事の冒頭で記載しております。

f:id:guri2o1667:20200704145523p:plain

上記の通り、テキストファイルがS3に格納されたことを契機に、
Lambdaで指定した関数が実行されていることが確認できます。

下図の内容が実施できたことになります。

f:id:guri2o1667:20200704132956p:plain

以上です。

 

www.guri2o1667.work