Amazon MQ で運用するメッセージブローカー - ActiveMQ と RabbitMQ の選定と移行

ActiveMQ と RabbitMQ の選定基準を整理し、オンプレミスからの移行パターンと高可用性構成を紹介。SQS/SNS との使い分けも解説します。

Amazon MQ の位置づけと SQS/SNS との使い分け

Amazon MQ は ActiveMQ と RabbitMQ のフルマネージドブローカーサービスです。SQSSNS が AWS ネイティブのメッセージングサービスであるのに対し、MQ は業界標準のメッセージブローカーをマネージドに運用します。SQS は無制限のスループット、自動スケーリング、サーバーレスアーキテクチャとの統合に優れており、新規開発のクラウドネイティブアプリケーションでは第一選択です。一方、既存アプリケーションが JMS API、AMQP プロトコル、複雑なルーティングルール (トピックセレクタ、メッセージフィルタ) に依存している場合、SQS/SNS への書き換えは大きなコストを伴います。メッセージの優先度制御、トランザクション管理、複雑なルーティングパターンなど標準プロトコルの高度な機能が必要な場合も MQ が適しています。移行後に段階的に SQS や SNS へリファクタリングする戦略も有効です。

ActiveMQ と RabbitMQ の選定

ActiveMQ は Java エコシステムとの親和性が高く、JMS 1.1 に完全準拠し、1 ブローカーあたり最大 1,000 接続を処理します。キュー、トピック、仮想トピック、コンポジットデスティネーションなど ActiveMQ の全機能をサポートします。ネットワークオブブローカー構成により、複数のブローカーを接続してスケーラブルなメッセージングトポロジーを構築できます。STOMP、MQTT、OpenWire など複数のプロトコルを同時にサポートし、IoT デバイスとエンタープライズアプリケーションの橋渡しにも使えます。RabbitMQ は AMQP 0-9-1 をネイティブサポートし、Exchange (Direct、Topic、Fanout、Headers) と Binding による柔軟なルーティングが特徴です。クラスタデプロイメントによりクォーラムキューを構成し、高可用性とデータの耐久性を確保します。Python、Ruby、Go、.NET など多言語のクライアントライブラリが充実しており、ポリグロットな環境に適しています。管理 UI が標準で提供され、キューの状態やメッセージレートをブラウザから監視できます。

高可用性構成とセキュリティ

ActiveMQ のアクティブ/スタンバイ構成では、2 つのブローカーインスタンスが異なる AZ に配置され、EFS 上の共有ストレージでメッセージを永続化します。プライマリ障害時にスタンバイが自動的に引き継ぎ、フェイルオーバーは数十秒で完了します。RabbitMQ のクラスタデプロイメントでは 3 ノードのクラスタが構成され、キューのミラーリングでメッセージの耐久性を確保します。両エンジンとも、マルチ AZ デプロイメントによる自動フェイルオーバー、EBS ボリュームによるメッセージの永続化、KMS による保存時暗号化を標準で提供します。CloudWatch メトリクスによるブローカーの健全性監視と、CloudTrail による API 操作の監査ログも利用可能です。以下は AWS CLI で RabbitMQ ブローカーを作成する例です。 ``` aws mq create-broker \ --broker-name my-rabbitmq-broker \ --engine-type RABBITMQ \ --engine-version 3.11.20 \ --host-instance-type mq.m5.large \ --deployment-mode CLUSTER_MULTI_AZ \ --users Username=admin,Password=MySecurePass123 ```

オンプレミスからの移行戦略

オンプレミスの ActiveMQ から Amazon MQ への移行は、ブローカー設定の移行、クライアント接続先の変更、ネットワーク構成の調整の 3 ステップで進めます。Amazon MQ はオンプレミスの ActiveMQ と同じ設定ファイル形式 (activemq.xml) をサポートするため、既存の設定をほぼそのまま適用できます。VPN または Direct Connect を使用してオンプレミスとの接続を確保し、段階的にクライアントを Amazon MQ に切り替えるブルーグリーン移行が推奨されます。RabbitMQ の場合は、Shovel プラグインや Federation プラグインを活用してオンプレミスとクラウド間のメッセージ転送を設定し、ダウンタイムを最小化できます。移行後のパフォーマンスチューニングとして、インスタンスタイプの選定 (mq.m5.large で 1,000 msg/sec、mq.m5.4xlarge で 10,000 msg/sec 程度)、ストレージタイプの選択、プリフェッチサイズの調整が重要です。 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 の業界標準プロトコル (JMS、AMQP、STOMP、MQTT) をサポートし、コード変更なしでの移行を実現します。マルチ AZ 自動フェイルオーバー、KMS 暗号化、CloudWatch 監視を標準装備し、インフラ運用の負荷を最小化しながらメッセージングアプリケーションの信頼性を向上させます。新規開発では SQS/SNS を、既存アプリケーションの移行では MQ を選択する判断基準が重要です。