EventBridge を使用して S3 に csv ファイルがアップロードされたら Lambda 関数を動かしてみる
こんにちは!よしななです。
前回の記事で、S3 イベント通知をを使用して S3 に csv ファイルがアップロードされたら Lambda 関数を動かしてみました。
前回記事URL:https://dev.classmethod.jp/articles/lambda-s3/
今回は、S3 イベント通知の代わりに EventBridge を使用して同じことができないかを試してみます。
目次
- 構成図
- やってみた
- S3 側の設定
- Lambda の設定
- EventBridge 側の設定
- テスト
- まとめ
構成図
今回やりたいことの構成図としては以下となります。
今回やりたいこととしては、
- EventBridge で設定した .csv ファイルを S3 にアップロード
- EventBridge が .csv アップロードイベントを検知
- EventBridge が Lambda を呼び出し
- Lambda が動き、CloudWatch Logs にログが残る
となります。
やってみた
S3 側の設定
まずは、S3 側で EventBridge を有効化します。
S3 バケット > プロパティ > Amazon EventBridge > 編集 をクリックし、遷移した画面から EventBridge の有効化をします。
Amazon EventBridge に通知を送信する でオンを選択します。
変更の保存 をクリックで S3 側の設定は完了となります。
Lambda の設定
今回は EventBridge と Lambda が接続できていればよいので、空の Lambda 関数を作成します。
関数名、ランタイムを指定し関数の作成をクリックしてください。こちらで空の Lambda 関数が作成できます。
EventBridge の設定
次に、EventBridge 側の設定を行います。
Amazon EventBridge > メイン画面 > ルールの作成 をクリックし、ルールの作成を行います。
ルールの詳細を定義
ルールの詳細を定義画面に遷移したら、以下の設定を行います。
- 名前 : ルール名
- ルール名を入力します。
- ルールタイプ : イベントパターンを持つルール
- 今回、S3 上でオブジェクトが作成されたら(イベントが発生したら)Lambda を起動するので、ルールタイプはイベントパターンを持つルールに設定します。
その他はデフォルトのままにします。設定の完了が終わったら、次へをクリックします。
イベントパターンの構築
次に、イベントパターンの構築を行います。
イベントパターンを構築画面に遷移したら、以下の設定を行っていきます。
- イベントソース : AWS イベントまたは EventBridge パートナーイベント
- イベントの送信元サービスが Amazon S3 のため、こちらを選択します。
- 作成のメソッド : パターンフォームを使用する を選択します。
- イベントパターン
- パターンを編集をクリックすると、上記画像の赤枠部分でどのイベントが発生したら EventBridge を動作させるかルールを JSON 形式で書くことが可能です。
以下の JSON をコピー&ペーストしてください。
{ "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["{作成したバケット名}"] }, "object": { "key": [{ "prefix": "{トリガーにしたいプレフィックス名}" }] } } }
イベントパターンの詳細は以下となります。
- source : aws.s3
- イベントの送信元を記載、今回は aws.s3 となります。
- detail-type : Object Created
- 何のイベントが発生したら EventBridge を動作させるかを記載します。今回は S3 バケットにファイルがアップロードされたら EventBridge を動作させるので、Object Created となります。
- name : バケット名
- バケット名を入れます。
- prefix : プレフィックス名
- トリガーにするプレフィックス名を入れます。
イベントパターンの入力が完了したら、次へをクリックします。
ターゲットの選択
次に、EventBridge の送信先を選択します。
ターゲットを選択画面に遷移したら、以下の設定を行っていきます。
- ターゲットタイプ : AWS のサービス
- 今回の EventBridge の送信先が AWS Lambda になるので、AWS のサービスを選択します。
- ターゲットを選択 : Lambda 関数
- 今回の EventBridge の送信先が AWS Lambda になるので、Lambda 関数を選択します。
- 関数 : 該当の Lambda 関数
- EventBridge の送信先関数を選択します。
上記の入力が完了したら、次へをクリックします。
タグ設定(任意)
タグを設定したい場合、タグを設定します。
タグを追加しない場合は次へをクリックします。
ルールの確認
最後に、設定したルール内容が表示されるので、問題ないかチェックします。
設定に齟齬がなければ、作成をクリックします。
こちらで、EventBridge の設定は完了となります。
テスト
AWS EventBridge / Amazon S3 / Lambda の設定がそれぞれ完了したので、動作するかテストを行います。
まず、EventBridge で指定した S3 バケットを開き、EventBridge で指定したファイルを入れてみます。
こちらで、EventBridge が動作できていれば Lambda 関数のログが CloudWatch Logs に出力できているはずです。
CloudWatch Logs を確認してみます。
CloudWatch Logs にログが残っていることが確認できました。EventBridge が作動し、Lambda 関数が呼び出せました。
こちらで、EventBridge を使用して S3 に csv ファイルがアップロードされたら Lambda 関数を動かしてみる は完了となります。
まとめ
今回検証を試してみて、EventBridge も Lambda 関数のほかに、SQS など様々な AWS サービスと接続することができることがわかりました。イベントルールをアレンジすることによって、拡張性の高いサービスが作れそうです。
ここまで見ていただきありがとうございました!