Amazon DocumentDB
開発者ガイド

Amazon DocumentDB のベストプラクティス

Amazon DocumentDB (MongoDB 互換) を使用するためのベストプラクティスについて説明します。新しいベストプラクティスが確認されると、このセクションは更新されます。

基本的な運用についてのガイドライン

以下に示しているのは、基本的な運用についてのガイドラインであり、Amazon DocumentDB の使用時にすべてのユーザーが従う必要があります。Amazon DocumentDB のサービスレベルアグリーメント (SLA) では、次のガイドラインに従う必要があります。

  • 2 つの AWS アベイラビリティーゾーンの 2 つ以上の Amazon DocumentDB インスタンスで構成されるクラスターをデプロイします。本稼働ワークロードの場合、3 つ以上のAmazon DocumentDB インスタンスで構成されるクラスターを 3 つの アベイラビリティーゾーン にデプロイすることをお勧めします。

  • レプリカセットモードで Amazon DocumentDB クラスターに接続し、フェイルオーバーによるアプリケーションへの影響を最小限に抑えます。

  • アプリケーションの読み込み整合性要件に合わせて読み取り性能を最大化する、ドライバー読み込み設定を選択します。secondaryPreferred 読み込み設定を使用すると、レプリカの読み取りを有効にし、プライマリインスタンスを解放してより多くの作業を行うことができます。

  • 指定されたサービスの制限内でサービスを使用します。詳細については、「Amazon DocumentDB の制限」を参照してください。

  • メモリ、CPU、ストレージの使用状況をモニタリングする。Amazon CloudWatch は、使用パターンが変更されたり、デプロイメントの最大容量に近づいたりすると、通知するように設定できます。この通知は、システムのパフォーマンスと可用性を維持するために役立ちます。

  • 最大ストレージ容量に近づいたら、インスタンスをスケールアップする。アプリケーションからのリクエストの予期しない増加に対応するために、メモリにいくらかのバッファがあることが必要です。

  • 復旧ポイントの目標に合わせて、バックアップ保持期間を設定します。

  • クラスターのフェイルオーバーをテストすることで、そのプロセスでユースケースにかかる時間を把握します。

  • ネットワークエラーやデータベースエラーが発生した場合にも回復できるようにアプリケーションを設計します。ドライバーのエラーメカニズムを使用して、一時エラーと永続エラーを区別します。適切な場合には、エクスポネンシャルバックオフメカニズムを使用して一時エラーを再試行します。再試行ロジックを実装する場合は、アプリケーションがデータの整合性を考慮するようにします。

インスタンスメモリの推奨事項

Amazon DocumentDB のパフォーマンスに関するベストプラクティスは、作業セットをメモリに保持できるように十分な RAM を割り当てることです。作業セットがメモリ内にあるかどうかを調べるには、インスタンスに負荷がかかっている状態で、(Amazon CloudWatch を使用して) BufferCacheHitRatio メトリクスを確認します。BufferCacheHitRatio の値は、できる限り 100 パーセントに近い必要があります。

DB インスタンスクラスを RAM のより大きいクラスにスケールアップしたことにより BufferCacheHitRatio が劇的に増加した場合、作業セットはメモリに収まっていません。スケーリングオペレーション後に BufferCacheHitRatio が劇的に増加しなくなるまで、継続してスケールアップします。インスタンスの RAM の約 2/3 が、作業セットメモリに使用できます。インスタンスのメトリクスのモニタリングについては、「CloudWatch データの表示」を参照してください。

インデックスの構築

Amazon DocumentDB にデータをインポートする場合は、大きなデータセットをインポートする前にインデックスを作成することをお勧めします。Amazon DocumentDB インデックスツールを使用して、実行中の MongoDB インスタンスまたは mongodump ディレクトリからインデックスを抽出し、Amazon DocumentDB クラスターでそれらのインデックスを作成できます。移行の詳細については、Amazon DocumentDB への移行を参照してください。

セキュリティのベストプラクティス

