AWS S3のバケットのCSVが更新・登録されたことをきっかけにLambda関数を実行してみよう!

この記事はアンテクアドベントカレンダー2022の21日目の記事です。

https://adventar.org/calendars/7821

皆さんこんにちは、サーバーサイドエンジニアの大川です。今回はS3バケットのCSVが更新または新規登録されたことをきっかけにLambda関数を動かす様に設定してみようと思います!

前提

本記事の内容は以前に記載した下記記事実施直後の状態から実施してゆきます。

https://anteku.jp/blog/develop/aws-lambda%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81%ef%bc%88%e6%96%87%e5%ad%97%e5%88%97%e8%bf%94%e5%8d%b4%e7%b7%a8%ef%bc%89/

今回つくるもの

S3の指定したバケットの指定したフォルダにCSVファイルがアップロード、もしくは既存のCSVが更新された時に下記で作成した「Hello for lambda!」を返すLambda関数を実行するようにしてみます!

https://anteku.jp/blog/develop/aws-lambda%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81%ef%bc%88%e6%96%87%e5%ad%97%e5%88%97%e8%bf%94%e5%8d%b4%e7%b7%a8%ef%bc%89/

S3のCSVを登録・更新する作業は手作業で実施しようと思います。

準備

S3の準備

CSVの更新やアップロードを感知するためのS3バケットを作成します。
筆者はlambda-trigger-test-for-miriwoというバケットを全てのパブリックアクセスを許可し作成しておきました。(その他の設定値はデフォルトです。)

作成したlambda-trigger-test-for-miriwoバケットのルートに「contents」フォルダーを作成します。

下記の2種類の内容のCSVファイルを用意します。

  • test_1.csv
id,first_name,last_name,password,age,
1,Tarou,Yamada,abcd1234,20,
2,Hanako,Yamada,abcd1234,22,
3,Tarou,Satou,abcd1234,24,
4,Hanako,Satou,abcd1234,16,
  • test_2.csv
id,first_name,last_name,password,age,
1,Tarou,Yamada,abcd1234,20,

先に作成したtest_1.csvをS3のcontentsフォルダにアップロードします。

test_2.csvは「実行」の手順の中でアップロードしますのでまだローカルで保持しておいてください。

Lambdaの準備

関数の概要の「トリガーを追加」をクリックします。

「ソースを選択」にて「S3」を選択します。

表示された内容を下記の様に設定してゆきます。

  • Bucket:先に作成したバケット名を選択
  • Event type:PUTを選択(今回は登録・更新どちらでも感知してほしいため)
  • Prefix:contents/(監視対象のフォルダ名)
  • Suffix:.csv(監視対象ファイル形式)

設定を確認し「追加」をクリックします。

下記のようにトリガーがAPI GatewayとS3両方表示されれば準備は完了です。(ちなみに今の状態だとURLでアクセスしても、S3に登録・更新があった時でも両方当該のLambda関数が実行される状態です。)

実行

今回はCSV系のトリガーでも2種類の方法でLambdaが実行されることを確認します。

CSV更新でLambda関数が実行されるか

まずはCSVの更新でLambdaが実行されるかを確認します。

ローカルのtest_1.csvを開き下記の様に内容を更新し保存します。

id,first_name,last_name,password,
1,Tarou,Yamada,abcd1234,
2,Hanako,Yamada,abcd1234,
3,Tarou,Satou,abcd1234,
4,Hanako,Satou,abcd1234,

ローカルで内容を更新したtest_1.csvをlambda-trigger-test-for-miriwoバケットのcontentsフォルダにアップロードします。既に同じ名前のファイルが存在しているので更新扱いになります。

アップロードが成功したことを確認します。

その後、Lambdaのページに移動します。「モニタリング」をクリックしましょう。

CloudWatch メトリックスのフィルターで「1時間」を選択し、少し時間を置いて更新マークをクリックします。

もしCSVの更新トリガーで当該の関数が実行されていたとすれば、Invocationsのグラフ部分に実行ポイントが出るはずです、、!(若干のタイムラグがあります。S3にアップロード後すぐにグラフに変化があるわけではありません。ただ、最大でも5分ほどのラグだと思うので、それ以上まっても音沙汰ないばあいトリガー部分の設定、特にバケットやフォルダ名などを確認しましょう!CSVをアップロードしたバケットも正しいか確認しましょう。)

ちなみに実行時間はUTC(日本時間の-9時間)で表示されるのでご注意ください。

これで更新によるLambda関数の実行が確認できました!

CSV登録でLambda関数が実行されるか

次にCSV登録でLambda関数が実行されかを確認します。

test_2.csvをlambda-trigger-test-for-miriwoバケットのcontentsフォルダにアップロードします。

その後アップロードが成功したことを確認し、Lambdaページの「モニタリング」からInvocationsのグラフを見ながら更新ボタンをクリックしてみましょう!

2回連続で実行しているので棒線で作図されていますがこれで、登録によるLambda関数の実行が確認できました!

おわりに

S3のCSVの登録・更新を感知してLambda関数を動かす事ができました!設定は比較的簡単でした!
ただトリガー設定が一つでも間違えているとLambdaが動いてくれないので注意が必要です。

TAGS使用タグ一覧