TL

Cloud Service

Azure Service Bus / Queue Storage

メッセージを一旦ためて送信側と処理側を疎結合化するキュー。エンタープライズ機能が豊富な Service Bus と、シンプルで安価な Queue Storage の2系統がある。AWS の SQS に相当。

中級信頼性パフォーマンス効率コスト最適化運用上の優秀性
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.メッセージを一旦ためて送信側と処理側を疎結合化するキュー。
  • 2.急増分をバッファし受信側は自分のペースで処理、失敗は DLQ へ退避。
  • 3.高機能な Service Bus と安価な Queue Storage の2系統を使い分け。

解決する課題

  • アクセス急増でバックエンドが詰まる → キューでバッファ(負荷平準化)
  • 送信側と処理側を疎結合にして独立にスケールしたい
  • 失敗したジョブを安全に退避・再試行したい(デッドレター)
  • 1つのメッセージを複数の受信者に同報したい(トピック / サブスクリプション)

主要概念と用語

Azure には用途の異なる2つのキューがあります。まずどちらを使うかを押さえます。

  • Azure Service Bus: エンタープライズ向けメッセージブローカー。FIFO(順序保証)トピック/サブスクリプション(Pub/Sub)トランザクション重複検出セッションなどを備える
  • Azure Queue Storage: ストレージアカウント上のシンプルなキュー。機能は最小限だが安価で大容量(最大数 TB 規模まで保持可能)

Service Bus の主要用語:

  • キュー: 1対1(送信側 → 受信側)。**先入れ先出し(FIFO)**で配信
  • トピック / サブスクリプション: 1対多の Pub/Sub。1つのトピックに送ると複数サブスクリプションへコピー配信。SQL フィルターでルーティング可能
  • ロック(PeekLock): 受信したメッセージを一定時間ロックし、他の受信側から隠す(SQS の可視性タイムアウトに相当)
  • デッドレターキュー(DLQ): 規定回数の配信に失敗、または期限切れになったメッセージの退避先(サブキュー)
  • セッション: 関連メッセージをグループ化し、同一受信側で順序保証して処理する仕組み
  • 重複検出: 一定時間内に同じ MessageId のメッセージを破棄し、送信側の再送による重複を防ぐ

仕様・制限・クォータ

代表的な上限値です(SKU により異なる)。

  • メッセージサイズ: Standard は最大 256 KB、Premium は最大 100 MB。Queue Storage は 64 KB(大きいデータは Blob +参照)
  • メッセージ保持(TTL): Service Bus は最大 14 日。Queue Storage は最大 7 日(設定で無期限も可)
  • 配信方式: いずれもプル型(受信側がポーリング)。プッシュ連携は Event Grid / Functions トリガーで補う
  • 配信保証: 既定は最低1回(at-least-once)。Service Bus はトランザクションや重複検出で実質 exactly-once に近づけられる
  • SKU: Service Bus は Basic / Standard / Premium。トピックは Standard 以上、100 MB メッセージや専有リソース(CU)・VNet 統合は Premium

内部の仕組み

受信側はキューをポーリングしてメッセージを取得します。Service Bus の既定モード PeekLock では、取得したメッセージはロックタイムアウトの間ロックされ他の受信側から見えなくなります。処理が成功したら Complete(削除)、失敗時は Abandon(即時ロック解除して再配信)するか、ロックタイムアウトを過ぎると自動的に再配信されます。MaxDeliveryCount を超えるとDLQへ移動します。

  • もう一つの ReceiveAndDelete モードは取得と同時に削除する(高速だがクラッシュ時にメッセージを失う)
  • トピックでは、メッセージはサブスクリプションごとにコピーされ、各サブスクリプションが独立したキューのように振る舞う
  • at-least-once が前提なので、受信処理は冪等に作るのが鉄則
Azure Service Busで送信者がキューへメッセージを保存し、ワーカーがPeekLockで取得してComplete、Abandon、ロック期限切れ、DLQへ分岐する構成図
PeekLockでは受信時点で削除せず、処理成功後のCompleteで確定します。失敗やロック期限切れでは再配信され、規定回数を超えるとDLQへ移動します。トピックは購読ごとに独立したコピーを保持し、Queue Storageは単純で安価な処理に向きます。
二重処理に備える

既定は「最低1回」配信なのでまれに重複します。処理は冪等に作るのが基本。送信側の再送由来の重複は 重複検出、厳密な順序が要るなら セッションを使います。

