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

所要時間3分
0

AWS Database Migration Service (AWS DMS) エンドポイントに接続できません。テスト接続が失敗するのはなぜですか?また、これらの接続問題をトラブルシューティングする方法を教えてください。

簡単な説明

レプリケーションインスタンスからソースエンドポイントまたはターゲットエンドポイントへの接続をテストするときによく見られるエラーには、次の 2 種類があります。

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

  • 「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.」

2.    データベース権限や認証エラーなどのネイティブデータベースエラーが原因でエラーが発生した場合は、次のようなエラーが表示されます。

  • 「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 サービスと通信するすべてのソースおよびターゲットエンドポイントへのパブリックルートを使用するように設定する必要があります。DMS エンドポイントテストが以前のバージョンでは成功しても、後のバージョンでは失敗する場合は、「VPC エンドポイントを AWS DMS ソースおよびターゲットエンドポイントとして設定する」を参照してください。

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

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

  • セキュリティグループ内のソースデータベースまたはターゲットデータベースのポートを含む 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 コンソールの使用

  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

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

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

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

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

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 ソースまたはターゲットエンドポイントに指定されたデータベースのドメイン名を使用します。

ネイティブデータベースエラーの解決

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

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

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

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

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

データベースアクセスエラーの場合は、特定のソースまたはターゲットに対して DMS に必要な権限を確認してください。

Secure Sockets Layer (SSL) を使用してソースエンドポイントとターゲットエンドポイントの接続を暗号化する方法の詳細については、「AWS データベース移行サービスでの SSL の使用」を参照してください。


関連情報

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

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

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

Oracle bystander と AWS DMS を使用して、オンプレミスの Oracle データベースを Amazon RDS for PostgreSQL に移行する

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

AWS公式
AWS公式更新しました 2年前
コメントはありません