Amazon Web Services ブログ

[新機能] Amazon EventBridge Pipesによるイベント発行者と消費者間の Point-toPoint 統合の作成

本記事は Principal Developer Advocate の Donnie Prakoso によって執筆されました。

複数のクラウドサービスをビルディングブロックとして利用して、モダンなイベント駆動アプリケーションを組み立てることは、今や普通のことになりつつあります。目的別(purpose-built)に造られたサービスを使って特定のタスクを達成することは、開発者にとって最も効率の良い方法でユースケースを実装することのできる保証となります。しかし、サービス間のコミュニケーションというのは、異なるコミュニケーションのための技術を使っていると難しくなりがちで、サービス間の統合を行うためにそれぞれのサービスのニュアンスを学ばなくてはならないこともあります。通常では統合のためのコード(もしくは グルーコード、glueは糊付けの意味)を作成してサービス間の接続とコミュニケーションの橋渡しをします。グルーコードを書かなければならないとなると、開発速度が低下し、バグのリスクが増加し、そして自分の時間を、より良い顧客体験ではなく、差別化につながらないコードに費やさなくてはならないことになります。

_Amazon EventBridge Pipes のご紹介
今回、Amazon EventBridge Pipes をご紹介することができて非常に嬉しく思います。このAmazon EventBridgeの新しい機能は、イベント供給者と消費者間において、シンプルで一貫性のあるコスト効率の良い、point-to-pointな統合を提供することによって、イベント駆動アプリケーションを簡単に作成することができるようになり、これによって差別化につながらないグルーコードを書く必要性をなくすことができます。

最もシンプルなパイプは、ソースとターゲットで構成されます。オプションとして使えるフィルタリングステップによって、特定のソースイベントだけがEventBridge Pipesに流れていくことを許可したり、別のオプションとして強化ステップでは、AWS LambdaAWS Step FunctionsAmazon EventBridge API DestinationsAmazon API Gateway といったサービスを使って、ターゲットに届く前にイベントに対しての情報付加や変換を多なうことが可能です。Amazon EventBridge Pipes を利用すると、対応しているAWSサービスやセルフマネージドなサービスをイベントの提供者や消費者として、簡単で信頼性が高く一貫性のあるコスト効率の良い方法で、あなたのアプリケーションに統合することができます。

Amazon EventBridge Pipes は、Amazon EventBridge Event Bus でもよく使われている機能をサポートしています。例えば、イベントフィルタリング、14以上のAWSサービスとの統合、そして自動配信リトライといったものです。

Amazon EventBridge Pipes の動作の仕方
Amazon EventBridge Pipesは、サポートされているAWSサービスやセルフマネージドなサービスに対して、コーディングではなく設定によってシームレスな統合の手段を提供します。EventBridge Pipesを用いてサービスを統合し始めるには、以下のようなステップを踏むことが必要です:

  1. イベントを提供するソースを選択する。サポートしているソースはこちら: Amazon DynamoDBAmazon Kinesis Data StreamsAmazon SQSAmazon Managed Streaming for Apache KafkaAmazon MQ(ActiveMQ/RabbitMQ どちらもサポート)
  2. (オプション)イベントフィルターを指定し、設定したフィルター条件に一致するものだけを処理するようにする(フィルターアウトされたイベントについては課金の対象外となる)
  3. (オプション)ビルトインの無料で使える変換機能を用いてイベントに対して変換や情報付加を行うか、 AWS LambdaAWS Step FunctionsAmazon API GatewayEventBridge API Destinations を使って、より高度な変換・情報付加を行う。
  4. 14以上のAWSサービスの中からイベント送信先のターゲットを選択する。Amazon Step Functions、Kinesis Data Streams、AWS Lambda などを選択可能。もしくは EventBridge API destinations を使って3rdパーティの API を指定することもできる。

Amazon EventBridge Pipes利用することにより、信頼性の高い一貫性のあるサービス間の統合を提供するために必要だった、サービス自体の学習や統合のためのコードを書く時間を減らすことができ、また統合の簡潔さを提供することによって、開発速度を向上させることができます。

