Amazon MQ で運用するメッセージブローカー - ActiveMQ と RabbitMQ の選定と移行
ActiveMQ と RabbitMQ の選定基準を整理し、オンプレミスからの移行パターンと高可用性構成を紹介。SQS/SNS との使い分けも解説します。
Amazon MQ の位置づけと SQS/SNS との違い
Amazon MQ は ActiveMQ と RabbitMQ のマネージドブローカーサービスです。SQS と SNS が AWS ネイティブのメッセージングサービスであるのに対し、MQ は業界標準のメッセージブローカーをマネージドに運用します。新規アプリケーションでは SQS/SNS を推奨しますが、既存アプリケーションが JMS API、AMQP プロトコル、複雑なルーティングルール (トピックセレクタ、メッセージフィルタ) に依存している場合、SQS/SNS への書き換えは大きなコストを伴います。MQ はこれらの既存アプリケーションをコード変更なしで AWS に移行するためのサービスです。
ActiveMQ と RabbitMQ の選定
ActiveMQ は Java エコシステムとの親和性が高く、JMS 2.0 をフルサポートし、1 ブローカーあたり最大 1,000 接続を処理します。Java EE アプリケーションや Spring Framework ベースのアプリケーションからの移行に最適です。STOMP、MQTT、OpenWire など複数のプロトコルを同時にサポートし、IoT デバイスとエンタープライズアプリケーションの橋渡しにも使えます。RabbitMQ は AMQP 0-9-1 をネイティブサポートし、Exchange と Binding による柔軟なルーティングが特徴です。Python、Ruby、Go、.NET など多言語のクライアントライブラリが充実しており、ポリグロットな環境に適しています。管理 UI が標準で提供され、キューの状態やメッセージレートをブラウザから監視できます。
高可用性構成と移行パターン
ActiveMQ のアクティブ/スタンバイ構成では、 2 つのブローカーインスタンスが異なる AZ に配置され、 EFS 上の共有ストレージでメッセージを永続化します。プライマリ障害時にスタンバイが自動的に引き継ぎ、フェイルオーバーは数十秒で完了します。 RabbitMQ のクラスタデプロイメントでは 3 ノードのクラスタが構成され、キューのミラーリングでメッセージの耐久性を確保します。オンプレミスからの移行では、まず MQ ブローカーを作成し、アプリケーションの接続先 URL を MQ のエンドポイントに変更するだけで移行が完了します。 VPN または Direct Connect 経由でオンプレミスと MQ を接続し、段階的にワークロードを移行するパターンが一般的です。 Amazon MQ に関する詳しい解説はAmazon の関連書籍でも確認できます。
Amazon MQ の料金
Amazon MQ の料金はブローカーインスタンスの時間課金とストレージで構成されます。ActiveMQ の mq.m5.large は 1 時間あたり約 0.288 ドル (月額約 207 ドル)、RabbitMQ の mq.m5.large は約 0.302 ドル (月額約 217 ドル) です。アクティブ/スタンバイ構成ではインスタンス料金が 2 倍になります。ストレージは 1 GB あたり月額約 0.10 ドルです。SQS (100 万リクエストあたり約 0.40 ドル) と比較するとコストは高いため、既存のメッセージブローカーからの移行以外では SQS/SNS を優先的に検討すべきです。
まとめ
Amazon MQ は既存のメッセージブローカーを AWS にリフト&シフトするためのサービスです。ActiveMQ と RabbitMQ の業界標準プロトコルをサポートし、コード変更なしでの移行を実現します。新規開発では SQS/SNS を、既存アプリケーションの移行では MQ を選択する判断基準が重要です。