AWS Database Migration Service のターゲットに Amazon S3 を使用する - AWS Database Migration Service

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

AWS Database Migration Service のターゲットに Amazon S3 を使用する

サポートされるデータベースのソースから AWS DMS を使用することにより、データを Amazon S3 に移行できます。AWS DMS タスクのターゲットとして Amazon S3 を使用する場合、全ロードと変更データ キャプチャ (CDC) データの両方はデフォルトでカンマ区切り値 (.csv) 形式で書き込まれます。よりコンパクトなストレージと高速なクエリオプションにおいては、Apache Parquet (.parquet) 形式でデータを書き込むオプションもあります。

AWS DMS は、.csv ファイルについて LOAD00001.csv、LOAD00002...、LOAD00009、LOAD0000A など、増分の 16 進数カウンタを使用して全ロード時に作成されたファイルに名前を付けます。AWS DMS は、20141029-1134010000.csv などの、タイムスタンプを使用して CDC ファイルの名前を付けます。レコードを含むソーステーブルごとに、ソーステーブルが空出ない限り、AWS DMS は、指定されたターゲット フォルダの下にフォルダを作成します。AWS DMS は、指定された Amazon S3 バケットに、すべての全ロードおよび CDC ファイルを書き込みます。AWS DMS が作成するファイルのサイズは、MaxFileSize のエンドポイント設定を使用して制御できます。

パラメータ bucketFolder には、.csv ファイルまたは .parquet ファイルが S3 バケットにアップロードされる前に保存される場所が含まれます。.csv ファイルでは、テーブルデータは、全ロードファイルとともに表示されている S3 バケットに以下の形式で保存されます。

database_schema_name/table_name/LOAD00000001.csv database_schema_name/table_name/LOAD00000002.csv ... database_schema_name/table_name/LOAD00000009.csv database_schema_name/table_name/LOAD0000000A.csv database_schema_name/table_name/LOAD0000000B.csv ...database_schema_name/table_name/LOAD0000000F.csv database_schema_name/table_name/LOAD00000010.csv ...

追加の接続属性を使用して、列の区切り文字、行の区切り文字、およびその他のパラメータを指定できます。追加の接続属性の詳細については、このセクションの最後にある「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。

次のとおり、ExpectedBucketOwner Amazon S3 エンドポイント設定を使用してバケット所有者を指定して、スナイプ攻撃を防ぐことができます。その後、接続をテストしたり移行の実行をリクエストしたりすると、S3 は指定されたパラメータに対してバケット所有者のアカウント ID をチェックします。

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

AWS DMS を使用してデータ変更レプリケーションを行う場合、.csv または .parquet 出力ファイルの最初の列に、次の .csv ファイルのように、行データがどのように変更されたかが示されます。

I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas

この例では、ソースデータベースに EMPLOYEE テーブルがあるとします。AWS DMS は以下のイベントに応答して、データを .csv または .parquet ファイルに書き込みます。

  • 新しい従業員 (Bob Smith、従業員 ID 101) がニューヨークオフィスに 2014 年 6 月 4 日に採用されました。.csv または .parquet ファイルで、最初の列の I は、新しい行がソースデータベースの EMPLOYEE テーブルに INSERT されたことを示しています。

  • 2015 年 10 月 8 日に、Bob はロサンゼルスオフィスに転勤になりました。.csv または .parquet ファイルで、U は、Bob の新しい勤務地を反映するため、EMPLOYEE テーブルの対応する行が UPDATE されたことを示しています。その他の行は、UPDATE の後に表示される、EMPLOYEE テーブルの行を反映しています。

  • 2017 年 3 月 13 日に、Bob はダラスオフィスに再度転勤になりました。.csv または .parquet ファイルで、U はこの行が再度 UPDATE されたことを示しています。その他の行は、UPDATE の後に表示される、EMPLOYEE テーブルの行を反映しています。

  • Bob は、しばらくダラスに勤務した後、退職しました。.csv または .parquet ファイルで、D は、行がソーステーブルで DELETE されたことを示しています。その他の行は、削除される前に行が EMPLOYEE テーブルにどのように表示されたかを反映しています。

CDC のデフォルトでは、AWS DMS がトランザクションの順序に関係なく、各データベーステーブルの行の変更を保存することを覚えておいてください。トランザクション順序に従って CDC ファイルに行の変更を保存する場合は、S3 エンドポイント設定を使用して、S3 ターゲットに CDC トランザクションファイルを保存するフォルダ パスを指定する必要があります。詳細については、「S3 ターゲットでのトランザクション順序を含むデータ変更 (CDC) のキャプチャ」をご参照ください。

データ レプリケーション タスク中に Amazon S3 ターゲットへの書き込みの頻度を制御するには、cdcMaxBatchIntervalcdcMinFileSize の追加接続属性を設定することができます。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。

ターゲットとして Amazon S3 を使用するための前提条件

ターゲットとして Amazon S3 を使用する前に、以下が true であることを確認します:

  • ターゲットとして使用している S3 バケットは、データの移行に使用している DMS レプリケーション インスタンスと同じ AWS リージョンにあります。

  • 移行に使用する AWS アカウントには、ターゲットとして使用する S3 バケットへの書き込みおよび削除アクセス許可が付与された IAM ロールがあります。

  • このロールにはタグ付けのためのアクセスが許可されているため、ターゲットバケットに書き込まれる任意の S3 オブジェクトにタグ付けができます。

  • IAM ロールには DMS (dms.amazonaws.com) が[trusted entity] (信頼されたエンティティ) として追加されています。

このアカウントアクセスを設定するには、移行タスクを作成するために使用するユーザーアカウントに割り当てられたロールに次の一連のアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::buckettest2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2" ] } ] }

S3 をターゲットとする検証を使用する際の前提条件については、「S3 ターゲット検証の前提条件」を参照してください。

ターゲットとしての Amazon S3 の使用における制限