EventBridge Pipes は、イベント駆動アプリケーションの構築に利用することもできます。例えばイベントフィルタリングを用いると、Pipes は興味のあるイベントのみを処理する設定をすることができ、イベント駆動アプリケーションをよりコスト効率の良い形にすることができます。

Amazon EventBridge Pipesを使ってみる
Amazon EventBridge Pipesをどのように使い始めれば良いのかみてみましょう。今回の記事では、Amazon SQS queueとAWS Step Functionsを、Amazon EventBridge Pipesを使ってどのように統合できるかをお見せしていきます。

下記のスクリーンショットで示しているのは、すでに設定済みの SQS キューと AWS Step Functions ステートマシンです。今回のケースではイベントが キュー に入るたびにステートマシンを実行する必要があります。そのためには SQS キューと Step Functions ステートマシン を EventBridge Pipes で接続しなくてはなりません。

Existing Amazon SQS queue and AWS Step Functions state machine

最初に Amazon EventBridge コンソールを開きます。ナビゲーションセクションでパイプ(Pipes)を選択します。そしてパイプの作成(Create pipe)を選択します。

遷移したページで、パイプの設定を開始したり、AWS Identity and Access Management (IAM) の設定したりすることができます。パイプ設定(Pipe settings)タブへ遷移します。

Navigate to Pipe Settings

許可のセクションでは、このパイプのために新しい IAM ロールを定義したり既存のロールを使用したりできます。開発体験を高めるために、EventBridge Pipes コンソールでは、必要なIAMロールを自動で設定してくれる機能があるため、手動で必要な許可を設定する必要はなく、最小権限の許可をつけた IAM ロールをEventBridge Pipes に設定してもらうことができます。今回はこの環境で作る初めてのパイプなので、この特定のリソースに対して新しいロールを作成(Create a new role for this specific resource)を選択します。

Setting IAM Permission for pipe

そして、パイプを構築(Build pipe)セクションに戻ります。このページでは、EventBridge Pipes によってサポートされている利用可能なイベントソースを確認することができます。

List of available services as the event source

今回のデモでは SQS を選択し、自分の環境にすでに存在する SQS キューを選択します。もしバッチプロセスが必要であれば、追加設定(Additional settings)バッチサイズ(Batch size)バッチウィンドウ(Batch window)の設定を行うことができます。設定できたら次へを選択します。

Select SQS Queue as event source

次のページでは、もっと興味深いものが出てきます。先ほど選択したイベントソースに対してイベントのフィルタリング(Event filtering)を定義することができるのです。このステップはオプションですが、イベントフィルタリング機能を使って、自分のイベント駆動アプリケーションで処理するのに必要なイベントだけを簡単に選別することができるようになります。さらに、パイプが不必要なイベントを処理しなくなるため、イベントフィルタリングを使うことによってコスト効率を高くすることができます。例えば Step Functions をターゲット(Target)に選択したとすると、イベントフィルタリングの機能はフィルターにマッチしたイベントのみをターゲットであるステートマシンに対して実行することになります。

Event filtering in Amazon EventBridge Pipes

AWS events から選択できるサンプルイベント(Sample events)か、カスタムのイベントを定義することができます。例えば、返品された購入品のうち100以上の“value”を持つイベントのみを処理したいとします。JSON フォーマットのサンプルイベントは、下記のような形になります:

{
   "event-type":"RETURN_PURCHASE",
   "value":100
}

その下のイベントパターン(Event pattern)のセクションでは、 Amazon EventBridge イベントパターンでのコンテンツのフィルタリングのドキュメントを参考にパターンを定義することができます。例えば、下記のような定義ができます:

{
   "event-type": ["RETURN_PURCHASE"],
   "value": [{
      "numeric": [">=", 100]
   }]
}

テストパターン(Test pattern)を選択することによってテストをすることができ、入力したイベントパターンが使用する予定のカスタムイベントにマッチするかを検証することができます。イベントパターンが自分の欲しいものだという自信ができたら、次へを選択します。

