Amazon DocumentDB
開発者ガイド

Amazon DocumentDB のトラブルシューティング

以下のセクションでは、Amazon DocumentDB (MongoDB 互換) の使用時に発生する可能性がある問題をトラブルシューティングする方法について説明します。

インスタンスのサイズによっては、インスタンスが利用可能になるまでに最大 20 分かかることがあります。クラスターが使用可能であることを確認するには、以下の AWS Command Line Interface (AWS CLI) オペレーションを使用します。

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[DBClusterIdentifier,Status]'

Amazon DocumentDB エンドポイントに接続できない

Amazon DocumentDB に接続しようとすると、以下のような最も一般的なエラーメッセージが表示されることがあります。

connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east- 1.docdb.amazonaws.com:27017/ 2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to 172.31.91.193:27017 after 5000ms milliseconds, giving up. 2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed

このエラーメッセージは、クライアント (この例では mongo シェル) が Amazon DocumentDB エンドポイントにアクセスできないことを意味します。これには以下のようにいくつかの原因が考えられます。

 

パブリックエンドポイントからの接続

ノートパソコンやローカル開発マシンから直接 Amazon DocumentDB クラスターに接続しようとしている。

ノートパソコンやローカル開発マシンなどのパブリックエンドポイントから直接 Amazon DocumentDBA クラスターに接続しようとしても失敗します。Amazon DocumentDB は仮想プライベートクラウド (VPC) 専用であり、現在パブリックエンドポイントをサポートしていません。したがって、ノートパソコンまたは VPC の外部のローカル開発環境から直接 Amazon DocumentDB クラスターに接続することはできません。

Amazon VPC の外部から Amazon DocumentDB クラスターに接続するには、SSH トンネルを使用します。詳細については、「Amazon VPC 外部からの Amazon DocumentDB クラスターへの接続」を参照してください。さらに、開発環境が別の Amazon VPC にある場合は、VPC ピアリングを使用して、同じリージョンまたは別のリージョンにある別の Amazon VPC から Amazon DocumentDB クラスターに接続することもできます。

 

リージョン間接続

他のリージョンにある Amazon DocumentDB クラスターに接続しようとしています。

クラスターのリージョン以外のリージョンにある Amazon EC2 インスタンスから Amazon DocumentDB クラスターに接続 (たとえば、米国西部 (オレゴン) リージョン (us-west-2) から 米国東部 (バージニア北部) リージョン (us-east-1) のクラスターに接続) しようとすると、接続は失敗します。

Amazon DocumentDB クラスターのリージョンを確認するには、以下のコマンドを実行します。そのリージョンはエンドポイントにあります。

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].Endpoint'

このオペレーションによる出力は、次のようになります (JSON 形式)。

[ "sample-cluster.cluster-corcjozrlsfc.us-east-1.docdb.amazonaws.com" ]

EC2 インスタンスのリージョンを確認するには、以下のコマンドを実行します。

aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'

 

このオペレーションによる出力は、次のようになります (JSON 形式)。

[ [ "us-east-1a" ] ]

 

別の Amazon VPC からの接続

クラスターのデプロイ先の Amazon VPC とは異なる VPC から Amazon DocumentDB クラスターに接続しようとしている。

Amazon DocumentDB クラスターと Amazon EC2 インスタンスの両方が同じ AWS リージョンにあるが、同じ Amazon VPC にはない場合は、2 つの Amazon VPC 間で VPC ピアリングが有効になっていない限り、Amazon DocumentDB クラスターに直接接続することはできません。

Amazon DocumentDB インスタンスの Amazon VPC を確認するには、以下のコマンドを実行します。

aws docdb describe-db-instances \ --db-instance-identifier sample-cluster-instance \ --query 'DBInstances[*].DBSubnetGroup.VpcId'

Amazon EC2 インスタンスの Amazon VPC を確認するには、以下のコマンドを実行します。

aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].VpcId'

 

セキュリティグループがインバウンド接続をブロックする

Amazon DocumentDB クラスターに接続しようとしているが、クラスターのセキュリティグループはクラスターのポート (デフォルトポート: 27017) でインバウンド接続を許可していない。

