AWS DMS エンドポイントでの接続障害をトラブルシューティングする方法を教えてください。

所要時間3分
0

AWS Database Migration Service (AWS DMS) のエンドポイントに接続できず、テスト接続が失敗します。接続の問題をトラブルシューティングです。

簡単な説明

レプリケーションインスタンスからソースまたはターゲットエンドポイントへの接続をテストすると、接続の問題とネイティブデータベースの問題について、2 種類のエラーが発生する場合があります。テストを正常に完了するには、これらの問題を解決する必要があります。

解決策

接続に関する問題

レプリケーションインスタンスとソースまたはターゲット間の接続の問題が原因でエラーが発生した場合は、次のようなエラーが表示されます。

  • "Application-Status: 1020912, Application-Message: Failed to connect Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HYT00 NativeError: 0 Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired ODBC general error."
  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]timeout expired ODBC general error."
  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider ODBC general error., Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2005 Message: [unixODBC][MySQL][ODBC 5.3(w) Driver]Unknown MySQL server host 'mysql1.xxxxx.us-east-1.rds.amazonaws.com' (22) ODBC general error."

ネイティブデータベースに関するエラー

データベースのアクセス許可や認証エラーなど、ネイティブデータベースに関するエラーが原因でエラーが発生した場合は、次のようなエラーが発生します。

  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]FATAL: password authentication failed for user "dmsuser" ODBC general error."

注: AWS DMS のソースエンドポイントとターゲットエンドポイントを作成した後に、AWS DMS レプリケーションインスタンスからエンドポイントへの接続をテストするのがベストプラクティスです。AWS DMS 移行タスクを開始する前にテストを完了してください。そうしないと、エンドポイントとの接続の問題が原因でタスクが失敗する場合があります。

AWS ホストリソースの接続に関する問題を解決する

ソースまたはターゲットのデータベースとレプリケーションインスタンスとの間に接続を確立できることを確認します。ユースケースとネットワークインフラストラクチャに応じて、ソースデータベースまたはターゲットデータベースをパブリックサブネットまたはプライベートサブネットのレプリケーションインスタンスに接続します。詳細については、「レプリケーションインスタンス用のネットワークを設定する」を参照してください。

注: AWS DMS バージョン 3.4.7 以降では、AWS DMS が仮想プライベートクラウド (VPC) エンドポイントを使用するように設定する必要があります。または、特定の Amazon Web Services と通信するすべてのソースエンドポイントとターゲットエンドポイントへのパブリックルートを使用する必要があります。AWS DMS エンドポイントテストが以前のバージョンでは成功しても、後のバージョンでは失敗する場合は、「VPC エンドポイントを AWS DMS ソースおよびターゲットエンドポイントとして設定する」を参照してください。

レプリケーションインスタンスの構成を確認する

レプリケーションインスタンスで、構成に以下の内容が含まれていることを確認します。

  • セキュリティグループ内のソースデータベースまたはターゲットデータベースのポートを含む IP アドレスのアウトバウンドルールセキュリティグループアウトバウンドルールでは、すべてのトラフィックがデフォルトでは許可されています。セキュリティグループはステートフルなので、インバウンドルールをデフォルトから変更する必要はありません。
  • ネットワーク ACL 内のソースまたはターゲットデータベースのポートを含む IP アドレスのアウトバウンドルールネットワークアクセスコントロールリスト (ACL)アウトバウンドルールでは、すべてのトラフィックがデフォルトでは許可されています。
  • ネットワーク ACL 内のソースデータベースまたはターゲットデータベースのエフェメラルポートを使用する IP アドレスのインバウンドルール。ネットワーク ACL のインバウンドルールでは、すべてのトラフィックがデフォルトでは許可されています。

ソースまたはターゲットのデータベース構成を確認する
ソースデータベースまたはターゲットデータベースで、構成に以下の内容が含まれていることを確認します。

  • レプリケーションインスタンスの IP アドレスまたは、レプリケーションインスタンスのサブネットグループの Classless Inter-Domain Routing (CIDR) 用のインバウンドルールインバウンドルールには、セキュリティグループ内のソースデータベースまたはターゲットデータベースのポートが必要です。セキュリティグループはステートフルなので、アウトバウンドルールをデフォルトから変更する必要はありません。
    注: IP アドレスと CIDR を特定する方法については、「サブネットグループの IP アドレスと CIDR を判断する」セクションを参照してください。
  • レプリケーションインスタンスの IP アドレスまたはレプリケーションインスタンスのサブネットグループの CIDR 用のインバウンドルールインバウンドルールには、ネットワーク ACL 内のソースデータベースまたはターゲットデータベースのポートが必要です。許可されている IP アドレスとポートに明示的な deny ルールがないことを確認します。
  • ネットワーク ACL に、エフェメラルポートがあるレプリケーションインスタンスのサブネットグループの IP アドレスまたは CIDR のアウトバウンドルール。ネットワーク ACL のアウトバウンドルールでは、すべてのトラフィックがデフォルトでは許可されています。
  • レプリケーションインスタンスのサブネットグループの CIDR を許可するようにネットワークを設定するのがベストプラクティスです。レプリケーションインスタンスの IP アドレスは、フェイルオーバーまたはホスト交換イベント中に変更されます。

サブネットグループの IP アドレスと CIDR を判断する

