AWS DMS エンドポイントの接続エラーをトラブルシューティングするにはどうすれば良いですか?
最終更新日: 2022 年 6 月 15 日
自分のAWS Database Migration Service (AWS DMS) エンドポイントに接続できません。テスト接続が失敗するのはなぜですか。また、これらの接続の問題をトラブルシューティングするにはどうすればよいですか?
簡単な説明
レプリケーションインスタンスからソース、またはターゲットのエンドポイントへの接続をテストする際、通常以下の 2 種類のエラーがみられます。
1. レプリケーションインスタンスとソースまたはターゲットの間の接続問題が原因でエラーが発生した場合は、次のようなエラーが表示されます。
- 「アプリケーションステータス:1020912、アプリケーションメッセージ:接続に失敗しました、ネットワークエラーが発生しました、アプリケーションの詳細メッセージ:RetCode: SQL_ERROR SqlState: HYT00 NativeError: 0 メッセージ:[unixODBC][Microsoft][ODBC Driver 13 for SQL Server] ログインタイムアウトが期限切れ ODBC 一般エラー。」
- 「アプリケーションステータス: 1020912、アプリケーションメッセージ:ODBC プロバイダーに接続できません、ネットワークエラーが発生しました、アプリケーションの詳細メッセージ: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 メッセージ:[unixODBC] タイムアウト期限切れ ODBC 一般エラー。」
- 「アプリケーションステータス: 1020912、アプリケーションメッセージ:ODBC プロバイダーに接続できません、 ODBC 一般エラー。、アプリケーション詳細メッセージ:RetCode: SQL_ERROR SqlState: HY000 NativeError: 2005 メッセージ:[unixODBC][MySQL][ODBC 5.3(w) Driver] 不明な MySQL サーバホスト 「mysql1.xxxxx.us-east-1.rds.amazonaws.com」(22) ODBC 一般エラー。」
2. データベース権限や認証エラーなどのネイティブデータベースエラーが原因でエラーが発生した場合は、次のようなエラーが表示されます。
- 「アプリケーションステータス: 1020912、アプリケーションメッセージ: ODBC プロバイダーに接続できません、ネットワークエラーが発生しました、アプリケーション詳細メッセージ:RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 メッセージ:[unixODBC] 致命的:ユーザー「dmsuser」のパスワード認証に失敗しました ODBC 一般エラー。」
発生したエラーの種類とネットワーク構成に基づいて、適切な解決方法のセクションを参照してください。
注:AWS DMS ソースエンドポイントとターゲットエンドポイントを作成した後、AWS DMS レプリケーションインスタンスからエンドポイントへの接続をテストすることをお勧めします。AWS DMS 移行タスクを開始する前にテストを行ってください。そうしないと、エンドポイントとの接続の問題が原因でタスクが失敗する可能性があります。
解決方法
AWS がホストするリソースの接続性の問題を解決する
ソースまたはターゲットのデータベースとレプリケーションインスタンスとの間で接続が確立できることを確認します。ユースケースとネットワークインフラストラクチャに応じて、ソースデータベースまたはターゲットデータベースをパブリックサブネットまたはプライベートサブネットのレプリケーションインスタンスに接続します。詳細については「レプリケーションインスタンスのためのネットワークのセットアップ」をご参照ください。
レプリケーションインスタンスの設定を確認する
レプリケーションインスタンスで、設定には以下が含まれていることを確認します。
- セキュリティグループ内のソースまたはターゲットデータベースのポートを持つ IP アドレスのアウトバウンドルール。デフォルトの設定では、セキュリティグループのアウトバウンドルールはすべてのトラフィックを許可します。セキュリティグループはステートフルのため、インバウンドルールをデフォルトから変更する必要はありません。
- ネットワーク ACL 内のソースまたはターゲットデータベースのポートを持つ IP アドレスのアウトバウンドルール。デフォルトの設定では、ネットワークアクセスコントロールリスト (ACL) のアウトバウンドルールはすべてのトラフィックを許可します
- ネットワーク ACL 内のソースまたはターゲットデータベースのエフェメラルポートを持つ IP アドレスのインバウンドルール。デフォルトの設定では、ネットワーク ACL のインバウンドルールは、すべてのトラフィックを許可します。
ソースまたはターゲットのデータベース設定を確認する
ソースまたはターゲットデータベースで、設定に次の項目が含まれていることを確認します。
- セキュリティグループ内のソースまたはターゲットデータベースのポートを持つレプリケーションインスタンスの IP アドレス、もしくはレプリケーションインスタンス内サブネットグループの CIDR に対するインバウンドルール。セキュリティグループはステートフルのため、アウトバウンドルールをデフォルトから変更する必要はありません。
注:IP アドレスと CIDR を確認するには、「サブネットグループの IP アドレスと CIDR を決定する」セクションを参照してください。 - ネットワーク ACL 内のソースまたはターゲットデータベースのポートを持つ、レプリケーションインスタンスの IP アドレス、またはレプリケーションインスタンスのサブネットグループの CIDR に対するインバウンドルール。許可されている IP アドレスとポートに明示的な拒否ルールがないことを確認します。
- ネットワーク ACL にエフェメラルポートがあるレプリケーションインスタンスのサブネットグループの IP アドレスまたは CIDR のアウトバウンドルール。デフォルトの設定では、ネットワーク ACL のアウトバウンドルールはすべてのトラフィックを許可します。
- ベストプラクティスとして、レプリケーションインスタンスのサブネットグループの CIDR を許可するようにネットワークを構成します。レプリケーションインスタンスの IP アドレスは、フェイルオーバーまたはホストの交換時に変更されます。
サブネットグループの IP アドレスと CIDR を決定する
インバウンドルールとアウトバウンドルールを設定するサブネットグループの IP アドレスと CIDR を決定するには、AWS DMS コンソールまたは CLI を使用します。
AWS コンソールの使用:
- AWS DMS コンソールにアクセスする
- ナビゲーションペインで、レプリケーションインスタンスを選択します。
- レプリケーションインスタンスの名前を選択します。
- [詳細]で、レプリケーションインスタンスのパブリック IP アドレス、プライベート IP アドレス、およびレプリケーションサブネットグループを書き留めます。
- [レプリケーションサブネットグループ] の中にある、サブネットグループページにアクセスするためのリンクを選択します。サブネットグループ内の各サブネットの名前を書き留めます。
- 各サブネットの CIDR を確認するには、Amazon Virtual Private Cloud (Amazon VPC) コンソールにアクセスします。
- [サブネット] タブで、ステップ 5 で書き留めたサブネットを検索します。サブネットごとに、CIDR を書き留めます。
AWS CLI を使用して、以下を実行します。
describe-subnets コマンドを実行して、各サブネットの CIDR を決定します。replication-instance-name には、レプリケーションインスタンスの名前を入力します。
aws ec2 describe-subnets --filters Name=subnet-id,Values="$(aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].ReplicationSubnetGroup.Subnets[*].SubnetIdentifier" --output text | sed -e 's/\t/,/g')" --query "Subnets[*].{SubnetId:SubnetId,CidrBlock:CidrBlock}" --output table
describe-replication-instances コマンドを実行して、レプリケーションインスタンスの IP アドレスを確認します。replication-instance-name には、レプリケーションインスタンスの名前を入力します。
aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].{ReplicationInstancePublicIpAddresses:ReplicationInstancePublicIpAddresses,ReplicationInstancePrivateIpAddresses:ReplicationInstancePrivateIpAddresses}" --output table
接続問題 (オンプレミスリソース) を解決する
ターゲットデータベースがオンプレミスでホストされている場合は、次の点を確認します。
- ネットワーク管理者に問い合わせて、データベースが AWS DMS レプリケーションインスタンスからの着信接続を許可していることを確認してください。
- ファイアウォールが、ソースまたはターゲットデータベースとの通信をブロックしていないことを確認します。
- DNS 設定が正しく設定されていることを確認します。DNS 解決が必要な場合は、Amazon Route 53 Resolver を使用します。オンプレミスのネームサーバーを使用して Amazon Route 53 Resolver を使用したエンドポイントを解決する方法については、独自のオンプレミスネームサーバーを使用するを参照してください。
前の項目を確認しても問題が解決しない場合は、AWS DMS レプリケーションインスタンスの同じ VPC に新しい Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成します。この新しい EC2 インスタンスは、接続の問題がネットワーク設定によるものかどうかを判断します。
Amazon EC2 インスタンスが、AWS DMS レプリケーションインスタンスと同じネットワーク設定で、接続に問題があることを確認します。新しい EC2 インスタンスで次のコマンドを実行して、ネットワーク接続のトラブルシューティングを行います。
telnet <database_IP_address_or_DNS> <port_number>
nslookup <domain_name>
database_IP_address_or_DNS には、DMS ソースまたはターゲットエンドポイントに指定されているデータベースの IP アドレスまたはドメイン名を使用します。port_number には、DMS ソースまたはターゲットエンドポイントに指定されているデータベースのポート番号を使用します。domain_name には、DMS ソースまたはターゲットエンドポイントに指定されているデータベースのドメイン名を使用します。
ネイティブデータベースエラーの解決
ネイティブデータベースエラーを解決するには、次のエンドポイント設定が正しく設定されていることを確認します。
- ユーザー名
- パスワード
- ServerName をオンプレミスデータベースの DNS または IP、または RDS エンドポイントに設定します。
- ポート
- データベース名
注: MySQL ソースまたはターゲットには、データベース名を指定しないでください。
注: AWS Secrets Manager でこれらのフィールドのいずれかが指定されている場合は、シークレットを使用して AWS Database Migration Service エンドポイントにアクセスするを参照してください。
ソースデータベースまたはターゲットデータベースに関連するネイティブデータベースエラーについては、特定のデータベースドキュメントの解決方法を参照してください。DMS コンソールのエラーコードとエラーメッセージを使用します。
詳細については、ソースまたはターゲットデータベースのエラー、トレース、アラート、その他のログを参照してください。
データベースアクセスエラーの場合は、特定のソースまたはターゲットに対して DMS が必要とする権限を確認します。
Secure Sockets Layer (SSL) を使用したソースエンドポイントとターゲットエンドポイント接続の暗号化についての詳細は、AWS Database Migration Service での SSL の使用を参照してください。