AWS Identity and Access Management (IAM) アカウントを使用して、Amazon DocumentDB アクションおよびリソースへのアクセスを制御します。Amazon DocumentDB リソース (クラスター、インスタンス、セキュリティグループ、パラメータグループ) の作成、変更、削除などの重要なアクション、およびスナップショットの作成やクラスターの復元といった管理アクションの実行を許可するには、厳密な管理が必要です。

  • Amazon DocumentDB リソースを管理する各ユーザーにそれぞれ IAM アカウントを割り当てます。AWS アカウントのルートユーザーを使用して Amazon DocumentDB リソースを管理しないでください。自分を含めて全員に IAM ユーザーを作成します。

  • それぞれの職務の実行に最低限必要になる一連のアクセス許可を各ユーザーに付与します。

  • IAM グループを使用して、複数のユーザーのアクセス許可を効果的に管理します。IAM の詳細については、IAM ユーザーガイドを参照してください。IAM のベストプラクティスの詳細については、「IAM のベストプラクティス」を参照してください。

  • IAM 認証情報のローテーションを定期的に行います。

  • Transport Layer Security (TLS) と保管時の暗号化を使用してデータを暗号化します。

  • 次のように、AWS マネジメントコンソール または AWS Command Line Interface (AWS CLI) を使用して Amazon DocumentDB マスターユーザーパスワードを定期的に変更します。

    • コンソール — Amazon DocumentDB コンソールの右上隅で、アカウントを選択します。リストで、[セキュリティ認証情報] を選択します。表示される画面で、新しいマスターパスワードを入力して確認します。

      [My Security Credentials(セキュリティ認証情報)] メニュー項目を示すコンソールのスクリーンショット。
    • AWS CLImodify-db-cluster オペレーションを使用して、--master-user-password の値を変更します。

コスト管理

以下のベストプラクティスは、Amazon DocumentDB を使用する際のコストの管理と最小化に役立ちます。料金については、「Amazon DocumentDB (MongoDB 互換) の料金表」と「Amazon DocumentDB (MongoDB 互換) のよくある質問」を参照してください。

  • 該当月の予想請求額の 50% と 75% のしきい値で請求アラートを作成します。請求アラートの作成の詳細については、「請求アラームの作成」を参照してください。

  • 開発およびテストシナリオでは、不要になったらクラスターを停止し、開発が再開されたらクラスターを起動します。詳細については、「Amazon DocumentDB クラスターの停止と開始」を参照してください。

  • Amazon DocumentDB のアーキテクチャはストレージとコンピューティングを分離するため、単一インスタンスクラスターでも高い耐久性を備えています。クラスターストレージボリュームは、3 つのアベイラビリティーゾーンにわたって 6 つの方法でデータをレプリケートすることにより、クラスター内のインスタンス数に関係なく、きわめて高い耐久性を実現します。一般的な本稼働クラスターには、高可用性を実現するために 3 つ以上のインスタンスがあります。ただし、高可用性を必要としない場合は、単一インスタンス開発クラスターを使用してコストを最適化できます。

メトリクスを使用したパフォーマンスの問題の特定

リソース不足やその他の一般的なボトルネックによるパフォーマンスの問題を特定するには、Amazon DocumentDB クラスターに適用されるメトリクスをモニタリングできます。

パフォーマンスメトリクスの表示

さまざまな時間範囲の平均値、最大値、最小値を表示するには、パフォーマンスメトリクスを定期的に監視します。これは、いつパフォーマンスが低下しているかを特定するうえで有効です。また、特定のメトリクスしきい値に対して Amazon CloudWatch アラームを設定することにより、しきい値に達した場合に警告されるようにすることもできます。

パフォーマンスの問題を解決するために重要なのは、システムのベースラインパフォーマンスを理解することです。新しいクラスターをセットアップし、一般的なワークロードで実行したら、すべてのパフォーマンスメトリクスの平均値、最大値、最小値をさまざまな間隔 (例: 1 時間、24 時間、1 週間、2 週間) で取得します。これにより、正常な状態を把握することができます。それにより、オペレーションのピークおよびオフピークの時間帯を比較して、得られた情報から、いつパフォーマンスが標準レベルを下回っているかを特定できます。

パフォーマンスメトリクスは AWS マネジメントコンソール または AWS CLIを使用して表示できます。詳細については、以下を参照してください。

