Server

EventBridge Pipesを使ってSQSからECSタスクを起動する

投稿日:

はじめに

AWSを使っていて、なにか非同期な処理を実行したい場合、SQSからLambdaをキックする方法が最も一般的な方法の一つではないかと思います。

しかし、何らかの事情(15分以内に終わらないなど)により、LambdaではなくECSタスクとして実行したいケースも存在するのではないでしょうか。

そのようなケースでは、EventBridge Pipesを使うことで容易に実現することができますので、EventBridge PipesとSQSとECSを組み合わせた場合の基本的な構成について紹介します。

EventBridge Pipesとは

EventBridge Pipesは、Producer/Consumer型のメッセージング処理を提供するAWSのサービスで、SQSやDynamoDBなどの様々なサービスとLambda、ECS、API Gatewayなどの様々なサービスを結びつけることができます。

EventBridge Pipesを構成する要素としては、以下のようなものがあります。

  • ソース
  • フィルタリング
  • エンリッチメント(プリプロセス)
  • ターゲット

EventBridge Pipesは、様々なソースからイベントデータを受け取り、必要に応じてそのデータをフィルタリングおよびエンリッチメントして、ターゲットに送信します。

フィルタリングとエンリッチメントについてはオプションとなっており、最低限、ソースとターゲットを指定する必要があります。

ソース

ソースは一連の処理の起点となるサービスのことです。

ソースとして指定できるサービスは以下のとおりです。

  1. Kinesis
  2. SQS
  3. DynamoDB
  4. MQ
  5. Apache Kafka
  6. MSK

フィルタリング

指定したフィルター条件を満たさないイベントデータを除外することができます。

フィルタリングで指定できるイベントパターンには以下のようなものがあります。

  • プレフィックスマッチング
  • サフィックスマッチング
  • 「以外」マッチング(ルールで指定されているもの以外のすべて)
  • 数値マッチング(特定の範囲内)
  • IPアドレスマッチング(CIDRで指定)
  • 存在マッチング(リーフノードに特定のフィールドを持たないすべて)
  • 大文字小文字を区別しないマッチング
  • 複数のマッチング(複数のマッチングルールの組み合わせ)
  • ORマッチング

イベントパターンはJSON形式で指定します。例えば、 detail.statusstopped および overloade 以外のイベントデータにマッチさせるイベントパターンの指定は以下のようになります。

ソースがSQSの場合、フィルター条件を満たさない場合は自動的にキューから削除されます。

また、メッセージのbodyの形式が文字列かJSONかによってイベントパターンの指定の仕方が変わるので、正しく指定しないと予期せぬ動作をする場合があります。

詳しくは公式ドキュメントをご覧ください。

エンリッチメント

エンリッチメントでは、ソースからのイベントデータをターゲットに送信する前に任意の処理を挟むことができます。

エンリッチメントとして指定できるサービスは以下のとおりです。

  • Lambda
  • Step Function
  • API Gateway
  • API送信先

エンリッチメントは同期的に呼び出されます。また、レスポンスサイズは最大で6MBまでに制限されています。

ターゲット

ターゲットはイベントデータを最終的に処理するサービスで、以下のようなサービスを指定することができます(一部抜粋)

  • API Gateway
  • バッチジョブのキュー
  • CloudWatchのロググループ
  • Lambda
  • ESCタスク

ソースがSQSのように順番を強制しない場合、EventBridgeでは、ターゲットを同期的、または非同期的に呼び出すことができます(デフォルトでは同期的に呼び出される)。

ECSタスクを起動する際にパラメータを渡したい場合、 ContainerOverridesCommand でコンテナに渡すことができます。

この設定に関しては、現時点ではコンソールからは行えないので、AWS CLIなどで設定を行います。

EventBridge Pipesを使うメリット

EventBridge Pipesを使うと、サービス間を疎に保つことができ、IAMで許可する権限を絞ることができます。

また、SQSとLambdaを組み合わせて非同期処理を実現する場合でも、EventBridge Pipesを使うことで、Lambdaの処理の中でSQSの操作をしなくて良くなる利点があります。

EventBridge Pipesの設定

