TL

Cloud Service

Azure Cosmos DB

フルマネージドのサーバーレス分散NoSQL。一桁ミリ秒の応答と、複数リージョンへの無停止スケールを実現する。AWS の DynamoDB に相当。

中級パフォーマンス効率信頼性コスト最適化セキュリティ
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.一桁ミリ秒で応答するグローバル分散のマネージド NoSQL。
  • 2.RU/s でスループットを確保し、多リージョンへ無停止拡張。
  • 3.成否はパーティションキー設計次第。偏ると 429 で詰まる。

解決する課題

世界中のユーザーへ、容量計画やシャーディングの手間なしに、安定したミリ秒応答を届けます。

  • アクセスが急増しても落ちない/遅くならないDBが欲しい
  • DBの容量計画・シャーディングを自分でやりたくない
  • ミリ秒の応答を安定して出したい(SLA で保証されたレイテンシ)
  • 単一リージョンでは足りず、世界中に低遅延で配信したい

主要概念と用語

  • API の選択: 作成時に API を選ぶ。API for NoSQL(ネイティブ・最も機能が豊富)/ MongoDB / Apache Cassandra / Apache Gremlin(グラフ)/ Table(DynamoDB の Table API 相当)
  • アカウント → データベース → コンテナー → 項目(Item): 階層構造。コンテナーが DynamoDB のテーブルに相当
  • パーティションキー: データの物理分散を決める最重要キー(DynamoDB の PK に相当)
  • RU/s(Request Unit per second): スループットの統一通貨。読み書きやクエリのコストを RU で表し、毎秒の RU を確保する
  • スループットモード: プロビジョンド(手動/自動スケール)/ サーバーレス
  • 整合性レベル: 強固 / 有界整合性制約 / セッション(既定)/ 整合性プレフィックス / 結果整合性 の5段階
  • 変更フィード(Change Feed): 変更をイベント順に流す(DynamoDB Streams に相当。Azure Functions と連携)
  • TTL / 統合キャッシュ: 項目の自動失効 / 専用ゲートウェイ上のキャッシュ(DAX に近い役割)

仕様・制限・クォータ

  • 1項目(ドキュメント)の最大サイズは 2MB(DynamoDB の 400KB より大きい)
  • 論理パーティション1つあたりのデータ上限は 20GB、スループット上限は 10,000 RU/s
  • 5段階の整合性レベルを選べる(DynamoDB は「結果整合性 / 強い整合性」の2択)
  • ターンキーのグローバル分散: ポータルから数クリックでリージョンを追加し、読み取り/書き込みを多リージョン化できる
  • **マルチリージョン書き込み(マルチマスター)**に対応し、各リージョンでローカルに書き込める
  • 可用性・スループット・レイテンシ(読み書き P99 で一桁ミリ秒)・整合性に 金銭的裏付けのある SLA

内部の仕組み

Cosmos DB はパーティションキーを ハッシュして「論理パーティション」へ振り分け、それを内部の「物理パーティション」に配置します。データ量やスループットが増えると、物理パーティションを自動で分割・再配置してスケールします。ゆえに パーティションキー設計=性能設計 で、特定キーへ偏るとホットパーティションとなり、RU を使い切ってスロットル(HTTP 429)が発生します。

Azure Cosmos DBでパーティションキーをハッシュして論理パーティションと物理パーティションへ振り分け、RU消費、地域内4複製、多リージョン複製を行う構成図
パーティションキーを含む要求は担当区画へ直接送られます。キーを含まないクエリは複数区画へ展開され、RU消費が増えます。各物理パーティションは地域内で4複製され、追加リージョンへデータを配布できます。
  • データは各リージョン内で4レプリカに保持され、書き込みは局所多数へ複製される
  • すべての項目フィールドが既定で自動インデックスされる(スキーマ/インデックス定義が原則不要)。不要なパスを除外して RU を節約できる
設計の鉄則

RDB の正規化ではなくアクセスパターン駆動設計。「どう問い合わせるか」を先に決めて、カーディナリティが高く読み書きが均等に分散するパーティションキーを選ぶ。クエリにキーを含めれば単一パーティションで完結し、RU を最小化できる。

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

  • アクセスパターンを列挙し、分散が均等になるパーティションキーを選ぶ(合成キーも有効)
  • スパイクが読めない/間欠的なら サーバーレス、定常負荷なら 自動スケール(Autoscale) か手動プロビジョンド
  • 変更駆動の処理は 変更フィード → Azure Functions(Cosmos DB トリガー)
  • 読み取りが激しく同一クエリが多いなら 専用ゲートウェイ + 統合キャッシュ でRUを削減
  • クロスパーティションの全件スキャンを避け、パーティションキーを指定して絞る