インバウンドルールとアウトバウンドルールを設定するために、サブネットグループの IP アドレスと CIDR を判断します。AWS DMS コンソールまたは AWS CLI を使用します。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

AWS DMS コンソール

次の手順を実行します。

  1. AWS DMS コンソールを開きます。
  2. ナビゲーションペインで [レプリケーションインスタンス] を選択します。
  3. お使いのレプリケーションインスタンスの名前を選択します。
  4. [詳細] で、レプリケーションインスタンスの [パブリック IP アドレス][プライベート IP アドレス]、**[レプリケーションサブネットグループ]**をコピーします。
  5. [レプリケーションサブネットグループ] でリンクを選択し、サブネットグループページにアクセスします。サブネットグループの各サブネットの名前をコピーします。
  6. 各サブネットの CIDR を確認するには、Amazon Virtual Private Cloud (Amazon VPC) コンソールを開きます。
  7. [サブネット] タブで、ステップ 5 で書き留めたサブネットを検索します。各サブネットの CIDR を書き留めておきます。

AWS CLI

describe-subnets コマンドを実行して、各サブネットの CIDR を判断します。

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

注: replication-instance-name は、お使いのレプリケーションインスタンス名で置き換えます。

describe-replication-instances コマンドを実行して、レプリケーションインスタンスの IP アドレスを判断します。

aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].{ReplicationInstancePublicIpAddresses:ReplicationInstancePublicIpAddresses,ReplicationInstancePrivateIpAddresses:ReplicationInstancePrivateIpAddresses}" --output table

注: replication-instance-name は、お使いのレプリケーションインスタンス名で置き換えます。

接続問題を解決する (オンプレミスリソース)

ソースデータベースまたはターゲットデータベースがオンプレミスでホストされている場合は、以下の内容を確認します。

  • データベースが AWS DMS レプリケーションインスタンスからの受信接続を許可している。確認は、ネットワーク管理者との確認のうえで行ってください。
  • ファイアウォールが、ソースデータベースまたはターゲットデータベースへの通信をブロックしていない。
  • DNS 構成が正しく設定されていることを確認します。DNS 解決が必要な場合は、Amazon Route 53 Resolver を使用します。オンプレミスのネームサーバーを使用して Amazon Route 53 Resolver でエンドポイントを解決する方法については、「独自のオンプレミスネームサーバーを使用する」を参照してください。
    または、
    AWS CLI で新しい AWS DMS インスタンスを作成し、お使いの DNS ネームサーバー (--dns-name-servers) を使用して DNS の問題を解決します。デフォルトでは、AWS DMS インスタンスは Amazon が提供する DNS を使用して解決を行います。ソースまたはターゲットがカスタム DNS を使用するように設定されている場合、AWS DMS エンドポイントでエラーが発生することがあります。詳細については、「レプリケーションインスタンスを作成する」を参照してください。

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのネットワーク構成は、接続に問題がある AWS DMS レプリケーションインスタンスと同じである必要があります。ネットワーク接続をトラブルシューティングするには、まず新しい EC2 インスタンスで次のコマンドを実行します。

telnet database_IP_address_or_DNS port_number

注: database_IP_address_or_DNS は、DMS ソースまたはターゲットエンドポイントに指定されているデータベースの IP アドレスまたはドメイン名に置き換えます。port_number は、DMS ソースまたはターゲットエンドポイントに指定されたデータベースのポート番号に置き換えます。

次のコマンドを実行します。

nslookup domain_name

注: domain_name は、DMS ソースまたはターゲットエンドポイントに指定されたデータベースのドメイン名に置き換えます。

ネイティブデータベースに関するエラーを解決する

ネイティブデータベースエラーを解決するには、次のエンドポイント構成が正しく設定されていることを確認してください。

  • Username
  • Password
  • ServerName は、オンプレミスデータベースの DNS または IP、または Amazon Relational Database Service (Amazon RDS) エンドポイントに設定します
  • Port
  • Database name
    注: MySQL ソースまたはターゲットのデータベース名は指定しないでください。

これらのフィールドのいずれかが AWS Secrets Manager で指定されている場合は、「シークレットを使用して AWS Database Migration Service のエンドポイントにアクセスする」を参照してください。

ソースデータベースまたはターゲットデータベースに関連するネイティブデータベースでのエラーについては、かかる特定のデータベースに関するドキュメントの解決策を参照してください。AWS DMS コンソールに表示されたエラーコードとエラーメッセージを使用します。

詳細については、ソースデータベースまたはターゲットデータベースのエラー、トレース、アラートなどのログを確認してください。

データベースアクセスエラーの場合は、特定のソースまたはターゲットについて、AWS DMS に必要なアクセス許可を確認します。

SSL を使用してソースエンドポイントとターゲットエンドポイントの接続を暗号化する方法の詳細については、「AWS Database Migration Service で SSL を使用する」を参照してください。

関連情報

AWS DMS を使用しているときの、Amazon S3 エンドポイント接続テストの失敗をトラブルシューティングする方法を教えてください

Amazon Redshift をターゲットエンドポイントとして使用する AWS DMS タスクの接続に関する障害やエラーをトラブルシューティングする方法を教えてください

AWS DMS と MongoDB ソースエンドポイント間の接続障害をトラブルシューティングする方法を教えてください

Microsoft SQL Server データベースを AWS クラウドに移行する

AWS公式
AWS公式更新しました 3ヶ月前