それでは、実際のコンソールを使って構築していきます。

パイプの作成

AWSのコンソールでEventBridgeのページを開き、「パイプの作成」をクリックします。

「パイプ名」を入力し、「ソース」から「SQS」を選択し、「SQSキュー」を選択します(SQSキューは予め作成しておきます)。

「ターゲット」をクリックし、「ターゲットサービス」から「ECSクラスター」を選択し、「クラスター」や「タスク定義」などECSでタスクを立ち上げる際に設定するような項目を設定していきます(ECSの設定については、以前の記事をご覧ください)。

また、サブネットとセキュリティグループについては、カンマ区切りで入力します。

「ターゲット入力トランスフォーマー」を画像のように設定します。これはオプショナルなのでやらなくても大丈夫です。

設定が終わったら「パイプを作成」をクリックするとパイプが作成されます。

AWS CLIでパイプを更新する

先程説明した通り、SQSからのメッセージ中のパラメータをECSタスクに渡すには、 ContainerOverridesCommand にパラメータを入れる必要があります。これはコンソールからは設定できないので、以下のようにAWS CLIで設定を行います。

SQSからECSタスクを起動する

それでは、実際にSQSにメッセージを送信して、ECSタスクが起動するか確認します。

SQSの画面を開いて、作成したキューの画面の「キューの送受信」をクリックします。

「メッセージ本文」に入力して「メッセージ送信」をクリックします。

設定がうまくできていると、ECSの「クラスター」の「タスク」タブにタスクが表示されます。

タスクのログを見てみると、SQSから送信したメッセージ「foo」が出力されています。

ちなみに、ここで起動したタスクは、コマンド引数を表示するシンプルなコードです。

さいごに

EventBridge PipesとSQSとECSを使ったメッセージング処理の基本的な構築について紹介しました。

実際のサービスでは、同時に起動するタスクの上限を設定したり、フィルタリングやエンリッチメントなどを活用するなど、より高度な使い方をすることになるのではと思います。

フィルタリングとエンリッチメントについても少し触ってみましたが、うまく行かないところが多く、なれるまでもう少し触ってみる必要がありそうです。

また、以前はEventBridge Pipesのログを直接出力することができなかったので、デバッグに苦労していたようですが、最近の更新でCloudWatch Logsに出力できるようになりました。

EventBridge Pipesは、まだまだ発展途上のサービスだと思いますので、これからもっと便利に使い易くなっていくと嬉しいです。

おすすめ書籍

AWS運用入門 押さえておきたいAWSの基本と運用ノウハウ エバンジェリストの知識と経験を1冊にまとめた AWS開発を《成功》させる技術 AWSではじめるインフラ構築入門 第2版 安全で堅牢な本番環境のつくり方

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

aws

EC2インスタンスのメモリとディスクのメトリクスモニタリングでハマったこと

1 はじめに2 メモリとディスクのメトリクスモニタリング3 ハマりポイント4 対応方法5 さいごに はじめに AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする ...

no image

Firestoreのルール設定とdumpやrestoreが簡単に行えるfsrpl

1 はじめに2 Firestoreのルール設定2.1 全て許可2.2 本番環境でのルール設定例3 fsrpl3.1 fsrplとは3.2 インストール3.3 秘密鍵3.4 copy3.5 開発環境から ...

WordPressとRailsアプリケーションを相乗りさせた時の話

1 はじめに1.1 前提条件2 サブドメインを設定する3 Nginxの設定3.1 ステージング環境用の設定3.2 ステージング環境の設定を読み込ませる3.3 Nginxの再起動4 SSL化する4.1 ...

単体のORMライブラリとしてEloquentを使う

1 はじめに2 Eloquentとは3 導入3.1 Composerインストール3.2 Eloquentインストール4 DB接続4.1 illuminate/database4.2 モデルクラス作成4 ...

https-portalで既存のdocker環境をhttps化

1 はじめに2 https-portalとは3 設定ファイル3.1 docker-compose.yml3.2 default.conf4 説明4.1 docker-compose.yml4.2 de ...

フォロー

blog-page_side_responsive

2023年11月
 1234
567891011
12131415161718
19202122232425
2627282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。