設計パターン / ベストプラクティス

  • 負荷平準化(Queue-Based Load Leveling): スパイクをキューで吸収し、受信側は KEDA でキュー長に応じてスケール
  • 競合コンシューマー: 複数ワーカーで同一キューを処理し、スループットを水平スケール
  • Pub/Sub: トピック/サブスクリプション+SQL フィルターでイベントを宛先別にルーティング
  • DLQ で失敗を退避し、原因調査・再投入。DeadLetterReason で理由を確認
  • 大きいペイロードは Blob に置きキューには参照(Claim-Check パターン)
  • PeekLock + Complete を基本にし、処理完了まで削除しない

運用・監視

  • Azure Monitor でメトリクスを監視: ActiveMessages(滞留数)、DeadletteredMessagesSize、スロットリング数
  • 滞留増 → 受信側(ワーカー)不足やダウンストリーム障害を疑う
  • DLQ に溜まる → 処理ロジック / 権限 / メッセージ形式 / MaxDeliveryCount 設定を確認
  • Premium では 専有 CU(メッセージング ユニット) の使用率を見てスケール判断
  • メッセージ本文を覗き見る Peek やサービス ログ(診断設定)で調査

コスト

2系統で課金体系が大きく異なります。要件に対し過剰な SKU を選ばないことが肝です。

選択肢課金の考え方向いている用途
Queue Storage操作回数+保存容量(非常に安価)大量・低コストでシンプルなキュー
Service Bus Basic操作回数課金(キューのみ)最小機能で安く始める
Service Bus Standardメッセージ操作課金(トピック対応)Pub/Sub や中規模の本番
Service Bus Premium専有 CU 単位の固定課金安定低レイテンシ・大容量・VNet 隔離

セキュリティ

  • Microsoft Entra ID + RBAC でアクセス制御(Azure Service Bus Data Sender/Receiver ロール)。資格情報をコードに埋めない
  • アプリには マネージド ID を付与して接続(AWS の IAM ロール相当)
  • 保存時暗号化は既定で有効。Premium では カスタマー マネージド キー(Key Vault) も利用可
  • 転送は TLS。Premium は プライベートエンドポイント / VNet サービスエンドポイントでネットワーク隔離
アンチパターン

SAS 接続文字列(共有アクセスキー)をアプリやリポジトリに直書きするのは NG。漏洩すれば誰でも送受信できます。マネージド ID + Entra ID/RBAC に寄せ、鍵の管理・ローテーション・漏洩リスクを排除しましょう。

関連サービス・比較(AWS との対応)

観点Service BusQueue StorageAWS SQS
位置づけ高機能メッセージブローカーシンプル・安価なキューAWS のマネージドキュー
順序保証FIFO / セッションベストエフォートFIFO キュー
Pub/Subトピック/サブスクリプションなしSNS と組み合わせ
可視性制御PeekLock(ロック)可視性タイムアウト可視性タイムアウト
失敗退避DLQ(サブキュー)(DLQ なし)DLQ
権限付与マネージド ID + Entra/RBAC同左 / SASIAM ロール

ハンズオン / CLI例

# リソースグループを作成
az group create --name demo-rg --location japaneast

# Service Bus 名前空間(Standard)を作成
az servicebus namespace create \
  --resource-group demo-rg \
  --name demo-sbns-0603 \
  --location japaneast \
  --sku Standard

# キューを作成(重複検出・最大配信回数を指定)
az servicebus queue create \
  --resource-group demo-rg \
  --namespace-name demo-sbns-0603 \
  --name jobs \
  --max-delivery-count 5 \
  --enable-duplicate-detection true

# トピックとサブスクリプションを作成(Pub/Sub)
az servicebus topic create \
  --resource-group demo-rg --namespace-name demo-sbns-0603 --name events
az servicebus topic subscription create \
  --resource-group demo-rg --namespace-name demo-sbns-0603 \
  --topic-name events --name audit

# キューの一覧を確認
az servicebus queue list \
  --resource-group demo-rg --namespace-name demo-sbns-0603 -o table

Azure Service

Azure Service Bus / Queue Storageを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

アプリ統合

比較で見る軸

クラウド: Azure / カテゴリ: アプリ統合 / 難易度: intermediate

導入後に効く点

急増分をバッファし受信側は自分のペースで処理、失敗は DLQ へ退避。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
Azure
カテゴリ
アプリ統合
難易度
intermediate
関連資格
設計柱
reliability / performance / cost / operational

判断チェックリスト

  • 自社の用途が「アプリ統合 / reliability」に近いか確認する。
  • 強みである「メッセージを一旦ためて送信側と処理側を疎結合化するキュー。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

アプリ統合reliabilityperformancecostoperational

他クラウドの同等サービス

役割が近いサービスです。設計の置き換えや比較検討の参考に。