運用・監視

  • Azure Monitor / Metrics でメトリクスを監視。Total Request UnitsTotal Requests、ステータス 429(スロットル)の発生率を確認
  • スロットル(429)が出たら、ホットパーティション or RU 不足を疑う。自動スケールで上限を引き上げるか、パーティションキーを見直す
  • 診断ログ(Diagnostic Settings) を Log Analytics へ送り、DataPlaneRequests で高 RU クエリを特定
  • クエリ実行時に返る RU チャージを計測し、コストの高いクエリを最適化する

コスト

スループットモードの使い分けがコスト最適化の肝です。課金は RU/s + ストレージ(保存データ量) で決まります。

スループットモード課金向いている用途
プロビジョンド(手動)確保した RU/s に対して固定負荷が読める定常的な本番
自動スケール(Autoscale)上限内で使った RU に応じ自動増減変動はあるがピークが読める負荷
サーバーレス消費した RU 分のみ(ピーク課金なし)間欠的・低トラフィック・開発検証
予約容量(Reserved Capacity)1〜3年コミットで最大〜65%割引長期的に動かす大規模ワークロード

セキュリティ

  • 保存時暗号化はデフォルト(Microsoft 管理キー。Key Vault のカスタマーマネージドキーも選択可)。通信は常に TLS で暗号化
  • マネージド ID + Microsoft Entra ID(RBAC) でデータプレーン/コントロールプレーンの権限を制御し、キーのハードコードを避ける(AWS の IAM ロール相当)
  • プライベートエンドポイント(Private Link) で VNet 内から到達させ、パブリックアクセスやファイアウォールで IP を最小化
アンチパターン

プライマリキー(マスターキー)をアプリにハードコードして配るのは NG。漏れれば全データを操作されます。マネージド ID + Entra ID の RBAC か、最低でも権限を絞ったリソーストークンを使う。

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

観点Azure Cosmos DBAmazon DynamoDB
位置づけグローバル分散NoSQL(マルチモデル)サーバーレスNoSQL(キーバリュー/ドキュメント)
スループット単位RU/s(読み書き共通の通貨)RCU/WCU(読み/書きで別)
容量モードプロビジョンド/自動スケール/サーバーレスプロビジョンド/オンデマンド
整合性5段階(強固〜結果整合性)結果整合性 / 強い整合性 の2択
多リージョン書き込みマルチリージョン書き込みグローバルテーブル
変更ストリーム変更フィード → FunctionsDynamoDB Streams → Lambda
キャッシュ統合キャッシュ(専用ゲートウェイ)DAX
権限付与マネージド ID + Entra ID/RBACIAM

ハンズオン / CLI例

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

# Cosmos DB アカウントを作成(API for NoSQL)
az cosmosdb create \
  --name demo-cosmos-acct \
  --resource-group demo-rg \
  --locations regionName=japaneast failoverPriority=0 isZoneRedundant=False \
  --default-consistency-level Session

# データベースを作成
az cosmosdb sql database create \
  --account-name demo-cosmos-acct \
  --resource-group demo-rg \
  --name AppDb

# コンテナーを作成(パーティションキー=/userId, 自動スケール上限 4000 RU/s)
az cosmosdb sql container create \
  --account-name demo-cosmos-acct \
  --resource-group demo-rg \
  --database-name AppDb \
  --name Orders \
  --partition-key-path "/userId" \
  --max-throughput 4000

# 別リージョンを追加して多リージョン化(読み取りを近くで)
az cosmosdb update \
  --name demo-cosmos-acct \
  --resource-group demo-rg \
  --locations regionName=japaneast failoverPriority=0 isZoneRedundant=False \
  --locations regionName=koreacentral failoverPriority=1 isZoneRedundant=False

Azure Service

Azure Cosmos DBを実務で読む

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

解決すること

データベース

比較で見る軸

クラウド: Azure / カテゴリ: データベース / 難易度: intermediate

導入後に効く点

RU/s でスループットを確保し、多リージョンへ無停止拡張。

先に潰すリスク

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

数字・仕様の読み方
クラウド
Azure
カテゴリ
データベース
難易度
intermediate
関連資格
設計柱
performance / reliability / cost / security

判断チェックリスト

  • 自社の用途が「データベース / performance」に近いか確認する。
  • 強みである「一桁ミリ秒で応答するグローバル分散のマネージド NoSQL。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

データベースperformancereliabilitycostsecurity

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

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