Amazon S3 のソースとしての使用AWS DMS - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

Amazon S3 バケットからデータを移行するには、AWS DMS。これを行うには、1 つ以上のデータファイルを含む Amazon S3 バケットへのアクセス権を提供します。その S3 バケットに、データおよびそれらのファイルのデータのデータベーステーブル間のマッピングを記述する JSON ファイルを含めます。

全ロードを開始する前に、ソースデータファイルが Amazon S3 バケットに存在している必要があります。バケット名は、bucketName パラメータを使用して指定します。

ソースデータファイルはカンマ区切り値 (.csv) 形式である必要があります。次の命名規則を使用して名前を付けます。この規則では、schemaName がソーススキーマで、tableName がそのスキーマ内のテーブルの名前です。

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

たとえば、データファイルがmybucket」(以下の Amazon S3 パスにあります。

s3://mybucket/hr/employee

ロード時に、AWS DMS はソーススキーマ名が hr で、ソーステーブル名が employee であると想定します。

加えてbucketName(必須) の場合は、オプションでbucketFolderパラメーターを使用して、AWS DMSは、Amazon S3 バケットのデータファイルを検索する必要があります。前の例を続けて、bucketFoldersourcedata、次にAWS DMSは次のパスでデータファイルを読み取ります。

s3://mybucket/sourcedata/hr/employee

追加の接続属性を使用して、列の区切り文字、行の区切り文字、null 値のインジケータ、およびその他のパラメータを指定できます。詳細については、「のソースとしての Amazon S3 の追加の接続属性AWS DMS」を参照してください。

のソースとして Amazon S3 の外部テーブルの定義AWS DMS

データファイルに加えて、外部テーブル定義も指定する必要があります。An外部テーブルの定義は JSON ドキュメントであり、AWS DMSAmazon S3 からのデータを解釈する必要があります。このドキュメントの最大サイズは 2 MB です。AWS DMS マネジメントコンソールを使用してソースエンドポイントを作成する場合、JSON を直接テーブルマッピングボックスに入力できます。AWS Command Line Interface (AWS CLI) または AWS DMS API を使用して移行を実行する場合は、JSON ファイルを作成して外部テーブル定義を指定することができます。

以下のものが含まれるデータファイルがあるとします。

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

このデータ用の外部テーブル定義の例を次に示します。

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

この JSON ドキュメントの要素は次のとおりです。

TableCount— ソーステーブルの数。この例では、テーブルは 1 つしかありません。

Tables— ソーステーブルあたり 1 つの JSON マップで構成される配列。この例では、マップは 1 つしかありません。各マップは以下の要素で構成されています。

  • TableName— ソーステーブルの名前。

  • TablePath— Amazon S3 バケット内のパスで、AWS DMSが全データロードファイルを見つけることができます。bucketFolder の値を指定した場合、この値がパスの先頭に付加されます。

  • TableOwner— このテーブルのスキーマ名。

  • TableColumns— 1 つ以上のマップの配列。それぞれがソーステーブルの列について説明します。

    • ColumnName— ソーステーブルの列の名前。

    • ColumnType— 列のデータ型。有効なデータ型については、「Amazon S3 のソースデータ型」を参照してください。

    • ColumnLength— この列のバイト数。S3 ソースが完全 LOB モードをサポートしていないため、列の最大長は 2147483647 バイト (2,047 メガバイト) に制限されています。

    • ColumnNullable— ブール値trueこの列に NULL 値を含めることができる場合 (デフォルト =false).

    • ColumnIsPk— ブール値trueこの列がプライマリキーの一部である場合 (デフォルト=false).

  • TableColumnsTotal— 列のリクエストの総数。この番号は、TableColumns 配列内の要素数と一致している必要があります。

ColumnLength は、以下のデータ型に適用されます。

  • BYTE

  • STRING

他に指定がない限り、AWS DMS では ColumnLength がゼロであることが想定されます。

注記

サポートされているバージョンのAWS DMSS3 ソースデータには、S3 の前の最初の列としてオプションのオペレーション列を含めることもできます。TableNameカラムの値。このオペレーション列は、フルロード時にデータを S3 ターゲットエンドポイントに移行するために使用されるオペレーション (INSERT) を識別します。

存在する場合、この列の値は INSERT オペレーションキーワードの最初の文字 (I) です。指定されている場合、この列は通常、S3 ソースが以前の移行中に S3 ターゲットとして DMS によって作成されたことを示します。

以前の DMS バージョンでは、この列は以前の DMS 全ロードから作成された S3 ソースデータにはありませんでした。この列を S3 ターゲットデータに追加すると、S3 ターゲットに書き込まれるすべての行の形式を、全ロード中に書き込まれたか、CDC ロード中に書き込まれたかにかかわらず一貫させることができます。S3 ターゲットデータをフォーマットするオプションの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」を参照してください。

NUMERIC 型の列の場合は、精度とスケールを指定します。精度は数値の桁の合計数であり、スケールは小数点以下の桁数です。次に示すように、これには ColumnPrecision および ColumnScale 要素を使用します。

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

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

AWS DMS による全データロードの後で、オプションでターゲットエンドポイントにデータの変更をレプリケートできます。これを行うには、Amazon S3 バケットに変更データキャプチャファイル (CDC ファイル) をアップロードします。AWS DMSは、アップロード時にこれらの CDC ファイルを読み取り、ターゲットエンドポイントで変更を適用します。

CDC ファイルは次のように名前が付けられます。

CDC00001.csv CDC00002.csv CDC00003.csv ...
注記

変更データフォルダ内の CDC ファイルをレプリケートするには、辞書と同じ (順次) 順序で正常にアップロードします。たとえば、ファイル CDC00002.csv はファイル CDC00003.csv より前にアップロードします。そうしないと、CDC00002.csv はスキップされ、CDC00003.csv の後にロードするとレプリケートされません。一方、ファイル CDC00004.csv は、CDC00003.csv の後にロードされた場合に正常にレプリケートされます。

どこを示すためにAWS DMSがファイルを見つけることができる場合は、cdcPathパラメータ。前の例を続けると、cdcPathchangedata に設定した場合、AWS DMS は次のパスで CDC ファイルを読み取ります。

s3://mybucket/changedata

設定した場合cdcPathchangedataおよびbucketFoldermyFolder、次にAWS DMSは次のパスで CDC ファイルを読み取ります。

s3://mybucket/myFolder/changedata

CDC ファイル内のレコードは次のような形式になります。

  • Operation — 実行する変更オペレーション:INSERTまたはI,UPDATEまたはU, またはDELETEまたはD。これらのキーワードと文字値では大文字と小文字は区別されません。

    注記

    サポート対象AWS DMSバージョン,AWS DMSは、各ロードレコードに対して実行するオペレーションを 2 つの方法で識別できます。AWS DMSレコードのキーワード値 (など) からこれを実行できます。INSERT)またはそのキーワードの先頭文字(たとえば、I). 以前のバージョンでは、AWS DMSは、完全なキーワード値からのみロードオペレーションを認識しました。

    以前のバージョンのAWS DMSの場合、CDC データを記録するために完全なキーワード値が書き込まれていました。また、以前のバージョンでは、キーワード initial のみを使用して、S3 ターゲットにオペレーション値を書き込みました。

    両方のフォーマットを認識すると、AWS DMSS3 ソースデータを作成するためのオペレーション列の記述方法に関係なく、オペレーションを処理します。このアプローチでは、後の移行のソースとして S3 ターゲットデータを使用できます このアプローチでは、後の S3 ソースのオペレーション列に表示されるキーワードの初期値の形式を変更する必要はありません。

  • テーブル名 — ソーステーブルの名前。

  • スキーマ名 — ソーススキーマの名前。

  • データ — 変更するデータを表す 1 つまたは複数の列。

