翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
のターゲットとしての Amazon S3 の使用 AWS Database Migration Service
サポートされている任意のデータベースソース AWS DMS から を使用して Amazon S3 にデータを移行できます。Amazon S3 を AWS DMS タスクのターゲットとして使用する場合、全ロードデータキャプチャ (CDC) データと変更データキャプチャ (CDC) データは、デフォルトでカンマ区切り値 (.csv) 形式に書き込まれます。よりコンパクトなストレージと高速なクエリオプションにおいては、Apache Parquet (.parquet) 形式でデータを書き込むオプションもあります。
AWS DMS は、16 進数の増分カウンターを使用して全ロード中に作成されたファイルを指定します。例えば、LOAD00001.csv、LOAD00002...、LOAD00009, LOAD0000Aなどです。.csv files. AWS DMS names CDC ファイルは、20141029-1134010000.csv などのタイムスタンプを使用します。レコードを含むソーステーブルごとに、 は指定されたターゲットフォルダの下にフォルダ AWS DMS を作成します (ソーステーブルが空でない場合)。 は、すべての全ロードファイルと CDC ファイルを指定された Amazon S3 バケットに AWS DMS 書き込みます。MaxFileSize エンドポイント設定を使用して、 が AWS DMS 作成するファイルのサイズを制御できます。
パラメータ 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 ...
追加の接続属性を使用して、列の区切り文字、行の区切り文字、およびその他のパラメータを指定できます。追加の接続属性の詳細については、このセクションの最後にある「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。
次のとおり、ExpectedBucketOwner
Amazon S3 エンドポイント設定を使用してバケット所有者を指定して、スナイプ攻撃を防ぐことができます。その後、接続をテストしたり移行の実行をリクエストしたりすると、S3 は指定されたパラメータに対してバケット所有者のアカウント ID をチェックします。
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
AWS DMS を使用して CDC タスクを使用してデータ変更をレプリケートする場合、.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
テーブルがあるとします。 は、次のイベントに応答してデータを .csv または .parquet ファイルに AWS DMS 書き込みます。
-
新しい従業員 (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
の追加接続属性を設定することができます。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。
トピック
- ターゲットとして Amazon S3 を使用するための前提条件
- ターゲットとしての Amazon S3 の使用における制限
- セキュリティ
- Apache Parquet を使用した Amazon S3 オブジェクトの保存
- Amazon S3 オブジェクトのタグ付け
- Amazon S3 ターゲットオブジェクトを暗号化するための AWS KMS キーの作成
- 日付ベースのフォルダパーティション分割を使用する
- のターゲットとして Amazon S3 を使用する場合のパーティション化されたソースの並列ロード AWS DMS
- のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS
- の Amazon S3 ターゲット AWS Glue Data Catalog での の使用 AWS DMS
- 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] (信頼されたエンティティ) として追加されています。
AWS DMS バージョン 3.4.7 以降では、DMS は VPC エンドポイントまたはパブリックルートを介してソースバケットにアクセスする必要があります。VPC エンドポイントの詳細については、「」を参照してくださいAWS DMS ソースエンドポイントとターゲットエンドポイントとしての VPC エンドポイントの設定。
このアカウントアクセスを設定するには、移行タスクを作成するために使用するユーザーアカウントに割り当てられたロールに次の一連のアクセス許可があることを確認します。
{ "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 は、既定アクセスコントロールリスト (ACLs) と呼ばれる Amazon S3 の事前定義された一連の許可をサポートします。各既定 ACL には、Amazon S3 バケットのアクセス許可を設定するために使用できる一連の被付与者とアクセス許可があります。S3 ターゲットエンドポイントの接続文字列属性で cannedAclForObjects
で使用して、既定 ACL を指定できます。追加接続属性 cannedAclForObjects
の使用についての詳細は、「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。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 の使用」を参照してください。
-
エンドポイント作成時にセミコロンで区切られたリストとして指定する追加の接続属性です。詳細については、「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。
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 キーの作成
カスタム AWS KMS キーを作成して使用すると、Amazon S3 ターゲットオブジェクトを暗号化できます。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
) を設定します。詳細については、「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。
KMS キーを使用して Amazon S3 ターゲットオブジェクトを暗号化するには、Amazon S3 バケットにアクセスする許可がある IAM ロールが必要です。次に、この IAM ロールは作成した暗号化キーに添付されるポリシー (キーポリシー) にアクセスします。これは、IAM コンソールで次を作成して実行します:
-
Amazon S3 バケットにアクセスする権限があるポリシーです。
-
このポリシーがある IAM ロールです。
-
このロールを参照するキーポリシーを持つ KMS 暗号化キー
以下の手順でこれを行う方法について説明します。
Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、ナビゲーションペインの [ポリシー] を選択します。[ポリシー] ページが開きます。
-
[ポリシーの作成] を選択します。[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] (タグを追加) ビューが表示されます ここでは、任意のタグを追加することができます。
-
[次へ: レビュー] を選択します。[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 し、https://console.aws.amazon.com/kms
で AWS Key Management Service (AWS 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 } } } ]
-
[Finish] を選択します。[Encryption keys] (暗号化キー) ページが開き、KMS ーが作成されたことを示すメッセージが表示されます。
これで、指定したエイリアス (DMS-S3-endpoint-encryption-key
など) を使用する新しい KMS キーが作成されました。このキーにより、 AWS DMS は Amazon S3 ターゲットオブジェクトを暗号化できます。
日付ベースのフォルダパーティション分割を使用する
AWS DMS は、ターゲットエンドポイントとして Amazon S3 を使用する場合、トランザクションコミット日に基づいて S3 フォルダパーティションをサポートします。 Amazon 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"}'
のターゲットとして Amazon S3 を使用する場合のパーティション化されたソースの並列ロード AWS DMS
パーティション化されたデータソースの 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 など、データベースエンジンによっては、パーティション分割の概念がない場合があります。これらのデータベースエンジンの場合、 は次のように、実行中のソースセグメントインデックスをターゲットの .csv ファイル名のプレフィックスとして AWS DMS 追加します。
.../
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
ここでは、 は 3 つのパーティションサブフォルダのそれぞれに一連の .csv ファイル AWS DMS を保存します。各パーティションのサブフォルダ内の一連の .csv ファイルには、すべてのデータが移行されるまで LOAD00000001.csv
から始まるインクリメントでファイル名が付けられます。
場合によっては、segment-names
設定を使用して ranges
並列ロードタイプのパーティションサブフォルダに明示的に名前を付けないことがあります。この場合、 は、
サブフォルダの下に各一連の .csv ファイルを作成するデフォルト AWS DMS を適用します。この場合、 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
のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS
追加の接続属性の使用と同様、エンドポイントの設定を使用して、ターゲットの Amazon S3 データベースを設定できます。 AWS DMS コンソールを使用するか、--s3-settings '{"
JSON 構文で の EndpointSetting"
: "value"
, ...
}'create-endpoint
コマンドを使用してAWS CLI、ターゲットエンドポイントを作成するときに設定を指定します。
次の表は、ターゲットとして Amazon S3 を使用できるエンドポイント設定を説明しています。
オプション | 説明 |
---|---|
CsvNullValue |
が null 値をどのように AWS DMS 処理するかを指定するオプションのパラメータ。NULL 値の処理中に、このパラメータを使用して、ターゲットに書き込むときにユーザー定義の文字列を NULL として渡すことができます。例えば、ターゲット列が NULL が許容しない場合、このオプションを使用して空の文字列値と null 値を区別できる。したがって、このパラメータ値を空の文字列 ("" または '') に設定すると、 は空の文字列を ではなく null 値として AWS DMS 扱います デフォルト値: 有効な値:任意の有効な文字列 例: |
AddColumnName |
このパラメータを デフォルト値: 有効値: 例: |
AddTrailingPaddingCharacter |
S3 ターゲットエンドポイント設定 タイプ: ブール 例: |
BucketFolder |
S3バケット内のフォルダ名を設定するオプションのパラメータ。このパラメータを指定した場合、ターゲットオブジェクトは .csv または .parquet ファイルとしてパス 例: |
BucketName |
S3 ターゲットオブジェクトが .csv または .parquet ファイルとして作成される S3 バケットの名前。 例: |
CannedAclForObjects |
S3 バケットで作成されたオブジェクトの事前定義された (既定) アクセスコントロールリストを AWS DMS が .csv または .parquet ファイルとして指定できるようにする値。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 に準拠する動作を設定するために使用するオプションのパラメータです。この値を に設定する デフォルト値: 有効値: 例: |
EncryptionMode |
S3 にコピーした .csv または .parquet オブジェクトファイルを暗号化するサーバー側の暗号化モードです。有効な値は、 注記CLI デフォルト値: 有効な値: 例: |
ServerSideEncryptionKmsKeyId |
例: |
DataFormat |
が S3 オブジェクトの作成 AWS DMS に使用するファイルの出力形式。Amazon S3 ターゲットの場合、 は .csv ファイルまたは .parquet ファイル AWS DMS をサポートします。.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 ターゲットエンドポイントデータにタイムスタンプ列を含めるためのオプションのパラメータ。 AWS DMS を空白以外の値 全ロードの場合、このタイムスタンプ列の各行には、データが DMS によってソースからターゲットに転送されたときのタイムスタンプが含まれます。 CDC ロードの場合、タイムスタンプ列の各行には、ソースデータベースでのその行のコミットのタイムスタンプが含まれます。 タイムスタンプ列の値の文字列形式は
例: |
UseTaskStartTimeForFullLoadTimestamp |
、このパラメータは
デフォルト値: 有効な値: 例:
|
ParquetTimestampInMillisecond |
.parquet 形式で S3 オブジェクトに書き込まれるすべての この属性が 現在、 Amazon Athena および AWS Glue は、 注記
デフォルト値: 有効値: 例: |
GlueCatalogGeneration |
を生成するには AWS Glue Data Catalog、このエンドポイント設定を に設定します デフォルト値: 有効値: 例: 注: |
の Amazon S3 ターゲット AWS Glue Data Catalog での の使用 AWS DMS
AWS Glue は、データを分類する簡単な方法を提供するサービスで、 と呼ばれるメタデータリポジトリで構成されます AWS Glue Data Catalog。Amazon S3 ターゲットエンドポイント AWS Glue Data Catalog と統合し、Amazon Athena などの他のサービスを通じて Amazon S3 データをクエリできます。 AWS Amazon Athena Amazon Redshift は と連携します AWS Glue が、事前構築されたオプションとしてサポート AWS DMS していません。
データカタログを生成するには、次の AWS CLI 例に示すようにtrue
、GlueCatalogGeneration
エンドポイント設定を に設定します。
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) を変更します。
-
Amazon S3 ターゲットエンドポイント AWS Glue Data Catalog と統合し、Amazon Athena などの他のサービスを通じて Amazon S3 データをクエリします。 Amazon Athena
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) のキャプチャ
デフォルトでは、 が CDC タスク AWS DMS を実行すると、ソースデータベース (またはデータベース) に記録されたすべての行の変更が、各テーブルの 1 つ以上のファイルに保存されます。同じテーブルの変更を含む各ファイルのセットは、そのテーブルに関連付けられた 1 つのターゲットディレクトリにあります。 は、Amazon S3 ターゲットエンドポイントに移行されたデータベーステーブルと同じ数のターゲットディレクトリ AWS DMS を作成します。ファイルは、トランザクションの順序に関係なく、これらのディレクトリの S3 ターゲットに保存されます。ファイル命名規約、データコンテンツ、形式の詳細については、「のターゲットとしての Amazon S3 の使用 AWS Database Migration Service」をご参照ください。
トランザクションの順序もキャプチャするようにソースデータベースの変更をキャプチャするには、トランザクションサイズに応じて作成された 1 つ以上の .csv ファイルにすべてのデータベーステーブルの行変更を保存する AWS DMS ように に指示する 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 は target.DataFormat
S3 AWS DMS doesn not save data changes in transaction order using .parquet files.
データレプリケーションタスク中の Amazon S3 ターゲットへの書き込み頻度を制御するには、CdcMaxBatchInterval
と CdcMinFileSize
を設定します。これにより、追加のオーバーヘッド オペレーションなしでデータを分析する際のパフォーマンスが向上します。詳細については、「のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS」をご参照ください。
すべての行の変更 AWS DMS をトランザクション順序で保存するように に指示するには
-
ターゲットの
PreserveTransactions
S3 設定をtrue
に設定します。 -
ターゲットの S3
CdcPath
設定を、.csv トランザクションファイルを保存する相対フォルダパス AWS DMS に設定します。AWS DMS は、デフォルトの S3 ターゲットバケットと作業ディレクトリの下、またはターゲットの と S3
BucketFolder
設定を使用して指定したバケットBucketName
とバケットフォルダの下にこのパスを作成します。
移行済み S3 データでのソース DB オペレーションの表示
がレコードを S3 ターゲット AWS DMS に移行すると、移行された各レコードに追加のフィールドを作成できます。この追加のフィールドは、ソースデータベースでレコードに適用されたオペレーションを示します。でこの最初のフィールド 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
は CDC と全ロードの両方でターゲットレコード設定を一貫性 AWS DMS を持たせます。これは、CDC ロードのレコード設定を、includeOpForFullLoad
で指定された前の全ロードのレコード設定と一致させることで行われます。
つまり、挿入されたレコードを示す最初のフィールドを追加するように全ロードが設定されているとします。この場合、続く CDC ロードは、挿入、更新、または削除されたレコードを示す最初のフィールドをソースで必要に応じて追加するように設定されます。逆に、挿入されたレコードを示す最初のフィールドを追加しないように全ロードが設定されているとします。この場合、CDC ロードも、ソースでの対応するレコードオペレーションに関係なく、各レコードに最初のフィールドを追加しないように設定されます。
同様に、DMS が追加の最初のフィールドを追加して設定する方法は、includeOpForFullLoad
および cdcInsertsAndUpdates
の設定によって異なります。以下の表では、includeOpForFullLoad
および cdcInsertsAndUpdates
属性の設定がどのように連動して、この形式の移行済みレコードの設定に影響するかを確認できます。
使用するパラメータ設定 | DMS が .csv 出力用に設定するターゲットレコード | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsAnd更新 | 全ロードの場合 | CDC ロードの場合 |
true |
true |
最初のフィールド値が追加されて I に設定 |
最初のフィールド値が追加されて I または U に設定 |
false |
false |
追加のフィールドなし | 最初のフィールド値が追加されて I 、U 、または D に設定 |
false |
true |
追加のフィールドなし | 最初のフィールド値が追加されて I または U に設定 |
true |
false |
最初のフィールド値が追加されて I に設定 |
最初のフィールド値が追加されて I 、U 、または D に設定 |
S3 Parquet のターゲットデータ型
次の表は、 の使用時にサポートされる Parquet ターゲットデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示しています。
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 |