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

## 前提

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

https://qiita.com/miriwo/items/7470659f070504e0fafe

## 今回つくるもの

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

https://qiita.com/miriwo/items/7470659f070504e0fafe

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

![Cursor_と_private__Online_Whiteboard_for_Visual_Collaboration-1024x402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d4b777c0-b8e4-fdb2-420f-13e6a92018ae.png)

## 準備

### S3の準備

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

![Cursor_と_S3_bucket-1-706x1024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a6740ec4-42ac-193b-e502-8e82f972018d.png)

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

![Cursor_と_lambda-trigger-test-for-miriwo_-_S3_bucket-1024x370.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e85c2f91-6211-563f-aa85-187b3bac3156.png)

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

- test_1.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

    ```test_2.csv
    id,first_name,last_name,password,age,
    1,Tarou,Yamada,abcd1234,20,
    ```

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

![Cursor_と_lambda-trigger-test-for-miriwo_-_S3_bucket-2-1024x284.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/987e2e2c-f0da-63f5-d7e9-411052e1b552.png)

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

### Lambdaの準備

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

![Cursor_と_test_function_-_Lambda-6-1024x392.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/7e7cc618-8d2b-5a70-5921-4bd05a24a2e6.png)

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

![Cursor_と_トリガーの追加_-_Lambda-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/83ecc835-353e-6659-2d8b-7623c01cbdee.png)

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

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

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

![Cursor_と_トリガーの追加_-_Lambda-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/5b1a9d6b-9cdd-36c8-38ab-3b42a7d9d50d.png)

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

![Cursor_と_test_function_-_Lambda-7-1024x457.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/6751e3cc-8826-2b7b-a4af-d7e36367ef88.png)

## 実行

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

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

まずはCSVの更新でLambdaが実行されるかを確認します。
ローカルのtest_1.csvを開き下記の様に内容を更新し保存します。

```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のページに移動します。「モニタリング」をクリックしましょう。

![Cursor_と_test_function_-_Lambda-8-1024x389.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/88e37f67-7871-72df-e4a7-d4c9dfe9f038.png)

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

![Cursor_と_test_function_-_Lambda-9-1024x167.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/f530cee0-bc39-ed8b-18ff-adbf355c9003.png)

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

![Cursor_と_test_function_-_Lambda-10-1024x516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/35b0d7e4-b64b-8c5d-fe0b-88394c28fe2b.png)

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

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

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

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

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

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

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

![Cursor_と_test_function_-_Lambda-11-1024x301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/2e11e736-f5f5-65a8-e3ee-655fe7ad7c1a.png)

## おわりに

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