AWS DMS タスクは成功しましたが、Amazon S3 ソースエンドポイントからデータが移行されていません。その理由を教えてください。

最終更新日: 2020 年 1 月 23 日

AWS Database Migration Service (AWS DMS) タスクが成功しましたが、Amazon Simple Storage Service (Amazon S3) ソースエンドポイントからデータが移行されません。データが移行されないのはなぜですか?そして、この問題のトラブルシューティング方法を教えてください。

簡単な説明

AWS DMS タスクが成功したもののデータが移行されないという場合の、最も一般的なシナリオを次に示します。

  1. タスクのステータスが「Load complete, replication ongoing」となっていても、ターゲットにデータがロードされていない。
    タスクのステータスが「Load complete, replication ongoing」となっていても、[Table statistics] セクションにテーブルが見つからない。
    タスクのステータスが「Running」となりターゲットエンドポイントにテーブルが作成されているものの、データがロードされない。加えて、レプリケーションログに「No response body」エラーが記述されている。

解決方法

1.タスクのステータスは 「Load complete, replication ongoing」ですが、ターゲットにデータがロードされていない。

このシナリオでは、ソースエンドポイントに対して定義された Amazon S3 パスが正しいことを確認します。レプリケーションログから、ソースエンドポイントに対して定義されている Amazon S3 パスで AWS DMS がデータファイルを見つけることができないことを示すログエントリを確認します。次のレプリケーションログエントリの例を参照してください。

メッセージ
[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

Amazon S3 ソースエンドポイントがデータファイルを見つける際は、バケットフォルダーCDC パス、および テーブル構造の 3 つのフィールドが重要になります。 前の例では、 バケットフォルダー として dms-folder/sub-folder/ を、CDC パス としては dms-cdc-path/dms-cdc-sub-path/ を、Amazon S3 ソースエンドポイントの作成時にそれぞれ設定しています。次の例では、テーブル構造 として、前出と同じサンプルファイルのパスを使用します。

{
  "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 バケットのすぐ下に置かれます。 
  • Amazon S3 ソースエンドポイントの バケットフォルダーフィールドには、S3 バケット名とテーブル構造のスキーマ名 (この例では dms-schema) の間にある、任意のフォルダディレクトリを直接指定することができます。S3 バケットの下に、前出の例における dms-folder/sub-folder のようなフォルダの階層構造がない場合は、このフィールドは空白のままにすることができます。
  • バケットフォルダまたは CDC パスは、独立したフォルダーとして記述することも、dms-folderdms-folder/sub-folder といったサブフォルダを含めて記述することもできます。

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

AWS DMS タスクのテーブル準備モードとして「Drop tables on target」を指定した場合、AWS DMS では、次の例のようにターゲットテーブル dms_schema.dms_table を作成します。

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

テーブル準備モードとして「Do nothing」または「Truncate 」を指定する場合、テーブル dms_schema.dms_table は、Amazon S3 ソースエンドポイントで指定されたものと同じテーブル構造を用い、手動で作成する必要があります。

2.タスクのステータスは 「Load complete, replication ongoing」ですが、[Table statistics] セクションにテーブルがありません。

テーブル準備モードで「Drop tables on target」が使用されたときに、ターゲットエンドポイントでテーブルが作成されなかった場合、Amazon S3 ソースエンドポイントに指定されているテーブル構造が原因で問題が発生している可能性があります。

前に説明したように、ソースエンドポイントの Amazon S3 パスが正しいことを確認します。次に、データ型が Amazon S3 エンドポイントでサポートされていることを確認します。

Amazon S3 パスが正しく、データ型がサポートされていることを確認したら、AWS DMS タスクのテーブルマッピングで定義されているフィルタをチェックして、そのフィルタが欠落しているテーブルの原因であるかどうかを確認します。必要なテーブルをタスクテーブルマッピングに含め、そのテーブルが Amazon S3 ソースエンドポイントのテーブル構造で定義されていることを確認します。

3.タスクのステータスは「Running」で、テーブルはターゲットに作成されますが、データはロードされません。

AWS DMS がタスクに定義されている Amazon S3 パスからコンテンツを取得できない場合、レプリケーションログに次のようなエラーが表示されます。

メッセージ
[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)

ほとんどの場合このエラーは、Amazon S3 ソースエンドポイントの AWS Identity and Access Management (IAM) ロールに対し、正しいアクセス許可 (s3:GetObject) が付与されていない場合に発生します。このエラーを解決するには、まずエラーメッセージの Amazon S3 パスにデータファイルが存在することを確認し、次に IAM ユーザーに s3:GetObject に対するアクセス許可があることを確認します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合