Defining and testing an event pattern for filtering

次のオプションステップは、強化(Enrichment)の設定で、イベントの情報付加や変換、拡張といったことをターゲットの宛先にイベントを送信する前に行うことができます。この強化ステップは、既存のAWS Lambda 関数や、Destination API を経由した外部の SaaS API を使ってイベントに付加を行う際に有効なものです。追加の要素として、強化入力トランスフォーマー(Enrichment Input Transformer)を使ってイベントを成形することもできます。

最後のステップでは、このパイプによって届けられるイベントを処理するためのターゲット(target)の定義をしていきます。

Defining target destination service

ここでは、EventBridge Pipes でサポートされているさまざまな AWS サービスを選択することができます。

今回はすでに存在しているStep Function ステートマシンである、pipes-statemachine という名前のものを選択します。

追加で、ターゲット入力トランスフォーマー(Target Input Transformer)を使用することもできます。詳細については、 Transforming Amazon EventBridge target input のドキュメントをご覧ください。今回のケースでは、要件としてこのターゲットに行くイベントは、高いプライオリティであると定義しなくてはならないとします。これを行うには、まずサンプルのカスタムイベントをサンプルイベント/イベントペイロード(Sample events/Event Payload)セクションに定義し、トランスフォーマー(Transformer)セクションに priority: HIGH を追加します。そのように設定すると、出力(Output)セクションには、ターゲットとなる宛先のサービスに対して送信される、最終的なイベントが表示されます。問題なければパイプを作成(Create pipe)を選択します。

1分以内に、パイプの作成が成功しました。

Pipe successfully created

このパイプをテストするには、Amazon SQS キューにイベントを put する必要があります。

Sending a message into Amazon SQS Queue

送信したイベントが Step Funnctions で間違いなく処理されたかどうかを確認するには、Step Functions で定義したステートマシンを見に行く必要があります。表示したページで、イベントの処理が成功していることを確認できました。

Amazon CloudWatch Logs からも詳細なログを確認することができます。

知っておきたいこと
イベントソース
– ローンチ時点では、Amazon EventBridge Pipes は次のサービスをイベントソースとしてサポートします:Amazon DynamoDB、Amazon Kinesis、Amazon Managed Streaming for Apache Kafka (Amazon MSK)、セルフマネージドなApache Kafka、Amazon SQS (標準とFIFO)、Amazon MQ (AmazonMQ と RabbitMQ)

イベントターゲット – Amazon EventBridge Pipes は、15のターゲットを選択できます:AWS Lambda、Amazon API Gateway、Amazon SNS、Amazon SQS、そして AWS Step Functions といったサービスです。任意のHTTPSエンドポイントへイベントを送信したい場合、ターゲットとして API destinations を選択して開発することもできます。

イベントの順序 – EventBridge Pipes は、順序性をサポートしているイベントソースからのイベント受信について、宛先のサービスに送信する際にその順序を維持することができます。

プログラマティックなアクセス – EventBridge Pipesのパイプの作成には AWS Command Line Interface (CLI)AWS CloudFormation、 AWS Cloud Development Kit (AWS CDK) を使用することができます。

独立した利用 – EventBridge Pipes は、Amazon EventBridge Event Bus や Amazon EventBridge Scheduler とは独立して使用することができます。この柔軟性は、Amazon EventBridge Event Bus を使わずに AWS サービスやセルフマネージドなサービスをイベントソースとして定義したいケースで役に立ちます。

利用可能リージョン – Amazon EventBridge Pipes は、現在Asia Pacific (Hyderabad) と Europe (Zurich) を除く全てのリージョンでご利用可能です。

Amazon EventBridge Pipes のページで、この機能のより詳細を学んだり料金について調べたりしてみてください。ユーザーガイドについてもご参照いただき、どのようにうまく使えるかをご覧になってみてください。

Happy building!

— Donnie

 本記事の日本語訳は、SA 野村 侑志が担当しました。原文はこちらです。