Amazon MQ

# Amazon MQ

https://d1.awsstatic.com/webinars/jp/pdf/services/20190703_AWS-Blackbelt_AmazonMQ.pdf

## メッセージング概要

  • 小売業のオーダー処理
  • 銀行の金融トランザクション
    • すべての取引や決済を取り込み
    • 各ステップが確実に実行されることを保証
  • メディア企業のコンテンツ公開
    • 各ステップを独立して処理(再フォーマット、翻訳)
    • 文書を多様な送信先へ発信

 

メッセージ指向ミドルウェアMoM)またはメッセージブローカーのコンポーネントが必要になってくる

  • メッセージブローカー

 

## Amazon MQとは

  • マネージドメッセージブローカーサービス
    • セキュリティ
      • 通信、保管データを暗号化
      • ネットワーク、セキュリティグループでアクセスを制御
    • モニタリング
  • Apache ActiveMQをサポート
    • 多様な連携パターンをサポートするオープンソースメッセージブローカー
    • キュー
      • Producer -> Queue  ->> Consumer *x
      • メッセージの順序性とonce and only once配信をサポート
      • 各メッセージは単一のコンシューマのみが取得
      • メッセージ処理準備が整ったコンシューマがキューからメッセージを取得
    • トピック
    • 複合送信先
    • 仮想トピック
      • 仮想トピックから対応するキューに転送される。各キューからコンシューマがアクセスしてメッセージを取得
    • フェイルオーバートランスポート
      • 複数のエンドポイントを指定し、障害時にフェイルオーバー
    • スケジュールメッセージ
      • クライアントから送信される配信タイミングの制御
    • 認可マップ
      • ユーザーロールによる、read/write/admin の権限制御
    • ブローカーのネットワーク(複数ブローカーの運用)
      • 複数ブローかによるスループットと最大クライアント接続数の拡張
      • 可用性の向上
      • メッシュトポロジー
        • ブローカー間でメッセージを転送
        • 地理的に分散した拠点間の通信
      • ハブアンドスポークトポロジー
        • ハブとなるブローカーを指定、集約することでメンテナンス性を上げる
      • コンセントレータトポロジ
        • 上段ブローカーと下段ブローカーを相互に接続
        • 大量のクライアントを接続できる
  • 豊富なメッセージング機能
  • 低遅延かつ高耐久性
    • 複数AZでメッセージストアをレプリケート
  • 標準的なAPIプロトコルに対応

 

  • Amazon MQの構成要素
    • ブローカー
      • インスタンスタイプを選択
      • 単一インスタンスブローカー or マルチAZブローカー(アクティブ・スタンバイ)
      • Webコンソール
      • XML ファイルに設定を記述
    • ユーザー
      • ブローカーのキューやトピックへアクセスする主体を定義
    • ライフサイクル
      • 設定変更の繁栄にはブローカーのリブートが必要
    • メンテナンス
      • ブローカーのメンテナンスに関するポリシーを指定
    • モニタリング

 

## ユースケース

  • マネージドサービスなので高可用性を維持しながらライセンスコストを削減
  • オンプレのMoM からAmazon MQへメッセージを送信。その先でオンプレからAWSに移行したアプリを運用しLift-and-shift を進める

 

## ベストプラクティス

  • セキュリティ
    • パブリックIPはできるだけ使わない
    • クライアント側の暗号化も有効化する
    • 認可マップを設定する
    • 不要なプトロコルをセキュリティグループでブロックする
  • 接続性
    • Amazon MQ ENI を変更または削除しない
    • 接続プールの利用
    • フェイルオーバートランスポートを使用する
    • メッセージセレクタを使用しない
    • 仮想送信先を選択する
  • パフォーマンス
    • 適切なブローカーインスタンスタイプを選択する
    • ブローカーのネットワークを正しく指定する
    • コンシューマーが低速な場合、concurrentStoreAndDispatchQueues falseに。
    • Prepared 状態のXAトランザクションを復旧して低速な再起動を回避する

 

## Amazon MQ Amazon SQS/SNSの使い分け

  • Amazon SQS /SNS クラウドネイティブなアプリケーションに最適化されている。Amazon MQを利用する場合は、現在のオンプレ環境からAWS環境へリフトアンドシフトしようとしている場合。
  • Apache ActiveMQとの互換性があるので最小限のコード変更でオーバーヘッドとコストを削減できる

 

## 雑感

メインの使いどころとしては、現行のオンプレ環境からクラウド環境に移行するときに変更点を少なくしつつ移行できることを実現するサービス。

マネージドサービスで高可用性・高耐久性・セキュアを実現できるものの、設定変更をしたい場合も再起動が必要だったりして、制約がいろいろとある印象。