1. Home
  2. テクノロジー
  3. Amazon EventBridgeがイベントのサフィックスフィルタリングに対応したので使ってみました

Amazon EventBridgeがイベントのサフィックスフィルタリングに対応したので使ってみました

この記事は、ニフティグループ Advent Calendar 2022 9日目の記事です。


こんにちは。ニフティ不動産のバックエンド開発を担当しているnakanowaiです。

ニフティ不動産のバックエンドでは、イベント駆動アーキテクチャのシステムでAmazon EventBridgeを利用しています。

これまでEventBridgeでは処理対象のイベントをフィルタリングする方法として文字列のプレフィックスマッチングを利用することができましたが、2022/11/14に フィルタリング機能が拡張 され、サフィックスマッチングも利用できるようになったので、さっそく活用してみました。

EventBridgeとは

EventBridgeは、アプリケーションやSaaS、AWSサービスで発生したさまざまなイベントを受信して、任意の後続システムへイベント配信することのできるサービスです。

出典:https://aws.amazon.com/jp/eventbridge/

EventBridgeを使うことで、たとえば「EC2インスタンスの終了イベントを契機にLambdaを起動して任意の操作を行う」「RDSのスナップショット作成イベントを契機にStep Functionsを起動して任意の操作を行う」など、システムとシステムをつなぐイベント駆動型アプリケーションを簡単に構築することができます。

サフィックスマッチングを利用してみる

S3の特定パスのオブジェクト生成イベントを契機にStep Functionsを起動してファイルを処理する、というケースでサフィックスマッチングを使ってみましょう。

S3のパス構成は以下の形式とします。

aaa/text.txt
aaa/data.csv
bbb/text.txt
bbb/data.csv
ccc/text.txt
ccc/data.csv

これらのオブジェクト生成イベントのうち、各パス配下の data.csv のみをStep Functionsの処理対象としてフィルタリングしたい場合には、以下のように prefix: の指定で各パスを列挙する必要※がありました。

※もしくは、全てのイベントをイベント処理先(Step Functions)に送信し、イベント処理側でフィルタリング

# CloudFormationでの記述例
  StateMachine:
    Type: AWS::Serverless::StateMachine
      # (中略)
      Events:
        CreateObjectEvent:
          Type: EventBridgeRule
          Properties:
            Pattern:
              source:
                - aws.s3
              detail-type:
                - Object Created
              detail:
                bucket:
                  name:
                    - 'bucket-name'
                object:
                  key:
                    - prefix: 'aaa/data'
                    - prefix: 'bbb/data'
                    - prefix: 'ccc/data'

今回のアップデートで利用できるようになったサフィックスマッチングを使うと、suffix: の指定で以下のように記述することができます。

# CloudFormationでの記述例
  StateMachine:
    Type: AWS::Serverless::StateMachine
      # (中略)
      Events:
        CreateObjectEvent:
          Type: EventBridgeRule
          Properties:
            Pattern:
              source:
                - aws.s3
              detail-type:
                - Object Created
              detail:
                bucket:
                  name:
                    - 'bucket-name'
                object:
                  key:
                    - suffix: '/data.csv'

コードとしては小さな変更ですが、サフィックスマッチングを使うことで記述が簡潔になり、処理対象のパスが増えた場合にも(例: ddd/data.csv )イベントフィルタリングの記述をメンテナンスする必要がなくなりました。

さいごに

今回のフィルタリング機能拡張では、サフィックスマッチングの他にもさまざまな機能が追加されているようです。

大文字と小文字を区別しない機能 (equals-ignore-case)、複数の別々のフィールドにまたがる条件のいずれかが真の場合に 1 つの EventBridge ルールが一致する機能 (OR マッチング) などのフィルタリング機能が追加されました。また、数値でサポートされる範囲が、-1e9~1e9 から -5e9~5e9 へ強化されました。

出典:https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-eventbridge-enhanced-filtering-capabilities/

さらに 2022/11/28~2022/12/2 に開催された AWS re:Invent 2022 では、イベントデータの変換や拡張により適した Amazon EventBridge Pipes も発表されました。

イベント駆動アーキテクチャ自体が、サーバレスと組み合わせることでコスト効率の良い構成ですが、今回ご紹介したようなフィルタリング機能や、上記の新機能を活用することでより効率良く、メンテナンスしやすい構成にすることができそうです。

今後もAWSのアップデートを確認し、より効果的にクラウドを活用していきたいと思います。


明日は、@nahiro_tus さんの Slackでインタラクティブなリマインドアプリを作ってみた です。
お楽しみに!

この記事をシェア

掲載内容は、記事執筆時点の情報をもとにしています。