翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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.csvdatabase_schema_name
/table_name
/LOAD00000002.csv ...database_schema_name
/table_name
/LOAD00000009.csvdatabase_schema_name
/table_name
/LOAD0000000A.csvdatabase_schema_name
/table_name
/LOAD0000000B.csv ...database_schema_name
/table_name
/LOAD0000000F.csvdatabase_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 ターゲットへの書き込みの頻度を制御するには、cdcMaxBatchInterval
と cdcMinFileSize
の追加接続属性を設定することができます。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。
トピック
- ターゲットとして Amazon S3 を使用するための前提条件
- ターゲットとしての Amazon S3 の使用における制限
- セキュリティ
- Apache Parquet を使用した Amazon S3 オブジェクトの保存
- Amazon S3 オブジェクトのタグ付け
- Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成
- 日付ベースのフォルダパーティション分割を使用する
- AWS DMS のターゲットとして Amazon S3 を使用する場合のパーティション分割されたソースの並列ロード
- AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定
- AWS DMS のための Amazon S3 ターゲットでの AWS Glue Data Catalog データカタログの使用
- Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用
- 移行済み S3 データでのソース DB オペレーションの表示
- S3 Parquet のターゲットデータ型
ターゲットとして 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
またはaddColumnName
はPreserveTransactions
またはCdcPath
と組み合わせて使用できません。 -
AWS DMS は、変換ルールを使用した複数のソーステーブル名の同じターゲットフォルダへの変更をサポートしていません。
-
フルロードフェーズ中にソーステーブルへの書き込みが多い場合、DMS は S3 バケットまたはキャッシュされた変更に重複レコードを書き込むことがあります。
-
TargetTablePrepMode
のDO_NOTHING
を使用してタスクに設定すると、フルロードフェーズ中にタスクが突然停止して再開した場合に、DMS は S3 バケットに重複レコードを書き込むことがあります。 -
PreserveTransactions
をtrue
に設定してターゲットエンドポイントを設定すると、テーブルをリロードしても以前に生成した 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 ストレージ形式を設定するには、以下のメカニズムを使用できます。
-
AWS CLI あるいは AWS DMS の API を使用してエンドポイントを作成するときに、JSON オブジェクトのパラメータとして指定するエンドポイント設定です。詳細については、「Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用」をご参照ください。
-
エンドポイント作成時にセミコロンで区切られたリストとして指定する追加の接続属性です。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。
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 |
|
ルールが適用されるスキーマおよびテーブルごとの名前。各
|
tag-set |
|
特定の また、タグの 注記重要
|
S3 オブジェクトの選択をタグ付けするために複数の post-processing
ルールタイプを指定する場合、各 S3 オブジェクトは 1 つの後処理ルールをから 1 つの tag-set
オブジェクトのみを使用してタグ付けされます。指定する S3 オブジェクトへのタグ付けに使用される特定のタグセットは、その S3 オブジェクトに最も一致するオブジェクトロケーターに関連する後処理ルールのうちの 1 つです。
たとえば、同じ S3 オブジェクトに 2 つの後処理ルールが識別されるとします。また、1 つのルールのオブジェクトロケーターはワイルドカードを使用し、別のルールのオブジェクトロケーターは S3 オブジェクトを識別するための完全な一致 (ワイルドカードなし) を使用するとします。この場合、完全に一致する後処理ルールに関連付けられたタグが S3 オブジェクトのタグ付けに使用されます。複数の後処理ルールが指定された S3 オブジェクトに同様に一致する場合、この後処理ルールに最初に関連図けられたタグセットがオブジェクトのタグ付けに使用されます。
例 単一のテーブルとスキーマに作成された S3 オブジェクトへの静的なタグの追加
次の選択と後処理ルールは 3 つのタグ (tag_1
、tag_2
、tag_3
) と該当する静的値 (value_1
、value_2
、value_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-name
と dw-schema-table
) をターゲットに作成されたほぼすべての S3 オブジェクトに追加します。例外は、2 番目の後処理ルールで色別されてタグ付けされる S3 オブジェクトです。したがって、ワイルドカードオブジェクトロケーターによって識別された各ターゲット S3 オブジェクトは、ソースで該当するスキーマおよびテーブルを識別するタグを使用して作成されます。
2 番目の後処理ルールは、完全に一致するオブジェクトロケーターによって識別される S3 オブジェクトに、該当する静的値 (value_1
と value_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-name
と dw-schema-table
) を追加します。最初のタグには動的値 "${schema-name}"
があり、2 つ目のタグには静的値 "my_prefix_ITEM"
があります。したがって、各ターゲット S3 オブジェクトは、ソースで該当するスキーマおよびテーブルを識別するタグを使用して作成されます。
さらに、このタグセットは 2 つの追加タグを動的な名前 (${schema-name}_ITEM_tag_1
と "${schema-name}_ITEM_tag_2"
) で追加します。これには該当する静的値 (value_1
と value_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
"}'ここで
とは、KMS キーの Amazon リソースネーム (ARN) です。詳細については、「Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用」をご参照ください。your-KMS-key-ARN
-
値 (
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 ポリシーを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、ナビゲーションペインの [ポリシー] を選択します。[ポリシー] ページが開きます。
-
[Create policy] (ポリシーを作成) を選択します。[Create policy (ポリシーの作成)] ページが開きます。
-
[サービス]、[S3] の順に選択します。アクションのアクセス権限の一覧が表示されます。
-
[すべて展開] を選択して一覧を展開し、少なくとも以下のアクセス権限を選択します。
-
ListBucket
-
PutObject
-
DeleteObject
必要に応じて他のアクセス権限を選択したら、[すべて折りたたむ] を選択して一覧を折りたたみます。
-
-
[リソース] を選択してアクセスするリソースを指定します。少なくとも [All resources] (すべてのリソース) を選択して、全般的な Amazon S3 リソースへのアクセスを提供します。
-
必要に応じて他の条件やアクセス許可を追加したら、[ポリシーの確認] を選択します。[ポリシーの確認] ページで結果を確認します。
-
設定が必要に応じている場合には、ポリシーの名前 (
DMS-S3-endpoint-access
など) と他の説明を入力し、[ポリシーの作成] を選択します。[ポリシー] ページが開き、ポリシーが作成されたことを示すメッセージが表示されます。 -
[ポリシー] のリストからポリシー名を検索して選択します。[概要] ページが表示され、次のようなポリシーの 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 ロールを作成するには
-
IAM コンソールで、ナビゲーションペインの [Roles] (ロール) を選択します。[ロール] の詳細ページが開きます。
-
[Create role] (ロールの作成) を選択します。[Create role] (ロールの作成) ページが開きます。
-
AWS のサービスが信頼されるエンティティとして選択されたら、この IAM ロールを使用するサービスとして DMS を選択します。
-
[Next: Permissions] (次へ: アクセス許可) を選択します。[Create role] (ロールの作成) ページに [Attach permissions policies] (アクセス権限ポリシーの添付) ビューが表示されます。
-
前の手順で作成した IAM ロールの IAM ポリシーを見つけて選択します (
DMS-S3-endpoint-access
)。 -
[Next:Tags](次へ: タグ) を選択します。[Create role] (ロールの作成) ページに[Add tags] (タグを追加) ビューが表示されます ここでは、任意のタグを追加することができます。
-
[Next: Review] (次のステップ: レビュー) を選択します。[Create role] (ロールの作成) ページに[Review] (確認) ビューが表示されます。ここで、結果を確認できます。
-
設定が必要に応じている場合には、ロールの名前 (必須、
DMS-S3-endpoint-access-role
など) と追加の説明を入力して、[Create role] (ロールの作成) を選択します。[ロール] の詳細ページが開き、ロールが作成されたことを示すメッセージが表示されます。
これで、暗号化のために Amazon S3 リソースにアクセスする新しいロールが指定した名前 (DMS-S3-endpoint-access-role
など) で作成されました。
この IAM ロールを参照するキーポリシーを持つ KMS 暗号化キーを作成するには
注記
AWS DMS と AWS KMS 暗号化キーの連携について詳しくは、「暗号化キーの設定と AWS KMS のアクセス許可の指定」をご参照ください。
-
AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms
) を開きます。 -
AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。
-
ナビゲーションペインで、[カスタマーマネージドキー] を選択します。
-
[Create key] (キーの作成) を選択します。[キーの設定] ページが開きます。
-
[キーの種類] で、[対称] を選択します。
注記
このキーを作成する場合、Amazon S3 などすべての AWS サービスでは対称暗号化キーしか使用できないため、作成できるのは対称キーのみです。
-
[アドバンスドオプション] を選択します。[キーマテリアルのオリジン] で、[KMS] が選択されていることを確認し、[次へ] を選択します。[ラベルの追加] ページが開きます。
-
[エイリアスと説明の作成] で、キーのエイリアス (
DMS-S3-endpoint-encryption-key
など) と追加の説明を入力します。 -
[タグ] で、キーを識別してその使用状況を追跡するために役立つ任意のタグを追加したら、[次へ] を選択します。[キー管理アクセス許可の定義] ページが開き、選択できるユーザーおよびロールの一覧が表示されます。
-
キーを管理するユーザーおよびロールを追加します。このユーザーとロールにキーを管理するために必要な権限があることを確認してください。
-
[キーの削除] で、キー管理者がそのキーを削除できるかどうかを選択したら、[次へ] を選択します。[キーの使用アクセス許可の定義] ページが開き、選択できる追加のユーザーおよびロールの一覧が表示されます。
-
[This account](このアカウント) で、Amazon S3 ターゲットに対して暗号化オペレーションを実行できるユーザーを選択します。また、[Roles] (ロール) で以前に作成したロールを選択して、Amazon S3 ターゲットオブジェクト (
DMS-S3-endpoint-access-role
など)を暗号化するためのアクセスを有効化します。 -
リストにない他のアカウントに同じアクセス権限を付与するには、[他の AWS アカウント] で [別の AWS アカウントを追加する]、[次へ] の順に選択します。[キーポリシーの表示と編集] ページが開き、既存の JSON に入力して表示および編集できるキーポリシーの JSON が表示されます。ここでは、前のステップで選択したロールおよびユーザー (例えば、
Admin
とUser1
) を参照するキーポリシーを表示できます。また、次の例に示すように、異なるプリンシパル (ユーザーとロール) に許可される別々のキーアクションも確認できます。{ "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 } } } ]
-
[終了] を選択します。[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 バケット フォルダをパーティション分割します。この設定を
PreserveTransactions
やCdcPath
と併用することはできません。デフォルト値は
false
です。 -
DatePartitionSequence
- フォルダのパーティション分割中に使用する日付形式のシーケンスを識別します。この ENUM オプションをYYYYMMDD
またはYYYYMMDDHH
、YYYYMM
、MMYYYYDD
、DDMMYYYY
に設定します。デフォルト値はYYYYMMDD
です。DatePartitionEnabled
がtrue.
に設定されている場合は、この設定を使用します。 -
DatePartitionDelimiter
- フォルダのパーティション分割時に使用する日付区切り記号を指定します。この ENUM オプションをSLASH
またはDASH
、UNDERSCORE
、NONE
に設定します。デフォルト値はSLASH
です。DatePartitionEnabled
がtrue
に設定されている場合は、この設定を使用します。
次の例は、データパーティションシーケンスと区切り文字のデフォルト値を使用して、日付ベースのフォルダパーティション分割を有効にする方法を示します。これは、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
LOAD
ファイルが保存されます。この seq_num
.csv
は、.csv ファイルの末尾に付けられるシーケンス番号の接尾辞です。例えば、seq_num
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
ファイルに保存されている移行データは、実行中の別のソースセグメントインデックスに関連付けられます。各ファイルのファイル名には、実行中のセグメントインデックス名の SEGMENT2
と SEGMENT3
がプレフィックスとして付けられます。
ranges
並列ロードタイプの場合、table-settings
ルールの columns
と boundaries
の設定を使用して列名と列値を定義します。このようなルールを使用すると、次のとおりセグメント名に対応するパーティションを指定できます。
"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 は、
サブフォルダの下に各 .csv ファイルのシリーズを作成するというデフォルトの方法を適用します。この場合、AWS DMS は、次のとおり実行中のソースセグメントインデックス名を各 .csv ファイルのシリーズのファイル名にプレフィックスとして付けます。table_name
.../
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 '{"
の JSON 構文を指定して EndpointSetting"
:
"value"
, ...
}'create-endpoint
コマンドを使用して設定を指定します。
次の表は、ターゲットとして Amazon S3 を使用できるエンドポイント設定を説明しています。
オプション | 説明 |
---|---|
CsvNullValue |
AWS DMS の null 値処理方法を指定するオプションのパラメータです。NULL 値の処理中に、このパラメータを使用して、ターゲットに書き込むときにユーザー定義の文字列を NULL として渡すことができます。例えば、ターゲット列が NULL が許容しない場合、このオプションを使用して空の文字列値と null 値を区別できる。このパラメータ値を空の文字列 ("" または ") と設定すると、AWS DMS は空の文字列を デフォルト値: 有効な値:任意の有効な文字列 例: |
AddColumnName |
このパラメータを デフォルト値: 有効な値: 例: |
AddTrailingPaddingCharacter |
S3 ターゲットエンドポイント設定 型: ブール 例: |
BucketFolder |
S3バケット内のフォルダ名を設定するオプションのパラメータ。このパラメータを指定した場合、ターゲットオブジェクトは .csv または .parquet ファイルとしてパス 例: |
BucketName |
S3 ターゲットオブジェクトが .csv または .parquet ファイルとして作成される S3 バケットの名前。 例: |
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 です。 例: |
CdcInsertsOnly |
変更データキャプチャ (CDC) ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) または列ストレージ (.parquet) の出力ファイルに書き込みます。デフォルトでは ( .csv 形式の場合にのみ、これらの INSERTS の記録方法は デフォルト値: 有効な値: 例: |
CdcInsertsAndUpdates |
変更データキャプチャ (CDC) ロードを有効化し、INSERT および UPDATE オペレーションを .csv または .parquet (列指向ストレージ) 出力ファイルに書き込みます。デフォルト設定は .csv 形式の場合、これらの INSERTS および UPDATE の記録方法は これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」をご参照ください。 注記
デフォルト値: 有効な値: 例: |
|
CDC ファイルのフォルダパスを指定します。S3 ソースについては、タスクで変更データをキャプチャする場合、この属性が必須ですが、それ以外の場合はオプションです。 このパラメータを 型: 文字列 例えば、 同じ 注記この設定は、AWS DMS バージョン 3.4.2 以降でサポートされる。 トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。DMS は、.parquet ファイルを使用してデータ変更をトランザクション順序に保存しません。 |
|
ファイルを Amazon S3 に出力するための最大インターバル長条件 (秒単位)です。 デフォルト値は 60 秒です。
|
|
Amazon S3 にファイルを出力するための KB 単位による最小ファイル サイズ条件です。 デフォルト値: 32000 KB)
|
|
このパラメータを 型: ブール トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。DMS は、.parquet ファイルを使用してデータ変更をトランザクション順序に保存しません。 注記この設定は、AWS DMS バージョン 3.4.2 以降でサポートされる。 |
IncludeOpForFullLoad |
全ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) 出力ファイルに書き込みます。 全ロードの場合、レコードの挿入のみ可能です。デフォルト ( 注記このパラメータは、.csv ファイルへの出力の場合にのみ、 デフォルト値: 有効な値: 例: |
CompressionType |
デフォルト値: 有効な値: 例: |
CsvDelimiter |
.csv ソースファイル内の列を分離するために使用される区切り文字。デフォルトはカンマ (,) です。 例: |
CsvRowDelimiter |
.csv ソースファイル内の行を分離するために使用される区切り文字。デフォルトでは、改行 (\n) です。 例: |
|
全ロードで S3 ターゲットに移行中に作成される .csv ファイルの最大サイズ (KB 単位) を指定する値です。 デフォルト値: 1,048,576 KB (1 GB) 有効な値: 1~1,048,576 例: |
Rfc4180 |
.csv ファイル形式のみを使用して Amazon S3 に移行するデータに対して、RFC に準拠する動作を設定するために使用するオプションのパラメータです。Amazon S3 をターゲットとして使用してこの値を デフォルト値: 有効な値: 例: |
EncryptionMode |
S3 にコピーした .csv または .parquet オブジェクトファイルを暗号化するサーバー側の暗号化モードです。有効な値は、 注記CLI デフォルト値: 有効な値: 例: |
ServerSideEncryptionKmsKeyId |
例: |
DataFormat |
S3 オブジェクトを作成するために AWS DMS が使用するファイルの出力形式。Amazon S3 ターゲットに対して AWS DMS は、.csv または .parquet ファイルをサポートしています。.parquet ファイルには、十分な圧縮オプションおよびより高速なクエリパフォーマンスのバイナリ列指向ストレージがあります。.parquet ファイルについての詳細は、「https://parquet.apache.org/ デフォルト値: 有効な値: 例: |
EncodingType |
Parquet エンコードタイプです。このエンコードタイプオプションには、次が含まれます。
デフォルト値: 有効な値: 例: |
DictPageSizeLimit |
.parquet ファイルのディクショナリページで許容される最大サイズ (バイト単位)。ディクショナリページがこの値を超えると、このページではプレーンエンコードが使用されます。 デフォルト値: 1,024,000 (1 MB) 有効な値: 任意の有効な整数値 例: |
RowGroupLength |
.parquet ファイルの 1 つの行グループの行数です。 デフォルト値: 10,024 (10 KB) 有効値: 任意の有効な整数 例: |
DataPageSize |
.parquet ファイルのデータページで許容される最大サイズ (バイト単位)。 デフォルト値: 1,024,000 (1 MB) 有効値: 任意の有効な整数 例: |
ParquetVersion |
.parquet ファイル形式のバージョン。 デフォルト値: 有効な値: 例: |
EnableStatistics |
デフォルト値: 有効な値: 例: |
TimestampColumnName |
S3 ターゲットエンドポイントデータにタイムスタンプ列を含めるためのオプションのパラメータ。
全ロードの場合、このタイムスタンプ列の各行には、データが DMS によってソースからターゲットに転送されたときのタイムスタンプが含まれます。 CDC ロードの場合、タイムスタンプ列の各行には、ソースデータベースでのその行のコミットのタイムスタンプが含まれます。 タイムスタンプ列の値の文字列形式は
例: |
UseTaskStartTimeForFullLoadTimestamp |
、このパラメータは
デフォルト値: 有効な値: 例:
|
ParquetTimestampInMillisecond |
.parquet 形式で S3 オブジェクトに書き込まれるすべての この属性を 現在、Amazon Athena と AWS Glue は、 注記
デフォルト値: 有効な値: 例: |
GlueCatalogGeneration |
AWS Glue Data Catalog を生成するには、このエンドポイント設定を デフォルト値: 有効な値: 例: 注: |
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
タイプのデータを含むフルロードレプリケーションタスクの場合は、IncludeOpForFullLoad
を true
に設定します。
GlueCatalogGeneration
は PreserveTransactions
と CdcPath
と併用しないでください。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_*" } ] }
リファレンス
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_KMS
の EncryptionMode
パラメータです。もう 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
は、行のデータを指定する 1 つ以上のフィールド値の先頭です。field_value
次のトランザクションファイルの例は、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 ターゲットへの書き込み頻度を制御するには、CdcMaxBatchInterval
と CdcMinFileSize
を設定します。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「AWS DMS のターゲットとして Amazon S3を使用する場合のエンドポイントの設定」をご参照ください。
AWS DMS にすべての行の変更をトランザクション順序に保存するように指令するには
-
ターゲットの
PreserveTransactions
S3 設定をtrue
に設定します。 -
ターゲットの
CdcPath
S3 設定を AWS DMS を保存したい目的の場所の相対フォルダパスに設定し、.csv トランザクションファイルを保存します。AWS DMS は、このパスをデフォルトの S3 ターゲットバケットと作業ディレクトリ、またはターゲットの
BucketName
とBucketFolder
S3 設定を使用して指定したバケットとバケットフォルダの下に作成します。
移行済み S3 データでのソース DB オペレーションの表示
AWS DMS は S3 ターゲットにレコードを移行するとき、移行済みレコードのそれぞれに追加のフィールドを作成できます。この追加のフィールドは、ソースデータベースでレコードに適用されたオペレーションを示します。AWS DMS がこの最初のフィールドを作成と設定する方法は、移行タスクのタイプとincludeOpForFullLoad
、cdcInsertsOnly
、cdcInsertsAndUpdates
の設定によって異なります。
includeOpForFullLoad
が true
に指定されたフルロードの場合、AWS DMS は常に各 .csv レコードに追加の最初のフィールドを作成します。このフィールドには、ソースデータベースで行が挿入されたことを示す文字 I (INSERT) が含まれます。cdcInsertsOnly
が false
(デフォルト) に指定された 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 |
追加のフィールドなし | 最初のフィールド値が追加されて I 、U 、または D に設定 |
false |
true |
追加のフィールドなし | 追加のフィールドなし |
true |
false |
最初のフィールド値が追加されて I に設定 |
最初のフィールド値が追加されて I 、U 、または D に設定 |
includeOpForFullLoad
と cdcInsertsOnly
が同じ値に設定されている場合、ターゲットレコードは現在の移行タイプのレコード設定を制御する属性に従って設定されます。その属性は、全ロードの場合は includeOpForFullLoad
、CDC ロードの場合は cdcInsertsOnly
です。
includeOpForFullLoad
と cdcInsertsOnly
が異なる値に設定されている場合、AWS DMS によってターゲットレコードの設定は CDC と全ロードの両方に対して一貫したものになります。これは、CDC ロードのレコード設定を、includeOpForFullLoad
で指定された前の全ロードのレコード設定と一致させることで行われます。
つまり、挿入されたレコードを示す最初のフィールドを追加するように全ロードが設定されているとします。この場合、続く CDC ロードは、挿入、更新、または削除されたレコードを示す最初のフィールドをソースで必要に応じて追加するように設定されます。逆に、挿入されたレコードを示す最初のフィールドを追加しないように全ロードが設定されているとします。この場合、CDC ロードも、ソースでの対応するレコードオペレーションに関係なく、各レコードに最初のフィールドを追加しないように設定されます。
同様に、DMS が追加の最初のフィールドを追加して設定する方法は、includeOpForFullLoad
および cdcInsertsAndUpdates
の設定によって異なります。以下の表では、includeOpForFullLoad
および cdcInsertsAndUpdates
属性の設定がどのように連動して、この形式の移行済みレコードの設定に影響するかを確認できます。
使用するパラメータ設定 | DMS が .csv 出力用に設定するターゲットレコード | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsAndUpdates | 全ロードの場合 | CDC ロードの場合 |
true |
true |
最初のフィールド値が追加されて I に設定 |
最初のフィールド値が追加されて I または U に設定 |
false |
false |
追加のフィールドなし | 最初のフィールド値が追加されて I 、U 、または D に設定 |
false |
true |
追加のフィールドなし | 最初のフィールド値が追加されて I または U に設定 |
true |
false |
最初のフィールド値が追加されて I に設定 |
最初のフィールド値が追加されて I 、U 、または 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 |