AWS DMS タスクがエラーなしで失敗したのはなぜですか?

最終更新日: 2019 年 9 月 27 日

AWS Database Migration Service (AWS DMS) を使用して、データをソースエンジンからターゲットエンジンに移行しています。けれどもタスクがエラーなしで失敗しています。この問題を解決するにはどうすれば良いですか。

簡単な説明

AWS DMS タスクが失敗すると、タスクログはエラーメッセージ (]E:) または警告メッセージ (]W:) のいずれかで失敗の原因に関する情報を提供します。場合によっては、AWS DMS タスクがエラーや警告なしで失敗し、原因のトラブルシューティングが困難になることがあります。ほとんどの場合、これは次の 3 つの理由のいずれかが原因で発生します。

1.レプリケーションインスタンスでのリソース競合

CPU とメモリは、次のように、移行タスクに必要な 2 つの最も重要なリソースです。

  • ソースデータ型を AWS DMS タイプのデータ型に変換し、最後にターゲットデータ型に変換するには、CPU が必要です。
  • AWS DMS はソースとターゲットへのストリームを作成するため、メモリが必要です。AWS DMS は、レプリケーションインスタンスのメモリ内のストリームバッファーに情報を保存します。

CPU とメモリは、レプリケーションインスタンスをモニタリングするために内部モニタリングシステムでも使用します。CPU またはメモリのいずれかで競合が発生すると、移行タスクがサイレントに失敗する可能性があります。

2.レプリケーションインスタンスのストレージフルステータス

レプリケーションインスタンスのストレージがいっぱいの場合、移行タスクはエラーなしでサイレントに失敗することがあります。詳細については、「AWS DMS レプリケーションインスタンスがストレージフルステータスになる理由」を参照してください。

3.内部エラーが発生

AWS DMS タスクは、デフォルトでログに記録されるタスクログに表示されない内部エラーがある場合、サイレントに失敗することもあります。

解決方法

最初に、タスクがサイレントに失敗した後、タスクログの最後のエントリの時刻を確認します。次に、障害がログに記録されたのとほぼ同じ時刻の、レプリケーションインスタンスの CPU、メモリ、およびディスクの使用率を確認します。

低い FreeableMemory と高い SwapUsage の組み合わせが表示される場合、レプリケーションインスタンスでメモリ競合が発生している可能性があります。必ず両方のメトリクスを確認してください。詳細については、「データ移行サービスのメトリクス」を参照してください。

CloudWatch メトリクスを表示するには、次の手順に従います。

  1. [AWS DMS コンソール] を開き、ナビゲーションペインから [データベース移行タスク] を選択します。 
  2. 失敗したタスクの名前を選択します。
    概要の詳細セクションのレプリケーションインスタンスの名前を書き留めます。
  3. ナビゲーションペインで、[レプリケーションインスタンス] を選択します。
  4. 手順 3 で書き留めたレプリケーションインスタンスの名前を選択します。
  5. 移行タスクメトリクスセクションで、CPUUtilizationSwapUsageFreeableMemory、および FreeStorageSpace のメトリクスを表示できます。
  6. 詳細を表示するには、メトリクスにカーソルを合わせ、その他のオプションアイコン (3 つの垂直ドット) を選択します。 
  7. [メトリクスで表示] を選択します。

これにより CloudWatch コンソールが開き、タスクが失敗した時点のメトリクスの使用率を表示できます。

CPU またはメモリの競合が一定して発生する場合は、レプリケーションインスタンスで実行されているタスクの数を減らすことを検討してください。これを行うには、新しいレプリケーションインスタンスを起動し、複数のレプリケーションインスタンスにタスクを分散します。または、レプリケーションインスタンスをより大きなインスタンスタイプにスケールアップすることを検討してください。

注意: T2 インスタンスは、CPU クレジットを使い切った後のベースラインパフォーマンスを提供します。たとえば、T2 マイクロインスタンスのベースラインパフォーマンスは 10% です。このため、使用されるインスタンスタイプを考慮し、それに応じて CPU 使用率を確認してください。CPU クレジットとベースラインパフォーマンスの詳細については、「バーストパフォーマンスインスタンスの CPU クレジットとベースラインパフォーマンス」を参照してください。

サイレント障害の原因を特定したら、タスクを再開します。

CPU、メモリ、またはディスク容量に競合がない場合、タスクは内部エラーのために失敗した可能性が高いでしょう。内部エラーをトラブルシューティングするには、5 つのログコンポーネントすべてで詳細なデバッグを有効化します。詳細なデバッグが有効になったら、タスクを再起動し、タスクログを確認して、タスクが失敗した理由を特定します。