

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

# のターゲットとしての Amazon S3 の使用 AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

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

AWS DMS は、増分 16 進数カウンターを使用して全ロード中に作成されたファイルの名前を指定します。たとえば、LOAD00001.csv、LOAD00002...、LOAD00009, LOAD0000A などです。.csv files. AWS DMS names CDC files using timestamps, example 20141029-1134010000.csv です。レコードを含むソーステーブルごとに、 は指定されたターゲットフォルダの下にフォルダ AWS DMS を作成します (ソーステーブルが空でない場合）。 は、すべての全ロードファイルと CDC ファイルを指定された Amazon S3 バケットに AWS DMS 書き込みます。が AWS DMS 作成するファイルのサイズは、[MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-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
...
```

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

なりすましを防ぐため、 はオペレーションを実行する前にバケットの所有権 AWS DMS を検証します。デフォルトでは、`ExpectedBucketOwner`Amazon S3 エンドポイント設定が指定されていない場合、 AWS DMS は AWS DMS サービスロールを所有する AWS アカウント ID を期待されるバケット所有者として使用します。

別の AWS アカウントが所有する S3 バケットにデータを移行するには、次に示すように、`ExpectedBucketOwner`Amazon S3 エンドポイント設定で実際のバケット所有者を明示的に指定する必要があります。そうしないと、クロスアカウントレプリケーションタスクは失敗します。

```
--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) のキャプチャ](#CHAP_Target.S3.EndpointSettings.CdcPath)」をご参照ください。

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

**Topics**
+ [ターゲットとして Amazon S3 を使用するための前提条件](#CHAP_Target.S3.Prerequisites)
+ [ターゲットとしての Amazon S3 の使用における制限](#CHAP_Target.S3.Limitations)
+ [セキュリティ](#CHAP_Target.S3.Security)
+ [Apache Parquet を使用した Amazon S3 オブジェクトの保存](#CHAP_Target.S3.Parquet)
+ [Amazon S3 オブジェクトのタグ付け](#CHAP_Target.S3.Tagging)
+ [Amazon S3 ターゲットオブジェクトを暗号化するための AWS KMS キーの作成](#CHAP_Target.S3.KMSKeys)
+ [日付ベースのフォルダパーティション分割を使用する](#CHAP_Target.S3.DatePartitioning)
+ [のターゲットとして Amazon S3 を使用する場合のパーティション化されたソースの並列ロード AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.S3.Configuring)
+ [の Amazon S3 ターゲット AWS Glue Data Catalog での の使用 AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用](#CHAP_Target.S3.EndpointSettings)
+ [移行済み S3 データでのソース DB オペレーションの表示](#CHAP_Target.S3.Configuring.InsertOps)
+ [S3 Parquet のターゲットデータ型](#CHAP_Target.S3.DataTypes)

## ターゲットとして Amazon S3 を使用するための前提条件
<a name="CHAP_Target.S3.Prerequisites"></a>

ターゲットとして 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 エンドポイントの詳細については、「[の VPC エンドポイントの設定 AWS DMS](CHAP_VPC_Endpoints.md)」を参照してください。

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

------
#### [ JSON ]

****  

```
{
    "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 ターゲット検証の前提条件](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites)」を参照してください。

## ターゲットとしての Amazon S3 の使用における制限
<a name="CHAP_Target.S3.Limitations"></a>

ターゲットとして Amazon S3 を使用する場合、以下の制限が適用されます：
+ S3 のバージョニングは有効にしません。S3 のバージョニングが必要な場合は、ライフサイクルポリシーを使用して古いバージョンを積極的に削除します。これを行わないと、S3 `list-object` コールのタイムアウトが原因でエンドポイント接続テストが失敗する可能性があります。S3 バケットのライフサイクルポリシーを作成するには、「[ストレージのライフサイクルの管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)」を参照してください。S3 オブジェクトのバージョンを削除するには、「[バージョニングが有効なバケットからのオブジェクトバージョンの削除](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html)」を参照してください。
+ 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 処理のタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md)」をご参照ください。
+ 完全 LOB モードはサポートされていません。
+ 全ロード時のソーステーブル構造に対する変更はサポートされていません。全ロード時のデータ変更はできます。
+ 同じソーステーブルから同じターゲット S3 エンドポイントバケットにデータをレプリケートする複数のタスクを実行すると、それらのタスクが同じファイルに書き込みます。同じテーブルのデータソースを使用する場合、異なるターゲットエンドポイント (バケット) を指定することをお勧めします。
+ `BatchApply` は S3 エンドポイントに対応していません。バッチ 適用の使用 (例えば、S3 ターゲットに対して `BatchApplyEnabled` ターゲットメタデータ (タスク設定) を実行すると、データ損失につながることがあります。
+ `DatePartitionEnabled` または `addColumnName` は `PreserveTransactions` または `CdcPath` と組み合わせて使用できません。
+ AWS DMS では、変換ルールを使用した複数のソーステーブルの同じターゲットフォルダへの名前の変更はサポートされていません。
+ フルロードフェーズ中にソーステーブルへの書き込みが多い場合、DMS は S3 バケットまたはキャッシュされた変更に重複レコードを書き込むことがあります。
+ `TargetTablePrepMode` の `DO_NOTHING` を使用してタスクに設定すると、フルロードフェーズ中にタスクが突然停止して再開した場合に、DMS は S3 バケットに重複レコードを書き込むことがあります。
+ `PreserveTransactions` を `true` に設定してターゲットエンドポイントを設定すると、テーブルをリロードしても以前に生成した CDC ファイルはクリアされません。詳細については、「[S3 ターゲットでのトランザクション順序を含むデータ変更 (CDC) のキャプチャ](#CHAP_Target.S3.EndpointSettings.CdcPath)」を参照してください。

S3 をターゲットとする検証を使用する際の制限については、「[ターゲットの S3 の検証を使用する場合の制限](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations)」を参照してください。

## セキュリティ
<a name="CHAP_Target.S3.Security"></a>

ターゲットとして 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](#CHAP_Target.S3.Configuring)」をご参照ください。Amazon S3 の既定 ACL の詳細については、「[既定 ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)」をご参照ください。

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

## Apache Parquet を使用した Amazon S3 オブジェクトの保存
<a name="CHAP_Target.S3.Parquet"></a>

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

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

移行された S3 ターゲットオブジェクトに .parquet ストレージ形式を設定するには、以下のメカニズムを使用できます。
+  AWS CLI あるいは AWS DMSの API を使用してエンドポイントを作成するときに、JSON オブジェクトのパラメータとして指定するエンドポイント設定です。詳細については、「[Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用](#CHAP_Target.S3.EndpointSettings)」を参照してください。
+ エンドポイント作成時にセミコロンで区切られたリストとして指定する追加の接続属性です。詳細については、「[のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.S3.Configuring)」をご参照ください。

## Amazon S3 オブジェクトのタグ付け
<a name="CHAP_Target.S3.Tagging"></a>

タスクテーブル マッピングルールの一部として適切な JSON オブジェクトを指定することで、レプリケーション インスタンスが作成する Amazon S3 オブジェクトにタグを付けることができます。有効なタグ名を含む S3 オブジェクトのタグ付けに関する要件とオプションの詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[オブジェクトのタグ付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html)」をご参照ください。JSON を使用したテーブルマッピングの詳細については、「[JSON を使用するテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md)」をご参照ください。

`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` - テーブルスキーマの名前。<br />`table-name` - テーブルの名前。 | ルールが適用されるスキーマおよびテーブルごとの名前。各 `object-locator` パラメータの値のすべてあるいは一部で、「%」パーセント記号をワイルドカードとして使用できます。したがって、これらの項目には以下を対応させることができます。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html) | 
| tag-set | `key` - 単一のタグの任意の有効な名前。<br />`value` - このタグに有効な任意の JSON 値。 | 特定の `object-locator` に一致する作成された S3 オブジェクトごとに設定する 1 つ以上のタグの名前と値です。単一の `tag-set` パラメータオブジェクトで 10 個までのキー値ペアを指定することができます。S3 オブジェクトタグの詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[オブジェクトのタグ付け](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html)」をご参照ください。<br />また、タグの `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 オブジェクトに同様に一致する場合、この後処理ルールに最初に関連図けられたタグセットがオブジェクトのタグ付けに使用されます。

**Example 単一のテーブルとスキーマに作成された 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"
              }                                     
           ]
        }
    ]
}
```

**Example 複数のテーブルとスキーマに作成された 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 に一致) でオブジェクトに追加されたタグを上書きします。

**Example 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 キーの作成
<a name="CHAP_Target.S3.KMSKeys"></a>

カスタム 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}}"}'
  ```

  ここで、your-`{{your-KMS-key-ARN}}` は KMS キーの Amazon リソースネーム (ARN) であり、IAM ロールのアクセス許可を持っている必要があります。「[Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用](#CHAP_Target.S3.EndpointSettings)」を参照してください。
+ 値 (`SSE_KMS`) に追加の接続属性 (`encryptionMode`) を設定し、KMS キーの ARN に追加の接続属性 (`serverSideEncryptionKmsKeyId`) を設定します。詳細については、「[のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.S3.Configuring)」をご参照ください。

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

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

**Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

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

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

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

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

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

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

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

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

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

------
#### [ 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]** (ロール) を選択します。[**ロール**] の詳細ページが開きます。

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

1.  AWS サービスを信頼されたエンティティとして選択した状態で、IAM ロールを使用するサービスとして **DMS** を選択します。

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

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

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

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

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

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

**この IAM ロールを参照するキーポリシーを持つ KMS 暗号化キーを作成するには**
**注記**  
で AWS KMS 暗号化キー AWS DMS を使用する方法の詳細については、「」を参照してください[暗号化キーの設定と AWS KMS アクセス許可の指定](CHAP_Security.md#CHAP_Security.EncryptionKey)。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) で AWS Key Management Service (AWS KMS) コンソールを開きます。

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

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

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

1. [**キーの種類**] で、[**対称**] を選択します。
**注記**  
このキーを作成する場合、Amazon S3 などのすべての AWS サービスは対称暗号化キーでのみ機能するため、作成できるのは対称キーのみです。

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

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

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

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

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

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

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

------
#### [ JSON ]

****  

   ```
   {
       "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
                   }
               }
           }
       ]
   }
   ```

------

1. [**Finish**] を選択してください。**[Encryption keys]** (暗号化キー) ページが開き、KMS ーが作成されたことを示すメッセージが表示されます。

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

## 日付ベースのフォルダパーティション分割を使用する
<a name="CHAP_Target.S3.DatePartitioning"></a>

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` に設定されている場合は、この設定を使用します。
+ `DatePartitionTimezone` S3 ターゲットエンドポイントを作成するときは、`DatePartitionTimezone` を設定して現在の UTC 時刻を指定されたタイムゾーンに変換します。変換は、日付パーティションフォルダが作成され、CDC ファイル名が生成されたときに行われます。タイムゾーンの形式は「地域/場所」です。このパラメータは、次の例のように `DatePartitionedEnabled` が `true` に設定されているときに使用します。

  ```
  s3-settings='{"DatePartitionEnabled": true, "DatePartitionSequence": "YYYYMMDDHH", "DatePartitionDelimiter": "SLASH", "DatePartitionTimezone":"Asia/Seoul", "BucketName": "dms-nattarat-test"}'
  ```

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

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

## のターゲットとして Amazon S3 を使用する場合のパーティション化されたソースの並列ロード AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

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

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

上記ルールタイプの詳細については、「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)」を参照してください。

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

```
{{bucket_name}}/{{bucket_folder}}/{{database_schema_name}}/{{table_name}}/{{partition_name}}/LOAD{{seq_num}}.csv
```

この場合、データを移行して S3 ターゲットに保存するサブフォルダパスには、同じ名前のソースパーティションに対応する追加の `{{partition_name}}` サブフォルダがあります。この `{{partition_name}}` サブフォルダには、指定されたソースパーティションから移行されたデータを含む単一または複数の `LOAD{{seq_num}}.csv` ファイルが保存されます。この `{{seq_num}}` は、.csv ファイルの末尾に付けられるシーケンス番号の接尾辞です。例えば、`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` 並列ロードタイプのパーティションサブフォルダに明示的に名前を付けないことがあります。この場合、 は`{{table_name}}`、サブフォルダの下に各一連の .csv ファイルを作成するデフォルト AWS DMS を適用します。この場合、 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}}/SEGMENT{{Z}}_LOAD[00000001...].csv
```

## のターゲットとして Amazon S3 を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

追加の接続属性の使用と同様、エンドポイントの設定を使用して、ターゲットの Amazon S3 データベースを設定できます。 AWS DMS コンソールを使用するか、`--s3-settings '{"{{EndpointSetting"}}: {{"value"}}, {{...}}}'`JSON 構文で の `create-endpoint` コマンドを使用して[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)、ターゲットエンドポイントを作成するときに設定を指定します。

**注記**  
DMS はソースデータベースからのコミット順序に基づいて Parquet ファイルに変更を書き込みますが、複数のテーブルを移行する場合、テーブルレベルのパーティショニングにより、元のトランザクション順序は保持されません。トランザクションシーケンス情報を維持するには、各行のソースコミットタイムスタンプを含めるように `TimestampColumnName` エンドポイント設定を設定します。これを使用して、ダウンストリーム処理で元のトランザクションシーケンスを再構築できます。Parquet ファイルは、`PreserveTransactions` 設定を提供する CSV 形式とは異なり、列指向ストレージ構造を使用しているため、トランザクションを別の方法で処理します。このアプローチにより、ソースのコミット時間を正確に追跡し、移行後のトランザクション順序の再構築をサポートして、データ整合性を維持しながら効率的にデータを処理することが可能になります。

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


| **オプション** | **説明** | 
| --- | --- | 
| CsvNullValue | が null 値 AWS DMS を処理する方法を指定するオプションのパラメータ。NULL 値の処理中に、このパラメータを使用して、ターゲットに書き込むときにユーザー定義の文字列を NULL として渡すことができます。例えば、ターゲット列が NULL が許容しない場合、このオプションを使用して空の文字列値と null 値を区別できる。<br />デフォルト値: `""`<br />有効な値:任意の有効な文字列<br />例: `--s3-settings '{"CsvNullValue": "NULL"}'`<br />ソースデータベースの列値が null の場合、S3 CSV ファイルでは、列値は "" 文字列の代わりに `NULL` になります。 | 
| AddColumnName | `true` または `y` に設定された場合に .csv 出力ファイルに列名情報を追加するために使用できるオプションのパラメータ。<br />このパラメータを `PreserveTransactions` や `CdcPath` と併用することはできない。<br />デフォルト値: `false`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"AddColumnName": true}'` | 
| AddTrailingPaddingCharacter | S3 ターゲットエンドポイント設定 `AddTrailingPaddingCharacter` を使用して文字列データにパディングを追加する。デフォルト値は `false` です。<br />タイプ: ブール値<br />例: `--s3-settings '{"AddTrailingPaddingCharacter": true}'` | 
| BucketFolder | S3バケット内のフォルダ名を設定するオプションのパラメータ。このパラメータを指定した場合、ターゲットオブジェクトは .csv または .parquet ファイルとしてパス `{{BucketFolder}}/{{schema_name}}/{{table_name}}/` に作成されます。このパラメータを指定しない場合、使用されるパスは `{{schema_name}}/{{table_name}}/` となります。<br />例: `--s3-settings '{"BucketFolder": "testFolder"}'` | 
| BucketName | S3 ターゲットオブジェクトが .csv または .parquet ファイルとして作成される S3 バケットの名前。<br />例: `--s3-settings '{"BucketName": "buckettest"}'` | 
| CannedAclForObjects | が S3 バケットで作成されたオブジェクトの事前定義済み (既定) アクセスコントロールリストを .csv または .parquet ファイルとして AWS DMS 指定できるようにする値。Amazon S3 の既定 ACL の詳細については、「Amazon S3 デベロッパーガイド」の「[既定 ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)」を参照してください。<br />デフォルト値: なし<br />この属性の有効な値は、NONE、PRIVATE、PUBLIC\_READ、PUBLIC\_READ\_WRITE、AUTHENTICATED\_READ、AWS\_EXEC\_READ、BUCKET\_OWNER\_READ、BUCKET\_OWNER\_FULL\_CONTROL です。<br />例: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'` | 
| CdcInsertsOnly | 変更データキャプチャ (CDC) ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) または列ストレージ (.parquet) の出力ファイルに書き込みます。デフォルトでは (`false` 設定)、.csv または.parquet レコードの最初のフィールドに、I (INSERT)、U (UPDATE)、または D (DELETE) という文字が含まれます。この文字は、ターゲットへの CDC ロードのためにソースデータベースで行が挿入、更新、または削除されたかどうかを示します。`cdcInsertsOnly` が `true` または `y` に設定されている場合、ソースデータベースからの INSERT のみが .csv または .parquet ファイルに移行されます。<br />.csv 形式の場合にのみ、これらの INSERTS の記録方法は `IncludeOpForFullLoad` の値によって異なります。`IncludeOpForFullLoad` が `true` に設定されている場合、各 CDC レコードの最初のフィールドは、ソースでの INSERT オペレーションを示す I に設定されます。`IncludeOpForFullLoad` が `false` に設定されている場合、各 CDC レコードは、ソースでの INSERT オペレーションを示す最初のフィールドなしで書き込まれます。これらのパラメータがどのように連動するかの詳細については、「[移行済み S3 データでのソース DB オペレーションの表示](#CHAP_Target.S3.Configuring.InsertOps)」をご参照ください。<br />デフォルト値: `false`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"CdcInsertsOnly": true}'` | 
| CdcInsertsAndUpdates | 変更データキャプチャ (CDC) ロードを有効化し、INSERT および UPDATE オペレーションを .csv または .parquet (列指向ストレージ) 出力ファイルに書き込みます。デフォルト設定は `false` ですが、`cdcInsertsAndUpdates` が `true` または `y` に設定されている場合、ソースデータベースからの INSERT および UPDATE が .csv または .parquet ファイルに移行されます。<br />.csv 形式の場合、これらの INSERTS および UPDATE の記録方法は `includeOpForFullLoad` パラメータの値によって異なります。`includeOpForFullLoad` が `true` に設定されている場合、各 CDC レコードの最初のフィールドは、ソースでの INSERT および UPDATE オペレーションを示す `I` または `U` に設定されます。しかし、`includeOpForFullLoad` が `false` に設定されている場合、CDC レコードはソースでの INSERT または UPDATE オペレーションを示すことなく書き込まれます。<br /> これらのパラメータがどのように連動するかの詳細については、「[移行済み S3 データでのソース DB オペレーションの表示](#CHAP_Target.S3.Configuring.InsertOps)」をご参照ください。 `CdcInsertsOnly` および `cdcInsertsAndUpdates` の両方を、同じエンドポイントで true に設定することはできません。同じエンドポイントで `cdcInsertsOnly` と `cdcInsertsAndUpdates` のどちらかを `true` に設定できますが、両方を設定することはできません。 <br />デフォルト値: `false`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"CdcInsertsAndUpdates": true}'` | 
| `CdcPath` | CDC ファイルのフォルダパスを指定します。S3 ソースについては、タスクで変更データをキャプチャする場合、この属性が必須ですが、それ以外の場合はオプションです。`CdcPath` が設定された場合、DMS はこのパスから CDC ファイルを読み取り、データ変更をターゲット エンドポイントにレプリケーションします。S3 ターゲットについて `PreserveTransactions` を true に設定した場合、DMS は、DMS が CDC ロードのトランザクション順序を保存できる S3 ターゲット上のフォルダパスにこのパラメータが設定されていることを確認します。DMS は、S3 ターゲットの作業ディレクトリまたは `BucketFolder` と `BucketName` で指定された S3 ターゲットの場所のいずれかにこの CDC フォルダパスを作成します。<br />このパラメータを `DatePartitionEnabled` や `AddColumnName` と併用することはできない。<br />タイプ: 文字列<br />例えば、`CdcPath` を `MyChangedData` と指定し,`BucketName` を `MyTargetBucket` と指定し、`BucketFolder` は指定しない場合、DMS は次の CDC フォルダパス `MyTargetBucket/MyChangedData` を作成します。<br />同じ `CdcPath` を指定し、`BucketName` を `MyTargetBucket` と指定し、`BucketFolder` を `MyTargetData` と指定すると、DMS は次の CDC フォルダパス `MyTargetBucket/MyTargetData/MyChangedData` を作成します。この設定は、 AWS DMS バージョン 3.4.2 以降でサポートされています。 <br />トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。  | 
| `CdcMaxBatchInterval` | ファイルを Amazon S3 に出力するための最大インターバル長条件 (秒単位)です。<br />デフォルト値は 60 秒です。<br />`CdcMaxBatchInterval` と `CdcMinFileSize` が指定されている場合、ファイルの書き込みは、最初に満たされるパラメータ条件によってトリガーされる。<br /> AWS DMS バージョン 3.5.3 以降、ソースとして PostgreSQL または Aurora PostgreSQL を使用し、ターゲットとして Parquet を使用する Amazon S3 を使用する場合、`confirmed_flush_lsn`更新の頻度は、ターゲットエンドポイントがメモリに保持するように設定されたデータの量によって異なります。 は、メモリ内のデータが Amazon S3 に書き込まれた後にのみソースに AWS DMS `confirmed_flush_lsn`送り返します。`CdcMaxBatchInterval` パラメータをより大きい値に設定すると、ソースデータベースでレプリケーションスロットの使用量が増加する可能性があります。  | 
| `CdcMinFileSize` | Amazon S3 にファイルを出力するための KB 単位による最小ファイル サイズ条件です。<br />デフォルト値: 32000 KB)<br />`CdcMinFileSize` と `CdcMaxBatchInterval` が指定されている場合、ファイルの書き込みは、最初に満たされるパラメータ条件によってトリガーされる。 | 
| `PreserveTransactions` | `true` に設定されている場合、DMS は、`CdcPath` によって指定された Amazon S3 ターゲットに変更データ キャプチャ (CDC) のトランザクション順序を保存します。<br />このパラメータを `DatePartitionEnabled` や `AddColumnName` と併用することはできない。<br />タイプ: ブール値<br />トランザクション順序でデータ変更をキャプチャする場合、DMS は、ターゲットの DataFormat S3 設定の値に関係なく、常に行の変更を.csv ファイルに保存します。この設定は、 AWS DMS バージョン 3.4.2 以降でサポートされています。  | 
| IncludeOpForFullLoad | 全ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) 出力ファイルに書き込みます。<br />全ロードの場合、レコードの挿入のみ可能です。デフォルト (`false` 設定) では、全ロードの場合、ソースデータベースで行が挿入されたことを示す情報はこれらの出力ファイルに記録されません。`IncludeOpForFullLoad` が `true` または `y` に設定されている場合、INSERT は .csv ファイルの最初のフィールドに I 注釈として記録されます。 このパラメータは、.csv ファイルへの出力の場合にのみ、`CdcInsertsOnly` または `CdcInsertsAndUpdates` と連動します。これらのパラメータがどのように連動するかの詳細については、「[移行済み S3 データでのソース DB オペレーションの表示](#CHAP_Target.S3.Configuring.InsertOps)」をご参照ください。 <br />デフォルト値: `false`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"IncludeOpForFullLoad": true}'` | 
| CompressionType | `GZIP` に設定された場合にターゲットの .csv ファイルを圧縮するために GZIP を使用するオプションのパラメータ。このパラメータがデフォルトに設定されている場合、ファイルは圧縮されないままになります。<br />デフォルト値: `NONE`<br />有効な値: `GZIP` または `NONE`<br />例: `--s3-settings '{"CompressionType": "GZIP"}'` | 
| CsvDelimiter | .csv ソースファイル内の列を分離するために使用される区切り文字。デフォルトはカンマ (,) です。<br />例: `--s3-settings '{"CsvDelimiter": ","}'` | 
| CsvRowDelimiter | .csv ソースファイル内の行を分離するために使用される区切り文字。デフォルトでは、改行 (\\n) です。<br />例: `--s3-settings '{"CsvRowDelimiter": "\n"}'` | 
|  `MaxFileSize`  | 全ロードで S3 ターゲットに移行中に作成される .csv ファイルの最大サイズ (KB 単位) を指定する値です。<br />デフォルト値: 1,048,576 KB (1 GB)<br />有効な値: 1～1,048,576<br />例: `--s3-settings '{"MaxFileSize": 512}'` | 
| Rfc4180 | .csv ファイル形式のみを使用して Amazon S3 に移行するデータに対して、RFC に準拠する動作を設定するために使用するオプションのパラメータです。この値を に設定する`true`か、ターゲットとして Amazon S3 `y`を使用する場合、データに引用符、カンマ、改行文字が含まれている場合、 は列全体を二重引用符 (") で AWS DMS 囲みます。データ内のすべての引用符が 2 回が繰り返されます。このフォーマットは、RFC 4180 に準拠しています。<br />デフォルト値: `true`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--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` に変えることはできません。 <br />デフォルト値: `SSE_S3`<br />有効な値: `SSE_S3` または `SSE_KMS`<br />例: `--s3-settings '{"EncryptionMode": SSE_S3}'` | 
| ServerSideEncryptionKmsKeyId | `EncryptionMode` を `SSE_KMS` に設定した場合は、このパラメータを KMS キーの Amazon リソースネーム (ARN) に設定します。この ARN を見つけるには、アカウント用に作成されたキーのリストで AWS KMS キーエイリアスを選択します。キーを作成する場合、特定のポリシーと関連付けられるロールをこの KMS キーに関連付ける必要があります。詳細については、「[Amazon S3 ターゲットオブジェクトを暗号化するための AWS KMS キーの作成](#CHAP_Target.S3.KMSKeys)」を参照してください。<br />例: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'` | 
| DataFormat | が S3 オブジェクトの作成 AWS DMS に使用するファイルの出力形式。Amazon S3 ターゲットの場合、 は .csv ファイルまたは .parquet ファイル AWS DMS をサポートします。.parquet ファイルには、十分な圧縮オプションおよびより高速なクエリパフォーマンスのバイナリ列指向ストレージがあります。.parquet ファイルについての詳細は、「[https://parquet.apache.org/](https://parquet.apache.org/)」を参照してください。<br />デフォルト値: `csv`<br />有効な値: `csv` または `parquet`<br />例: `--s3-settings '{"DataFormat": "parquet"}'` | 
| EncodingType | Parquet エンコードタイプです。このエンコードタイプオプションには、次が含まれます。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html)<br />デフォルト値: `rle-dictionary`<br />有効な値: `rle-dictionary`、`plain`、または `plain-dictionary`<br />例: `--s3-settings '{"EncodingType": "plain-dictionary"}'` | 
| DictPageSizeLimit | .parquet ファイルのディクショナリページで許容される最大サイズ (バイト単位)。ディクショナリページがこの値を超えると、このページではプレーンエンコードが使用されます。<br />デフォルト値: 1,024,000 (1 MB)<br />有効な値: 任意の有効な整数値<br />例: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'` | 
| RowGroupLength | .parquet ファイルの 1 つの行グループの行数です。<br />デフォルト値: 10,024 (10 KB)<br />有効値: 任意の有効な整数<br />例: `--s3-settings '{"RowGroupLength": 20,048}'` | 
| DataPageSize | .parquet ファイルのデータページで許容される最大サイズ (バイト単位)。<br />デフォルト値: 1,024,000 (1 MB)<br />有効値: 任意の有効な整数<br />例: `--s3-settings '{"DataPageSize": 2,048,000}'` | 
| ParquetVersion | .parquet ファイル形式のバージョン。<br />デフォルト値: `PARQUET_1_0`<br />有効な値: `PARQUET_1_0` または `PARQUET_2_0`<br />例: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'` | 
| EnableStatistics | `true` または `y` に設定された場合に、.parquet ファイルと行グループに関する統計を有効化します。<br />デフォルト値: `true`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"EnableStatistics": false}'` | 
| TimestampColumnName | S3 ターゲットエンドポイントデータにタイムスタンプ列を含めるためのオプションのパラメータ。<br />AWS DMS を空白`TimestampColumnName`以外の値に設定すると、 は移行されたデータの .csv または .parquet オブジェクトファイルに追加の`STRING`列を含めます。<br />全ロードの場合、このタイムスタンプ列の各行には、データが DMS によってソースからターゲットに転送されたときのタイムスタンプが含まれます。<br />CDC ロードの場合、タイムスタンプ列の各行には、ソースデータベースでのその行のコミットのタイムスタンプが含まれます。<br />タイムスタンプ列の値の文字列形式は `yyyy-MM-dd HH:mm:ss.SSSSSS` です。デフォルトでは、この値の精度はマイクロ秒です。CDC 負荷の場合、精度の丸めについては、ソースデータベースに対して DMS でサポートされているコミットのタイムスタンプによって異なります。<br />`AddColumnName` パラメータが `true` に設定されている場合、DMS は `TimestampColumnName` の空白以外の値として設定したタイムスタンプ列の名前も含める。<br />例: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'` | 
| UseTaskStartTimeForFullLoadTimestamp | 、このパラメータは `true` に設定した場合、時間データがターゲットに書き込まれるのではなく、タスクのスタート時刻をタイムスタンプ列の値として使用します。全ロードの場合、`UseTaskStartTimeForFullLoadTimestamp` が `true` に設定される場合、タイムスタンプ列の各行には、タスクのスタート時刻が格納されます。CDC ロードの場合、タイムスタンプ列の各行には、トランザクションのコミット時刻が含まれます。<br />`UseTaskStartTimeForFullLoadTimestamp` が `false` に設定される場合、タイムスタンプカラムの全ロードタイムスタンプは、データがターゲットに到着した時間により増分となります。<br />デフォルト値: `false`<br />有効な値: `true`、`false`<br />例: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'`<br />`UseTaskStartTimeForFullLoadTimestamp: true` は、CDC ロード用に `TimestampColumnName` で並べ替えることが可能な全ロードに対して S3 ターゲット `TimestampColumnName` の作成を助けます。 | 
| ParquetTimestampInMillisecond | .parquet 形式で S3 オブジェクトに書き込まれるすべての `TIMESTAMP` 列値の精度を指定するオプションのパラメータ。<br />この属性が `true`または に設定されている場合`y`、 は .parquet 形式のファイル内のすべての`TIMESTAMP`列をミリ秒の精度で AWS DMS 書き込みます。それ以外の場合、DMS はそれらをマイクロ秒の精度で書き込みます。<br />現在、 Amazon Athena および AWS Glue は`TIMESTAMP`値の精度をミリ秒単位でしか処理できません。データを Athena または AWS Glueでクエリまたは処理する場合にのみ、.parquet 形式の S3 エンドポイント オブジェクトファイルに対してこの属性を true に設定します。   AWS DMS は、マイクロ秒の精度で .csv 形式で S3 ファイルに書き込まれた`TIMESTAMP`列値を書き込みます。   この属性の設定は、`TimestampColumnName` 属性を設定することで挿入されたタイムスタンプ列値の文字列の形式には影響しません。   <br />デフォルト値: `false`<br />有効な値: `true`、`false`、`y`、`n`<br />例: `--s3-settings '{"ParquetTimestampInMillisecond": true}'` | 
| GlueCatalogGeneration | を生成するには AWS Glue Data Catalog、このエンドポイント設定を に設定します`true`。<br />デフォルト値: `false`<br />有効な値: `true`、`false`、<br />例: `--s3-settings '{"GlueCatalogGeneration": true}'`<br />**注:**`GlueCatalogGeneration` は `PreserveTransactions` と `CdcPath` と併用しない。 | 

## の Amazon S3 ターゲット AWS Glue Data Catalog での の使用 AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

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 ロールに次のポリシーが必要です。

------
#### [ JSON ]

****  

```
{
    "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 デベロッパーガイド*」の[「概念](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html)」を参照してください。
+ 詳細については、「 *AWS Glue デベロッパーガイド*」の[「コンポーネント](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) AWS Glue Data Catalog 」を参照してください。

## Amazon S3 ターゲットでのデータ暗号化、parquet ファイル、CDC の使用
<a name="CHAP_Target.S3.EndpointSettings"></a>

S3 ターゲットエンドポイント設定を使用して、以下を構成できます。
+ S3 ターゲットオブジェクトを暗号化するカスタム KMS キーです。
+ S3 ターゲットオブジェクトのストレージ形式としての Parquet ファイルです。
+ S3 ターゲットでのトランザクション順序を含むデータ キャプチャ (CDC) を変更します。
+ Amazon S3 ターゲットエンドポイント AWS Glue Data Catalog と統合し、Amazon Athena などの他のサービスを通じて Amazon S3 データをクエリします。 Amazon Athena

### AWS KMS データ暗号化のキー設定
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

次の例では、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 サーバー側暗号化の使用の詳細については、「[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)」をご参照ください。

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

### S3 ターゲットオブジェクトを保存するために .parquet ファイルを使用する設定
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

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", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000,
"EnableStatistics": false }'
```

ここでは、複数の標準 S3 バケットオプションおよび `DataFormat` パラメータに加えて、次のような追加の .parquet ファイルパラメータが設定されています。
+ `EncodingType` - ディクショナリページの列チャンクごとで各列に発生する値を保存するディクショナリエンコード (`plain-dictionary`) を設定します。
+ `DictPageSizeLimit` - ディクショナリページの最大のサイズを 3 MB に設定します。
+ `EnableStatistics` - Parquet ファイルページおよび行グループに関する統計のコレクションを有効化するデフォルトを無効にします。

### S3 ターゲットでのトランザクション順序を含むデータ変更 (CDC) のキャプチャ
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

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

トランザクションの順序もキャプチャする方法でソースデータベースの変更をキャプチャするには、トランザクションサイズに応じて作成された 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}}` は、テーブルが常駐するデータベーススキーマの名前、`{{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`)。

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

```
CDC_TXN-{{timestamp}}.csv
```

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

```
CDC_TXN-20201117153046033.csv
```

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

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

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

**すべての行の変更をトランザクション順序で保存 AWS DMS するように に指示するには**

1. ターゲットの `PreserveTransactions` S3 設定を `true` に設定します。

1. ターゲットの `CdcPath` S3 設定を、.csv トランザクションファイル AWS DMS を保存する相対フォルダパスに設定します。

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

## 移行済み S3 データでのソース DB オペレーションの表示
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

がレコードを 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` 属性の設定がどのように連動して、移行されたレコードの設定に影響を与えるかを示します。


<table>
<thead>
  <tr><th colspan="2">使用するパラメータ設定</th><th colspan="2">DMS が .csv 出力と .parquet 出力で設定するターゲットレコード </th></tr>
  <tr><th>includeOpForFullLoad</th><th>cdcInsertsOnly</th><th>全ロードの場合</th><th>CDC ロードの場合</th></tr>
</thead>
<tbody>
  <tr><td>true</td><td>true</td><td>最初のフィールド値が追加されて I に設定</td><td>最初のフィールド値が追加されて I に設定</td></tr>
  <tr><td>false</td><td>false</td><td>追加のフィールドなし</td><td>最初のフィールド値が追加されて I、U、または D に設定</td></tr>
  <tr><td>false</td><td>true</td><td>追加のフィールドなし</td><td>追加のフィールドなし</td></tr>
  <tr><td>true</td><td>false</td><td>最初のフィールド値が追加されて I に設定</td><td>最初のフィールド値が追加されて I、U、または D に設定</td></tr>
</tbody>
</table>


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

`includeOpForFullLoad` と を異なる値に設定すると、 `cdcInsertsOnly`は CDC と全ロードの両方でターゲットレコード設定 AWS DMS を統一します。これは、CDC ロードのレコード設定を、`includeOpForFullLoad` で指定された前の全ロードのレコード設定と一致させることで行われます。

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

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


<table>
<thead>
  <tr><th colspan="2">使用するパラメータ設定</th><th colspan="2">DMS が .csv 出力用に設定するターゲットレコード </th></tr>
  <tr><th>includeOpForFullLoad</th><th>cdcInsertsAndUpdates</th><th>全ロードの場合</th><th>CDC ロードの場合</th></tr>
</thead>
<tbody>
  <tr><td>true</td><td>true</td><td>最初のフィールド値が追加されて I に設定</td><td>最初のフィールド値が追加されて I または U に設定</td></tr>
  <tr><td>false</td><td>false</td><td>追加のフィールドなし</td><td>最初のフィールド値が追加されて I、U、または D に設定</td></tr>
  <tr><td>false</td><td>true</td><td>追加のフィールドなし</td><td>最初のフィールド値が追加されて I または U に設定</td></tr>
  <tr><td>true</td><td>false</td><td>最初のフィールド値が追加されて I に設定</td><td>最初のフィールド値が追加されて I、U、または D に設定</td></tr>
</tbody>
</table>


## S3 Parquet のターゲットデータ型
<a name="CHAP_Target.S3.DataTypes"></a>

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

 AWS DMS データ型の詳細については、「」を参照してください[AWS Database Migration Service のデータ型](CHAP_Reference.DataTypes.md)。


|  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 | 