ターゲットとして Amazon S3 を使用する場合、以下の制限が適用されます:

  • S3 のバージョニングは有効にしません。S3 のバージョニングが必要な場合は、ライフサイクルポリシーを使用して古いバージョンを積極的に削除します。これを行わないと、S3 list-object コールのタイムアウトが原因でエンドポイント接続テストが失敗する可能性があります。S3 バケットのライフサイクルポリシーを作成するには、「ストレージのライフサイクルの管理」を参照してください。S3 オブジェクトのバージョンを削除するには、「バージョニングが有効なバケットからのオブジェクトバージョンの削除」を参照してください。

  • VPC 対応 (ゲートウェイ VPC) S3 バケットはバージョン 3.4.7 以降でサポートされます。

  • 変更データキャプチャ (CDC) では、次のデータ定義言語 (DDL) コマンドがサポートされています:[Truncate Table] (テーブルの切り捨て)、[Drop Table] (テーブルの削除)、[Create Table] (テーブルの作成)、[Rename Table] (テーブルの名前変更)、[Add Column] (列追加)、[Rename Column] (列名変更)、[Change Column Data Type] (列データ型の変更)。ソースデータベースで列が追加、ドロップ、または名前の変更が実行されても、ターゲットの S3 バケットには ALTER ステートメントは記録されず、AWS DMS は以前に作成されたレコードを新しい構造に一致するように変更することがないことに注意します。AWS DMS は変更後に新しいテーブル構造を使用して新しいレコードを作成します。

    注記

    DDL の切り捨てオペレーションは、S3 バケットからすべてのファイルおよび対応するテーブルフォルダを削除します。タスク設定を使用して、この動作を無効にし、変更データ キャプチャ (CDC) 中に DMS が DDL 動作を処理する方法を設定できます。詳細については、「変更処理の DDL 処理のタスク設定」をご参照ください。

  • 完全 LOB モードはサポートされていません。

  • 全ロード時のソーステーブル構造に対する変更はサポートされていません。全ロード時のデータ変更はできます。

  • 同じソーステーブルから同じターゲット S3 エンドポイントバケットにデータをレプリケートする複数のタスクを実行すると、それらのタスクが同じファイルに書き込みます。同じテーブルのデータソースを使用する場合、異なるターゲットエンドポイント (バケット) を指定することをお勧めします。

  • BatchApply は S3 エンドポイントに対応していません。バッチ 適用の使用 (例えば、S3 ターゲットに対して BatchApplyEnabled ターゲットメタデータ (タスク設定) を実行すると、データ損失につながることがあります。

  • DatePartitionEnabled または addColumnNamePreserveTransactions または CdcPath と組み合わせて使用できません。

  • AWS DMS は、変換ルールを使用した複数のソーステーブル名の同じターゲットフォルダへの変更をサポートしていません。

  • フルロードフェーズ中にソーステーブルへの書き込みが多い場合、DMS は S3 バケットまたはキャッシュされた変更に重複レコードを書き込むことがあります。

  • TargetTablePrepModeDO_NOTHING を使用してタスクに設定すると、フルロードフェーズ中にタスクが突然停止して再開した場合に、DMS は S3 バケットに重複レコードを書き込むことがあります。

  • PreserveTransactionstrue に設定してターゲットエンドポイントを設定すると、テーブルをリロードしても以前に生成した CDC ファイルはクリアされません。詳細については、「S3 ターゲットでのトランザクション順序を含むデータ変更 (CDC) のキャプチャ」を参照してください。

S3 をターゲットとする検証を使用する際の制限については、「ターゲットの S3 の検証を使用する場合の制限」を参照してください。

セキュリティ

ターゲットとして Amazon S3 を使用するには、移行のために使用されるアカウントに、ターゲットとして使用される Amazon S3 バケットに対する書き込みおよび削除アクセス権限が前提です。Amazon S3 にアクセスするために必要なアクセス許可がある、IAM ロールの Amazon リソースネーム (ARN) を指定します。

AWS DMS は、既定アクセスコントロールリスト (ACL) で周知の Amazon S3に対する一連の事前定義済みの許可をサポートしています。各既定 ACL には、Amazon S3 バケットのアクセス許可を設定するために使用できる一連の被付与者とアクセス許可があります。S3 ターゲットエンドポイントの接続文字列属性で cannedAclForObjects で使用して、既定 ACL を指定できます。追加接続属性 cannedAclForObjects の使用についての詳細は、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。Amazon S3 の既定 ACL の詳細については、「既定 ACL」をご参照ください。

移行に使用する IAM ロールは、s3:PutObjectAcl API オペレーションを実行できる必要があります。

Apache Parquet を使用した Amazon S3 オブジェクトの保存

カンマ区切り値 (.csv) 形式は、Amazon S3 ターゲットオブジェクトのデフォルトのストレージ形式です。よりコンパクトなストレージと高速なクエリについては、代わりに Apache Parquet (.parquet) をストレージ形式として使用できます。

Apache Parquet は、Hadoop 向けに当初設計されたオープンソースのファイルストレージ形式です。Apache Parquet の詳細については、「https://parquet.apache.org/」を参照してください。

移行された S3 ターゲットオブジェクトに .parquet ストレージ形式を設定するには、以下のメカニズムを使用できます。

Amazon S3 オブジェクトのタグ付け

タスクテーブル マッピングルールの一部として適切な JSON オブジェクトを指定することで、レプリケーション インスタンスが作成する Amazon S3 オブジェクトにタグを付けることができます。有効なタグ名を含む S3 オブジェクトのタグ付けに関する要件とオプションの詳細については、Amazon Simple Storage Service ユーザーガイドの「オブジェクトのタグ付け」をご参照ください。JSON を使用したテーブルマッピングの詳細については、「 JSON を使用するテーブル選択および変換を指定する」をご参照ください。

selection ルールタイプの 1 つ以上の JSON オブジェクトを使用して、指定するテーブルおよびスキーマで S3 オブジェクトにタグ付けします。次に、post-processing ルールタイプの 1 つ以上の JSON オブジェクトで add-tag アクションを使用して、selection オブジェクト (1 つ以上のオブジェクト) を行います。この後処理ルールは、タグ付けする S3 オブジェクトを識別し、これらの S3 オブジェクトに追加するタグに名前と値を指定します。

post-processing ルールタイプの JSON オブジェクトで指定するパラメータは、次のテーブルにあります。

パラメータ 使用できる値: 説明
rule-type post-processing

生成されたターゲットオブジェクトへの後処理アクションに適用する値です。選択した S3 オブジェクトには、1 つ以上の後処理ルールを指定できます。

rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
rule-action add-tag S3 オブジェクトに適用する後処理アクションです。add-tag アクションの単一の JSON 後処理オブジェクトを使用して、1 つ以上のタグを追加できます。
object-locator

schema-name - テーブルスキーマの名前。

table-name - テーブルの名前。

ルールが適用されるスキーマおよびテーブルごとの名前。各 object-locator パラメータの値のすべてあるいは一部で、「%」パーセント記号をワイルドカードとして使用できます。したがって、これらの項目には以下を対応させることができます。

  • 単一のスキーマの 1 つのテーブル

  • すべてあるいは一部のスキーマの 1 つのテーブル

  • 単一のスキーマの一部あるいはすべてのテーブル

  • 一部あるいはすべてのスキーマの一部あるいはすべてのテーブル

tag-set

key - 単一のタグの任意の有効な名前。

value - このタグに有効な任意の JSON 値。

特定の object-locator に一致する作成された S3 オブジェクトごとに設定する 1 つ以上のタグの名前と値です。単一の tag-set パラメータオブジェクトで 10 個までのキー値ペアを指定することができます。S3 オブジェクトタグの詳細については、Amazon Simple Storage Service ユーザーガイドの「オブジェクトのタグ付け」をご参照ください。

また、タグの key および value パラメータの両方で、${dyn-value} を使用して値のすべてあるいは一部に動的な値を指定することもできます。ここでは、${dyn-value}${schema-name} あるいは ${table-name} のいずれかにできます。したがって、現在選択されているスキーマあるいはテーブルにパラメータ値の一部あるいは全体として名前を挿入することができます。

注記
重要

key パラメータに動的な値を挿入する場合には、使用方法に応じて、S3 オブジェクトに名前が重複するタグを生成することができます。この場合、重複するタグの 1 つのみがオブジェクトに追加されます。

S3 オブジェクトの選択をタグ付けするために複数の post-processing ルールタイプを指定する場合、各 S3 オブジェクトは 1 つの後処理ルールをから 1 つの tag-set オブジェクトのみを使用してタグ付けされます。指定する S3 オブジェクトへのタグ付けに使用される特定のタグセットは、その S3 オブジェクトに最も一致するオブジェクトロケーターに関連する後処理ルールのうちの 1 つです。

たとえば、同じ S3 オブジェクトに 2 つの後処理ルールが識別されるとします。また、1 つのルールのオブジェクトロケーターはワイルドカードを使用し、別のルールのオブジェクトロケーターは S3 オブジェクトを識別するための完全な一致 (ワイルドカードなし) を使用するとします。この場合、完全に一致する後処理ルールに関連付けられたタグが S3 オブジェクトのタグ付けに使用されます。複数の後処理ルールが指定された S3 オブジェクトに同様に一致する場合、この後処理ルールに最初に関連図けられたタグセットがオブジェクトのタグ付けに使用されます。

例 単一のテーブルとスキーマに作成された S3 オブジェクトへの静的なタグの追加

次の選択と後処理ルールは 3 つのタグ (tag_1tag_2tag_3) と該当する静的値 (value_1value_2value_3) を追加して S3 オブジェクトを作成します。この S3 オブジェクトは、aat2 という名前のスキーマがある STOCK という名前のソース内の単一のテーブルに該当します。

{ "rules": [ { "rule-type": "selection", "rule-id": "5", "rule-name": "5", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" }, { "key": "tag_3", "value": "value_3" } ] } ] }
例 複数のテーブルとスキーマに作成された S3 オブジェクトへの静的および動的タグの追加

次の例には 1 つの選択と 2 つの後処理ルールがあり、ここでは、ソースからの入力にすべてのテーブルとすべてのスキーマが含まれています。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "%", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_${table-name}" } ] }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat", "table-name": "ITEM", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" } ] } ] }

最初の後処理ルールは、該当する動的値 (${schema-name}my_prefix_${table-name}) を使用した 2 つのタグ (dw-schema-namedw-schema-table) をターゲットに作成されたほぼすべての S3 オブジェクトに追加します。例外は、2 番目の後処理ルールで色別されてタグ付けされる S3 オブジェクトです。したがって、ワイルドカードオブジェクトロケーターによって識別された各ターゲット S3 オブジェクトは、ソースで該当するスキーマおよびテーブルを識別するタグを使用して作成されます。

2 番目の後処理ルールは、完全に一致するオブジェクトロケーターによって識別される S3 オブジェクトに、該当する静的値 (value_1value_2) を使用して tag_1 および tag_2 を追加します。作成されたこの S3 オブジェクトはしたがって、aat という名前のスキーマがある ITEM という名前のソース内の単一のテーブルに該当します。完全一致のため、前述のタグは、最初の後処理ルール (ワイルドカードのみによって S3 に一致) でオブジェクトに追加されたタグを上書きします。

例 S3 オブジェクトに動的タグの名前と値の両方を追加する

次の例には 2 つの選択ルールと 1 つの後処理ルールがあります。ここでは、ソースの入力には retail あるいは wholesale スキーマに ITEM テーブルのみが含まれています。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "retail", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "wholesale", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "ITEM", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_ITEM" }, { "key": "${schema-name}_ITEM_tag_1", "value": "value_1" }, { "key": "${schema-name}_ITEM_tag_2", "value": "value_2" } ] ] }

後処理ルールのタグセットは、ターゲットの ITEM テーブルに作成されたすべての S3 オブジェクトに 2 つのタグ (dw-schema-namedw-schema-table) を追加します。最初のタグには動的値 "${schema-name}" があり、2 つ目のタグには静的値 "my_prefix_ITEM" があります。したがって、各ターゲット S3 オブジェクトは、ソースで該当するスキーマおよびテーブルを識別するタグを使用して作成されます。

さらに、このタグセットは 2 つの追加タグを動的な名前 (${schema-name}_ITEM_tag_1"${schema-name}_ITEM_tag_2") で追加します。これには該当する静的値 (value_1value_2) があります。したがって、これらのタグはそれぞれ現在のスキーマ (retail あるいは wholesale) に対して命名されます。各オブジェクトは単一の一意のスキーマ名で作成されたため、このオブジェクトで動的な名前を重複することはできません。スキーマ名はそれ以外の一意のタグ名を作成するために使用されます。

Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成

Amazon S3 ターゲットオブジェクトを暗号化するカスタム AWS KMS キーを作成して使用できます。KMS キーを作成したら、S3 ターゲットエンドポイントを作成するときに次のいずれかの方法を使用して、KMS キーを使用してオブジェクトを暗号化できます。

  • AWS CLI を使用して create-endpoint コマンドを実行するときに、S3 ターゲットオブジェクトに対して次のオプションを (デフォルトの .csv ファイルストレージ形式で) 使用します。

    --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'

    ここで your-KMS-key-ARN とは、KMS キーの Amazon リソースネーム (ARN) です。詳細については、「Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用」をご参照ください。

  • 値 (SSE_KMS) に追加の接続属性 (encryptionMode) を設定し、KMS キーの ARN に追加の接続属性 (serverSideEncryptionKmsKeyId) を設定します。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。

KMS キーを使用して Amazon S3 ターゲットオブジェクトを暗号化するには、Amazon S3 バケットにアクセスする許可がある IAM ロールが必要です。次に、この IAM ロールは作成した暗号化キーに添付されるポリシー (キーポリシー) にアクセスします。これは、IAM コンソールで次を作成して実行します:

  • Amazon S3 バケットにアクセスする権限があるポリシーです。

  • このポリシーがある IAM ロールです。

  • このロールを参照するキーポリシーを持つ KMS 暗号化キー

以下の手順でこれを行う方法について説明します。

Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、ナビゲーションペインの [ポリシー] を選択します。[ポリシー] ページが開きます。

  3. [Create policy] (ポリシーを作成) を選択します。[Create policy (ポリシーの作成)] ページが開きます。

  4. [サービス]、[S3] の順に選択します。アクションのアクセス権限の一覧が表示されます。

  5. [すべて展開] を選択して一覧を展開し、少なくとも以下のアクセス権限を選択します。

    • ListBucket

    • PutObject

    • DeleteObject

    必要に応じて他のアクセス権限を選択したら、[すべて折りたたむ] を選択して一覧を折りたたみます。

  6. [リソース] を選択してアクセスするリソースを指定します。少なくとも [All resources] (すべてのリソース) を選択して、全般的な Amazon S3 リソースへのアクセスを提供します。

  7. 必要に応じて他の条件やアクセス許可を追加したら、[ポリシーの確認] を選択します。[ポリシーの確認] ページで結果を確認します。

  8. 設定が必要に応じている場合には、ポリシーの名前 (DMS-S3-endpoint-access など) と他の説明を入力し、[ポリシーの作成] を選択します。[ポリシー] ページが開き、ポリシーが作成されたことを示すメッセージが表示されます。

  9. [ポリシー] のリストからポリシー名を検索して選択します。[概要] ページが表示され、次のようなポリシーの JSON を示します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" } ] }

これで、暗号化のために Amazon S3 リソースにアクセスする新しいポリシーが指定した名前 (DMS-S3-endpoint-access など) で作成されました。

このポリシーを使用して IAM ロールを作成するには
  1. IAM コンソールで、ナビゲーションペインの [Roles] (ロール) を選択します。[ロール] の詳細ページが開きます。

  2. [Create role] (ロールの作成) を選択します。[Create role] (ロールの作成) ページが開きます。

  3. AWS のサービスが信頼されるエンティティとして選択されたら、この IAM ロールを使用するサービスとして DMS を選択します。

  4. [Next: Permissions] (次へ: アクセス許可) を選択します。[Create role] (ロールの作成) ページに [Attach permissions policies] (アクセス権限ポリシーの添付) ビューが表示されます。

  5. 前の手順で作成した IAM ロールの IAM ポリシーを見つけて選択します (DMS-S3-endpoint-access)。

  6. [Next:Tags]‭‬(次へ: タグ) を選択します。[Create role] (ロールの作成) ページに[Add tags] (タグを追加) ビューが表示されます ここでは、任意のタグを追加することができます。

  7. [Next: Review] (次のステップ: レビュー) を選択します。[Create role] (ロールの作成) ページに[Review] (確認) ビューが表示されます。ここで、結果を確認できます。

  8. 設定が必要に応じている場合には、ロールの名前 (必須、DMS-S3-endpoint-access-role など) と追加の説明を入力して、[Create role] (ロールの作成) を選択します。[ロール] の詳細ページが開き、ロールが作成されたことを示すメッセージが表示されます。

これで、暗号化のために Amazon S3 リソースにアクセスする新しいロールが指定した名前 (DMS-S3-endpoint-access-role など) で作成されました。

この IAM ロールを参照するキーポリシーを持つ KMS 暗号化キーを作成するには
注記

AWS DMS と AWS KMS 暗号化キーの連携について詳しくは、「暗号化キーの設定と AWS KMS のアクセス許可の指定」をご参照ください。

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ナビゲーションペインで、[カスタマーマネージドキー] を選択します。

  4. [Create key] (キーの作成) を選択します。[キーの設定] ページが開きます。

  5. [キーの種類] で、[対称] を選択します。

    注記

    このキーを作成する場合、Amazon S3 などすべての AWS サービスでは対称暗号化キーしか使用できないため、作成できるのは対称キーのみです。

  6. [アドバンスドオプション] を選択します。[キーマテリアルのオリジン] で、[KMS] が選択されていることを確認し、[次へ] を選択します。[ラベルの追加] ページが開きます。

  7. [エイリアスと説明の作成] で、キーのエイリアス (DMS-S3-endpoint-encryption-key など) と追加の説明を入力します。

  8. [タグ] で、キーを識別してその使用状況を追跡するために役立つ任意のタグを追加したら、[次へ] を選択します。[キー管理アクセス許可の定義] ページが開き、選択できるユーザーおよびロールの一覧が表示されます。

  9. キーを管理するユーザーおよびロールを追加します。このユーザーとロールにキーを管理するために必要な権限があることを確認してください。

  10. [キーの削除] で、キー管理者がそのキーを削除できるかどうかを選択したら、[次へ] を選択します。[キーの使用アクセス許可の定義] ページが開き、選択できる追加のユーザーおよびロールの一覧が表示されます。

  11. [This account](このアカウント) で、Amazon S3 ターゲットに対して暗号化オペレーションを実行できるユーザーを選択します。また、[Roles] (ロール) で以前に作成したロールを選択して、Amazon S3 ターゲットオブジェクト (DMS-S3-endpoint-access-role など)を暗号化するためのアクセスを有効化します。

  12. リストにない他のアカウントに同じアクセス権限を付与するには、[他の AWS アカウント] で [別の AWS アカウントを追加する]、[次へ] の順に選択します。[キーポリシーの表示と編集] ページが開き、既存の JSON に入力して表示および編集できるキーポリシーの JSON が表示されます。ここでは、前のステップで選択したロールおよびユーザー (例えば、AdminUser1) を参照するキーポリシーを表示できます。また、次の例に示すように、異なるプリンシパル (ユーザーとロール) に許可される別々のキーアクションも確認できます。

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  13. [終了] を選択します。[Encryption keys] (暗号化キー) ページが開き、KMS ーが作成されたことを示すメッセージが表示されます。

これで、指定したエイリアス (DMS-S3-endpoint-encryption-key など) を使用する新しい KMS キーが作成されました。このキーによって AWS DMS は Amazon S3 ターゲットオブジェクトを暗号化できます。

日付ベースのフォルダパーティション分割を使用する

AWS DMS は、ターゲット エンドポイントとして Amazon S3 を使用する場合のトランザクションコミット日に基づく S3 フォルダパーティションをサポートします。日付ベースのフォルダパーティション分割を使用すると、1 つのソーステーブルから S3 バケット内の時間階層フォルダ構造にデータを書き込むことができます。S3 ターゲット エンドポイントを作成するときにフォルダをパーティション分割することで、次のことが可能になります:

  • S3 オブジェクトの管理が向上します

  • 各 S3 フォルダのサイズを制限する

  • データレイクのクエリやその他の後続オペレーションを最適化する

S3 ターゲット エンドポイントを作成するときに、日付ベースのフォルダのパーティション分割を有効にできます。このモードは、既存のデータを移行して進行中の変更レプリケーションを行うか (全ロード + CDC)、またはデータ変更のみレプリケーションする (CDCのみ) とき有効にできます。以下のターゲット エンドポイント設定を使用します:

  • DatePartitionEnabled — 日付に基づいてパーティション分割を指定します。このブールオプションを true に設定し、トランザクションのコミット日に基づいて S3 バケット フォルダをパーティション分割します。

    この設定を PreserveTransactionsCdcPath と併用することはできません。

    デフォルト値は false です。

  • DatePartitionSequence - フォルダのパーティション分割中に使用する日付形式のシーケンスを識別します。この ENUM オプションを YYYYMMDD または YYYYMMDDHHYYYYMMMMYYYYDDDDMMYYYY に設定します。デフォルト値は YYYYMMDD です。DatePartitionEnabledtrue. に設定されている場合は、この設定を使用します。

  • DatePartitionDelimiter - フォルダのパーティション分割時に使用する日付区切り記号を指定します。この ENUM オプションを SLASH または DASHUNDERSCORENONE に設定します。デフォルト値は SLASH です。DatePartitionEnabledtrue に設定されている場合は、この設定を使用します。

次の例は、データパーティションシーケンスと区切り文字のデフォルト値を使用して、日付ベースのフォルダパーティション分割を有効にする方法を示します。これは、AWS CLI.create-endpoint コマンド のオプション --s3-settings '{json-settings}' を使用します。

--s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'

AWS DMS のターゲットとして Amazon S3 を使用する場合のパーティション分割されたソースの並列ロード

パーティション化されたデータソースの Amazon S3 ターゲットへの並列フルロードを設定できます。この方法を使用すると、サポートされているソースデータベースエンジンからパーティション化されたデータを S3 ターゲットに移行するため、ロード時間を短縮できます。パーティション化されたソースデータのロード時間を短縮するには、ソースデータベースのすべてのテーブルのパーティションにマップされた S3 ターゲットサブフォルダを作成します。このようなパーティションにバインドされたサブフォルダを使用すると、AWS DMS は並列プロセスを実行してターゲット上の各サブフォルダにデータを入力できます。

テーブルマッピングの table-settings ルールについて、S3 では S3 ターゲットの並列フルロードを設定するための次の 3 つの parallel-load ロードルールタイプをサポートしています。

  • partitions-auto

  • partitions-list

  • ranges

上記ルールタイプの詳細については、「テーブルとコレクション設定のルールとオペレーション」を参照してください。

partitions-auto ルールタイプと partitions-list ルールタイプの場合、AWS DMS は、次のとおりソースエンドポイントの各パーティション名を使用してターゲットのサブフォルダ構造を特定します。

bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv

この場合、データを移行して S3 ターゲットに保存するサブフォルダパスには、同じ名前のソースパーティションに対応する追加の partition_name サブフォルダがあります。この partition_name サブフォルダには、指定されたソースパーティションから移行されたデータを含む単一または複数の LOADseq_num.csv ファイルが保存されます。この seq_num は、.csv ファイルの末尾に付けられるシーケンス番号の接尾辞です。例えば、LOAD00000001.csv という .csv ファイル名の場合は、00000001 の部分です。

MongoDB や DocumentDB など、データベースエンジンによっては、パーティション分割の概念がない場合があります。このようなデータベースエンジンの場合、AWS DMS は、次のとおり実行中のソースセグメントのインデックスをプレフィックスとしてターゲットの .csv ファイル名に追加します。

.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv .../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv ... .../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv .../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv

この例では、SEGMENT1_LOAD00000001.csv ファイルと SEGMENT1_LOAD00000002.csv ファイルには同じ実行中のソースセグメントインデックスのプレフィックス SEGMENT1 が名前に追加されています。この 2 つの .csv ファイルに移行されるソースデータは同じ実行中のソースセグメントインデックスに関連付けられているため、このような命名になります。一方、ターゲットの SEGMENT2_LOAD00000009.csv ファイルと SEGMENT3_LOAD0000000A.csv ファイルに保存されている移行データは、実行中の別のソースセグメントインデックスに関連付けられます。各ファイルのファイル名には、実行中のセグメントインデックス名の SEGMENT2SEGMENT3 がプレフィックスとして付けられます。

ranges 並列ロードタイプの場合、table-settings ルールの columnsboundaries の設定を使用して列名と列値を定義します。このようなルールを使用すると、次のとおりセグメント名に対応するパーティションを指定できます。

"parallel-load": { "type": "ranges", "columns": [ "region", "sale" ], "boundaries": [ [ "NORTH", "1000" ], [ "WEST", "3000" ] ], "segment-names": [ "custom_segment1", "custom_segment2", "custom_segment3" ] }

この場合、segment-names の設定は、S3 ターゲットでデータを並行して移行するための 3 つのパーティション名を定義しています。移行データは並行してロードされ、次のとおりパーティションサブフォルダの下の .csv ファイルに順番に保存されます。

.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv

ここで、AWS DMS は、3 つの各パーティションサブフォルダに .csv ファイルのセットを保存します。各パーティションのサブフォルダ内の一連の .csv ファイルには、すべてのデータが移行されるまで LOAD00000001.csv から始まるインクリメントでファイル名が付けられます。

場合によっては、segment-names 設定を使用して ranges 並列ロードタイプのパーティションサブフォルダに明示的に名前を付けないことがあります。このような場合、AWS DMS は、table_name サブフォルダの下に各 .csv ファイルのシリーズを作成するというデフォルトの方法を適用します。この場合、AWS DMS は、次のとおり実行中のソースセグメントインデックス名を各 .csv ファイルのシリーズのファイル名にプレフィックスとして付けます。

.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv ... .../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv

AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定

追加の接続属性の使用と同様、エンドポイントの設定を使用して、ターゲットの Amazon S3 データベースを設定できます。ターゲットエンドポイントを作成する際に、AWS DMS コンソールを使用するか、AWS CLI--s3-settings '{"EndpointSetting": "value", ...}' の JSON 構文を指定して create-endpoint コマンドを使用して設定を指定します。

次の表は、ターゲットとして Amazon S3 を使用できるエンドポイント設定を説明しています。

オプション 説明
CsvNullValue

AWS DMS の null 値処理方法を指定するオプションのパラメータです。NULL 値の処理中に、このパラメータを使用して、ターゲットに書き込むときにユーザー定義の文字列を NULL として渡すことができます。例えば、ターゲット列が NULL が許容しない場合、このオプションを使用して空の文字列値と null 値を区別できる。このパラメータ値を空の文字列 ("" または ") と設定すると、AWS DMS は空の文字列を NULL ではなく null 値として処理する。

デフォルト値: NULL

有効な値:任意の有効な文字列

例: --s3-settings '{"CsvNullValue": " "}'

AddColumnName

true または y に設定された場合に .csv 出力ファイルに列名情報を追加するために使用できるオプションのパラメータ。

このパラメータを PreserveTransactionsCdcPath と併用することはできない。

デフォルト値: false

有効な値: truefalseyn

例: --s3-settings '{"AddColumnName": true}'

AddTrailingPaddingCharacter

S3 ターゲットエンドポイント設定 AddTrailingPaddingCharacter を使用して文字列データにパディングを追加する。デフォルト値は false です。

型: ブール

例: --s3-settings '{"AddTrailingPaddingCharacter": true}'

BucketFolder

S3バケット内のフォルダ名を設定するオプションのパラメータ。このパラメータを指定した場合、ターゲットオブジェクトは .csv または .parquet ファイルとしてパス BucketFolder/schema_name/table_name/ に作成されます。このパラメータを指定しない場合、使用されるパスは schema_name/table_name/ となります。

例: --s3-settings '{"BucketFolder": "testFolder"}'

BucketName

S3 ターゲットオブジェクトが .csv または .parquet ファイルとして作成される S3 バケットの名前。

例: --s3-settings '{"BucketName": "buckettest"}'

CannedAclForObjects

S3 バケットに csv または .parquet ファイルとして作成されたオブジェクトに対して、定義済みの (既定の) アクセスコントロールリストを AWS DMS が指定できるようにする値。Amazon S3 の既定 ACL の詳細については、Amazon S3 デベロッパーガイドの「既定 ACL」をご参照ください。

デフォルト値: なし

この属性の有効な値は、NONE、PRIVATE、PUBLIC_READ、PUBLIC_READ_WRITE、AUTHENTICATED_READ、AWS_EXEC_READ、BUCKET_OWNER_READ、BUCKET_OWNER_FULL_CONTROL です。

例: --s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'

CdcInsertsOnly

変更データキャプチャ (CDC) ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) または列ストレージ (.parquet) の出力ファイルに書き込みます。デフォルトでは (false 設定)、.csv または.parquet レコードの最初のフィールドに、I (INSERT)、U (UPDATE)、または D (DELETE) という文字が含まれます。この文字は、ターゲットへの CDC ロードのためにソースデータベースで行が挿入、更新、または削除されたかどうかを示します。cdcInsertsOnlytrue または y に設定されている場合、ソースデータベースからの INSERT のみが .csv または .parquet ファイルに移行されます。

.csv 形式の場合にのみ、これらの INSERTS の記録方法は IncludeOpForFullLoad の値によって異なります。IncludeOpForFullLoadtrue に設定されている場合、各 CDC レコードの最初のフィールドは、ソースでの INSERT オペレーションを示す I に設定されます。IncludeOpForFullLoadfalse に設定されている場合、各 CDC レコードは、ソースでの INSERT オペレーションを示す最初のフィールドなしで書き込まれます。これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」をご参照ください。

デフォルト値: false

有効な値: truefalseyn

例: --s3-settings '{"CdcInsertsOnly": true}'

CdcInsertsAndUpdates

変更データキャプチャ (CDC) ロードを有効化し、INSERT および UPDATE オペレーションを .csv または .parquet (列指向ストレージ) 出力ファイルに書き込みます。デフォルト設定は false ですが、cdcInsertsAndUpdatestrue または y に設定されている場合、ソースデータベースからの INSERT および UPDATE が .csv または .parquet ファイルに移行されます。

.csv 形式の場合、これらの INSERTS および UPDATE の記録方法は includeOpForFullLoad パラメータの値によって異なります。includeOpForFullLoadtrue に設定されている場合、各 CDC レコードの最初のフィールドは、ソースでの INSERT および UPDATE オペレーションを示す I または U に設定されます。しかし、includeOpForFullLoadfalse に設定されている場合、CDC レコードはソースでの INSERT または UPDATE オペレーションを示すことなく書き込まれます。

これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」をご参照ください。

注記

CdcInsertsOnly および cdcInsertsAndUpdates の両方を、同じエンドポイントで true に設定することはできません。同じエンドポイントで cdcInsertsOnlycdcInsertsAndUpdates のどちらかを true に設定できますが、両方を設定することはできません。

デフォルト値: false

有効な値: truefalseyn

例: --s3-settings '{"CdcInsertsAndUpdates": true}'

CdcPath

CDC ファイルのフォルダパスを指定します。S3 ソースについては、タスクで変更データをキャプチャする場合、この属性が必須ですが、それ以外の場合はオプションです。CdcPath が設定された場合、DMS はこのパスから CDC ファイルを読み取り、データ変更をターゲット エンドポイントにレプリケーションします。S3 ターゲットについて PreserveTransactions を true に設定した場合、DMS は、DMS が CDC ロードのトランザクション順序を保存できる S3 ターゲット上のフォルダパスにこのパラメータが設定されていることを確認します。DMS は、S3 ターゲットの作業ディレクトリまたは BucketFolderBucketName で指定された S3 ターゲットの場所のいずれかにこの CDC フォルダパスを作成します。

このパラメータを DatePartitionEnabledAddColumnName と併用することはできない。

型: 文字列

例えば、CdcPathMyChangedData と指定し,BucketNameMyTargetBucket と指定し、BucketFolder は指定しない場合、DMS は次の CDC フォルダパス MyTargetBucket/MyChangedData を作成します。

同じ CdcPath を指定し、BucketNameMyTargetBucket と指定し、BucketFolderMyTargetData と指定すると、DMS は次の CDC フォルダパス MyTargetBucket/MyTargetData/MyChangedData を作成します。

注記

この設定は、AWS DMS バージョン 3.4.2 以降でサポートされる。

トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。DMS は、.parquet ファイルを使用してデータ変更をトランザクション順序に保存しません。

CdcMaxBatchInterval

ファイルを Amazon S3 に出力するための最大インターバル長条件 (秒単位)です。

デフォルト値は 60 秒です。

CdcMaxBatchIntervalCdcMinFileSize が指定されている場合、ファイルの書き込みは、最初に満たされるパラメータ条件によってトリガーされる。

CdcMinFileSize

Amazon S3 にファイルを出力するための KB 単位による最小ファイル サイズ条件です。

デフォルト値: 32000 KB)

CdcMinFileSizeCdcMaxBatchInterval が指定されている場合、ファイルの書き込みは、最初に満たされるパラメータ条件によってトリガーされる。

PreserveTransactions

true に設定されている場合、DMS は、CdcPath によって指定された Amazon S3 ターゲットに変更データ キャプチャ (CDC) のトランザクション順序を保存します。

このパラメータを DatePartitionEnabledAddColumnName と併用することはできない。

型: ブール

トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。DMS は、.parquet ファイルを使用してデータ変更をトランザクション順序に保存しません。

注記

この設定は、AWS DMS バージョン 3.4.2 以降でサポートされる。

IncludeOpForFullLoad

全ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) 出力ファイルに書き込みます。

全ロードの場合、レコードの挿入のみ可能です。デフォルト (false 設定) では、全ロードの場合、ソースデータベースで行が挿入されたことを示す情報はこれらの出力ファイルに記録されません。IncludeOpForFullLoadtrue または y に設定されている場合、INSERT は .csv ファイルの最初のフィールドに I 注釈として記録されます。

注記

このパラメータは、.csv ファイルへの出力の場合にのみ、CdcInsertsOnly または CdcInsertsAndUpdates と連動します。これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」をご参照ください。

デフォルト値: false

有効な値: truefalseyn

例: --s3-settings '{"IncludeOpForFullLoad": true}'

CompressionType

GZIP に設定された場合にターゲットの .csv または .parquet ファイルを圧縮するために GZIP を使用するオプションのパラメータ。このパラメータがデフォルトに設定されている場合、ファイルは圧縮されないままになります。

デフォルト値: NONE

有効な値: GZIP または NONE

例: --s3-settings '{"CompressionType": "GZIP"}'

CsvDelimiter

.csv ソースファイル内の列を分離するために使用される区切り文字。デフォルトはカンマ (,) です。

例: --s3-settings '{"CsvDelimiter": ","}'

CsvRowDelimiter

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

例: --s3-settings '{"CsvRowDelimiter": "\n"}'

MaxFileSize

全ロードで S3 ターゲットに移行中に作成される .csv ファイルの最大サイズ (KB 単位) を指定する値です。

デフォルト値: 1,048,576 KB (1 GB)

有効な値: 1~1,048,576

例: --s3-settings '{"MaxFileSize": 512}'

Rfc4180

.csv ファイル形式のみを使用して Amazon S3 に移行するデータに対して、RFC に準拠する動作を設定するために使用するオプションのパラメータです。Amazon S3 をターゲットとして使用してこの値を true または y に設定する場合、データに引用符、カンマ、または改行文字が含まれていると、AWS DMS は列全体を追加の二重引用符 (") で囲む。データ内のすべての引用符が 2 回が繰り返されます。このフォーマットは、RFC 4180 に準拠しています。

デフォルト値: true

有効な値: truefalseyn

例: --s3-settings '{"Rfc4180": false}'

EncryptionMode

S3 にコピーした .csv または .parquet オブジェクトファイルを暗号化するサーバー側の暗号化モードです。有効な値は、SSE_S3 (S3 サーバー側の暗号化) または SSE_KMS (KMS キーの暗号化) です。SSE_KMS を選択する場合、暗号化のために使用する KMS キーの Amazon リソースネーム (ARN) に ServerSideEncryptionKmsKeyId パラメータを設定します。

注記

CLI modify-endpoint コマンドを使用して、既存のエンドポイントの EncryptionMode のパラメータ値を SSE_KMS から SSE_S3 に変更するすることもできます。しかし EncryptionMode の値を SSE_S3 から SSE_KMS に変えることはできません。

デフォルト値: SSE_S3

有効な値: SSE_S3 または SSE_KMS

例: --s3-settings '{"EncryptionMode": SSE_S3}'

ServerSideEncryptionKmsKeyId

EncryptionModeSSE_KMS に設定した場合は、このパラメータを KMS キーの Amazon リソースネーム (ARN) に設定します。アカウントに作成した AWS KMS キーのリスト内でキーエイリアスを選択すると、この ARN が見つかります。キーを作成する場合、特定のポリシーと関連付けられるロールをこの KMS キーに関連付ける必要があります。詳細については、「Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成」を参照してください。

例: --s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'

DataFormat

S3 オブジェクトを作成するために AWS DMS が使用するファイルの出力形式。Amazon S3 ターゲットに対して AWS DMS は、.csv または .parquet ファイルをサポートしています。.parquet ファイルには、十分な圧縮オプションおよびより高速なクエリパフォーマンスのバイナリ列指向ストレージがあります。.parquet ファイルについての詳細は、「https://parquet.apache.org/」を参照してください。

デフォルト値: csv

有効な値: csv または parquet

例: --s3-settings '{"DataFormat": "parquet"}'

EncodingType

Parquet エンコードタイプです。このエンコードタイプオプションには、次が含まれます。

  • rle-dictionary - このディクショナリエンコードは、より効率的な繰り返し値を保存するためにビットパッキングとランレングスエンコードを組み合わせて使用します。

  • plain - エンコードなし。

  • plain-dictionary - このディクショナリエンコードは、特定の列で発生する値のディクショナリを構築します。ディクショナリは各列チャンクのディクショナリページに保存されます。

デフォルト値: rle-dictionary

有効な値: rle-dictionaryplain、または plain-dictionary

例: --s3-settings '{"EncodingType": "plain-dictionary"}'

DictPageSizeLimit

.parquet ファイルのディクショナリページで許容される最大サイズ (バイト単位)。ディクショナリページがこの値を超えると、このページではプレーンエンコードが使用されます。

デフォルト値: 1,024,000 (1 MB)

有効な値: 任意の有効な整数値

例: --s3-settings '{"DictPageSizeLimit": 2,048,000}'

RowGroupLength

.parquet ファイルの 1 つの行グループの行数です。

デフォルト値: 10,024 (10 KB)

有効値: 任意の有効な整数

例: --s3-settings '{"RowGroupLength": 20,048}'

DataPageSize

.parquet ファイルのデータページで許容される最大サイズ (バイト単位)。

デフォルト値: 1,024,000 (1 MB)

有効値: 任意の有効な整数

例: --s3-settings '{"DataPageSize": 2,048,000}'

ParquetVersion

.parquet ファイル形式のバージョン。

デフォルト値: PARQUET_1_0

有効な値: PARQUET_1_0 または PARQUET_2_0

例: --s3-settings '{"ParquetVersion": "PARQUET_2_0"}'

EnableStatistics

true または y に設定された場合に、.parquet ファイルと行グループに関する統計を有効化します。

デフォルト値: true

有効な値: truefalseyn

例: --s3-settings '{"EnableStatistics": false}'

TimestampColumnName

S3 ターゲットエンドポイントデータにタイムスタンプ列を含めるためのオプションのパラメータ。

TimestampColumnName を空白以外の値に設定すると、AWS DMS に移行済みデータの .csv ファイルまたは .parquet オブジェクトファイルに STRING 列が追加される。

全ロードの場合、このタイムスタンプ列の各行には、データが DMS によってソースからターゲットに転送されたときのタイムスタンプが含まれます。

CDC ロードの場合、タイムスタンプ列の各行には、ソースデータベースでのその行のコミットのタイムスタンプが含まれます。

タイムスタンプ列の値の文字列形式は yyyy-MM-dd HH:mm:ss.SSSSSS です。デフォルトでは、この値の精度はマイクロ秒です。CDC 負荷の場合、精度の丸めについては、ソースデータベースに対して DMS でサポートされているコミットのタイムスタンプによって異なります。

AddColumnName パラメータが true に設定されている場合、DMS は TimestampColumnName の空白以外の値として設定したタイムスタンプ列の名前も含める。

例: --s3-settings '{"TimestampColumnName": "TIMESTAMP"}'

UseTaskStartTimeForFullLoadTimestamp

、このパラメータは true に設定した場合、時間データがターゲットに書き込まれるのではなく、タスクのスタート時刻をタイムスタンプ列の値として使用します。全ロードの場合、UseTaskStartTimeForFullLoadTimestamptrue に設定される場合、タイムスタンプ列の各行には、タスクのスタート時刻が格納されます。CDC ロードの場合、タイムスタンプ列の各行には、トランザクションのコミット時刻が含まれます。

UseTaskStartTimeForFullLoadTimestampfalse に設定される場合、タイムスタンプカラムの全ロードタイムスタンプは、データがターゲットに到着した時間により増分となります。

デフォルト値: false

有効な値: truefalse

例: --s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'

UseTaskStartTimeForFullLoadTimestamp: true は、CDC ロード用に TimestampColumnName で並べ替えることが可能な全ロードに対して S3 ターゲット TimestampColumnName の作成を助けます。

ParquetTimestampInMillisecond

.parquet 形式で S3 オブジェクトに書き込まれるすべての TIMESTAMP 列値の精度を指定するオプションのパラメータ。

この属性を true または y に設定すると、AWS DMS はすべての TIMESTAMP 列をミリ秒の精度で .parquet 形式のファイルに書き込みます。それ以外の場合、DMS はそれらをマイクロ秒の精度で書き込みます。

現在、Amazon Athena と AWS Glue は、TIMESTAMP 値をミリ秒の精度でのみ処理できます。データを Athena または AWS Glue でクエリまたは処理する場合にのみ、.parquet 形式の S3 エンドポイント オブジェクトファイルに対してこの属性を true に設定します。

注記
  • AWS DMS は、マイクロ秒の精度で .csv 形式で S3 ファイルに書き込まれたすべての TIMESTAMP 列値を書き込みます。

  • この属性の設定は、TimestampColumnName 属性を設定することで挿入されたタイムスタンプ列値の文字列の形式には影響しません。

デフォルト値: false

有効な値: truefalseyn

例: --s3-settings '{"ParquetTimestampInMillisecond": true}'

GlueCatalogGeneration

AWS Glue Data Catalog を生成するには、このエンドポイント設定を true に設定する。

デフォルト値: false

有効な値: truefalse

例: --s3-settings '{"GlueCatalogGeneration": true}'

注:GlueCatalogGenerationPreserveTransactionsCdcPath と併用しない。

AWS DMS のための Amazon S3 ターゲットでの AWS Glue Data Catalog データカタログの使用

AWS Glue は、データのシンプルな分類方法を提供するサービスであり、AWS Glue Data Catalog と呼ばれるメタデータリポジトリで構成されています。AWS Glue Data Catalog を Amazon S3 ターゲットエンドポイントと統合し、Amazon Athena などのその他の AWS サービスを介して Amazon S3 データをクエリできます。Amazon Redshift AWS Glue と連携しますが、AWS DMS は事前構築オプションとしてサポートしていません。

データカタログを生成するには、次の AWS CLI 例のとおり、GlueCatalogGeneration エンドポイント設定を true に設定します。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'

csv タイプのデータを含むフルロードレプリケーションタスクの場合は、IncludeOpForFullLoadtrue に設定します。

GlueCatalogGenerationPreserveTransactionsCdcPath と併用しないでください。AWS Glue クローラは、指定された CdcPath に保存されているファイルのさまざまなスキーマを調整できません。

Amazon Athena で Amazon S3 データのインデックスを作成して、Amazon Athena を介して標準 SQL クエリでデータをクエリするには、エンドポイントにアタッチされた IAM ロールに次のポリシーが必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::bucket123", "arn:aws:s3:::bucket123/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:111122223333:catalog", "arn:aws:glue:*:111122223333:database/*", "arn:aws:glue:*:111122223333:table/*" ] }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:CreateWorkGroup" ], "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*" } ] }
リファレンス
  • AWS Glue の詳細については、AWS Glueデベロッパーガイドの「 の概念」を参照してください。

  • AWS Glue Data Catalog の詳細については、「AWS Glue デベロッパーガイド」の「 コンポーネント」を参照してください。

Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用

S3 ターゲットエンドポイント設定を使用して、以下を構成できます。

  • S3 ターゲットオブジェクトを暗号化するカスタム KMS キーです。

  • S3 ターゲットオブジェクトのストレージ形式としての Parquet ファイルです。

  • S3 ターゲットでのトランザクション順序を含むデータ キャプチャ (CDC) を変更します。

  • AWS Glue Data Catalog データカタログを Amazon S3 ターゲットエンドポイントと統合し、Amazon Athena などのその他のサービスを介して Amazon S3 データをクエリする

AWS KMS データ暗号化に対する キー設定

次の例では、S3 ターゲットオブジェクトを暗号化するカスタム KMS キーの設定を示しています。開始するには、次の create-endpoint CLI コマンドを実行します。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'

ここでは、--s3-settings オプションで指定される JSON オブジェクトは 2 つのパラメータを定義します。1 つは、値が SSE_KMSEncryptionMode パラメータです。もう 1 つは、arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480 の値がある ServerSideEncryptionKmsKeyId パラメータです。この値は、カスタム KMS キーの Amazon リソースネーム (ARN) です。S3 ターゲットの場合、追加の設定も指定します。これによって、ロールへのサーバーアクセスの識別、デフォルトの CSV オブジェクトストレージ形式の区切り記号の提供、S3 ターゲットオブジェクトを保存するバケットの場所と名前の指定が行われます。

デフォルトでは、S3 データ暗号化は S3 サーバー側の暗号化を使用して行われます。前述の例の S3 ターゲットの場合、次の例に示すように、これはそのエンドポイント設定を指定することと同様です。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_S3"}'

S3 サーバー側暗号化の使用の詳細については、「サーバー側の暗号化を使用したデータの保護」をご参照ください。

注記

CLI modify-endpoint コマンドを使用して、既存のエンドポイントの EncryptionMode のパラメータ値を SSE_KMS から SSE_S3 に変更するすることもできます。しかし EncryptionMode の値を SSE_S3 から SSE_KMS に変えることはできません。

S3 ターゲットオブジェクトを保存するために .parquet ファイルを使用する設定

S3 ターゲットオブジェクトを作成するデフォルトの形式は .csv ファイルです。次の例では、S3 ターゲットオブジェクトを作成する形式として .parquet ファイルを指定するいくつかのエンドポイント設定を示しています。次の例に示すように、すべてのデフォルトで .parquet ファイル形式を指定できます。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'

ここでは、DataFormat パラメータが parquet に設定されて、すべての S3 デフォルトでこの形式を有効化しています。これらのデフォルトには、繰り返し値を効率的に保存するためにビットパッキングおよびランレングスエンコードの組み合わせを使用するディクショナリエンコード ("EncodingType: "rle-dictionary") が含まれます。

次の例に示すように、デフォルト以外のオプションに追加の設定をさら加えることができます。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "CompressionType": "GZIP", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000, "EnableStatistics": false }'

ここでは、複数の標準 S3 バケットオプションおよび DataFormat パラメータに加えて、次のような追加の .parquet ファイルパラメータが設定されています。

  • EncodingType - ディクショナリページの列チャンクごとで各列に発生する値を保存するディクショナリエンコード (plain-dictionary) を設定します。

  • DictPageSizeLimit - ディクショナリページの最大のサイズを 3 MB に設定します。

  • EnableStatistics - Parquet ファイルページおよび行グループに関する統計のコレクションを有効化するデフォルトを無効にします。

S3 ターゲットでのトランザクション順序を含むデータ変更 (CDC) のキャプチャ

デフォルトでは、AWS DMS がCDC タスクを実行する際は、ソースデータベース (またはデータベース) にログされたすべての行の変更を、各テーブルの 1 つ以上のファイルに保存します。同じテーブルに対する変更を含む各ファイル集合は、そのテーブルに関連付けられた単一のターゲットディレクトリに常駐します。AWS DMS は、Amazon S3 ターゲット エンドポイントに移行されたデータベーステーブルと同じ数のターゲットディレクトリを作成します。ファイルは、トランザクションの順序に関係なく、これらのディレクトリの S3 ターゲットに保存されます。ファイル命名規約、データコンテンツ、形式の詳細については、「AWS Database Migration Service のターゲットに Amazon S3 を使用する」をご参照ください。

トランザクション順序もキャプチャする方法でソースデータベースの変更をキャプチャするには、AWS DMS にすべてのデータベーステーブル行の変更をトランザクションサイズに応じて作成される 1 つ以上の .csv ファイルに保存するよう指示する S3 エンドポイント設定を指定できます。これらの.csv トランザクションファイルには各トランザクションに関連するすべてのテーブルについて、すべての行の変更がトランザクション順にリストされます。これらのトランザクションファイルは S3 ターゲットでも指定suru 1 つの[transaction directory] (トランザクションディレクトリ) に一括で常駐します。各トランザクション ファイルには、トランザクションオペレーションと、行変更ごとのデータベースとソーステーブルのアイデンティティが、次のとおり行データの一部として保存されます。

operation,table_name,database_schema_name,field_value,...

ここで、operation は、変更された行のトランザクションオペレーションで、table_name は、行が変更されるデータベーステーブルの名前、database_schema_name は、テーブルが常駐するデータベーススキーマの名前、field_value は、行のデータを指定する 1 つ以上のフィールド値の先頭です。

次のトランザクションファイルの例は、2 つのテーブルを含む 1 つ以上のトランザクションの変更された行を示しています。

I,Names_03cdcad11a,rdsTempsdb,13,Daniel U,Names_03cdcad11a,rdsTempsdb,23,Kathy D,Names_03cdcad11a,rdsTempsdb,13,Cathy I,Names_6d152ce62d,rdsTempsdb,15,Jane I,Names_6d152ce62d,rdsTempsdb,24,Chris I,Names_03cdcad11a,rdsTempsdb,16,Mike

ここでは、各行のトランザクションオペレーションは I (挿入)、U (更新)、または D (削除) を最初の列に表示します。テーブル名は 2 番目のカラムの値です (例えば、Names_03cdcad11a)。データベーススキーマの名前は、3 列目の値です (例えば、rdsTempsdb)。残りの列には独自の行データが代入されます (例えば、13,Daniel)。

加えて、AWS DMS は、次の命名規則に従って、タイムスタンプを使用して Amazon S3 ターゲットで作成するトランザクションファイルに名前を付けます。

CDC_TXN-timestamp.csv

ここで、timestamp は、次の例のように、トランザクションファイルが作成された時刻です。

CDC_TXN-20201117153046033.csv

ファイル名にこのタイムスタンプを使用すると、トランザクションファイルがトランザクションディレクトリにリストされたときに、トランザクションファイルが作成され、トランザクション順にリストされます。

注記

トランザクションの順序でデータ変更を取り込む場合、AWS DMS は、ターゲットの DataFormat S3 設定値に関係なく、常に.csv ファイルに行の変更を保存します。AWS DMS は、.parquet ファイルを使用してトランザクション順序でデータの変更を保存しません。

データレプリケーションタスク中の Amazon S3 ターゲットへの書き込み頻度を制御するには、CdcMaxBatchIntervalCdcMinFileSize を設定します。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。

AWS DMS にすべての行の変更をトランザクション順序に保存するように指令するには
  1. ターゲットの PreserveTransactions S3 設定を true に設定します。

  2. ターゲットの CdcPath S3 設定を AWS DMS を保存したい目的の場所の相対フォルダパスに設定し、.csv トランザクションファイルを保存します。

    AWS DMS は、このパスをデフォルトの S3 ターゲットバケットと作業ディレクトリ、またはターゲットの BucketNameBucketFolder S3 設定を使用して指定したバケットとバケットフォルダの下に作成します。

移行済み S3 データでのソース DB オペレーションの表示

AWS DMS は S3 ターゲットにレコードを移行するとき、移行済みレコードのそれぞれに追加のフィールドを作成できます。この追加のフィールドは、ソースデータベースでレコードに適用されたオペレーションを示します。AWS DMS がこの最初のフィールドを作成と設定する方法は、移行タスクのタイプとincludeOpForFullLoadcdcInsertsOnlycdcInsertsAndUpdates の設定によって異なります。

includeOpForFullLoadtrue に指定されたフルロードの場合、AWS DMS は常に各 .csv レコードに追加の最初のフィールドを作成します。このフィールドには、ソースデータベースで行が挿入されたことを示す文字 I (INSERT) が含まれます。cdcInsertsOnlyfalse (デフォルト) に指定された CDC ロードの場合、AWS DMS は常に各 .csv レコードまたは .parquet レコードに追加の最初のフィールドを作成します。このフィールドには、ソースデータベースで行が挿入されたか、更新されたか、削除されたかを示す文字 I (INSERT)、U (UPDATE)、または D (DELETE) が含まれます。

次の表では、includeOpForFullLoad 属性と cdcInsertsOnly 属性の設定がどのように連動して、移行されたレコードの設定に影響を与えるかを示します。

使用するパラメータ設定 DMS が .csv 出力と .parquet 出力で設定するターゲットレコード
includeOpForFullLoad cdcInsertsOnly 全ロードの場合 CDC ロードの場合
true true 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて I に設定
false false 追加のフィールドなし 最初のフィールド値が追加されて IU、または D に設定
false true 追加のフィールドなし 追加のフィールドなし
true false 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて IU、または D に設定

includeOpForFullLoadcdcInsertsOnly が同じ値に設定されている場合、ターゲットレコードは現在の移行タイプのレコード設定を制御する属性に従って設定されます。その属性は、全ロードの場合は includeOpForFullLoad、CDC ロードの場合は cdcInsertsOnly です。

includeOpForFullLoadcdcInsertsOnly が異なる値に設定されている場合、AWS DMS によってターゲットレコードの設定は CDC と全ロードの両方に対して一貫したものになります。これは、CDC ロードのレコード設定を、includeOpForFullLoad で指定された前の全ロードのレコード設定と一致させることで行われます。

つまり、挿入されたレコードを示す最初のフィールドを追加するように全ロードが設定されているとします。この場合、続く CDC ロードは、挿入、更新、または削除されたレコードを示す最初のフィールドをソースで必要に応じて追加するように設定されます。逆に、挿入されたレコードを示す最初のフィールドを追加しないように全ロードが設定されているとします。この場合、CDC ロードも、ソースでの対応するレコードオペレーションに関係なく、各レコードに最初のフィールドを追加しないように設定されます。

同様に、DMS が追加の最初のフィールドを追加して設定する方法は、includeOpForFullLoad および cdcInsertsAndUpdates の設定によって異なります。以下の表では、includeOpForFullLoad および cdcInsertsAndUpdates 属性の設定がどのように連動して、この形式の移行済みレコードの設定に影響するかを確認できます。

使用するパラメータ設定 DMS が .csv 出力用に設定するターゲットレコード
includeOpForFullLoad cdcInsertsAndUpdates 全ロードの場合 CDC ロードの場合
true true 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて I または U に設定
false false 追加のフィールドなし 最初のフィールド値が追加されて IU、または D に設定
false true 追加のフィールドなし 最初のフィールド値が追加されて I または U に設定
true false 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて IU、または D に設定

S3 Parquet のターゲットデータ型

以下の表に、AWS DMS と AWS DMS データ型からのデフォルトマッピングをを使用する場合にサポートされる Parquet ターゲット データ型を示します。

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

AWS DMS データ型

S3 parquet データ型

BYTES BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT64
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL