スキップしてコンテンツを表示

AWS DMS タスクが正常に実行されたにもかかわらず、AWS DMS によって Amazon S3 ソースエンドポイントからデータが移行されなかった理由を知りたいです。

所要時間2分
0

AWS Database Migration Service (AWS DMS) タスクが正常に実行されたにもかかわらず、Amazon Simple Storage Service (Amazon S3) のソースエンドポイントからデータが移行されていません。この問題をトラブルシューティングしたいです。

解決策

AWS DMS タスクが成功してもデータが移行されない理由はいくつかあります。ユースケースに応じて、解決策を実施してください。

タスクステータスは Load complete, replication ongoing であるにもかかわらず、AWS DMS タスクがターゲットでデータをロードしていない

ソースエンドポイントに定義した S3 パスが正しいことを確認します。レプリケーションログで、AWS DMS が S3 パス内のデータファイルを見つけられないことを示すエントリを特定します。

レプリケーションログのエントリ例

[SOURCE_UNLOAD ]I: Unload finished for table 'dms_schema'.'dms_table' (Id = 1). 0 rows sent. (streamcomponent.c:3396)
[TARGET_LOAD ]I: Load finished for table 'dms_schema'.'dms_table' (Id = 1). 0 rows received. 0 rows skipped. Volume transferred 0. (streamcomponent.c:3667)

Amazon S3 は、全ロードフェーズに関するデータファイル (data.csv) と進行中の変更に関するデータファイル (change_data.csv) を次の形式で保存します。

  • S3-bucket/dms-folder/sub-folder/dms_schema/dms_table/data.csv
  • S3-bucket/dms-folder/sub-folder/dms-cdc-path/dms-cdc-sub-path/change_data.csv

データファイルを見つけるために、S3 ソースエンドポイントはバケットフォルダ、変更データキャプチャ (CDC) パス、テーブル構造フィールドを参照します。

上記のファイルパスの例では、dms-folder/sub-folder がバケットフォルダです。S3 ソースエンドポイントの作成時に入力する CDC パスは、dms-cdc-path/dms-cdc-sub-path です。

例に挙げたファイルパスを使用するテーブル構造の例

{
  "TableCount": 1,
  "Tables": [
    {
      "TableColumns": […],
      "TableColumnsTotal": "1",
      "TableName": "dms_table",
      "TableOwner": "dms_schema",
      "TablePath": "dms_schema/dms_table/"
    }
  ]
}

重要: テーブル構造の TablePath には、バケットフォルダのパス dms-folder/sub-folder を含めないでください。

エンドポイント設定を指定する際には、バケットフォルダは省略可能です。バケットフォルダを指定する場合、CDC パスと TablePath は Amazon S3 の同じフォルダにある必要があります。バケットフォルダを指定しない場合、TablePath と CDC パスは S3 バケットの直下に置かれます。

S3 ソースエンドポイントのバケットフォルダは、バケット名とテーブル構造のスキーマ名の間の任意のフォルダディレクトリにすることができます。上記のテーブル構造の例では、フォルダディレクトリは dms-schema です。バケットにフォルダの階層がない場合は、フィールドを空白のままにしてください。

注: バケットフォルダと CDC パスは、個別のフォルダにすることも、dms-folderdms-folder/subfolder などのサブフォルダを含めることもできます。

DMS タスク設定で S3 ソースエンドポイントを使用する場合、テーブルマッピングにスキーマとテーブルを含める必要があります。データをターゲットに正常に移行するには、スキーマとテーブルが必要です。詳細については、「Amazon S3 の外部テーブルを AWS DMS のソースとして定義する」を参照してください。

タスクのテーブル準備モードに [ターゲットのテーブルを削除] を使用する場合は、DMS は dms_schema.dms_table というターゲットテーブルを作成します。

ターゲットテーブルを作成するコマンドの例

CREATE TABLE 'dms_schema'.'dms_table' (...);

注: Amazon S3 のフォルダ名とオブジェクト名では、大文字と小文字が区別されます。S3 エンドポイントのフォルダ名とオブジェクト名を指定するときは、大文字と小文字を正しく使用してください。

タスクのステータスは Load complete, replication ongoing であるにもかかわらず、テーブルの統計情報セクションにテーブルが存在しない

[ターゲットのテーブルを削除] モードを使用する場合、AWS DMS はターゲットのエンドポイントにテーブルを作成しない場合があります。S3 パスが正しくないか、データ型がサポートされていないことが原因で、この問題が発生する場合があります。

ソースエンドポイントの S3 パスが正しいことを確認します。次に、S3 エンドポイントがそのデータ型をサポートしていることを確認します。

DMS タスクのテーブルマッピングで定義されたフィルターが原因で、テーブルが欠落していないかどうかを確認します。タスクテーブルのマッピングに必要なテーブルが、S3 ソースエンドポイントのテーブル構造で定義されていることを確認してください。

タスクのステータスは Running であり、DMS タスクによりターゲットエンドポイントにテーブルが作成されたにもかかわらず、データが読み込まれていない

AWS DMS が S3 パスからデータを取得できない場合は、レプリケーションログを参照してエラーを特定します。詳細なログを取得するには、SOURCE_CAPTURE のログレベルを Default から Detailed Debug に変更します。

ログの例

[SOURCE_CAPTURE ]E: No response body. Response code: 403 [1001730] (transfer_client.cpp:589)
[SOURCE_CAPTURE ]E: failed to download file </dms-folder/sub-folder/dms_schema/dms_table/data.csv> from bucket <dms-test> as </rdsdbdata/data/tasks/NKMBA237MEB4UFSRDF5ZAF3EZQ/bucketFolder/dms-folder/sub-folder/dms_schema/dms_table/data.csv>,
                status = 4 (FAILED) [1001730] (transfer_client.cpp:592)

レプリケーションログに No response body というエラーが表示される

No response body エラーは、S3 ソースエンドポイントの の AWS Identity and Access Management (IAM) ロールに正しいアクセス許可が設定されていない場合に発生します。この問題を解決するには、エラーメッセージに記載されている S3 パスにデータファイルが存在することを確認してください。次に、IAM ユーザーが s3:GetObject に対するアクセス許可を持っていることを確認します。

注: ソースバケットでバージョニングを有効化した場合は、s3:GetObjectVersion アクセス許可も付与する必要があります。

関連情報

AWS DMS のソースとして Amazon S3 を使用する

コメントはありません

関連するコンテンツ