employee という名前のテーブルの CDC ファイルの例を次に示します。

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

のソースとして Amazon S3 を使用する場合の前提条件AWS DMS

Amazon S3 をのソースとして使用するにはAWS DMSを使用する場合、ソースの S3 バケットは同じAWSデータを移行する DMS レプリケーションインスタンスとしてのリージョン。また、AWS移行に使用するアカウントには、ソースバケットへの読み取りアクセス権が必要です。

移行タスクを作成するために使用されるユーザーアカウントに割り当てられる AWS Identity and Access Management (IAM) ロールは、次の一連のアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

のソースとしての Amazon S3 の追加の接続属性AWS DMS

追加の接続属性として次のオプションを指定できます。

オプション 説明
bucketFolder

(オプション) S3 バケットのフォルダ名。この属性を指定すると、ソースデータファイルおよび CDC ファイルがパス bucketFolder/schemaName/tableName/ から読み取られます。この属性が指定されない場合、使用されるパスは schemaName/tableName/ となります。以下に例を示します。

bucketFolder=testFolder;

bucketName

S3 バケットの名前。以下に例を示します。

bucketName=buckettest;

cdcPath CDC ファイルの場所。タスクで変更データをキャプチャする場合、この属性が必須です。それ以外の場合はオプションです。cdcPath が存在する場合、AWS DMS はこのパスから CDC ファイルを読み取り、データ変更をターゲットエンドポイントにレプリケートします。詳細については、「Amazon S3 で CDC をのソースとして使用するAWS DMS」を参照してください。以下に例を示します。

cdcPath=dataChanges;

csvDelimiter

ソースファイル内の列を分離するために使用される区切り文字。デフォルトではカンマを使用します。以下に例を示します。

csvDelimiter=,;

csvRowDelimiter

ソースファイル内の行を分離するために使用される区切り文字。デフォルトでは、改行 (\n) です。以下に例を示します。

csvRowDelimiter=\n;

externalTableDefinition

方法を記述する JSON オブジェクトAWS DMSは、移行中に Amazon S3 バケットのデータを解釈する必要があります。詳細については、「のソースとして Amazon S3 の外部テーブルの定義AWS DMS」を参照してください。以下に例を示します。

externalTableDefinition=json_object;

ignoreHeaderRows

この値を 1 に設定すると、AWS DMS は .csv ファイルの最初の行ヘッダーを無視します。値が 1 の場合は機能が有効になり、値が 0 の場合は機能が無効になります。

デフォルトは 0 です。

例:

ignoreHeaderRows=1;

rfc4180

この値がtrueまたはyの場合、先頭の二重引用符にはそれぞれ終了の二重引用符が続く必要があります。このフォーマットは、RFC 4180 に準拠しています。この値がfalseまたはnの場合、文字列リテラルはターゲットにそのままコピーされます。この場合、区切り文字 (行または列) はフィールドの末尾を表します。したがって、区切り文字は値の末尾を示すため、これを文字列の一部とすることはできません。

デフォルト: true

有効な値: truefalseyn

例:

rfc4180=false;

Amazon S3 のソースデータ型

のソースとして Amazon S3 を使用するデータ移行AWS DMSが Amazon S3 からにデータをマッピングする必要があります。AWS DMSデータ型。詳細については、「のソースとして Amazon S3 の外部テーブルの定義AWS DMS」を参照してください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションを参照してください。

AWS DMS のデータ型の詳細については、「のデータ型AWSDatabase Migration Service」を参照してください。

以下のようになりますAWS DMSデータ型は、ソースとして Amazon S3 で使用されます。