📝

Amazon MQ とは

に公開

Amazon MQ とは - Amazon MQ

Amazon MQ は、メッセージブローカーのセットアップ、運用、保守を管理する、Apache ActiveMQ Classic および RabbitMQ 向けのマネージドメッセージブローカーサービスです。業界標準のメッセージングプロトコルを使用して新しい Amazon MQ ブローカーを作成することも、既存のメッセージブローカーからメッセージングコードを書き換えずに Amazon MQ に移行することもできます。

AWS が提供するマネージドメッセージブローカーサービスです。

機能概要

  • メッセージブローカーのリソースを AWS 側で管理
  • マルチ AZ 構成で高可用なブローカーを作成可能
  • CloudWatch との統合でブローカーをモニタリング可能
  • 保管中、転送中のメッセージを暗号化
  • Apache ActiveMQ と RabbitMQ をサポート
  • メッセージングコードを維持したまま既存のブローカーを Amazon MQ に移行可能
  • RabbitMQ のクォーラムキューをサポート
  • クロスリージョンデータレプリケーションが可能

メッセージブローカー

メッセージ・ブローカーとは | IBM

  • メッセージを検証、保管、ルーティングするソフトウェア
  • 送信元と送信先の中間に位置する
  • PTP (Point-to-Point) と pub/sub の配信パターンが存在する
  • PTP: 送信者と受信者が 1 対 1
  • pub/sub: 送信者と受信者が 1 対多
  • 送信者はプロデューサーやパブリッシャーと呼ばれる
  • 受信者はコンシューマーやサブスクライバーと呼ばれる

AWS のメッセージングサービスとの比較

「疎結合」を実現するメッセージングサービスの選択と利用
上記 AWS 公式資料で整理されているのでご参照ください。
各サービスでできることとできないことや想定される使用方法が異なるため、ユースケースに応じてサービスを選定する必要があります。

試してみた

開始方法: ActiveMQ ブローカーの作成と接続 - Amazon MQ
チュートリアルは上記ドキュメントの通りですが、今回は Lambda を使用する構成で試してみました。

01. ActiveMQ ブローカーの作成

ActiveMQ ブローカーを以下の設定で作成しました。

  • ブローカーエンジンタイプ: Apache ActiveMQ
  • デプロイモード: 単一ブローカー
  • ブローカー名: MyBroker1
  • ActiveMQ アクセス: シンプルな認証と認可



ブローカーの作成完了まで 20 分ほどかかります。

02. ActiveMQ ウェブコンソールにログイン

ブローカーのステータスが実行中になったことを確認後、ActiveMQ ウェブコンソールの URL にアクセスします。

ウェルカムページが表示されたら Manage ActiveMQ broker をクリックします。

ブローカー作成時に指定したユーザー名とパスワードを入力します。

ログイン後にブローカーに関する情報を確認できます。

03. キューの作成

ActiveMQ ウェブコンソールからキューを作成します。

キュー名を入力して作成します。

キューが作成されるとキュー一覧に表示されます。

04. キューにメッセージを送信

手順 03 で作成したキューに手動でメッセージを送信します。

コンソール上部の Send をクリックします。

Send a JMS Message で以下の項目を設定します。

  • Destination: 手順 03 で作成したキュー名
  • Queue or Topic: Queue
  • Message body: Hello from Amazon MQ!

その他の項目は設定せずに Send をクリックします。

キューにメッセージが送信されました。

05. Lambda 関数の作成

以下の設定で作成しました。

  • ランタイム: Python 3.14
  • 実行ロール: AdministratorAccess 権限を付与
  • VPC: 手順 01 で作成したブローカーと同じ VPC
  • サブネット: 手順 01 で作成したブローカーと同じサブネット
  • セキュリティグループ: 手順 01 で作成したブローカーと同じセキュリティグループ
  • コード: 以下の通り
def lambda_handler(event, context):
    print("Received event:")
    print(event)

06. Secrets Manager シークレットの作成

MQ ブローカーを Lambda 関数のトリガーに設定するためには認証情報を Secrets Manager に保存する必要があるのでシークレットを作成します。

Secrets Manager のシークレットは以下の設定で作成しました。

  • シークレットのタイプ: その他のシークレットのタイプ
  • キー/値のペア
    • username: 手順 01 で指定したユーザー名
    • password: 手順 01 で指定したユーザー名

07. Lambda トリガーの作成

以下の設定でトリガーを追加します。

  • MQ ブローカー: 手順 01 で作成したブローカー
  • バッチサイズ: 1
  • キュー名: 手順 03 で作成したキュー名
  • シークレット: 手順 06 で作成したシークレット

08. 動作確認

手順 04 と同じ内容でキューにメッセージを送信します。
送信後、Lambda の実行ログに以下のような内容が記録されていれば成功です。

{
  "eventSource": "aws:mq",
  "eventSourceArn": "arn:aws:mq:ap-northeast-1:012345678901:broker:MyBroker1:b-abc30fb4-db08-439c-826a-0022158e7aa8",
  "messages": [
    {
      "messageID": "ID:b-abc30fb4-db08-439c-826a-0022158e7aa8-1-37153-1768218523408-4:1:1:1:4",
      "messageType": "jms/text-message",
      "timestamp": 1768221082908,
      "deliveryMode": 1,
      "correlationID": "",
      "replyTo": "null",
      "destination": {
        "physicalName": "test-queue"
      },
      "redelivered": false,
      "type": "",
      "expiration": 0,
      "priority": 0,
      "data": "SGVsbG8gZnJvbSBBbWF6b24gTVEh",
      "brokerInTime": 1768221082909,
      "brokerOutTime": 1768221082910
    }
  ]
}

data の SGVsbG8gZnJvbSBBbWF6b24gTVEh はエンコードされていますが、デコードすれば「Hello from Amazon MQ!」であり、キューに送信したメッセージと同じメッセージであることがわかります。
つまり、キューに送信したメッセージを Lambda で受信することができたということになります。

まとめ

今回は Amazon MQ について紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion