Cloud Service
Amazon DocumentDB
MongoDB 互換のフルマネージドなドキュメントデータベースで、運用負荷を抑えつつ高い可用性とスケーラビリティを実現する。
- 1.MongoDB API 互換のフルマネージドなドキュメント指向データベースである
- 2.ストレージと計算が分離した設計で、レプリカ追加による読み取りスケールと自動修復ストレージを備える
- 3.JSON ドキュメントを柔軟なスキーマで扱い、運用やパッチ適用、バックアップは AWS が管理する
Amazon DocumentDB は、JSON ドキュメントを扱うアプリケーション向けに設計された、MongoDB 互換のフルマネージドなドキュメントデータベースサービスである。スキーマレスなデータモデルの柔軟性を活かしつつ、データベースの運用・管理を AWS に任せられる点が特徴である。
解決する課題
ドキュメント指向のデータモデルは、入れ子構造や配列を含む半構造化データを自然に表現でき、アプリケーションのオブジェクトとデータの形を近づけられる。一方で、自前で MongoDB クラスタを運用する場合、レプリケーションの構成、フェイルオーバー、バックアップ、パッチ適用、スケーリングといった作業が継続的に発生し、運用負荷が大きい。
Amazon DocumentDB はこれらの運用作業をマネージドサービスとして肩代わりする。アプリケーション側は既存の MongoDB ドライバやツールをほぼそのまま利用しながら、インフラの可用性・耐久性・スケーラビリティを AWS が担保する構成へ移行できる。これにより、開発チームはデータモデルとアプリケーションロジックに集中できる。
主要概念と用語
- クラスター: DocumentDB の最上位の管理単位。ストレージボリュームを共有する1つ以上のインスタンスで構成される。
- プライマリインスタンス: 書き込みと読み取りの両方を処理するインスタンス。クラスター内に1つだけ存在する。
- レプリカインスタンス: 読み取り専用のインスタンス。プライマリと同じストレージを参照し、読み取りスケールとフェイルオーバー先の役割を担う。
- クラスターエンドポイント: 常に現在のプライマリインスタンスに接続するためのエンドポイント。書き込みはこちらに向ける。
- リーダーエンドポイント: 複数のレプリカへ読み取り接続を分散するためのエンドポイント。
- ストレージボリューム: インスタンス群から分離され、複数のアベイラビリティーゾーンに分散して保存される共有ストレージ。
- ドキュメントとコレクション: ドキュメントは JSON 形式のレコード、コレクションはドキュメントの集合で、リレーショナルでいう行とテーブルに相当する。
- インスタンスベースとエラスティッククラスター: 個々のインスタンスを管理する従来型に加え、シャーディングにより水平スケールを自動化するエラスティッククラスターの形態がある。
仕様・制限・クォータ
DocumentDB は MongoDB の API と互換性を持つが、すべての MongoDB 機能・コマンドを網羅しているわけではない。利用するドライバのバージョンや特定の演算子・コマンドが対応しているかは、移行前に確認する必要がある。互換対象の MongoDB バージョンは複数あり、クラスター作成時に選択する。
クラスター内に作成できるレプリカ数や、1つのリージョン内のクラスター・インスタンス数などにはアカウント単位のクォータが設定されている。これらの上限値は変動しうるため、断定的な数値ではなく、必要に応じてサービスクォータの引き上げを申請できると理解しておくとよい。接続にはトランスポート暗号化が前提となるなど、利用にあたっての前提条件もあるため、公式ドキュメントで最新の制限を確認すること。
MongoDB 互換とはいえ、一部の集計演算子やコマンド、機能は未対応の場合がある。既存アプリケーションを移行する際は、互換性チェックツールや検証環境で動作確認を行い、未対応機能への依存がないかを事前に洗い出すこと。
内部の仕組み
DocumentDB の大きな特徴は、計算層(インスタンス)とストレージ層が分離していることである。すべてのインスタンスは、複数のアベイラビリティーゾーンにまたがって複製される単一の共有ストレージボリュームを参照する。書き込みはプライマリインスタンスが受け付け、ストレージ層に反映される。レプリカは同じストレージを参照するため、データのコピーを各インスタンスに持つ必要がなく、レプリカ追加が比較的軽量に行える。
ストレージ層は書き込まれたデータを自動的に複数の AZ に分散して保持し、障害が発生したセグメントは自動的に修復される。ストレージ容量はデータ量に応じて自動的に拡張されるため、事前の容量設計の負担が小さい。プライマリに障害が起きた場合は、レプリカの中から新しいプライマリへ昇格するフェイルオーバーが自動的に行われ、クラスターエンドポイントは新しいプライマリへ追従する。
設計パターン / ベストプラクティス
- 書き込みはクラスターエンドポイント、読み取りはリーダーエンドポイントへ振り分け、読み取り負荷をレプリカに分散する。
- 高可用性を求める場合は、異なる AZ に複数のレプリカを配置し、プライマリ障害時の自動フェイルオーバーに備える。
- 読み取りスケールが必要になったらレプリカを追加する。書き込みスループットの限界に達した場合は、エラスティッククラスターによる水平分割(シャーディング)を検討する。
- クエリパターンに合わせてインデックスを設計し、頻繁に参照するフィールドにはインデックスを付与してスキャン量を抑える。
- アプリケーションのドライバ側で接続プーリングとリトライを適切に設定し、フェイルオーバー時の一時的な切断に耐えられるようにする。
アプリケーションから接続先を使い分けるだけで読み取りをスケールできるのが共有ストレージ設計の利点である。読み取り整合性の要件に応じて、読み取り設定(プライマリ優先かレプリカ許可か)を意識して使い分けるとよい。
運用・監視
クラスターのメトリクスは Amazon CloudWatch に連携され、CPU 使用率、接続数、読み取り・書き込みのレイテンシ、レプリカの遅延などを監視できる。これらにアラームを設定し、しきい値を超えた場合に通知やスケーリング判断につなげる。低レベルのクエリの挙動を把握するため、プロファイラ機能で遅いクエリを記録・分析することもできる。
バックアップは継続的に取得され、指定した保持期間内であれば任意の時点へのポイントインタイムリカバリが可能である。パッチ適用やマイナーバージョンの更新はメンテナンスウィンドウ内で管理され、運用者が個別に手作業を行う必要は基本的にない。インスタンスのスケールアップやレプリカの増減は、稼働中のクラスターに対して実施できる。
コスト
DocumentDB の主なコスト要素は、インスタンスの稼働時間、消費したストレージ容量、ストレージへの読み取り I/O、バックアップストレージ、データ転送である。インスタンスは起動している時間に応じて課金され、ストレージと I/O は実際の使用量に基づく従量課金となる。
コストを抑えるには、ワークロードに見合ったインスタンスサイズを選び、不要なレプリカを増やしすぎないことが基本である。安定して継続利用する場合は、一定期間の利用を確約することで割引を受けられる料金オプションの活用も検討できる。具体的な料金は変動するため、見積もりは公式の料金ページや料金計算ツールで確認すること。
セキュリティ
DocumentDB のクラスターは VPC 内に配置され、セキュリティグループによってアクセス元を制御する。クライアントとの通信は TLS による暗号化が前提であり、保存データもストレージ層で暗号化できる。暗号化キーは AWS Key Management Service で管理する。
認証はユーザー名とパスワードによるデータベース認証に加え、IAM を用いた認証にも対応する。アクセス制御では、ロールに基づいて操作可能な範囲を絞り、最小権限の原則を適用する。監査が必要な場合は監査ログを有効化し、ログを収集・分析できるようにしておく。ネットワーク、認証、暗号化、監査を組み合わせて多層的に保護することが望ましい。
DocumentDB は VPC 内のリソースとして設計されており、インターネットへ直接公開する用途には適さない。セキュリティグループとサブネット設計で接続元を限定し、必要な場合は踏み台や VPN、PrivateLink 等を介してアクセスすること。
Well-Architected の観点
パフォーマンス効率の観点では、読み取りをレプリカに分散し、適切なインデックス設計とインスタンスサイズの選定でクエリ性能を最適化できる。計算とストレージが分離しているため、読み取り需要の増加にはレプリカ追加で柔軟に対応でき、ストレージは自動拡張される。
信頼性の観点では、ストレージが複数 AZ に複製され障害セグメントを自動修復すること、プライマリ障害時に自動フェイルオーバーが行われること、継続的バックアップとポイントインタイムリカバリが利用できることが、可用性と耐久性を支える。マルチ AZ にレプリカを配置することで、単一 AZ 障害の影響を抑えられる。
試験で問われるポイント
- DocumentDB は MongoDB 互換のフルマネージドなドキュメントデータベースであり、JSON ドキュメントを柔軟なスキーマで扱う用途に適する。
- 計算とストレージが分離し、共有ストレージは複数 AZ に複製される。読み取りはレプリカで水平にスケールする。
- 書き込みはクラスターエンドポイント、読み取りはリーダーエンドポイントへ向けるという役割分担を理解しておく。
- 高可用性はマルチ AZ のレプリカ配置と自動フェイルオーバーで実現する。
- リレーショナル要件が強い場合は Aurora や RDS、キー・バリューや低レイテンシ重視の場合は DynamoDB を選ぶといった、ユースケースに応じた選択が問われる。
関連サービス・比較
ドキュメント/NoSQL 系の選択肢として、サーバーレスなキー・バリューおよびドキュメントストアである Amazon DynamoDB としばしば比較される。MongoDB との互換性やドキュメント指向のクエリ機能を重視するなら DocumentDB、運用レスでミリ秒未満の低レイテンシと自動スケールを重視するなら DynamoDB が候補となる。
| 観点 | Amazon DocumentDB | Amazon DynamoDB |
|---|---|---|
| データモデル | JSON ドキュメント(MongoDB 互換) | キー・バリューおよびドキュメント |
| API・互換性 | MongoDB API 互換 | DynamoDB 独自 API |
| 運用形態 | インスタンスベースのクラスター中心 | フルサーバーレス |
| スケール | レプリカ追加とシャーディング | 自動でほぼ無制限にスケール |
| 主な適性 | 柔軟なクエリと既存 MongoDB 資産の活用 | 超低レイテンシと運用レス |
ハンズオン / CLI例
以下は AWS CLI で DocumentDB クラスターと、その中にプライマリインスタンスを1つ作成する例である。実行前にサブネットグループや VPC のセキュリティグループを準備しておくこと。
# クラスターを作成(マスターユーザーと認証情報を指定)
aws docdb create-db-cluster \
--db-cluster-identifier my-docdb-cluster \
--engine docdb \
--master-username adminuser \
--master-user-password 'ChangeThisStrongPassword!' \
--db-subnet-group-name my-docdb-subnet-group \
--vpc-security-group-ids sg-0123456789abcdef0
# クラスターにプライマリインスタンスを追加
aws docdb create-db-instance \
--db-instance-identifier my-docdb-instance-1 \
--db-cluster-identifier my-docdb-cluster \
--engine docdb \
--db-instance-class db.r6g.large
# クラスターの状態とエンドポイントを確認
aws docdb describe-db-clusters \
--db-cluster-identifier my-docdb-cluster \
--query 'DBClusters[0].[Status,Endpoint,ReaderEndpoint]'
AWS Service
Amazon DocumentDBを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
データベース
比較で見る軸
クラウド: AWS / カテゴリ: データベース / 難易度: intermediate
導入後に効く点
ストレージと計算が分離した設計で、レプリカ追加による読み取りスケールと自動修復ストレージを備える
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- データベース
- 難易度
- intermediate
- 関連資格
- SAA-C03
- 設計柱
- performance / reliability
判断チェックリスト
- 自社の用途が「データベース / performance」に近いか確認する。
- 強みである「MongoDB API 互換のフルマネージドなドキュメント指向データベースである」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。