Amazon DocumentDB クラスターと Amazon EC2 インスタンスが両方とも同じリージョン内および同じ Amazon VPC 内にあり、同じ Amazon VPC セキュリティグループを使用しているとします。Amazon DocumentDB クラスターに接続できない場合は、クラスターのセキュリティグループ (ファイアウォール) で、Amazon DocumentDB クラスター用に選択したポート (デフォルトポートは 27017) でインバウンド接続を許可していないことが原因と考えられます。

Amazon DocumentDB クラスターのポートを確認するには、以下のコマンドを実行します。

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[DBClusterIdentifier,Port]'

クラスターの Amazon DocumentDB セキュリティグループを取得するには、以下のコマンドを実行します。

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'

セキュリティグループのインバウンドルールを確認するには、Amazon EC2 ドキュメントの以下のトピックを参照してください。

 

Amazon DocumentDB インスタンスへの接続のテスト

一般的な Linux または Windows ツールを使用して、クラスターへの接続をテストできます。

Linux または Unix ターミナルから、以下のように入力することで接続をテストできます (cluster-endpoint をインスタンスのエンドポイントに、port をポートに置き換えてください)。

nc -zv cluster-endpoint port

たとえば、サンプルのオペレーションと戻り値は次のようになります。

nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!

無効なエンドポイントへの接続

Amazon DocumentDB クラスターに接続し、有効でないクラスターエンドポイントを使用すると、以下のようなエラーが表示されます。

mongo --ssl \ --host sample-cluster.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017 \ --sslCAFile rds-combined-ca-bundle.pem \ --username <user-name> \ --password <password>

出力は次のようになります。

MongoDB shell version v3.6 connecting to: mongodb://sample-cluster.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017/ 2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com") failed: nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize connection to host sample-cluster.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com, address is invalid : connect@src/mongo/shell/mongo.js:237:13@(connect):1:6 exception: connect failed

クラスターの有効なエンドポイントを取得するには、以下のコマンドを実行します。

aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[Endpoint,Port]'

インスタンスの有効なエンドポイントを取得するには、以下のコマンドを実行します。

aws docdb describe-db-instances \ --db-instance-identifier db-cluster-instance \ --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'

詳細については、「Amazon DocumentDB エンドポイントの管理」を参照してください。

有料 Amazon DocumentDB リソースの特定

Amazon DocumentDB はフルマネージドデータベースサービスであるため、インスタンス、ストレージ、I/O、バックアップ、およびデータ転送が有料です。詳細については、Amazon DocumentDB (MongoDB 互換) 料金を参照してください。

アカウントの有料リソースを見つけ出し、そのリソースを削除する可能性がある場合は、AWS マネジメントコンソールまたは AWS CLI を使用します。

AWS マネジメントコンソール の使用

AWS マネジメントコンソールを使用して、特定の AWS リージョンにプロビジョニングした Amazon DocumentDB クラスター、インスタンス、およびスナップショットを検出できます。

クラスター、インスタンス、およびスナップショットを見つけ出すには

  1. AWS マネジメントコンソールにサインインして、https://console.aws.amazon.com/docdb で Amazon DocumentDB コンソールを開きます。

  2. デフォルトのリージョン以外のリージョンの有料リソースを見つけ出すには、画面の右上隅で、検索する AWS リージョンを選択します。

    
                     リージョンセレクターにバージニア北部が表示されたコンソールのスクリーンショット。
  3. ナビゲーションペインで、該当する有料リソースのタイプ ([クラスター]、[インスタンス]、または [スナップショット]) を選択します。

    
                     ナビゲーションペインにクラスター、インスタンス、およびスナップショットが表示されているコンソールのスクリーンショット。
  4. そのリージョンについてプロビジョニングされたすべてのクラスター、インスタンス、またはスナップショットが右側のペインに表示されます。クラスター、インスタンス、およびスナップショットの料金が発生します。

AWS CLI の使用

AWS CLIを使用して、特定の AWS リージョンにプロビジョニングした Amazon DocumentDB クラスター、インスタンス、およびスナップショットを検出できます。

クラスターおよびインスタンスを見つけ出すには

