AWS DMS タスクが成功しても、Amazon S3 ソースエンドポイントからデータが移行されないのはなぜですか?

所要時間2分
0

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

簡単な説明

次に、AWS DMS タスクは成功したものの、データが移行されない最も一般的な理由を示します。

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

解決方法

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

ソースエンドポイントに定義された Amazon S3 パスが正しいことを確認します。レプリケーションログで、ログエントリを確認します。AWS DMS が、ソースエンドポイントに定義されている Amazon 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

Amazon S3 ソースエンドポイントは、3 つの重要なフィールドを使用してデータファイルを検索します。

  • バケットフォルダ
  • データキャプチャ (CDC) パスの変更
  • テーブル構造

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

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

タスクの表準備モードとして Drop tables on target を使用すると、DMS によってターゲット表 dms_schema.dms_table が作成されます。以下の例をご覧ください。

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

注意: Amazon S3 のフォルダ名およびオブジェクト名では、大文字と小文字が区別されます。S3 エンドポイントでは、大文字と小文字が正しい状態で、フォルダ名とオブジェクト名の両方を指定してください。

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

[Drop tables on target] が使用されたときに、ターゲットエンドポイントにテーブル が作成されていないことがあります。これは、Amazon S3 ソースエンドポイントに指定されているテーブル構造が原因である可能性があることを意味します。

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

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

タスクのステータスが「Running」となりターゲットエンドポイントにテーブルが作成されているものの、データがロードされない。加えて、レプリケーションログに「No response body」エラーが記述されている。

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 のアクセス許可があることを確認します。
**注意:**ソース Amazon S3 バケットでバージョニングが有効になっている場合は、追加の s3:GetObjectVersion 許可が必要です。


関連情報

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

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