EventBridge を使用して S3 に csv ファイルがアップロードされたら Lambda 関数を動かしてみる

2024.02.02

こんにちは!よしななです。
前回の記事で、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 サービスと接続することができることがわかりました。イベントルールをアレンジすることによって、拡張性の高いサービスが作れそうです。
ここまで見ていただきありがとうございました!