次のコードは、指定されたリージョンのすべてのクラスターとインスタンスをリストします。デフォルトのリージョンでクラスターとインスタンスを検索する場合は、--region パラメータを省略できます。

複数 Linux、macOS、または Unix:

aws docdb describe-db-clusters \ --region us-east-1 \ --query 'DBClusters[?Engine==`docdb`]' | \ grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"

複数 Windows:

aws docdb describe-db-clusters ^ --region us-east-1 ^ --query 'DBClusters[?Engine==`docdb`]' | ^ grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"

このオペレーションによる出力は、次のようになります (JSON 形式)。

"DBClusterIdentifier": "docdb-2019-01-09-23-55-38", "DBInstanceIdentifier": "docdb-2019-01-09-23-55-38", "DBInstanceIdentifier": "docdb-2019-01-09-23-55-382", "DBClusterIdentifier": "sample-cluster", "DBClusterIdentifier": "sample-cluster2",

スナップショットを見つけ出すには

次のコードは、指定されたリージョンのすべてのスナップショットをリストします。デフォルトのリージョンでスナップショットを検索する場合は、--region パラメータを省略できます。

複数 Linux、macOS、または Unix:

aws docdb describe-db-cluster-snapshots \ --region us-east-1 \ --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'

複数 Windows:

aws docdb describe-db-cluster-snapshots ^ --region us-east-1 ^ --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'

このオペレーションによる出力は、次のようになります (JSON 形式)。

[ [ "rds:docdb-2019-01-09-23-55-38-2019-02-13-00-06", "automated" ], [ "test-snap", "manual" ] ]

削除する必要があるのは、manual スナップショットのみです。Automated スナップショットは、クラスターを削除すると削除されます。

不要な有料リソースの削除

クラスターを削除するには、まずクラスター内のインスタンスをすべて削除する必要があります。

  • インスタンスを削除するには、Amazon DocumentDB インスタンスの削除を参照してください。

    重要

    クラスター内のインスタンスを削除しても、そのクラスターに関連付けられているストレージとバックアップの使用量に対して料金が発生します。すべての課金を停止するには、クラスターと手動スナップショットも削除する必要があります。

  • クラスターを削除するには、Amazon DocumentDB クラスターの削除を参照してください。

  • 手動スナップショットを削除するには、クラスタースナップショットの削除を参照してください。

インデックスの作成

次のトピックでは、インデックスまたはバックグラウンドインデックスの構築が失敗したときにどうすべきかを説明しています。

インデックスの構築が失敗する

Amazon DocumentDB は、インデックス作成プロセスの一部としてローカルストレージをインスタンス上で使用します。[FreeLocalStorage] CloudWatch メトリクス (CloudWatch -> Metrics -> DocDB -> Instance Metrics) を使用して、このディスクの使用状況をモニタリングできます。インデックスの構築がすべてのローカルディスクを消費して失敗すると、エラーが発生します。Amazon DocumentDB にデータを移行する場合、まずインデックスを作成してからデータを挿入することをお勧めします。移行戦略およびインデックスの作成についての詳細は、Amazon DocumentDB ドキュメントの「Amazon DocumentDB への移行」と「オフラインメソッドを使用して、MongoDB から Amazon DocumentDB に移行する」を参照してください。

既存のクラスターでインデックスを作成するときに、インデックスの構築に予想以上の時間がかかる場合、または失敗する場合、まずインスタンスをスケールアップし、インデックスが作成されたらスケールバックして戻すことが推奨されます。Amazon DocumentDB では、AWS マネジメントコンソール または AWS CLI を使用してインスタンスサイズを数分で素早くスケーリングできます。詳細については、「インスタンスクラスの管理」を参照してください。秒単位のインスタンス料金によって、使用したリソースの秒数分のみを支払います。

バックグラウンドインデックスの構築が失敗する

Amazon DocumentDB では、任意の時点でコレクションにおいてバックグラウンドインデックスの作成が 1 つのみ許可されます。バックグラウンドインデックスの作成中に createIndex()dropIndex() などの DDL (データ定義言語) オペレーションが発生すると、バックグラウンドインデックスの作成は失敗します。