CloudWatch アラームの設定

CloudWatch アラームを設定するには、Amazon CloudWatch ユーザーガイドの「Amazon CloudWatch アラームの使用」を参照してください。

パフォーマンスメトリクスの評価

インスタンスには、さまざまなカテゴリのメトリクスがあります。許容値を決定する方法は、メトリクスによって異なります。

CPU

  • CPU Utilization — 使用されているコンピューターの処理能力の割合。

メモリ

  • Freeable Memory — インスタンスで使用可能な RAM の量。

  • Swap Usage — インスタンスによって使用されているスワップスペースの量 (メガバイト単位)。

入力/出力オペレーション

  • Read IOPSWrite IOPS — 1 秒あたりのディスク読み取りまたは書き込みオペレーションの平均数。

  • Read LatencyWrite Latency — 読み取りまたは書き込みオペレーションの平均時間 (ミリ秒単位)。

  • Read ThroughputWrite Throughput — 1 秒あたりのディスク読み取りまたは書き込みデータの平均量 (メガバイト単位)。

  • Disk Queue Depth — ディスクに対する読み取りまたは書き込み待機中の I/O オペレーションの数。

ネットワークトラフィック

  • Network Receive ThroughputNetwork Transmit Throughput — 1 秒あたりのインスタンスに対する送信または受信ネットワークトラフィックのレート (メガバイト単位)。

データベース接続

  • DB Connections — DB インスタンスに接続されたクライアントセッションの数。

一般的に、パフォーマンスメトリクスの許容値は、ベースラインがどのようになっているか、アプリケーションによって何が実行されているかによって異なります。ベースラインからの一貫した差異またはトレンドになっている差異を調べます。

メトリクスのタイプごとの推奨事項とアドバイスは以下のとおりです。

  • CPU の高消費量 — CPU の消費量が大きい値になっていても、それは妥当である場合があります。ただし、アプリケーションの目標(スループット、同時実行数など)に沿った想定値であることが前提です。CPU 使用率が一貫して 80% を超える場合は、インスタンスのスケールアップを検討してください。

  • 高い RAM 消費FreeableMemory メトリクスが頻繁にインスタンスメモリの合計の 3 分の 1 を下回る場合は、インスタンスのスケールアップを検討してください。

  • スワップの使用状況 — このメトリクスは 0 またはほぼ 0 のままにする必要があります。スワップの使用量が多い場合は、インスタンスのスケールアップを検討してください。

  • ネットワークトラフィック — ネットワークトラフィックについてシステム管理者に問い合わせて、ドメインネットワークとインターネット接続に対する想定スループットを把握します。スループットが一貫して想定よりも低い場合は、ネットワークトラフィックを調べます。

  • データベース接続数 — ユーザー接続数が多いことが、インスタンスのパフォーマンスが下がっていること、応答時間が長くなっていることに関連しているとわかった場合、データベース接続数を制限することを検討します。DB インスタンスの最適なユーザー接続数は、インスタンスのクラスと実行中のオペレーションの複雑さによって異なります。パフォーマンスメトリクスに問題がある場合、パフォーマンスを向上させるためにまず実行できることの 1 つは、使用頻度とコストの最も高いクエリをチューニングして、システムリソースへの負荷が下がるかどうかを確認することです。

クエリをチューニングしても、問題が解決しない場合は、その問題に関連するリソース (CPU、RAM、ディスクスペース、ネットワーク帯域幅、I/O 容量) を増やした Amazon DocumentDB インスタンスクラスにアップグレードすることを検討します。

クエリのチューニング

クラスターのパフォーマンスを向上させるには、大量のリソースを消費する使用頻度の最も高いクエリをチューニングして、実行コストを下げることをお勧めします。

explain コマンドを使用して、クエリプランの分析方法について学習できます。この情報を使用してクエリまたは基礎となるコレクションを変更して、クエリのパフォーマンスを向上させます。

クラスターパラメータグループを使用する

クラスターパラメータグループを変更した場合は、その変更をテストクラスターで試してから本稼働クラスターに適用することをお勧めします。

クラスターのバックアップの詳細については、「Amazon DocumentDB のバックアップと復元」を参照してください。