【初心者向け】DMS のトラブルシューティング(ネットワーク編)

記事タイトルとURLをコピーする

こんにちは。テクニカルサポート課の森本です。

最近は比較的 DMS 関連のトラブルシューティングに対応することが増えており、自分のトラブルシューティング方法も兼ねて記録しておきます。

DMS のネットワーク構成についてざっくり理解する

DMSのネットワーク図

DMS では EC2 インスタンスをベースとしたレプリケーション専用のインスタンス(レプリケーションインスタンス)を使用します。 こちらは カスタマー管理ではなく AWS 管理の EC2 インスタンスとなるため、カスタマー側の EC2コンソールなどで実態を確認することはできません。

レプリケーションインスタンスがカスタマーのデータベースと通信を行うために、レプリケーションサブネットとして指定したサブネット内に作成した ENI を経由して通信を行います。 こちらの ENI についてはカスタマー側の ENI コンソールで確認可能です(ENIのDescriptionに"DMSNetworkInterface"と記載があります)。

この際に把握しておくべき点は、通信は常にレプリケーションインスタンス側から発生するという点です(黒色の矢印、戻りの通信は省略)。 逆に言えば、カスタマー管理の EC2 インスタンスや DB インスタンスを起点として DMS のレプリケーションインスタンスに向けた通信を発生させることはできません。

データの流れはソースデータベース -> ターゲットデータベース (緑色の矢印)となっているために、ソースデータベース側からレプリケーションインスタンスへ接続しているのかも?と誤解しやすい点ですが、こちらの点を把握しておくと各種設定もスムーズだと思います。

ネットワーク設定の確認事項

以下、DMS でネットワーク接続エラーが発生した場合に確認すべき点をまとめます。

レプリケーションインスタンス側の設定

セキュリティグループ

通信はレプリケーションインスタンス側から発生するので、セキュリティグループのアウトバウンドルールが設定されていることを確認します。

対象を限定する必要がある場合はソース/ターゲットデータベースの IP アドレスとポート番号を送信先に指定したアウトバウンドルールを設定しますが、その場合は固定のIPアドレスだけでなく、データベースが取りうるIPアドレスの範囲(CIDR)を指定することが有効です。

特に RDS の DB インスタンスを使用している場合、障害等によるホストの交換やマルチAZ 構成時のフェイルオーバーによって IP アドレスが変更となる可能性があるので、その場合は DB サブネットグループの CIDR、もしくは DB インスタンスに設定しているセキュリティグループIDを指定してアウトバウンドルールを設定することがベストプラクティスです。

インバウンドルールについては特に指定する必要はありません。

ネットワークACL

ソース、ターゲットのIPアドレスやCIDRとポート(3306等)を送信先とした通信を許可するアウトバウンドルール、およびソース、ターゲットのIPアドレスやCIDRを送信元としたエフェメラルポートへの通信を許可するインバウンドルールが存在することを確認します。

ソース、ターゲットデータベース側の設定

レプリケーションインスタンスの IP アドレス、もしくはサブネットグループの CIDR を送信元とした通信が許可されているかどうかを確認します。 特にRDS DB インスタンスを使用している場合は以下の内容を確認します。

セキュリティグループ

レプリケーションインスタンスの IP アドレス、もしくは サブネットの CIDR を送信元としたインバウンドルールが設定されていることを確認します。

要件上はIPアドレスが正しく設定されていれば通信可能ですが、ホストの交換やレプリケーションインスタンスのフェイルオーバー等で IP アドレスが変更となる可能性があるので、DMS のサブネットグループのCIDRを設定することがベストプラクティスです。

ネットワーク ACL

レプリケーションインスタンスの IP アドレスや CIDR とポート(3306等)を送信元とした通信を許可するインバウンドルール、およびレプリケーションインスタンスのIPアドレスやCIDRを送信先としたエフェメラルポートへの通信を許可するアウトバウンドルールが存在することを確認します。

なお、オンプレミスデータベース等がソース/ターゲットとなる場合は上述の内容に準ずる設定となっているかを確認してください。

また、ファイアウォール等でレプリケーションインスタンスからの通信を阻害していないか、DNS 名を使用している場合は VPC 内から名前解決が行えるかの確認も合わせて行いましょう。

データベースエンジン側の接続情報

ソース、ターゲットエンドポイントの設定で以下情報が正しく設定されていることを確認します。

  • Username
  • Password
  • ServerName
  • Port
  • Database name

ServerName は オンプレミスデータベースの DNS、IPアドレス、または Amazon Relational Database Service (Amazon RDS) エンドポイントに設定します。

Tips

前述のとおり、DMS の通信はレプリケーションインスタンス側から発生することから、 レプリケーションサブネットグループに属するサブネットに構築した EC2 インスタンス上から通信が可能であるか確認することが有効なトラブルシュートの手段となりえます。

特に、サーバーレスレプリケーション を使用する場合、サーバーレス環境のプロビジョニング中に接続テストが実行されるため、問題が発生した場合の切り分けが煩雑になる可能性があります。

事前にレプリケーションインスタンスを作成して接続テストを行ったり、EC2 インスタンスからの接続が可能か確認し、同様の設定でソース/ターゲットエンドポイントを設定することが有効です。

まとめ

問い合わせでよくある DMS の接続問題に関する内容をまとめてみました。

主にこちらのドキュメントを自分なりに解釈した内容ですが、どなたかの参考になれば幸いです。

AWS DMS エンドポイントの接続障害のトラブルシューティング | AWS re:Post

森本 晃大(執筆記事の一覧)

テクニカルサポート課

2023年10月入社。絶賛仕事と子育てに奔走中です。