

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

# 「データ移行のターゲット」
<a name="CHAP_Target"></a>

AWS Database Migration Service （AWS DMS) は、データレプリケーションのターゲットとして最も人気のあるデータベースの多くを使用できます。ターゲットは Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、Amazon Relational Database Service (Amazon RDS) DB インスタンス、またはオンプレミス データベースが可能です。

有効なターゲットの包括的なリストについては、「[AWS DMSのターゲット](CHAP_Introduction.Targets.md)」をご参照ください。

**注記**  
AWS DMS では、次のターゲットエンドポイントタイプの AWS リージョン間の移行はサポートされていません。  
Amazon DynamoDB
Amazon OpenSearch Service
Amazon Kinesis Data Streams
Amazon Aurora PostgreSQL Limitless は AWS Database Migration Service () のターゲットとして使用できますAWS DMS。詳細については、[「 のターゲットとして PostgreSQL データベースを使用する AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)」を参照してください。

**Topics**
+ [のターゲットとしての Oracle データベースの使用 AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [のターゲットとしての Microsoft SQL Server データベースの使用 AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [のターゲットとしての PostgreSQL データベースの使用 AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [のターゲットとしての MySQL 互換データベースの使用 AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [のターゲットとしての Amazon Redshift データベースの使用 AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [のターゲットとしての SAP ASE データベースの使用 AWS Database Migration Service](CHAP_Target.SAP.md)
+ [のターゲットとしての Amazon S3 の使用 AWS Database Migration Service](CHAP_Target.S3.md)
+ [のターゲットとしての Amazon DynamoDB データベースの使用 AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [のターゲットとしての Amazon Kinesis Data Streams の使用 AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [のターゲットとしての Apache Kafka の使用 AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [のターゲットとしての Amazon OpenSearch Service クラスターの使用 AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [AWS Database Migration Service のターゲットとしての Amazon DocumentDB の使用](CHAP_Target.DocumentDB.md)
+ [のターゲットとしての Amazon Neptune の使用 AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [のターゲットとしての Redis OSS の使用 AWS Database Migration Service](CHAP_Target.Redis.md)
+ [のターゲットとしての Babelfish の使用 AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [のターゲットとしての Amazon Timestream の使用 AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [のターゲットとしての Amazon RDS for Db2 と IBM Db2 LUW の使用 AWS DMS](CHAP_Target.DB2.md)

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

別の Oracle データベースまたはサポートされている他のデータベースのいずれかから AWS DMS、 を使用して Oracle データベースターゲットにデータを移行できます。Secure Sockets Layer (SSL) を使用して、Oracle エンドポイントとレプリケーションインスタンスとの接続を暗号化できます。Oracle エンドポイントで SSL を使用する方法の詳細については、「」を参照してください[での SSL の使用 AWS Database Migration Service](CHAP_Security.SSL.md)。また、Oracle TDE はデータベースへの書き込みに暗号化キーまたはパスワードを必要としないため、ターゲットデータベース内の保管中のデータを暗号化するための Oracle 透過的データ暗号化 (TDE) の使用 AWS DMS もサポートしています。

がターゲットとして AWS DMS サポートする Oracle のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

Oracle をターゲットとして使用するときは、ターゲット接続に使用されるスキーマまたはユーザーにデータを移行することを前提とします。別のスキーマにデータを移行する場合は、スキーマ変換を使用します。たとえば、ターゲットエンドポイントがユーザー `RDSMASTER` に接続しており、ユーザー `PERFDATA1` から `PERFDATA2` に移行したいとします。この場合、次のように変換を作成します。

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

Oracle をターゲットとして使用すると、 はすべてのテーブルとインデックスをターゲット内のデフォルトのテーブルとインデックスのテーブルスペース AWS DMS に移行します。テーブルとインデックスを別のテーブルとインデックスのテーブルスペースに移行する場合は、テーブルスペース変換を使用してこれを実行します。たとえば、Oracle ソース内の一部のテーブルスペースに割り当てられた `INVENTORY` スキーマに一連のテーブルがあるとします。移行については、このすべてのテーブルをターゲットの単一の `INVENTORYSPACE` テーブルスペースに割り当てるとします。この場合、次のように変換を作成します。

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

変換の詳細については、「[JSON を使用するテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md)」をご参照ください。

Oracle がソースとターゲットの両方である場合、Oracle ソースの追加の接続属性 `enableHomogenousTablespace=true` を設定することで、既存のテーブルまたはインデックステーブルスペースの割り当てを保持できます。詳細については、[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)を参照してください。

のターゲットとして Oracle データベースを使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [のターゲットとしての Oracle の制限 AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限](#CHAP_Target.Oracle.Privileges)
+ [のターゲットとしての Oracle データベースの設定 AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [のターゲットとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Oracle のターゲットデータ型](#CHAP_Target.Oracle.DataTypes)

## のターゲットとしての Oracle の制限 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

データ移行のターゲットとして Oracle を使用する場合の制限は、以下のとおりです。
+ AWS DMS は、ターゲット Oracle データベースにスキーマを作成しません。必要なすべてのスキーマをターゲット Oracle データベースで作成する必要があります。Oracle ターゲットのスキーマ名がすでに存在している必要があります。ソーススキーマのテーブルは、 AWS DMS がターゲットインスタンスに接続するために使用するユーザーまたはスキーマにインポートされます。複数のスキーマを移行するには、複数のレプリケーションタスクを作成します。データをターゲット上の別のスキーマに移行することもできます。これを行うには、 AWS DMS テーブルマッピングでスキーマ変換ルールを使用する必要があります。
+ AWS DMS は、INDEXTYPE CONTEXT を持つテーブル`Use direct path full load`のオプションをサポートしていません。回避策として、配列ロードを使用できます。
+ バッチ最適化適用オプションでは、差分変更テーブルへのロードに直接パスが使用されるため、XML タイプはサポートされていません。回避策として、トランザクション適用モードを使用できます。
+ ソースデータベースから移行された空の文字列は、Oracle ターゲットによって異なる方法で処理できます (たとえば、1 つのスペース文字列に変換されます)。これにより、 AWS DMS 検証レポートが一致しなくなる可能性があります。
+ 次の式を使用して、バッチ最適化の適用モードでサポートされるテーブルごとの列の合計数を表すことができます。

  ```
  2 * columns_in_original_table + columns_in_primary_key <= 999
  ```

  例えば、元のテーブルに 25 列があり、そのプライマリキーが 5 列で構成されている場合、列の合計数は 55 になります。テーブルがサポートされている列数を超える場合、すべての変更が個別処理モードで適用されます。
+ AWS DMS は、Oracle Cloud Infrastructure (OCI) の Autonomous DB をサポートしていません。
+ トランザクション適用モードでは、Oracle ターゲットは最大 32 KB のサイズの DML ステートメントを処理できます。この制限は多くのユースケースで十分ですが、32 KB を超える DML ステートメントは「ORA-01460: unimplemented or unreasonable conversion requested」というエラーで失敗します。この問題を解決するには、`BatchApplyEnabled` タスク設定を `true` に設定してバッチ適用機能を有効にする必要があります。バッチ適用によりステートメント全体のサイズが小さくなり、32 KB の制限を回避できます。詳細については、「[ターゲットメタデータのタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)」を参照してください。
+ AWS DMS LOB データの特別な処理要件により、LOB テーブルの直接パスのフルロードがエラー ORA-39777 で失敗することがあります。このエラーは、直接パスのロードプロセス中に発生し、LOB 列を含む移行タスクを中断する可能性があります。これを解決するには、ターゲットエンドポイントの `useDirectPathFullLoad` 設定を無効にし、ロードオペレーションを再試行します。

## ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限
<a name="CHAP_Target.Oracle.Privileges"></a>

 AWS Database Migration Service タスクで Oracle ターゲットを使用するには、Oracle データベースで次の権限を付与します。 AWS DMSへの Oracle データベース定義で指定されたユーザーアカウントにこの権限を付与します。
+ SELECT ANY TRANSACTION 
+ V\$1NLS\$1PARAMETERS での SELECT 
+ V\$1TIMEZONE\$1NAMES での SELECT 
+ ALL\$1INDEXES での SELECT 
+ ALL\$1OBJECTS での SELECT 
+ DBA\$1OBJECTS での SELECT
+ ALL\$1TABLES での SELECT 
+ ALL\$1USERS での SELECT 
+ ALL\$1CATALOG での SELECT 
+ ALL\$1CONSTRAINTS での SELECT 
+ ALL\$1CONS\$1COLUMNS での SELECT 
+ ALL\$1TAB\$1COLS での SELECT 
+ ALL\$1IND\$1COLUMNS での SELECT 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ テーブルの削除

以下に指定された要件のために、上記の追加の権限を付与します。
+ 特定のテーブルリストを使用するには、レプリケートされたすべてのテーブルに SELECT を付与し、ALTER も付与します。
+ ユーザーがデフォルトテーブルスペースにテーブルを作成することを許可するには、GRANT UNLIMITED TABLESPACE 権限を付与します。
+ ログオンのために、CREATE SESSION 権限を付与します。
+ 直接パス (全ロードのデフォルト) `GRANT LOCK ANY TABLE to dms_user;` を使用している場合。
+ [DROP and CREATE] (ドロップして作成) テーブル準備モードを使用するときにスキーマが異なる場合は、`GRANT CREATE ANY INDEX to dms_user;`。
+ 一部の全ロードシナリオでは、ターゲットテーブルスキーマが DMS ユーザーとは異なる場合、「DROP and CREATE table」または「TRUNCATE before loading」オプションを選択できます。この場合、DROP ANY TABLE を付与します。
+ ターゲットテーブルスキーマが DMS ユーザーとは異なる変更テーブルまたは監査テーブルに変更を保存するには、CREATE ANY TABLE および CREATE ANY INDEX を付与します。
+ 検証機能を使用して LOB 列を検証するには、`SYS.DBMS_CRYPTO` の EXECUTE 権限を DMS ユーザーに付与します。

### ターゲットデータベース AWS Database Migration Service の に必要な読み取り権限
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

 AWS DMS ユーザーアカウントには、次の DBA テーブルの読み取りアクセス許可が付与されている必要があります。
+ DBA\$1USERS での SELECT
+ DBA\$1TAB\$1PRIVS での SELECT
+ DBA\$1OBJECTS での SELECT
+ DBA\$1SYNONYMS での SELECT
+ DBA\$1SEQUENCES での SELECT
+ DBA\$1TYPES での SELECT
+ DBA\$1INDEXES での SELECT
+ DBA\$1TABLES での SELECT
+ DBA\$1TRIGGERS での SELECT
+ SELECT on SYS.DBA\$1REGISTRY

必要な権限のいずれかを V\$1xxx に付与できない場合は、V\$1\$1xxx に付与します。

### 移行前評価
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Oracle をターゲットとして [Oracle の評価](CHAP_Tasks.AssessmentReport.Oracle.md) に一覧表示されている移行前評価を使用するには、Oracle データベースターゲットエンドポイントのユーザーアカウントに次のアクセス許可を追加する必要があります。

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## のターゲットとしての Oracle データベースの設定 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Oracle データベースをデータ移行ターゲットとして使用する前に、Oracle ユーザーアカウントを提供する必要があります AWS DMS。ユーザーアカウントには、[ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限](#CHAP_Target.Oracle.Privileges) で指定されているように、Oracle データベースでの読み取り/書き込み権限が必要です。

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Oracle.html)

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

で使用されるターゲット Oracle データベースは、ほとんどの Oracle データ型 AWS DMS をサポートします。次の表は、 の使用時にサポートされる Oracle ターゲットデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示しています。ソースからマッピングされるデータ型を表示する方法の詳細については、使用しているソースのセクションをご参照ください。


|  AWS DMS データ型  |  Oracle のデータ型  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (長さ)  | 
|  DATE  |  DATETIME  | 
|  TIME  | タイムスタンプ (0) | 
|  DATETIME  |  タイムスタンプ (スケール)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  date を指定: DATE  time を指定: タイムスタンプ  timestamp を指定: タイムスタンプ  timestamp\$1with\$1timezone を指定: タイムスタンプ時間帯あり  timestamp\$1with\$1local\$1timezone を指定: タイムスタンプ WITH LOCAL TIMEZONE interval\$1year\$1to\$1month を指定: INTERVAL YEAR TO MONTH  interval\$1day\$1to\$1second を指定: INTERVAL DAY TO SECOND  長さ > 4000 の場合: CLOB 他のすべての場合: VARCHAR2 (長さ)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  長さ > 2000 の場合: NCLOB 他のすべての場合: NVARCHAR2 (長さ)  | 
|  BLOB  |  BLOB このデータ型を で使用するには AWS DMS、特定のタスクで BLOBs の使用を有効にする必要があります。BLOB データ型は、プライマリキーを含むテーブルでのみサポートされます。  | 
|  CLOB  |  CLOB このデータ型を で使用するには AWS DMS、特定のタスクで CLOBsの使用を有効にする必要があります。変更データキャプチャ (CDC) 中は、プライマリキーを含むテーブルでのみ CLOB データ型がサポートされます。 STRING 宣言されたサイズが 4000 バイトを超えるソースの Oracle VARCHAR2 データ型は、 AWS DMS CLOB を介して Oracle ターゲットの STRING にマッピングされます。  | 
|  NCLOB  |  NCLOB このデータ型を で使用するには AWS DMS、特定のタスクで NCLOBs の使用を有効にする必要があります。CDC 中、プライマリキーを含むテーブルでのみ NCLOB データ型がサポートされます。 WSTRING 宣言されたサイズが 4000 バイトを超えるソースの Oracle VARCHAR2 データ型は、NCLOB を介して Oracle ターゲットの WSTRING AWS DMS にマッピングされます。  | 
| XMLTYPE |  XMLTYPE ターゲットデータ型は、Oracle 間レプリケーションタスクにのみ関連しています。 ソースデータベースが Oracle の場合、ソースデータ型はそのままの状態で Oracle ターゲットにレプリケートされます。たとえば、ソースにおける XMLTYPE データ型は、ターゲットでは XMLTYPE データ型として作成されます。  | 

# のターゲットとしての Microsoft SQL Server データベースの使用 AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

を使用して、Microsoft SQL Server データベースにデータを移行できます AWS DMS。SQL Server データベースをターゲットとして使用すると、別の SQL Server データベースまたはサポートされている他のデータベースのいずれかからデータを移行できます。

がターゲットとして AWS DMS サポートする SQL Server のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

AWS DMS は、Enterprise、Standard、Workgroup、Developer のオンプレミスエディションと Amazon RDS エディションをサポートしています。

 AWS DMS および SQL Server ターゲットデータベースの操作の詳細については、以下を参照してください。

**Topics**
+ [のターゲットとしての SQL Server の使用に関する制限 AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [のターゲットとして SQL Server を使用する場合のセキュリティ要件 AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [のターゲットとして SQL Server を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Microsoft SQL Server のターゲットデータ型](#CHAP_Target.SQLServer.DataTypes)

## のターゲットとしての SQL Server の使用に関する制限 AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

SQL Server データベースを AWS DMSのターゲットとして使用する場合、以下の制限が適用されます。
+ 計算列を含む SQL Server ターゲットテーブルを手動で作成する場合、BCP 一括コピーユーティリティを使用する全ロードレプリケーションがサポートされません。全ロードレプリケーションを使用するには、追加接続属性 (ECA) を設定して`'useBCPFullLoad=false'` エンドポイントで BCP ロードを無効にします。エンドポイントでの ECA 設定の詳細については、「[ソースおよびターゲットエンドポイントの作成](CHAP_Endpoints.Creating.md)」をご参照ください。BCP の詳細な操作方法については、「[Microsoft SQL Server ドキュメント](https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server)」をご参照ください。
+ SQL Server 空間データ型 (GEOMETRY および GEOGRAPHY) を持つテーブルをレプリケートする場合、 AWS DMS は、挿入した可能性のある空間参照識別子 (SRID) をデフォルトの SRID に置き換えます。デフォルトの SRID は、GEOMETRY は 0、GEOGRAPHY は 4326 です。
+ 一時テーブルはサポートされていません。ターゲット上に手動で作成されている場合に、一時テーブルを移行すると、トランザクション適用モードのレプリケーションのみのタスクで動作することがあります。
+ 現在のところ、PostgreSQL ソースの `boolean` データ型は、一貫性のない値を持つ `bit` データ型として SQLServer ターゲットに移行されます。

  回避策として、次を実行します。
  + 列`VARCHAR(1)`のデータ型を使用してテーブルを事前に作成します (または、 でテーブル AWS DMS を作成します）。次に、ダウンストリーム処理で「F」を False、「T」を True として扱います。
  + ダウンストリーム処理を変更する必要がないようにするには、「F」の値を「0」に、「T」の値を「1」に変更する変換ルールをタスクに追加して、SQL Server のビットデータ型として格納します。
+ AWS DMS は、列の null 可能性を設定する変更処理をサポートしていません ( `ALTER TABLE` ステートメントで `ALTER COLUMN [SET|DROP] NOT NULL`句を使用）。
+ Windows 認証はサポートされていません。

## のターゲットとして SQL Server を使用する場合のセキュリティ要件 AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

以下では、Microsoft SQL Server ターゲット AWS DMS で を使用するためのセキュリティ要件について説明します。
+  AWS DMS ユーザーアカウントには、少なくとも接続先の SQL Server データベースの`db_owner`ユーザーロールが必要です。
+ SQL Server システム管理者は、すべての AWS DMS ユーザーアカウントにこのアクセス許可を付与する必要があります。

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.SQLServer.html)

## Microsoft SQL Server のターゲットデータ型
<a name="CHAP_Target.SQLServer.DataTypes"></a>

次の表は、 の使用時にサポートされる Microsoft SQL Server ターゲットデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示しています。 AWS DMS データ型の詳細については、「」を参照してください[AWS Database Migration Service のデータ型](CHAP_Reference.DataTypes.md)。


|  AWS DMS データ型  |  SQL Server のデータ型  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(長さ)  | 
|  DATE  |  SQL Server 2008 以降の場合、DATE を使用する。 それより前のバージョンでは、スケールが 3 以下の場合は DATETIME を使用します。他のすべての場合は、VARCHAR (37) を使用します。  | 
|  TIME  |  SQL Server 2008 以降の場合、DATETIME2 (%d) を使用する。 それより前のバージョンでは、スケールが 3 以下の場合は DATETIME を使用します。他のすべての場合は、VARCHAR (37) を使用します。  | 
|  DATETIME  |  SQL Server 2008 以降では、DATETIME2 (位取り) を使用する。 それより前のバージョンでは、スケールが 3 以下の場合は DATETIME を使用します。他のすべての場合は、VARCHAR (37) を使用します。  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  列が日付または時刻列の場合、次の操作を行います。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.SQLServer.html) 列が日付または時刻列ではない場合、VARCHAR (長さ) を使用します。  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (長さ)  | 
|  BLOB  |  VARBINARY(最大) IMAGE このデータ型を で使用するには AWS DMS、特定のタスクで BLOBs の使用を有効にする必要があります。 は、プライマリキーを含むテーブルでのみ BLOB データ型 AWS DMS をサポートします。  | 
|  CLOB  |  VARCHAR(max) このデータ型を で使用するには AWS DMS、特定のタスクで CLOBsの使用を有効にする必要があります。変更データキャプチャ (CDC) 中、 AWS DMS はプライマリキーを含むテーブルでのみ CLOB データ型をサポートしています。  | 
|  NCLOB  |  NVARCHAR(最大) このデータ型を で使用するには AWS DMS、特定のタスクで NCLOBs の使用を有効にする必要があります。CDC 中、 はプライマリキーを含むテーブルでのみ NCLOB データ型 AWS DMS をサポートします。  | 

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

別の PostgreSQL データベースまたはサポートされている他のデータベースのいずれかから AWS DMS、 を使用して PostgreSQL データベースにデータを移行できます。

がターゲットとして AWS DMS サポートする PostgreSQL のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

**注記**  
Amazon Aurora Serverless は、PostgreSQL と互換性のある Amazon Aurora のターゲットとして利用できます。Amazon Aurora Serverless の詳細については、「*Amazon Aurora ユーザーガイド*」の「[Amazon Aurora Serverless v2 を使用する](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html)」を参照してください。
Aurora Serverless DB クラスターは Amazon VPC からのみアクセスでき、[[public IP address]](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html) (パブリック IP アドレス) を使用することはできません。そのため、レプリケーション インスタンスを Aurora PostgreSQL Serverless とは異なるリージョンに配置する場合は、[[vpc peering]](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer) (VPC ピアリング接続) を構成します。それ以外の場合は、Aurora PostgreSQL Serverless [[regions]](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) (リージョン) の可用性をチェックし、これらのリージョンのいずれかを Aurora PostgreSQL Serverless とレプリケーション インスタンスの両方に使用しました。
Babelfish の機能は Amazon Aurora に組み込まれており、追加のコストは発生しません。詳細については、「[Using Babelfish for Aurora PostgreSQL as a target for AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)」を参照してください。

AWS DMS は、フルロードフェーズでソースからターゲットにデータを移行するときにtable-by-tableアプローチを取ります。全ロードフェーズ中のテーブルの順序は保証されません。テーブル全ロードフェーズ中、および個々のテーブルのキャッシュしたトランザクションが適用されている間は、テーブルは同期されません。その結果、アクティブな参照整合性制約により、全ロードフェーズ中にタスクが失敗する可能性があります。

PostgreSQL では、外部キー (参照整合性制約) はトリガーを使用して実装されます。全ロードフェーズ中、 は各テーブルを一度に 1 つずつ AWS DMS ロードします。次のいずれかの方法を使用して、全ロード中に外部キーの制約を無効にすることを強くお勧めします。
+ インスタンスからすべてのトリガーを一時的に無効にして、全ロードを終了します。
+ PostgreSQL では、`session_replication_role` パラメータを使用します。

特定の時間において、トリガーは `origin`、`replica`、`always`、または `disabled` のいずれかの状態になります。`session_replication_role` パラメータが `replica` に設定されている場合、`replica` 状態のトリガーのみがアクティブになり、呼び出されると実行されます。それ以外の場合、トリガーは非アクティブなままです。

PostgreSQL には、`session_replication_role` が設定されている場合でも、テーブルの切り捨てを防止するフェールセーフメカニズムが備わっています。これを、トリガーを無効にする代わりに使用して、全ロードの完了を支援できます。これを行うには、ターゲットテーブルの準備モードを `DO_NOTHING` に設定します それ以外の場合、外部キーの制約があると DROP および TRUNCATE オペレーションは失敗します。

Amazon RDS では、パラメータグループを使用してこのパラメータの設定を管理できます。Amazon EC2 で実行されている PostgreSQL インスタンスの場合、パラメータを直接設定できます。



のターゲットとして PostgreSQL データベースを使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [のターゲットとしての PostgreSQL の使用に関する制限 AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Amazon Aurora PostgreSQL Limitless を のターゲットとして使用する場合の制限 AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [のターゲットとして PostgreSQL データベースを使用する場合のセキュリティ要件 AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [のターゲットとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECAs) AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [PostgreSQL のターゲットデータ型](#CHAP_Target.PostgreSQL.DataTypes)
+ [のターゲットとしての Babelfish for Aurora PostgreSQL の使用 AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## のターゲットとしての PostgreSQL の使用に関する制限 AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

PostgreSQL データベースを AWS DMSのターゲットとして使用する場合、以下の制限が適用されます。
+ 異種の移行の場合、JSON データ型は内部でネイティブな CLOB データ型に変換されます。
+ Oracle から PostgreSQL への移行では、Oracle の列に NULL 文字 (16 進値 U\$10000) が含まれている場合、 は NULL 文字をスペース (16 進値 U\$10020) AWS DMS に変換します。これは、PostgreSQL の制限によるものです。
+ AWS DMS は、coalesce 関数で作成された一意のインデックスを持つテーブルへのレプリケーションをサポートしていません。
+ テーブルでシーケンスを使用する場合は、ソースデータベースからレプリケーションを停止した後、ターゲットデータベース内のシーケンス`NEXTVAL`ごとに の値を更新します。 はソースデータベースからデータ AWS DMS をコピーしますが、進行中のレプリケーション中にシーケンスをターゲットに移行しません。

## Amazon Aurora PostgreSQL Limitless を のターゲットとして使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Amazon Aurora PostgreSQL Limitless をターゲットとして使用する場合は、次の制限が適用されます AWS DMS。
+ AWS DMS データ検証は Amazon Aurora PostgreSQL Limitless をサポートしていません。
+ AWS DMS はソーステーブルを標準テーブルとして移行しますが、これは分散されません。移行後、公式の変換ガイドに従って、これらの標準テーブルを Limitless テーブルに変換できます。

## のターゲットとして PostgreSQL データベースを使用する場合のセキュリティ要件 AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

セキュリティ上の観点から、データ移行に使用されるユーザーアカウントは、ターゲットとして使用する PostgreSQL データベースにおける登録済みユーザーにする必要があります。

PostgreSQL ターゲットエンドポイントでは、 AWS DMS 移行を実行するために最小限のユーザーアクセス許可が必要です。次の例を参照してください。

```
    CREATE USER newuser WITH PASSWORD 'your-password';
    ALTER SCHEMA schema_name OWNER TO newuser;
```

または

```
    GRANT USAGE ON SCHEMA schema_name TO myuser;
    GRANT CONNECT ON DATABASE postgres to myuser;
    GRANT CREATE ON DATABASE postgres TO myuser;
    GRANT CREATE ON SCHEMA schema_name TO myuser;
    GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser;
    GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
```

## のターゲットとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECAs) AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

エンドポイント設定と追加の接続属性 (ECA) を使用して、ターゲットの PostgreSQL データベースを設定することができます。

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

エンドポイントの `ExtraConnectionAttributes` パラメータを使用して ECA を指定します。

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

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

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

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


|  AWS DMS データ型  |  PostgreSQL のデータ型  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  スケールが 0 ～ 6 の場合、タイムスタンプ を使用します。 スケールが 7 ～ 9 の場合、VARCHAR (37) を使用します。  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  長さが 1 ～ 21,845 の場合、VARCHAR (バイト単位の長さ) を使用します。 長さが 21,846 ～ 2,147,483,647 の場合、VARCHAR (65535) を使用します。  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  長さが 1 ～ 21,845 の場合、VARCHAR (バイト単位の長さ) を使用します。 長さが 21,846 ～ 2,147,483,647 の場合、VARCHAR (65535) を使用します。  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**注記**  
PostgreSQL ソースからレプリケートする場合、 は、ユーザー定義のデータ型の列を除き、すべての列に対して同じデータ型のターゲットテーブル AWS DMS を作成します。このような場合、データ型はターゲットで「character varying」として作成されます。

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

 AWS Database Migration Serviceを使用して SQL Server ソーステーブルを Babelfish for Amazon Aurora PostgreSQL のターゲットに移行できます。Babelfishを使用すると、Aurora PostgreSQL は Microsoft SQL Server 独自の SQL 言語である T-SQL を認識し、同じ通信プロトコルをサポートします。これにより、SQL Server 向けに作成されたアプリケーションのコード変更量が低減し、Aurora と連携できるようになります。Babelfish の機能は Amazon Aurora に組み込まれており、追加のコストは発生しません。Amazon Aurora クラスターのBabelfish は、Amazon RDS コンソールで有効化できます。

 AWS DMS コンソール、API、または CLI コマンドを使用して AWS DMS ターゲットエンドポイントを作成するときは、ターゲットエンジンを **Amazon Aurora PostgreSQL** として指定し、データベースに **babelfish\$1db** という名前を付けます。**[エンドポイント設定]** セクションで、`DatabaseMode` を `Babelfish` に設定して、`BabelfishDatabaseName` をターゲットの Babelfish T-SQL データベース名に指定する設定を追加します。

### 移行タスクへの変換ルールの追加
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Babelfish のターゲットの移行タスクを定義する場合、DMS がターゲットデータベース内で事前に作成された T-SQL Babelfish テーブルを使用するようにする変換ルールを含める必要があります。

まず、すべてのテーブル名を小文字にする変換ルールを移行タスクに追加します。Babelfish は、T-SQLを使用して作成したテーブル名前 PostgreSQL の `pg_class` カタログに小文字で保存します。ただし、大文字と小文字が混在する名前の SQL Server テーブルがある場合、DMS は T-SQL 互換のデータ型ではなく PostgreSQL ネイティブのデータ型を使用してテーブルを作成します。このため、すべてのテーブル名を小文字にする変換ルールを必ず追加します。列名は小文字に変換しないように注意してください。

次に、クラスターを定義する際にマルチデータベース移行モードを使用した場合は、元の SQL Server スキーマ名を変更する変換ルールを追加します。T-SQL データベース名が含まれるように SQL Server スキーマ名は必ず変更します。例えば、元の SQL Server のスキーマ名が dbo で、T-SQL データベース名が mydb の場合、変換ルールを使用してスキーマ名を mydb\$1dbo に変更します。

**注記**  
Babelfish for Aurora PostgreSQL 16 以降を使用する場合、デフォルトの移行モードは「mutidatabase」です。DMS 移行タスクを実行する場合、移行モードパラメータを確認し、必要に応じて変換ルールを更新してください。

単一のデータベースモードを使用する場合、スキーマ名を変更するための変換ルールは必要ありません。スキーマ名は、ターゲットの Babelfish の T-SQL データベースと 1 対 1 でマッピングされます。

次の変換ルールサンプルでは、すべてのテーブル名を小文字にして、元の SQL Server スキーマ名を `dbo` から `mydb_dbo` に変更しています。

```
{
   "rules": [
   {
      "rule-type": "transformation",
      "rule-id": "566251737",
      "rule-name": "566251737",
      "rule-target": "schema",
      "object-locator": {
         "schema-name": "dbo"
      },
      "rule-action": "rename",
      "value": "mydb_dbo",
      "old-value": null
   },
   {
      "rule-type": "transformation",
      "rule-id": "566139410",
      "rule-name": "566139410",
      "rule-target": "table",
      "object-locator": {
         "schema-name": "%",
         "table-name": "%"
      },
      "rule-action": "convert-lowercase",
      "value": null,
      "old-value": null
   },
   {
      "rule-type": "selection",
      "rule-id": "566111704",
      "rule-name": "566111704",
      "object-locator": {
         "schema-name": "dbo",
         "table-name": "%"
      },
      "rule-action": "include",
      "filters": []
   }
]
}
```

### Babelfish テーブルで PostgreSQL のターゲットエンドポイントを使用する場合の制限
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Babelfish テーブルで PostgreSQL のターゲットエンドポイントを使用する場合、次の制限が適用されます。
+ **[ターゲットテーブル作成モード]** では、**[何もしない]** モードまたは **[切り捨て]** モードのみを使用します。**[ターゲット上のテーブルを削除]** モードは使用しないでください。このモードの場合、DMS は T-SQL が認識しない可能性のある PostgreSQL テーブルとしてテーブルを作成します。
+ AWS DMS は sql\$1variant データ型をサポートしていません。
+ Postgres エンドポイントの Babelfish は、`HEIRARCHYID`、`GEOMETRY` (3.5.4 以前)、`GEOGRAPHY` (3.5.4 以前) のデータ型をサポートしていません。上記のデータ型を移行するには、変換ルールを追加してデータ型を wstring (250) に変換します。
+ Babelfish での `BINARY` データ型、`VARBINARY` データ型、`IMAGE` データ型の以降は、`BYTEA` データ型を使用することでのみサポートされます。Aurora PostgreSQL の以前のバージョンの場合、DMS を使用してこのようなテーブルを [Babelfish のターゲットエンドポイント](CHAP_Target.Babelfish.md) に移行できます。次の例のとおり、`BYTEA` データ型で長さを指定する必要はありません。

  ```
  [Picture] [VARBINARY](max) NULL
  ```

  上記の T-SQL データ型を T-SQL がサポートする `BYTEA` データ型に変更します。

  ```
  [Picture] BYTEA NULL
  ```
+ Aurora PostgreSQL Babelfish の以前のバージョンでは、PostgreSQL ターゲットエンドポイントを使用して SQL Server から Babelfish への継続的なレプリケーションのための移行タスクを作成する場合、`IDENTITY` 列を使用するすべてのテーブルに `SERIAL` データ型を割り当てる必要があります。Aurora PostgreSQL (バージョン 15.3、14.8 以降) と Babelfish (バージョン 3.2.0 以降) 以降では、アイデンティティ列がサポートされるようになったため、SERIAL データ型を割り当てる必要はありません。詳細については、「**SQL Server to Aurora PostgreSQL 移行プレイブック」の「Sequences and Identity」セクションの「[SERIAL Usage](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html)」を参照してください。Babelfish でテーブルを作成する際は、列の定義を次のとおり変更します。

  ```
      [IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
  ```

  上記の内容を次のとおり変更します。

  ```
      [IDCol] SERIAL PRIMARY KEY
  ```

  Babelfish 互換の Aurora PostgreSQL では、デフォルト設定を使用してシーケンスを作成し、列に `NOT NULL` 制約を追加します。新たに作成されるシーケンスは通常のシーケンス (1 でインクリメント) と同様に動作し、複合型の `SERIAL` のオプションはありません。
+ `IDENTITY` 列または `SERIAL` データ型を使用するテーブルのデータを移行した後、列の最大値に基づいて PostgreSQL ベースのシーケンスオブジェクトをリセットします。テーブルのフルロード実行後、次の T-SQL クエリを使用してステートメントを生成し、関連づけられたシーケンスオブジェクトをシードします。

  ```
  DECLARE @schema_prefix NVARCHAR(200) = ''
  
  IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
          SET @schema_prefix = db_name() + '_'
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''')
                 ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));'
  FROM sys.tables tables
  JOIN sys.columns columns ON tables.object_id = columns.object_id
  WHERE columns.is_identity = 1
  
  UNION ALL
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', 
  ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));'
  FROM information_schema.columns
  WHERE column_default LIKE 'nextval(%';
  ```

  このクエリは、最大 IDENTITY 値と SERIAL 値を更新する SELECT ステートメントのセットを生成します。
+ バージョン 3.2 以前の Babelfish では、**[完全 LOB モード]** の場合、テーブルエラーが発生する可能性があります。エラーが発生した場合は、ロードに失敗したテーブルのために別のタスクを作成します。その後、**[制限付き LOB モード]** を使用して **[最大 LOB サイズ (KB)]** に適切な値を指定します。もう 1 つのオプションとして、SQL Server エンドポイント接続属性設定を `ForceFullLob=True` と指定する方法があります。
+ バージョン 3.2 以前の Babelfish では、整数ベースのプライマリキーを使用しない Babelfish テーブルでデータ検証を実行すると、適切な一意のキーが見つからないというメッセージが表示されます。整数以外のプライマリキーのデータ検証は、Aurora PostgreSQL (バージョン 15.3、14.8 以降) と Babelfish (バージョン 3.2.0 以降) 以降ではサポートされています。
+ 秒の小数点以下の桁数の精度の違いにより、DMS は `DATETIME` データ型を使用する Babelfish テーブルでデータ検証エラーを報告します。このようなエラーが表示されないようにするには、`DATETIME` データ型に次のとおりの検証ルールタイプを追加します。

  ```
  {
           "rule-type": "validation",
           "rule-id": "3",
           "rule-name": "3",
           "rule-target": "column",
           "object-locator": {
               "schema-name": "dbo",
               "table-name": "%",
               "column-name": "%",
               "data-type": "datetime"
           },
           "rule-action": "override-validation-function",
           "source-function": "case when ${column-name} is NULL then NULL else 0 end",
           "target-function": "case when ${column-name} is NULL then NULL else 0 end"
       }
  ```

# のターゲットとしての MySQL 互換データベースの使用 AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

 AWS DMS がサポートするソースデータエンジンのいずれかから AWS DMS、 を使用して任意の MySQL 互換データベースにデータを移行できます。オンプレミスの MySQL 互換データベースに移行する場合、 AWS DMS ではソースエンジンが AWS エコシステム内に存在する必要があります。エンジンは、Amazon RDS、Amazon Aurora、Amazon S3 などの AWSマネージドサービスで使用できます。または、エンジンは Amazon EC2 の自己管理型データベース上に存在していてもかまいません。

SSL を使用して、MySQL 互換のエンドポイントとレプリケーションインスタンスとの接続を暗号化できます。MySQL 互換のエンドポイントで SSL を使用する方法の詳細については、「[での SSL の使用 AWS Database Migration Service](CHAP_Security.SSL.md)」をご参照ください。

がターゲットとして AWS DMS サポートする MySQL のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

次の MySQL 互換データベースをターゲットとして使用できます AWS DMS。
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store
+ Amazon Aurora MySQL

**注記**  
ソースストレージエンジン (MyISAM、MEMORY など) にかかわらず、 AWS DMS によってデフォルトで InnoDB テーブルとして MySQL 互換のターゲットテーブルが作成されます。  
InnoDB 以外のストレージエンジンのテーブルが必要な場合は、手動でテーブルを MySQL 互換のターゲットで作成し、[**何もしない**] オプションを使用して移行できます。詳細については、「[全ロードタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md)」をご参照ください。

 AWS DMSのターゲットとしての MySQL 互換データベースの使用の詳細については、以下のセクションをご参照ください。

**Topics**
+ [のターゲットとしての MySQL 互換データベースの使用 AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [のターゲットとして MySQL 互換データベースを使用する場合の制限 AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [のターゲットとして MySQL 互換データベースを使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [MySQL のターゲットデータ型](#CHAP_Target.MySQL.DataTypes)

## のターゲットとしての MySQL 互換データベースの使用 AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

MySQL 互換データベースを AWS DMSのターゲットとして使用し始める前に、次の前提条件を満たしていることを確認してください。
+ MySQL 互換データベースへの AWS DMS 読み取り/書き込み権限を持つユーザーアカウントを に提供します。必要なアクセス権限を作成するには、以下のコマンドを実行します。

  ```
  CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
  GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES  ON <schema>.* TO 
  '<user acct>'@'%';
  GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  ```
+ 全ロード移行フェーズ中、ターゲットテーブルで外部キーを無効にする必要があります。全ロード中に MySQL 互換データベースの外部キーチェックを無効にするには、ターゲットエンドポイントの AWS DMS コンソール**の追加接続属性**セクションに次のコマンドを追加できます。

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ データベースパラメータ `local_infile = 1` を設定して、 AWS DMS がターゲットデータベースにデータをロードできるようにします。
+ MySQL 固有の移行前評価を使用する場合、次の権限を付与します。

  ```
  grant select on mysql.user to <dms_user>;
  grant select on mysql.db to <dms_user>;
  grant select on mysql.tables_priv to <dms_user>;
  grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
  ```

## のターゲットとして MySQL 互換データベースを使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

MySQL データベースをターゲットとして使用する場合、 AWS DMS は以下をサポートしていません。
+ データ定義言語 (DDL) ステートメント: TRUNCATE PARTITION、DROP TABLE、RENAME TABLE。
+ `ALTER TABLE table_name ADD COLUMN column_name` ステートメントを使用して、テーブルの先頭または中間に列を追加します。
+ 全ロードタスクで MySQL 互換ターゲットにデータをロードする場合、タスクログの制約によって発生したエラーはレポート AWS DMS されません。これにより、キーエラーが重複したり、レコード数が一致しない可能性があります。これは、MySQL `LOAD DATA` によるコマンドでのローカルデータの処理方法によるものです。フルロードフェーズ時は、必ず次を実行します。
  + Constraint を無効にする
  +  AWS DMS 検証を使用して、データが一貫していることを確認します。
+ 列の値を既存の値に更新すると、MySQL 互換データベースにより `0 rows affected` 警告が返されます。この動作は技術的にはエラーではありませんが、他のデータベースエンジンによって状況が処理される方法とは異なります。たとえば、Oracle は 1 行の更新を実行します。MySQL 互換データベースの場合、 は awsdms\$1apply\$1exceptions コントロールテーブルにエントリ AWS DMS を生成し、次の警告を記録します。

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ MySQL バージョン 5.7 と互換性がある Amazon Aurora バージョン 2 のターゲットとして Aurora Serverless が利用可能です。(MySQL 5.7 と互換性がある Aurora Serverless を使用できるようにするには、Aurora MySQL バージョン 2.07.1 を選択します。) Aurora Serverless の詳細については、「*Amazon Aurora ユーザーガイド*」の「[Aurora Serverless v2 を使用する](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html)」を参照してください。
+ AWS DMS は、インスタンスが書き込み可能モード、つまり `read_only`および `innodb_read_only`パラメータが `0`または に設定されている場合を除き、Aurora または Amazon RDS のリーダーエンドポイントの使用をサポートしていません`OFF`。Amazon RDS と Aurora をターゲットとして使用する方法の詳細については、次を参照してください。
  +  [接続先の DB インスタンスの確認](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [MySQL でのリードレプリカの更新](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ TIME のデータ型をレプリケートする場合、時間値の小数部分はレプリケートされません。
+ 追加接続属性 `loadUsingCSV=false` を使用して TIME のデータ型をレプリケートする場合、時間値は `[00:00:00, 23:59:59]` の範囲に制限されます。

## のターゲットとして MySQL 互換データベースを使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.MySQL.html)

追加の接続属性を使用して、MySQL 互換のターゲットデータベースを設定することもできます。

次の表は、MySQL をターゲットとして使用できる追加の接続属性を説明しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.MySQL.html)

別の方法として、`--my-sql-settings` コマンドの `AfterConnectScript` パラメータを使用して外部キーチェックを無効にし、データベースのタイムゾーンを指定することもできる。

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

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

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


|  AWS DMS データ型  |  MySQL のデータ型  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  長さが 1 〜 65,535 の場合、VARBINARY (長さ) を使用します。 長さが 65,536 〜 2,147,483,647 の場合、LONGLOB を使用します。  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  タイムスタンプ  |  "スケールが 0 以上、6 以下の場合: DATETIME (Scale) スケールが 7 以上、9 以下の場合: VARCHAR (37)"  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  長さが 1 ～ 21,845 の場合、VARCHAR (長さ) を使用します。 長さが 21,846 ～ 2,147,483,647 の場合、LONGTEXT を使用します。  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  長さが 1 ～ 32,767 の場合、VARCHAR (長さ) を使用します。 長さが 32,768 ～ 2,147,483,647 の場合、LONGTEXT を使用します。  | 
|  BLOB  |  長さが 1 ～ 65,535 の場合、BLOB を使用します。 長さが 65,536 ～ 2,147,483,647 の場合、LONGBLOB を使用します。 長さが 0 の場合、LONGBLOB (LOB を完全にサポート) を使用します。  | 
|  NCLOB  |  長さが 1 ～ 65,535 の場合、TEXT を使用します。 長さが 65,536 ～ 2,147,483,647 の場合、CHARACTER SET が ucs2 の LONGTEXT を使用します。 長さが 0 の場合、ucs2 が CHARACTER SET の LONGTEXT (LOB を完全にサポート) を使用します。  | 
|  CLOB  |  長さが 1 ～ 65,535 の場合、TEXT を使用します。 長さが 65,536 ～ 2147483647 の場合、LONGTEXT を使用します。 長さが 0 の場合、LONGTEXT (LOB を完全にサポート) を使用します。  | 

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

を使用して Amazon Redshift データベースにデータを移行できます AWS Database Migration Service。Amazon Redshift は、 クラウド内でのフルマネージド型、ペタバイト規模のデータウェアハウスサービスです。ターゲットとして Amazon Redshift データベースを使用すると、サポートされている他のすべてのソースデータベースからデータを移行できます。

Amazon Redshift Serverless をターゲットとして使用できます AWS DMS。詳細については、「[Amazon Redshift Serverless AWS DMS をターゲットとして使用する場合Amazon Redshift Serverless](#CHAP_Target.Redshift.RSServerless)」を参照してください。

 Amazon Redshift クラスターは、レプリケーションインスタンスと同じ AWS アカウントと AWS リージョンに存在する必要があります。

Amazon Redshift へのデータベース移行中、 は AWS DMS まず Amazon S3 バケットにデータを移動します。ファイルが Amazon S3 バケットにある AWS DMS 場合、 はそれらを Amazon Redshift データウェアハウスの適切なテーブルに転送します。 は、Amazon Redshift データベースと同じ AWS リージョンに S3 バケット AWS DMS を作成します。 AWS DMS レプリケーションインスタンスは、同じ AWS リージョン に配置する必要があります。

 AWS CLI または DMS API を使用して Amazon Redshift にデータを移行する場合は、S3 アクセスを許可する AWS Identity and Access Management ように (IAM) ロールを設定します。この IAM ロールの作成に関する詳細については、「[で使用する IAM ロールの作成 AWS DMS](security-iam.md#CHAP_Security.APIRole)」をご参照ください。

Amazon Redshift エンドポイントは、以下の完全なオートメーションを行います。
+ スキーマ生成およびデータ型マッピング
+ ソースデータベーステーブルの全ロード
+ ソーステーブルに加えられた変更の増分ロード
+ ソーステーブルに加えられたスキーマ変更のデータ定義言語 (DDL) での適用
+ 全ロードプロセスと変更データキャプチャ (CDC) プロセスの間の同期

AWS Database Migration Service は、全ロード処理オペレーションと変更処理オペレーションの両方をサポートします。 はソースデータベースからデータを AWS DMS 読み取り、一連のカンマ区切り値 (.csv) ファイルを作成します。全ロードオペレーションの場合、 は各テーブルのファイル AWS DMS を作成します。 AWS DMS は、各テーブルのテーブルファイルを Amazon S3 の別のフォルダにコピーします。ファイルが Amazon S3 にアップロードされると、 AWS DMS はコピーコマンドを送信し、ファイル内のデータは Amazon Redshift にコピーされます。変更処理オペレーションの場合、 は .csv ファイルの純変更 AWS DMS をコピーします。 AWS DMS 次に、純変更ファイルを Amazon S3 にアップロードし、データを Amazon Redshift にコピーします。

のターゲットとして Amazon Redshift を使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [Amazon Redshift データベースを のターゲットとして使用するための前提条件 AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [ターゲットとして Redshift を使用するために必要な権限](#CHAP_Target.Redshift.Privileges)
+ [のターゲットとして Amazon Redshift を使用する場合の制限 AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [のターゲットとしての Amazon Redshift データベースの設定 AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [のターゲットとして Amazon Redshift で拡張 VPC ルーティングを使用する AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [AWS KMS キーを作成して Amazon Redshift ターゲットデータを暗号化する](#CHAP_Target.Redshift.KMSKeys)
+ [のターゲットとして Amazon Redshift を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [データ暗号化キーと中間ストレージとしての Amazon S3 バケットの使用](#CHAP_Target.Redshift.EndpointSettings)
+ [Amazon Redshift のマルチスレッドタスク設定](#CHAP_Target.Redshift.ParallelApply)
+ [Amazon Redshift のターゲットデータ型](#CHAP_Target.Redshift.DataTypes)
+ [Amazon Redshift Serverless AWS DMS をターゲットとして使用する場合](#CHAP_Target.Redshift.RSServerless)

## Amazon Redshift データベースを のターゲットとして使用するための前提条件 AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

以下のリストでは、データ移行のターゲットとして Amazon Redshift を使用する場合に必要な前提条件について説明します。
+  AWS マネジメントコンソールを使用して Amazon Redshift クラスターを起動します。パスワード、ユーザー名、データベース名など、 AWS アカウントと Amazon Redshift クラスターに関する基本情報を書き留めます。これらの値は、Amazon Redshift ターゲット エンドポイントを作成するときに必要になります。
+ Amazon Redshift クラスターは、レプリケーションインスタンスと同じ AWS アカウントと AWS リージョンに存在する必要があります。
+  AWS DMS レプリケーションインスタンスには、クラスターが使用する Amazon Redshift エンドポイント (ホスト名とポート) へのネットワーク接続が必要です。
+ AWS DMS は Amazon S3 バケットを使用して Amazon Redshift データベースにデータを転送します。 AWS DMS がバケットを作成できるようにするため、コンソールは IAM ロール `dms-access-for-endpoint` を使用します。 AWS CLI または DMS API を使用して Amazon Redshift をターゲットデータベースとするデータベース移行を作成する場合は、この IAM ロールを作成する必要があります。このロールの作成に関する詳細については、「[で使用する IAM ロールの作成 AWS DMS](security-iam.md#CHAP_Security.APIRole)」をご参照ください。
+ AWS DMS は、BLOBs、CLOBs、NCLOBs をターゲット Amazon Redshift インスタンスの VARCHAR に変換します。Amazon Redshift では、64 KB を超える VARCHAR のデータ型がサポートされていないため、従来の LOB を Amazon Redshift に保存することはできません。
+ `true` にターゲット メタデータタスクの設定 [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md) を設定し、 AWS DMS が CDC 中に Amazon Redshift ターゲットテーブルへの変更を処理できるようにします。ソーステーブルとターゲットテーブルの両方にプライマリキーが必要です。プライマリキーがない場合、変更はステートメントによって適用されます。また、ターゲットレイテンシーを引き起こし、クラスターコミットキューに影響を与えるため、CDC 中のタスクのパフォーマンスに悪影響を及ぼす可能性があります。
+ Redshift のテーブルで行レベルセキュリティが有効になっている場合は、すべての DMS ユーザーに適切なアクセス許可を付与する必要があります。

## ターゲットとして Redshift を使用するために必要な権限
<a name="CHAP_Target.Redshift.Privileges"></a>

GRANT コマンドを使用して、ユーザーまたはユーザー グループのアクセス権限を定義します。権限には、テーブルとビューのデータの読み取り、データの書き込み、テーブルの作成など、アクセスオプションが含まれます。Amazon Redshift での GRANT 使用についての詳細は、*Amazon Redshift データベース デベロッパー ガイド* の「[GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html)」をご参照ください。

Amazon Redshift テーブルおよびビューに対するテーブルまたは、データベース、スキーマ、関数、プロシージャ、言語レベルの権限に対する特定の権限を付与する構文を次に示します。

```
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE 
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]
```

Amazon Redshift テーブルとビューに対する列レベルの権限の構文を次に示します。

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     TO { username | GROUP group_name | PUBLIC } [, ...]
```

次に、指定されたロールを持つユーザーおよびグループに付与される ASSUMEROLE 権限の構文を示します。

```
GRANT ASSUMEROLE
    ON { 'iam_role' [, ...] | ALL }
    TO { username | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD } [, ...]
```

## のターゲットとして Amazon Redshift を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

Amazon Redshift データベースをターゲットとして使用する場合、次の制限が適用されます。
+ Amazon Redshift ターゲットの中間ストレージとして使用する 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)」を参照してください。
+ 以下の DDL はサポートされていません。

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS は、下線 (\$1) で始まる名前のスキーマに変更を移行またはレプリケートすることはできません。名前がアンダースコアで始まるスキーマがある場合は、マッピング変換を使用してターゲットでスキーマの名前を変更してください。
+  Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。従来のデータベースからの LOB を Amazon Redshift に保存することはできません。
+  複数の列のプライマリキーを持つテーブルへの DELETE ステートメントの適用は、プライマリキーの列名で予約語が使用されている場合にはサポートされません。Amazon Redshift の予約語の一覧は[ここ](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html)をご参照ください。
+ ソースシステムがソーステーブルのプライマリ キーに対して UPDATE 操作を実行すると、パフォーマンスの問題が発生することがあります。これらのパフォーマンスの問題は、ターゲットに変更を適用するときに発生します。これは、UPDATE (および DELETE) オペレーションは、ターゲット行を識別するためにプライマリ キーの値に依存するためです。ソーステーブルのプライマリ キーを更新すると、タスクログに次のようなメッセージが表示されます。

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ DMS は Redshift クラスターのエンドポイントを構成するときにカスタム DNS 名をサポートしないため、Amazon が提供する DNS 名を使用する必要があります。Amazon Redshift クラスターはレプリケーションインスタンスと同じ AWS アカウントとリージョンに存在する必要があるため、カスタム DNS エンドポイントを使用すると検証は失敗します。
+ Amazon Redshift には、デフォルトで 4 時間のアイドルセッションタイムアウトがあります。DMS レプリケーションタスクでアクティビティがない場合、Redshift は 4 時間後にセッションを切断します。DMS が接続できないためにエラーが発生し、再起動が必要になる場合があります。回避策として、DMS レプリケーションユーザーのセッションタイムアウト制限を 4 時間以上に設定します。または、「**Amazon Redshift データベースデベロッパーガイド」の [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) の説明を参照してください。
+ がプライマリキーまたは一意のキーなしでソーステーブルデータを AWS DMS レプリケートする場合、CDC レイテンシーが高くなり、許容できないレベルのパフォーマンスになる可能性があります。
+ Oracle ソースから Redshift ターゲットへの CDC レプリケーション中は、パーティションの切り捨てはサポートされません。
+ Amazon Redshift はプライマリキーを適用せず、タスクが再開されたときに AWS DMS が CDC を再生する可能性があるため、重複レコードがターゲットテーブルに表示される可能性があります。重複を防ぐには、 `ApplyErrorInsertPolicy=INSERT_RECORD`設定を使用します。詳細については、「[エラー処理タスクの設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md)」を参照してください。または、アプリケーションレベルの重複検出と移行後のクリーンアップ手順を実装することもできます。

## のターゲットとしての Amazon Redshift データベースの設定 AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service は、Amazon Redshift インスタンスで動作するように設定する必要があります。以下の表では、Amazon Redshift エンドポイントに使用できる設定プロパティについて説明します。


| プロパティ | 説明 | 
| --- | --- | 
| server | 使用している Amazon Redshift クラスターの名前。 | 
| ポート | Amazon Redshift のポート番号。デフォルト値は 5439 です。 | 
| username | 登録済みユーザーの Amazon Redshift ユーザー名。 | 
| password | username プロパティで指定されたユーザーのパスワード。 | 
| データベース | 使用する Amazon Redshift データウェアハウス (サービス) の名前。 | 

Amazon Redshift エンドポイントに追加の接続文字列属性を追加する場合、 `maxFileSize` 属性と `fileTransferUploadStreams` 属性を指定できます。これらの属性の詳細については、「[のターゲットとして Amazon Redshift を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)」をご参照ください。

## のターゲットとして Amazon Redshift で拡張 VPC ルーティングを使用する AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Amazon Redshift ターゲットで拡張された VPC のルーティングを使用すると、Amazon Redshift クラスターとデータリポジトリ間のすべての COPY トラフィックは VPC を介します。拡張された VPC ルーティングは、他のリソースに Amazon Redshift がアクセスする方法に影響を与えるため、VPC を正しく設定していないと、COPY コマンドが失敗することがあります。

AWS DMS は、COPY コマンドを使用して S3 内のデータを Amazon Redshift クラスターに移動するため、この動作の影響を受ける可能性があります。

以下は、Amazon Redshift ターゲットにデータをロードするために AWS DMS 実行するステップです。

1. AWS DMS は、レプリケーションサーバーのソースから .csv ファイルにデータをコピーします。

1. AWS DMS は AWS SDK を使用して、.csv ファイルをアカウントの S3 バケットにコピーします。

1. AWS DMS 次に、 は Amazon Redshift の COPY コマンドを使用して、S3 の .csv ファイルから Amazon Redshift の適切なテーブルにデータをコピーします。

拡張 VPC ルーティングが有効になっていない場合、Amazon Redshift はインターネット経由でトラフィックをルーティングします。これには、 AWS ネットワーク内の他のサービスへのトラフィックも含まれます。この機能が有効でない場合は、ネットワークパスを設定する必要はありません。この機能が有効な場合は、クラスターの VPC とデータリソースとの間のネットワークパスを別に作成する必要があります。必要な設定の詳細については、Amazon Redshift のドキュメントの「[拡張された VPC ルーティング](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)」をご参照ください。

## AWS KMS キーを作成して Amazon Redshift ターゲットデータを暗号化する
<a name="CHAP_Target.Redshift.KMSKeys"></a>

ターゲットデータが Amazon Redshift にコピーされる前に、Amazon S3 にプッシュされるターゲットデータを暗号化できます。そのためには、カスタム AWS KMS キーを作成して使用できます。Amazon Redshift ターゲット エンドポイント作成時に次のいずれかのメカニズムを使用して、ターゲットデータを暗号化するために作成したキーを使用できます。
+  AWS CLIを使用して `create-endpoint` コマンドを実行するとき、次のオプションを使用します。

  ```
  --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-kms-key-ARN"}'
  ```

  ここで `your-kms-key-ARN` とは、KMS キーの Amazon リソースネーム (ARN) です。詳細については、「[データ暗号化キーと中間ストレージとしての Amazon S3 バケットの使用](#CHAP_Target.Redshift.EndpointSettings)」をご参照ください。
+ 値 (`SSE_KMS`) に追加の接続属性 (`encryptionMode`) を設定し、KMS キーの ARN に追加の接続属性 (`serverSideEncryptionKmsKeyId`) を設定します。詳細については、「[のターゲットとして Amazon Redshift を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)」を参照してください。

KMS キーを使用して Amazon Redshift ターゲットデータを暗号化するには、Amazon Redshift データにアクセスするためのアクセス許可を持つ AWS Identity and Access Management (IAM) ロールが必要です。次に、この IAM ロールは作成した暗号化キーに添付されるポリシー (キーポリシー) にアクセスします。これは、IAM コンソールで次を作成して実行します：
+ 管理ポリシーを持つ IAM AWSロール。
+ このロールを参照するキーポリシーがある KMS キーです。

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

**必須管理ポリシーを使用して IAM AWSロールを作成するには**

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

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。[**ロール**] ページが開きます。

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

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

1. **[Next: Permissions]**‬ (次へ: アクセス許可) を選択します。[**Attach permissions policies (アクセス権限ポリシーをアタッチする)**] ページが表示されます。

1. `AmazonDMSRedshiftS3Role` ポリシーを見つけて選択します。

1. **‬[Next:Tags]‭**‬(次へ: タグ) を選択します。**タグの追加** ページが表示されます。ここでは、任意のタグを追加することができます。

1. [**Next: Review (次の手順: 確認)**] を選択し、結果を確認します。

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

`DMS-Redshift-endpoint-access-role` を使用したデータ移行のターゲットとして使用するように Amazon Redshiftデータベースを設定します。

**IAM ロールを参照するキーポリシーを使用して AWS 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 Redshift などのすべての AWS サービスは対称暗号化キーでのみ機能するため、作成できるのは対称キーのみです。

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

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

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

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

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

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

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-Redshift-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-Redshift-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**] を選択してください。**暗号化キー**ページが開き、 AWS KMS key が作成されたことを示すメッセージが表示されます。

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

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Redshift.html)

## データ暗号化キーと中間ストレージとしての Amazon S3 バケットの使用
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

Amazon Redshift ターゲット エンドポイント設定を使用して、以下を設定できます：
+ カスタム AWS KMS データ暗号化キー。その後、このキーを使用して、データが Amazon Redshift にコピーされる前に、Amazon S3 にプッシュされるデータを暗号化できます。
+ Amazon Redshift に移行するデータ用の中間ストレージとしてのカスタム S3 バケット。
+ ブール型を PostgreSQL ソースからのブール型としてマップします。ブール型はデフォルトで varchar (1) として移行されます。次の例のとおり、`MapBooleanAsBoolean` を指定すると、Redshift ターゲットでブール型をブール型として移行できるようになります。

  ```
  --redshift-settings '{"MapBooleanAsBoolean": true}'
  ```

  この設定を有効にするには、ソースエンドポイントとターゲットエンドポイントの両方でこの設定を設定する必要があることに注意します。

### データ暗号化に対する KMS キー設定
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

次の例では、S3 にプッシュされるデータを暗号化するカスタム KMS キーの設定を示しています。開始するには、 AWS CLIで次の `create-endpoint` 呼び出しを行う場合があります。

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'
```

ここでは、`--redshift-settings` オプションで指定される JSON オブジェクトは 2 つのパラメータを定義します。1 つは、値が `SSE_KMS` の `EncryptionMode` パラメータです。もう 1 つは、値が `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1` の `ServerSideEncryptionKmsKeyId` パラメータです。この値は、カスタム KMS キーの Amazon リソースネーム (ARN) です。

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

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_S3"}'
```

S3 サーバー側の暗号化の詳細については、*Amazon Simple Storage Service ユーザーガイド* の「[サーバー側の暗号化を使用したデータの保護](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` に変えることはできません。

### Amazon S3 バケットのセットアップ
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Amazon Redshift ターゲットエンドポイントにデータを移行すると、 AWS DMS は移行されたデータを Amazon Redshift にコピーする前に、デフォルトの Amazon S3 バケットを中間タスクストレージとして使用します。例えば、 AWS KMS データ暗号化キーを使用して Amazon Redshift ターゲットエンドポイントを作成する例では、このデフォルトの S3 バケットを使用します ([データ暗号化に対する KMS キー設定](#CHAP_Target.Redshift.EndpointSettings.KMSkeys) を参照)。

代わりに、 `create-endpoint` コマンドの `--redshift-settings`オプションの値に次のパラメータを含めることで、この中間ストレージのカスタム S3 AWS CLI バケットを指定できます。
+ `BucketName` - S3 バケットストレージの名前として指定する文字列。サービスアクセスロールが `AmazonDMSRedshiftS3Role` ポリシーに基づいている場合、この値には `dms-` というプレフィックスが必要です (`dms-my-bucket-name` など)。
+ `BucketFolder` - (オプション) 指定された S3 バケットのストレージフォルダー名として指定できる文字列。
+ `ServiceAccessRoleArn` - S3 バケットへの管理アクセスを許可する IAM ロールの ARN。一般的に、 `AmazonDMSRedshiftS3Role` ポリシーに基づいてこのロールを作成します。例については、[AWS KMS キーを作成して Amazon Redshift ターゲットデータを暗号化する](#CHAP_Target.Redshift.KMSKeys) で、必要な AWSが管理するポリシーを持つ IAM ロールの作成手順 をご参照ください。
**注記**  
`create-endpoint` コマンドの `--service-access-role-arn` オプションを使用して別の IAM ロールの ARN を指定した場合、その IAM ロールオプションが優先されます。

以下の例では、これらのパラメータを使用して、 AWS CLIを使用した以下の `create-endpoint` コールでカスタム Amazon S3 バケットを指定しています。

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
"BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'
```

## Amazon Redshift のマルチスレッドタスク設定
<a name="CHAP_Target.Redshift.ParallelApply"></a>

マルチスレッドタスク設定を使用して Amazon Redshift ターゲット エンドポイントの全ロードと変更データ キャプチャ (CDC) タスクのパフォーマンスを向上させることができます。これを行うには、同時スレッドの数とバッファに保存するレコード数を指定できます。

### Amazon Redshift でのマルチスレッド全ロードタスク設定
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

全負荷のパフォーマンスを促進するには、以下の `ParallelLoad*` タスク設定を使用します:
+ `ParallelLoadThreads` – データレコードを Amazon Redshift ターゲットエンドポイントにプッシュするために全ロード中に DMS が使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。詳細については、「[全ロードタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md)」を参照してください。

  `ParallelLoadThreads` タスク設定を使用する際、`enableParallelBatchInMemoryCSVFiles` 属性を `false` に設定することができます。この属性は、DMS がメモリではなくディスクに書き込むことにより、大規模なマルチスレッドの全ロードタスクのパフォーマンスを向上させます。デフォルト値は `true` です。
+ `ParallelLoadBufferSize` — Redshift ターゲットで並列ロード スレッドを使用しているときの最大データレコード要求を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、ParallelLoadThreads > 1 (1 より大きい) 場合に使用することをお勧めします。

**注記**  
Amazon Redshift ターゲットエンドポイントへの FULL LOAD 中の`ParallelLoad*`タスク設定の使用のサポートは、 AWS DMS バージョン 3.4.5 以降で利用できます。  
`ReplaceInvalidChars` Redshift エンドポイント設定は、変更データ キャプチャ (CDC) 中または並列ロードが有効な全ロード移行タスク中での使用には対応していません。並列ロードが有効でない場合、全ロード移行でサポートされます。詳細については、[AWS Database Migration Service API リファレンス](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html) の *[RedshiftSettings]* (Redshift設定) をご参照ください。

### Amazon Redshift のマルチスレッド CDC タスク設定
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

CDC のパフォーマンスを向上させるため、以下の `ParallelApply*` タスク設定を使用できます:
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを Amazon Redshift ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。推奨される最小値は、クラスター内のスライスの数と同数です。
+ `ParallelApplyBufferSize` — Redshift ターゲットで並列適用スレッドを使用しているときの最大データレコード要求を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、ParallelApplyThreads > 1 (1 より大きい) 場合に使用することをお勧めします。

  Redshift をターゲットとして最大のメリットを得るには、`ParallelApplyBufferSize` の値は `ParallelApplyThreads` の少なくとも2倍（2倍以上）の数の数にしてください。

**注記**  
CDC から Amazon Redshift ターゲットエンドポイントへの`ParallelApply*`タスク設定の使用のサポートは、 AWS DMS バージョン 3.4.3 以降で利用できます。

適用される並列度のレベルは、データの転送に使用される *[batch size]* (バッチサイズ) と*[maximum file size]* (最大ファイルサイズ) 合計間の相関関係によって異なります。Redshift ターゲットでマルチスレッド CDC タスク設定を使用する場合、バッチサイズが最大ファイルサイズに対して大きい場合にメリットが得られます。例えば、エンドポイントとタスクの設定の次の組み合わせを使用して、最適なパフォーマンスをチューニングできます。

```
// Redshift endpoint setting
                
        MaxFileSize=250000;

// Task settings

        BatchApplyEnabled=true;
        BatchSplitSize =8000;
        BatchApplyTimeoutMax =1800;
        BatchApplyTimeoutMin =1800;
        ParallelApplyThreads=32;
        ParallelApplyBufferSize=100;
```

上記の例の設定を使用すると、重いトランザクションワークロードがある場合、最大ファイルサイズ 250 MB で 32 の並列スレッドを利用し、1,800 秒でフルになる 8,000 レコードのバッチバッファーを最大限に活用できます。

詳細については、「[変更処理のチューニング設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)」を参照してください。

**注記**  
Redshift クラスターへの継続的レプリケーション中に実行される DMS クエリは、実行中の他のアプリケーション クエリと同じ WLM (ワークロード管理) キューを共有できます。そのため、Redshift ターゲットへの継続的なレプリケーション中にパフォーマンスに影響を与えるように WLM プロパティを適切に設定することを検討してください。例えば、他のパラレル ETL クエリが実行されている場合、DMS の実行が遅くなり、パフォーマンスは向上しなくなります。

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

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

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


| AWS DMS データ型 | Amazon Redshift のデータ型 | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (長さ) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  位取り => 0 かつ =< 6 の場合、Redshift ターゲット列のデータ型に応じて、次のいずれかになる。 TIMESTAMP (s) TIMESTAMPTZ (s) — ソースタイムスタンプにゾーンオフセットが含まれている場合 (SQL Server や Oracle など)、insert または update 時に UTC に変換される。オフセットが含まれていない場合、時刻は既に UTC に変換済みとみなされる。 スケールが 7 以上、9 以下の場合  VARCHAR(37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | スケールが 0 以上、37 以下の場合  NUMERIC (p,s)  スケールが 38 以上、127 以下の場合  VARCHAR (長さ) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | 長さが 1 ～ 65,535 の場合、VARCHAR (バイト単位の長さ) を使用します  長さが 65,536 ～ 2,147,483,647 の場合、VARCHAR (65535) を使用します | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  長さが 1 ～ 65,535 の場合、NVARCHAR (バイト単位の長さ) を使用します  長さが 65,536 ～ 2,147,483,647 の場合、NVARCHAR (65535) を使用します | 
| BLOB | VARCHAR (最大 LOB サイズ \$12)  最大 LOB サイズが 31 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。 | 
| NCLOB | NVARCHAR (最大 LOB サイズ)  最大 LOB サイズが 63 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。 | 
| CLOB | VARCHAR (最大 LOB サイズ)  最大 LOB サイズが 63 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。 | 

## Amazon Redshift Serverless AWS DMS をターゲットとして使用する場合
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS は、ターゲットエンドポイントとしての Amazon Redshift Serverless の使用をサポートしています。Amazon Redshift Serverless の使用の詳細については、「[Amazon Redshift 管理ガイド](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html)」の「[Amazon Redshift Serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html)」を参照してください。

このトピックでは、 で Amazon Redshift Serverless エンドポイントを使用する方法について説明します AWS DMS。

**注記**  
Amazon Redshift Serverless エンドポイントを作成する場合、[RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html) エンドポイント設定の **[DatabaseName]** フィールドに Amazon Redshift データウェアハウス名またはワークグループエンドポイント名を使用します。**[ServerName]** フィールドには、サーバーレスクラスターの **[ワークグループ]** ページに表示されるエンドポイントの値を使用します (`default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` など)。エンドポイント作成の詳細については、「[ソースおよびターゲットエンドポイントの作成](CHAP_Endpoints.Creating.md)」を参照してください。ワークグループエンドポイントの詳細については、「[Amazon Redshift Serverless への接続](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html)」を参照してください。

### Amazon Redshift Serverless をターゲットとする信頼ポリシー
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Amazon Redshift Serverless をターゲットエンドポイントとして使用する場合、次の強調表示されたセクションを信頼ポリシーに追加する必要があります。このポリシーは、`dms-access-for-endpoint` ロールにアタッチされます。

での信頼ポリシーの使用の詳細については AWS DMS、「」を参照してください[で使用する IAM ロールの作成 AWS DMS](security-iam.md#CHAP_Security.APIRole)。

### Amazon Redshift Serverless をターゲットとして使用する場合の制限
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

Redshift Serverless をターゲットとして使用する場合、次の制限があります。
+ AWS DMS は、Amazon Redshift Serverless をサポートするリージョンのエンドポイントとして Amazon Redshift Serverless のみをサポートします。Amazon Redshift Serverless をサポートしているリージョンについては、「[AWS 全般のリファレンス](https://docs.aws.amazon.com/general/latest/gr/Welcome.html)」の 「[Amazon Redshift エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html)」トピックの「**Redshift Serverless API**」を参照してください。
+ 拡張 VPC ルーティングを使用する場合は、必ず Redshift Serverless クラスターまたは Redshift プロビジョンドクラスターと同じ VPC に Amazon S3 エンドポイントを作成します。詳細については、「[のターゲットとして Amazon Redshift で拡張 VPC ルーティングを使用する AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)」を参照してください。
+ AWS DMS は、ターゲットとして Amazon Redshift Serverless の拡張スループットをサポートしていません。詳細については、「[フルロード Oracle から Amazon Redshift および Amazon S3 への移行の拡張スループットの向上](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput)」を参照してください。
+ AWS DMS SSL モードが に設定されている場合、 は Amazon Redshift Redshift Serverless への接続をサポートしていません`verify-full`。Amazon Redshift Serverless ターゲットへの SSL 検証が必要な接続の場合は、 `require`や などの代替 SSL モードを使用します`verify-ca`。

# のターゲットとしての SAP ASE データベースの使用 AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

サポートされているいずれかのデータベースソースから AWS DMS、 を使用して、以前は Sybase-database と呼ばれていた SAP Adaptive Server Enterprise (ASE) にデータを移行できます。

がターゲットとして AWS DMS サポートする SAP ASE のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

## SAP ASE データベースを のターゲットとして使用するための前提条件 AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

のターゲットとして SAP ASE データベースの使用を開始する前に AWS DMS、次の前提条件を満たしていることを確認してください。
+ SAP ASE アカウントへのアクセス権を AWS DMS ユーザーに付与します。このユーザーには、SAP ASE データベースでの読み取り/書き込み権限が必要です。
+ 場合によっては、非ラテン文字 (例: 中国語) 用に設定された、Microsoft Windows の Amazon EC2 インスタンスで、SAP ASE バージョン 15.7 にレプリケートすることがあります。このような場合、 AWS DMS は SAP ASE 15.7 SP121 をターゲット SAP ASE マシンにインストールする必要があります。

## のターゲットとして SAP ASE データベースを使用する場合の制限 AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

SAP ASE データベースを AWS DMSのターゲットとして使用する場合は、以下の制限が適用されます：
+ AWS DMS は、次のデータ型のフィールドを含むテーブルをサポートしていません。これらのデータ型のレプリケートされた列は NULL として表示されます。
  + ユーザー定義の型 (UDT)

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.SAP.html)

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

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

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


|  AWS DMS データ型  |  SAP ASE のデータ型  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (長さ) | 
| DATE | DATE | 
| TIME | TIME | 
| タイムスタンプ |  スケールが 0 以上、6 以下の場合: BIGDATETIME  スケールが 7 以上、9 以下の場合: VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (長さ) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (長さ) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# のターゲットとしての 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 オブジェクトで指定するパラメータは、次のテーブルにあります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.S3.html)

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 ターゲット エンドポイントを作成するときに、日付ベースのフォルダのパーティション分割を有効にできます。このモードは、既存のデータを移行して進行中の変更レプリケーションを行うか (全ロード \$1 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/LOADseq_num.csv
```

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


| 使用するパラメータ設定 | 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 | cdcInsertsAndUpdates | 全ロードの場合 | CDC ロードの場合 | 
| --- | --- | --- | --- | --- | --- | 
| true | true | 最初のフィールド値が追加されて I に設定 | 最初のフィールド値が追加されて I または U に設定 | 
| false | false | 追加のフィールドなし | 最初のフィールド値が追加されて I、U、または D に設定 | 
| false | true | 追加のフィールドなし | 最初のフィールド値が追加されて I または U に設定 | 
| true | false | 最初のフィールド値が追加されて I に設定 | 最初のフィールド値が追加されて I、U、または D に設定 | 

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

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

を使用して AWS DMS 、Amazon DynamoDB テーブルにデータを移行できます。Amazon DynamoDB は、高速で予測可能なパフォーマンスとシームレスなスケーラビリティを提供するフルマネージド NoSQL データベースサービスです。 は、リレーショナルデータベースまたは MongoDB をソースとして使用 AWS DMS します。

DynamoDB では、テーブル、項目、および属性が、操作するコアコンポーネントです。*[table]* (テーブル) とは項目の集合であり、各 *[item ]* (項目) は属性の集合です。DynamoDB は、テーブルの各項目を一意に識別するために、パーティションキーと呼ばれるプライマリキーを使用します。より柔軟なクエリを提供するために、キーおよびセカンダリインデックスを使用することもできます。

ソースのデータベースから、ターゲット DynamoDB テーブルにデータを移行するために、オブジェクトのマッピングを使用します。オブジェクトのマッピングを使用すると、ソースデータがターゲットのどこにあるか判定できます。

 AWS DMS が DynamoDB ターゲットエンドポイントにテーブルを作成すると、ソースデータベースエンドポイントと同じ数のテーブルが作成されます。 は複数の DynamoDB パラメータ値 AWS DMS も設定します。テーブル作成のコストは、データの量および移行するテーブルの数によって異なります。

**注記**  
 AWS DMS コンソールまたは API の **SSL モード**オプションは、Kinesis や DynamoDB などの一部のデータストリーミングや NoSQL サービスには適用されません。これらはデフォルトで安全であるため、SSL モードの設定が none (**SSL Mode=None**) と等しい AWS DMS ことを示しています。SSL を使用するために、エンドポイントに追加の設定は必要ありません。例えば、DynamoDB をターゲットエンドポイントとして使用する場合、デフォルトで保護されます。DynamoDB へのすべての API コールは SSL を使用するため、 AWS DMS エンドポイントに追加の SSL オプションは必要ありません。 AWS DMS が DynamoDB データベースへの接続時にデフォルトで使用する HTTPS プロトコルを使用して、SSL エンドポイント経由で安全にデータを保存して取得できます。

転送速度を上げるために、 は DynamoDB ターゲットインスタンスへのマルチスレッド全ロード AWS DMS をサポートします。DMS では、このマルチスレッドでのタスク設定を、以下でサポートします。
+ `MaxFullLoadSubTasks` - 並列ロードするソーステーブルの最大数を指定するにはこのオプションを使用します。DMS は、専用のサブタスクを使用して、対応する DynamoDB ターゲットテーブルに各テーブルをロードします。デフォルト値は 8 です。最大値は 49 です。
+ `ParallelLoadThreads` – このオプションを使用して、 AWS DMS が各テーブルを DynamoDB ターゲットテーブルにロードするために使用するスレッドの数を指定します。デフォルト値は 0 (シングルスレッド) です。最大値は 200 です。この上限を増やすよう依頼できます。
**注記**  
DMS は、テーブルの各セグメントを独自のスレッドに割り当てロードします。したがって、`ParallelLoadThreads` をソースのテーブルに指定するセグメントの最大数に設定します。
+ `ParallelLoadBufferSize` – DynamoDB ターゲットにデータをロードするために並列ロードスレッドが使用するバッファ内に保存するレコードの最大数を指定するには、このオプションを使用します。デフォルト値は 50 です。最大値は 1000 です。この設定は `ParallelLoadThreads` で使用します。`ParallelLoadBufferSize` は、複数のスレッドがある場合にのみ有効です。
+ 個々のテーブルのテーブルマッピング設定 - `table-settings` ルールを使用して、並列ロードするソースから個々のテーブルを識別します。また、これらのルールを使用して、各テーブルの行をマルチスレッドロード用にセグメント化する方法を指定します。詳細については、「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)」を参照してください。

**注記**  
が移行タスクの DynamoDB パラメータ値 AWS DMS を設定すると、デフォルトの読み込みキャパシティーユニット (RCU) パラメータ値は 200 に設定されます。  
書き込みキャパティティーユニット (WCU) のパラメータ値も設定されますが、その値は他のいくつかの設定によって異なります。  
WCU パラメータのデフォルト値は 200 です。
`ParallelLoadThreads` タスク設定が 1 より大きい値に設定された場合 (デフォルトは 0)、WCU パラメータは `ParallelLoadThreads` 値の 200 倍に設定されます。
使用するリソースには、標準 AWS DMS 使用料が適用されます。

## リレーショナルデータベースから DynamoDB テーブルへの移行
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS は、DynamoDB スカラーデータ型へのデータの移行をサポートしています。Oracle や MySQL などのリレーショナルデータベースから DynamoDB に移行する場合は、データを格納する方法を再編成が必要となる場合があります。

現在、 AWS DMS は DynamoDB スカラータイプの属性への単一テーブルから単一テーブルへの再構築をサポートしています。リレーショナルデータベースのテーブルから DynamoDB にデータを移行する場合、テーブルからデータを取得し、DynamoDB のスカラーデータ型属性に形式を変更します。これらの属性は複数の列からデータを受け入れることができるため、列を属性に直接マッピングすることができます。

AWS DMS は、次の DynamoDB スカラーデータ型をサポートしています。
+ String
+ Number
+ ブール値

**注記**  
ソースからの NULL データは、ターゲットで無視されます。

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

のターゲットとして DynamoDB データベースの使用を開始する前に AWS DMS、必ず IAM ロールを作成してください。この IAM ロールでは AWS DMS 、移行先の DynamoDB テーブルへのアクセスを が引き受けて許可する必要があります。アクセス許可の最小設定は、次の IAM ポリシーで示します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
            "Service": "dms.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
```

------

DynamoDB に移行する際使用するロールには、次のアクセス許可が必要です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteTable",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:111122223333:table/name1",
                "arn:aws:dynamodb:us-west-2:111122223333:table/OtherName*",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_apply_exceptions",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_full_load_exceptions"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## のターゲットとして DynamoDB を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

ターゲットとして DynamoDB を使用する場合、以下の制限が適用されます：
+ DynamoDB は、数値データ型の最大精度を 38 に制限します。文字列として高い精度のすべてのデータ型を保存します。オブジェクトマッピング機能を使用して、これを明示的に指定する必要があります。
+ DynamoDB に Date データ型がないため、Date データ型を使用しているデータは、文字列に変換されます。
+ DynamoDB はプライマリ キー属性の更新を許可しません。この制限は、ターゲットで不要なデータが発生する可能性があるため、変更データキャプチャ (CDC) で継続的なレプリケーションを使用する場合に重要です。オブジェクトのマッピング方法に応じて、プライマリキーを更新する CDC オペレーションは 2 つのうちのいずれかを実行できます。これは、更新されたプライマリキーおよび不完全なデータがある新しい項目を挿入できるか、あるいは失敗するかのいずれかです。
+ AWS DMS は、複合以外のプライマリキーを持つテーブルのレプリケーションのみをサポートします。例外は、カスタムパーティションキーまたはソートキー、あるいはその両方があるターゲットテーブルにオブジェクトマッピングを指定する場合です。
+ AWS DMS は、CLOB でない限り、LOB データをサポートしません。 は、CLOB データをデータの移行時に DynamoDB 文字列 AWS DMS に変換します。
+ ターゲットとして DynamoDB を使用する場合、例外適用制御テーブル (`dmslogs.awsdms_apply_exceptions`) のみがサポートされます。統制テーブルの詳細については、「[制御テーブルタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md)」をご参照ください。
+ AWS DMS は、DynamoDB `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` のタスク設定をターゲットとしてサポートしていません。
+ AWS DMS は、DynamoDB `TaskRecoveryTableEnabled` のタスク設定をターゲットとしてサポートしていません。
+ `BatchApply` は DynamoDB エンドポイントではサポートされていません。
+ AWS DMS は、名前が DynamoDB の予約語と一致する属性を移行できません。詳細については、「*Amazon DynamoDB ディベロッパーガイド*」の「[DynamoDB での予約語](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html)」を参照してください。

## DynamoDB にデータを移行するためのオブジェクトマッピングの使用
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS はテーブルマッピングルールを使用して、ソースからターゲット DynamoDB テーブルにデータをマッピングします。DynamoDB ターゲットにデータをマッピングするために、*object-mapping* と呼ばれるテーブルマッピングルールのタイプを使用します。オブジェクトマッピングにより、移行するデータの属性名とデータを定義できます。オブジェクトマッピングを使用するときは選択ルールが必要です。

DynamoDB には、パーティションのキーとオプションのソートキー以外に、プリセット構造はありません。複合以外のプライマリキーがある場合、 はそれ AWS DMS を使用します。複合プライマリキーがある場合、またはソートキーを使用する必要がある場合は、ターゲット DynamoDB テーブルでそれらのキーと他の属性を定義します。

オブジェクトマッピングルールを作成するには、`rule-type` を *object-mapping* として指定します。このルールが、使用したいオブジェクトマッピングのタイプを指定します。

ルールの構造は次のとおりです。

```
{ "rules": [
    {
      "rule-type": "object-mapping",
      "rule-id": "<id>",
      "rule-name": "<name>",
      "rule-action": "<valid object-mapping rule action>",
      "object-locator": {
      "schema-name": "<case-sensitive schema name>",
      "table-name": ""
      },
      "target-table-name": "<table_name>"
    }
  ]
}
```

AWS DMS は現在、 `rule-action`パラメータの唯一の有効な値`map-record-to-document`として `map-record-to-record`と をサポートしています。これらの値は、`exclude-columns`属性リストの一部として除外されていないレコードに対してデフォルトで AWS DMS 何を行うかを指定します。これらの値は、どのような方法でも属性マッピングに影響しません。
+ リレーショナルデータベースから DynamoDB に移行するときに `map-record-to-record` を使用できます。DynamoDB のパーティションキーとしてリレーショナルデータベースからプライマリ キーを使用し、ソースデータベース内の各列の属性を作成します。を使用する場合`map-record-to-record`、`exclude-columns`属性リストにリストされていないソーステーブルの任意の列に対して、 はターゲット DynamoDB インスタンスで対応する属性 AWS DMS を作成します。これは、そのソース列が属性マッピングで使用されているかどうかにかかわらず作成されます。
+ `map-record-to-document` を使用して、ターゲットの 1 つのフラット DynamoDB マップに "\$1doc." 属性名でソース列を配置します。を使用する場合`map-record-to-document`、 はデータをソース上の単一のフラットな DynamoDB マップ属性 AWS DMS に配置します。この属性は "\$1doc." と呼ばれます。この配置は、`exclude-columns` 属性リストに含まれていないソーステーブル内のすべての列に適用されます。

`rule-action` パラメータの `map-record-to-record` と `map-record-to-document` の違いを理解する 1 つの方法は、この 2 つのパラメータの動作を確認することです。この例では、次の構造とデータを含むリレーショナルデータベースのテーブルから始めると想定してください。

![\[例のためのサンプルデータベース\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-dynamodb1.png)


この情報を DynamoDB に移行するには、データを DynamoDB テーブルにマッピングするルールを作成します。パラメータにリストされている `exclude-columns` 列を書き留めてください。これらの列はターゲットに直接マッピングされていません。その代わりに、データを組み合わせて新しい項目を作成するために、属性マッピングが使用されています。たとえば、*FirstName* と *LastName* を組み合わせると DynamoDB ターゲット上の *CustomerName* になります。*NickName* と *income* は除外されていません。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                            "M": {
                                "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

`rule-action` パラメータ *map-record-to-record*を使用することで、*NickName* および *income* のデータは、DynamoDB ターゲットで同じ名前の項目にマッピングされます。

![\[の使用を開始する AWS DMS\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-dynamodb2.png)


ただし、同じルールを使用しますが `rule-action` パラメータを *map-record-to-document* に変更するとします。この場合、`exclude-columns` パラメータ、 *NickName* および *income* にリストされない列は、*\$1doc* 項目にマッピングされます。

![\[の使用を開始する AWS DMS\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-dynamodb3.png)


### オブジェクトマッピングでのカスタム条件式の使用
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

DynamoDB テーブルに書き込み中のデータを操作するための条件式と呼ばれる DynamoDB の機能を使用することができます。DynamoDB の条件式の詳細については、「[条件式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)」をご参照ください。

条件式のメンバーは次から構成されます。
+ 式 (必須) 
+ 式の属性値 (必須）。属性値の DynamoDB json 構造を指定します。これは、実行時まで不明な DynamoDB の値と属性を比較するのに役立ちます。式の属性値は、実際の値のプレースホルダーとして定義できます。
+ 式の属性名 (必須）。この値を使用すると、DynamoDB の予約語や特殊文字を含む属性名などとの競合が発生する可能性を回避できます。
+ 条件式をいつ使用するかを選ぶオプション (オプション) デフォルトは apply-during-cdc = false および apply-during-full-load = true

ルールの構造は次のとおりです。

```
"target-table-name": "customer_t",
      "mapping-parameters": {
        "partition-key-name": "CustomerName",
        "condition-expression": {
          "expression":"<conditional expression>",
          "expression-attribute-values": [
              {
                "name":"<attribute name>",
                "value":<attribute value>
              }
          ],
          "apply-during-cdc":<optional Boolean value>,
          "apply-during-full-load": <optional Boolean value>
        }
```

次のサンプルは、条件式に使用されるセクションを主に示しています。

![\[の使用を開始する AWS DMS\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### オブジェクトマッピングで属性マッピングを使用する
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

属性マッピングでは、ターゲット上のデータを再編成するために、ソース列名を使用してテンプレート文字列を指定することができます。ユーザーがテンプレートで指定する場合を除き、書式設定は行われません。

次の例は、ソースデータベースの構造と、DynamoDB ターゲットの必要とされる構造を示します。最初に示すのは、ソースの構造で、この場合は Oracle データベースです。次に DynamoDB 内のデータの必要とされる構造を示します。この例では最後に、必要なターゲット構造を作成するのに使用される JSON を示します。

Oracle データの構造は次のとおりです。


****  

| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| プライマリキー | 該当なし |  | 
| Randy | Marsh | 5 | 221B Baker Street  | 1234567890 | 31 Spooner Street, Quahog  | 9876543210  | 02/29/1988  | 

DynamoDB データの構造は次のとおりです。


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| パーティションキー | ソートキー | 該当なし | 
| <pre>Randy,Marsh</pre> | <pre>5</pre> | <pre>{<br />    "Name": "Randy",<br />    "Home": {<br />        "Address": "221B Baker Street",<br />        "Phone": 1234567890<br />    },<br />    "Work": {<br />        "Address": "31 Spooner Street, Quahog",<br />        "Phone": 9876541230<br />    }<br />}</pre> | <pre>02/29/1988</pre> | 

次の JSON は、DynamoDB 構造を達成するために使用されるオブジェクトマッピングと列マッピングを示します。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
                    }
                ]
            }
        }
    ]
}
```

列マッピングを使用するもう 1 つの方法は、ドキュメントタイプとして DynamoDB 形式を使用することです。次のコード例では、`attribute-sub-type` として *dynamodb map* を属性マッピングに使用します。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                          "M": {
                            "Name": {
                              "S": "${FirstName}"
                            },
                            "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

次の例のように、`dynamodb-map` の代わりに `dynamodb-list` を属性マッピングの属性サブタイプとして使用することもできます。

```
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
    "L": [
            {
                "N": "${FirstName}"
            },
            {   
                "N": "${HomeAddress}"
            },
            {   
                "N": "${HomePhone}"
            },
            {
                "N": "${WorkAddress}"
            },
            {
                "N": "${WorkPhone}"
            }
        ]   
    }
}
```

### 例1: オブジェクトマッピングで属性マッピングを使用する
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

次の例は、2 つの MySQL データベーステーブル *nfl\$1data* と *sport\$1team* のデータを、*NFLTeams* と *SportTeams* という 2 つの DynamoDB テーブルへ移行します。テーブルの構造、および MySQL データベーステーブルから DynamoDB テーブルへデータをマップするために使用される JSON は、次のとおりです。

MySQL データベース *nfl\$1data* の構造は次のとおりです。

```
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position      | varchar(5)  | YES  |     | NULL    |       |
| player_number | smallint(6) | YES  |     | NULL    |       |
| Name          | varchar(40) | YES  |     | NULL    |       |
| status        | varchar(10) | YES  |     | NULL    |       |
| stat1         | varchar(10) | YES  |     | NULL    |       |
| stat1_val     | varchar(10) | YES  |     | NULL    |       |
| stat2         | varchar(10) | YES  |     | NULL    |       |
| stat2_val     | varchar(10) | YES  |     | NULL    |       |
| stat3         | varchar(10) | YES  |     | NULL    |       |
| stat3_val     | varchar(10) | YES  |     | NULL    |       |
| stat4         | varchar(10) | YES  |     | NULL    |       |
| stat4_val     | varchar(10) | YES  |     | NULL    |       |
| team          | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
```

MySQL データベーステーブル*sport\$1team* の構造は次のとおりです。

```
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field                     | Type         | Null | Key | Default | Extra          |
+---------------------------+--------------+------+-----+---------+----------------+
| id                        | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name                      | varchar(30)  | NO   |     | NULL    |                |
| abbreviated_name          | varchar(10)  | YES  |     | NULL    |                |
| home_field_id             | smallint(6)  | YES  | MUL | NULL    |                |
| sport_type_name           | varchar(15)  | NO   | MUL | NULL    |                |
| sport_league_short_name   | varchar(10)  | NO   |     | NULL    |                |
| sport_division_short_name | varchar(10)  | YES  |     | NULL    |                |
```

2 つのテーブルを 2 つの DynamoDB テーブルにマッピングするために使用されるテーブルマッピングルールは次のとおりです。

```
{
  "rules":[
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "nfl_data"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "sport_team"
      },
      "rule-action": "include"
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"3",
      "rule-name":"MapNFLData",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"nfl_data"
      },
      "target-table-name":"NFLTeams",
      "mapping-parameters":{
        "partition-key-name":"Team",
        "sort-key-name":"PlayerName",
        "exclude-columns": [
          "player_number", "team", "name"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"Team",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${team}"
          },
          {
            "target-attribute-name":"PlayerName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"PlayerInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
          }
        ]
      }
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"4",
      "rule-name":"MapSportTeam",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"sport_team"
      },
      "target-table-name":"SportTeams",
      "mapping-parameters":{
        "partition-key-name":"TeamName",
        "exclude-columns": [
          "name", "id"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"TeamName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"TeamInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
          }
        ]
      }
    }
  ]
}
```

*NFLTeams* DynamoDB テーブルの出力例は次のとおりです。

```
  "PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
  "PlayerName": "Allen, Ryan",
  "Position": "P",
  "stat1": "PUNTS",
  "stat1_val": "73",
  "stat2": "AVG",
  "stat2_val": "46",
  "stat3": "LNG",
  "stat3_val": "67",
  "stat4": "IN 20",
  "stat4_val": "31",
  "status": "ACT",
  "Team": "NE"
}
```

SportsTeams *DynamoDB* テーブルの出力例は次のとおりです。

```
{
  "abbreviated_name": "IND",
  "home_field_id": 53,
  "sport_division_short_name": "AFC South",
  "sport_league_short_name": "NFL",
  "sport_type_name": "football",
  "TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
  "TeamName": "Indianapolis Colts"
}
```

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

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

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

が異種データベースからデータを AWS DMS 移行する場合、ソースデータベースのデータ型をデータ型と呼ばれる中間 AWS DMS データ型にマッピングします。その後、中間データ型をターゲットデータ型にマッピングします。次の表は、DynamoDB の各 AWS DMS データ型とマッピングされるデータ型を示しています。


| AWS DMS データ型 | DynamoDB データ型 | 
| --- | --- | 
|  String  |  String  | 
|  WString  |  String  | 
|  ブール値  |  ブール値  | 
|  日付  |  String  | 
|  DateTime  |  String  | 
|  INT1  |  Number  | 
|  INT2  |  Number  | 
|  INT4  |  Number  | 
|  INT8  |  Number  | 
|  数値  |  Number  | 
|  Real4  |  Number  | 
|  Real8  |  Number  | 
|  UINT1  |  Number  | 
|  UINT2  |  Number  | 
|  UINT4  |  Number  | 
| UINT8 | Number | 
| CLOB | String | 

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

を使用して AWS DMS 、Amazon Kinesis データストリームにデータを移行できます。Amazon Kinesis Data Streams サービスは、Amazon Kinesis Data Streams サービスの一部です。データレコードの大量のストリームをリアルタイムで収集し、処理するには、Kinesis データストリームを使用します。

Kinesis データストリームはシャードで構成されています。*シャード*は、ストリーム内のデータレコードの一意に識別されたシーケンスです。Amazon Kinesis Data Streams におけるシャードの詳細については、*Amazon Kinesis Data Streams デベロッパーガイド*の「[シャード](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard)」をご参照ください。

AWS Database Migration Service は、JSON を使用してレコードを Kinesis データストリームに発行します。変換時に、 AWS DMS はソースデータベースから各レコードを JSON 形式または JSON\$1UNFORMATTED メッセージ形式の属性と値のペアにシリアル化します。JSON\$1UNFORMATTED メッセージ形式は、改行区切り文字を含む単一行の JSON 文字列です。これにより、Amazon Data Firehose は Amazon S3 の宛先に Kinesis データを配信し、Amazon Athena を含むさまざまなクエリ エンジンを使用してクエリを実行できます。

サポートされている任意のデータソースから、ターゲットストリームにデータを移行するために、オブジェクトのマッピングを使用します。オブジェクトマッピングを使用して、ストリームにデータレコードを構築する方法を決定します。データをそのシャードにグループ化するために Kinesis Data Streams で使用する、各テーブルのパーティション キーも定義します。

AWS DMS は、いくつかの Kinesis Data Streams パラメータ値も設定します。テーブル作成のコストは、データの量および移行するテーブルの数によって異なります。

**注記**  
 AWS DMS コンソールまたは API の **SSL モード**オプションは、一部のデータストリーミングや Kinesis や DynamoDB などの NoSQL サービスには適用されません。これらはデフォルトで安全であるため、SSL モードの設定が none (**SSL Mode=None**) と等しい AWS DMS ことを示しています。SSL を使用するために、エンドポイントに追加の設定は必要ありません。例えば、Kinesis をターゲット エンドポイントとして使用する場合、デフォルトでセキュリティで保護されます。Kinesis へのすべての API コールは SSL を使用するため、 AWS DMS エンドポイントに追加の SSL オプションは必要ありません。 AWS DMS が Kinesis Data Stream への接続時にデフォルトで使用する HTTPS プロトコルを使用して、SSL エンドポイント経由で安全にデータを保存して取得できます。

**Kinesis Data Streams エンドポイント設定**

Kinesis Data Streams ターゲットエンドポイントを使用する場合、 AWS DMS API の `KinesisSettings`オプションを使用してトランザクションとコントロールの詳細を取得できます。

接続は、次のいずれかの方法で設定できます。
+  AWS DMS コンソールで、エンドポイント設定を使用します。
+ CLI では、[CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html) コマンド の`kinesis-settings` オプションを使用します。

CLI で、次の `kinesis-settings` オプションのリクエストパラメータを使用します。
**注記**  
 AWS DMS バージョン 3.4.1 以降では、`IncludeNullAndEmpty` エンドポイント設定に対応しています。ただし、Kinesis Data Streams ターゲットのその他のエンドポイント設定は でサポートされています AWS DMS。
+ `MessageFormat` - エンドポイントで作成されたレコードの出力形式。メッセージ形式は `JSON` (デフォルト) または `JSON_UNFORMATTED` (タブなし 1 行) です。
+ `IncludeControlDetails` - Kinesis メッセージ出力に、テーブル定義、列定義、テーブル、列の変更の詳細な制御情報を表示します。デフォルトは `false` です。
+ `IncludeNullAndEmpty` — ターゲットに NULL 列と空の列を含めます。デフォルトは `false` です。
+ `IncludePartitionValue` – パーティションタイプが `schema-table-type` でない限り、Kinesis メッセージ出力内のパーティション値を表示します。デフォルトは `false` です。
+ `IncludeTableAlterOperations` – `rename-table`、`drop-table`、`add-column`、`drop-column`、`rename-column` など、制御データのテーブルを変更するデータ定義言語 (DDL) オペレーションが含まれます。デフォルトは `false` です。
+ `IncludeTransactionDetails` - ソースデータベースからの詳細のトランザクション情報を提供します。この情報には、コミットタイムスタンプ、ログの位置、`transaction_id`、`previous_transaction_id`、および `transaction_record_id ` (トランザクション内のレコードオフセット) の値が含まれます。デフォルトは `false` です。
+ `PartitionIncludeSchemaTable` パーティションタイプが `primary-key-type` の場合、スキーマとテーブル名をパーティション値にプレフィックスします。これにより、Kinesis シャード間のデータ分散が増加します。例えば、`SysBench` スキーマに数千のテーブルがあり、各テーブルのプライマリ キーの範囲が制限されているとします。この場合、同じプライマリキーが数千のテーブルから同じシャードに送信され、スロットリングが発生します。デフォルトは `false` です。
+ `UseLargeIntegerValue` - AWS DMS バージョン 3.5.4 で利用可能な倍精度のインスタンスをキャストする代わりに、最大 18 桁の整数を使用します。デフォルトは False です。

次の例で、 AWS CLIを使用して発行された例 `create-endpoint`コマンドを使用中の `kinesis-settings` オプションを示します。

```
aws dms \
  create-endpoint \
    --region <aws-region> \
    --endpoint-identifier <user-endpoint-identifier> \
    --endpoint-type target \
    --engine-name kinesis \
    --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::<account-id>:role/<kinesis-role-name>,StreamArn=arn:aws:kinesis:<aws-region>:<account-id>:stream/<stream-name>,MessageFormat=json-unformatted,
IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true,
IncludeTableAlterOperations=true
```

**マルチスレッド全ロードタスク設定**

転送速度を上げるために、 は Kinesis Data Streams ターゲットインスタンスへのマルチスレッド全ロード AWS DMS をサポートします。DMS では、このマルチスレッドでのタスク設定を、以下でサポートします。
+ `MaxFullLoadSubTasks` - 並列ロードするソーステーブルの最大数を指定するにはこのオプションを使用します。DMS は、専用のサブタスクを使用して、対応する Kinesis ターゲットテーブルに各テーブルをロードします。デフォルトは 8、最大値は 49 です。
+ `ParallelLoadThreads` – このオプションを使用して、 AWS DMS が各テーブルを Kinesis ターゲットテーブルにロードするために使用するスレッドの数を指定します。Kinesis Data Streams ターゲットの最大値は 32 です。この上限を増やすよう依頼できます。
+ `ParallelLoadBufferSize` – Kinesis ターゲットにデータをロードするために並列ロードスレッドが使用する、バッファ内に保存するレコードの最大数を指定するには、このオプションを使用します。デフォルト値は 50 です。最大値は 1000 です。この設定は `ParallelLoadThreads` で使用します。`ParallelLoadBufferSize` は、複数のスレッドがある場合にのみ有効です。
+ `ParallelLoadQueuesPerThread` - このオプションを使用して、各同時スレッドがキューからデータレコードを取り出し、ターゲットのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルトは 1 です。ただし、さまざまなペイロードサイズの Kinesis ターゲットの場合、有効な範囲は 1 スレッドあたり 5 ～ 512 キューです。

**マルチスレッド CDC ロードタスクの設定**

タスク設定を使用して `PutRecords` API コールの動作を変更するなど、Kinesis などのリアルタイム データストリーミング ターゲット エンドポイントの変更データキャプチャ (CDC) のパフォーマンスを向上させることができます。これを行うには、`ParallelApply*` タスク設定を使用して、同時スレッドの数、スレッドあたりのキュー数、バッファに格納するレコード数を指定します。例えば、CDC ロードを実行し、128 本のスレッドを並列に適用するとします。また、スレッドあたり 64 個のキューにアクセスして、バッファあたり 50 個のレコードを保存する必要があります。

CDC パフォーマンスを向上させるために、 は次のタスク設定 AWS DMS をサポートしています。
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを Kinesis ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。
+ `ParallelApplyBufferSize` – CDC ロード中に同時スレッドが Kinesis ターゲット エンドポイントにプッシュする場合に、各バッファキューに保存するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、`ParallelApplyThreads` で複数のスレッドを指定する場合に使用します。
+ `ParallelApplyQueuesPerThread` – 各スレッドがキューからデータレコードを取り出し、CDC 中に Kinesis エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルト値は 1、最大値は 512 です。

`ParallelApply*` タスク設定を使用する場合、`partition-key-type` のデフォルトは `schema-name.table-name` ではなくテーブルの `primary-key` です。

## 前イメージを使用した Kinesis データストリームの CDC 行の元の値のターゲットとしての表示
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Kinesis のようなデータストリーミングターゲットに CDC 更新を書き込む場合、更新によって変更される前に、ソースデータベースの行の元の値を表示できます。これを可能にするために、 はソースデータベースエンジンによって提供されたデータに基づいて、更新イベントの*前のイメージ* AWS DMS を入力します。

ソースデータベースエンジンによって、前イメージに対してさまざまな量の情報が提供されます。
+ Oracle では、列が変更された場合にのみ列の更新が提供されます。
+ PostgreSQL は、プライマリキーの一部である列のデータ (変更されたかどうか) のみを提供します。すべての列に (変更の有無を問わず) データを提供するには、`REPLICA_IDENTITY` を `DEFAULT`でなく `FULL` に設定する必要があります。各テーブルを `REPLICA_IDENTITY` に設定する際は、慎重に行うべきであることに注意します。`REPLICA_IDENTITY` を `FULL` に設定すると、すべての列値がログ先行書き込み (WAL) に継続的に書き込まれます。これにより、頻繁に更新されるテーブルではパフォーマンスやリソースの問題が発生する可能性があります。
+ MySQL は通常、BLOB および CLOB データ型を除くすべての列のデータを (変更の有無を問わず) 提供します。

前イメージを有効にして、ソースデータベースから元の値を AWS DMS 出力に追加するには、`BeforeImageSettings` タスク設定または `add-before-image-columns` パラメータを使用します。このパラメータは、列変換ルールを適用します。

`BeforeImageSettings` は、次に示すように、ソースデータベースシステムから収集された値を使用して、すべての更新オペレーションに新しい JSON 属性を追加します。

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**注記**  
全ロードと CDC `BeforeImageSettings` AWS DMS タスク (既存のデータを移行して進行中の変更をレプリケートする) などの CDC コンポーネントを含むタスク、または CDC のみのタスク (データ変更のみをレプリケートする) にのみ適用されます。全ロードのタスクには `BeforeImageSettings` を適用しないでください。

`BeforeImageSettings` オプションには、次の項目が適用されます。
+ `EnableBeforeImage` オプションを `true` に設定して、前イメージを有効にします。デフォルトは `false` です。
+ `FieldName` オプションを使用して、新しい JSON 属性に名前を割り当てます。`EnableBeforeImage` が `true` の場合、`FieldName` は必須であり、空にすることはできません。
+ `ColumnFilter` オプションは、前イメージを使用して追加する列を指定します。テーブルのプライマリキーの一部である列だけを追加するには、デフォルト値 `pk-only` を使用します。前イメージ値を持つ列を追加するには、`all` を使用します。変更前イメージには、CLOB や BLOB などの LOB データ型の列が含まれていないことに注意します。

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

**注記**  
Amazon S3 ターゲットは `BeforeImageSettings` をサポートしていません。S3 ターゲットの場合、CDC 中に前イメージを実行するには `add-before-image-columns` 変換ルールのみを使用します。

### 前イメージ変換ルールの使用
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

タスク設定の代わりに、列変換ルールを適用する `add-before-image-columns` パラメータを使用できます。このパラメータを使用すると、Kinesis のようなデータストリーミングターゲットで CDC 中に前イメージを有効にできます。

変換ルールで `add-before-image-columns` を使用すると、前イメージの結果のよりきめ細かい制御を適用することができます。変換ルールを使用すると、オブジェクトロケーターを使用し、ルールに選択したテーブルを制御できます。また、変換ルールを連結することもできます。これにより、テーブルごとに異なるルールを適用できます。その後、他のルールを使用して生成された列を操作できます。

**注記**  
同じタスク内で、`add-before-image-columns` パラメータと同時に `BeforeImageSettings` タスク設定を使用しないでください。代わりに、1 つのタスクにこのパラメータとこの設定のいずれかを使用し、両方を使用しないでください。

列の `add-before-image-columns` パラメータを持つ `transformation` ルールタイプは、`before-image-def` セクションを提供する必要があります。例を以下に示します。

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

`column-prefix` の値は列名の前に付加され、`column-prefix` のデフォルト値は `BI_` です。`column-suffix` の値は列名に追加され、デフォルトは空です。`column-prefix` と `column-suffix` の両方を空の文字列に設定しないでください。

`column-filter` の値を 1 つ選択します。テーブルのプライマリキーの一部である列だけを追加するには、`pk-only` を選択します。LOB タイプではない列のみを追加するように `non-lob` を選択します。または、前イメージの値を持つ任意の列を追加するように `all` を選択します。

### 前イメージ変換前ルールの例
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

次の例の変換ルールは、ターゲットに `BI_emp_no` という新しい列を追加します。したがって、`UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` のようなステートメントは、`BI_emp_no` フィールドに 1 を設定します。CDC 更新を Amazon S3 ターゲットに書き込むと、更新された元の行は `BI_emp_no` 列からわかります。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

`add-before-image-columns` ルールアクションの使用方法については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」をご参照ください。

## のターゲットとして Kinesis データストリームを使用するための前提条件 AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### のターゲットとして Kinesis データストリームを使用するための IAM ロール AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Kinesis データストリームを のターゲットとして設定する前に AWS DMS、必ず IAM ロールを作成してください。このロールでは AWS DMS 、移行先の Kinesis データストリームへのアクセスを が引き受けて許可する必要があります。アクセス許可の最小設定は、次の IAM ポリシーで示します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
     "Sid": "1",
     "Effect": "Allow",
     "Principal": {
        "Service": "dms.amazonaws.com"
     },
   "Action": "sts:AssumeRole"
   }
]
}
```

------

Kinesis データストリームに移行する際に使用するロールには、次のアクセス許可が必要です。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:PutRecord",
        "kinesis:PutRecords"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### のターゲットとしての Kinesis データストリームへのアクセス AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

 AWS DMS バージョン 3.4.7 以降では、Kinesis エンドポイントに接続するには、次のいずれかを実行する必要があります。
+ VPC エンドポイントを使用するように DMS を設定します。VPC エンドポイントを使用するように DMS を設定する方法については、「[の VPC エンドポイントの設定 AWS DMS](CHAP_VPC_Endpoints.md)」を参照してください。
+ パブリックルートを使用するように DMS を設定します。つまり、レプリケーションインスタンスをパブリックにします。パブリックレプリケーションインスタンスの詳細については、「[パブリックおよびプライベートレプリケーション インスタンス](CHAP_ReplicationInstance.PublicPrivate.md)」を参照してください。

## のターゲットとして Kinesis Data Streams を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

ターゲットとして Kinesis Data Streams を使用する場合、以下の制限が適用されます。
+ AWS DMS は、トランザクションに関係なく、各更新を特定の Kinesis データストリーム内の 1 つのデータレコードとしてソースデータベース内の 1 つのレコードに発行します。ただし、`KinesisSettings` API の関連パラメータを使用して、各データレコードのトランザクションの詳細を含めることができます。
+ 完全 LOB モードはサポートされていません。
+ サポートされる最大 LOB サイズは 1 MB です。
+ Kinesis Data Streamsは、重複排除をサポートしていません。ストリームからデータを消費するアプリケーションは、重複したレコードを処理する必要があります。詳細については、*Amazon Kinesis Data Streams デベロッパーガイド*の「[重複レコードの処理](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html)」をご参照ください。
+ AWS DMS では、パーティションキーに次の 4 つのフォームがサポートされています。
  + `SchemaName.TableName`: スキーマとテーブル名の組み合わせ。
  + `${AttributeName}`: JSON のいずれかのフィールドの値、またはソースデータベースのテーブルのプライマリキー。
  + `transaction-id`: CDC トランザクション ID。同じトランザクション内のすべてのレコードは、同じパーティションに移動します。
  + `constant`: テーブルやデータに関係なく、すべてのレコードの固定リテラル値。すべてのレコードは同じパーティションキー値「定数」に送信され、すべてのテーブルで厳密なグローバル順序が提供されます。

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "PartitionKeyTypeExample",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ Kinesis Data Streams 内の保管中のデータの暗号化の詳細については、*AWS Key Management Service デベロッパーガイド*の「[Kinesis Data Streams でのデータ保護](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html)」をご参照ください。
+ `IncludeTransactionDetails` エンドポイント設定は、ソースエンドポイントが Oracle、SQL Server、PostgreSQL、または MySQL の場合にのみサポートされます。他のソースエンドポイントタイプでは、トランザクションの詳細は含まれません。
+ `BatchApply`は Kinesis エンドポイントではサポートされていません。Kinesis ターゲットにバッチ 適用を使用 (例えば、`BatchApplyEnabled` ターゲットメタデータタスク設定) すると、タスク失敗やデータ損失が発生する可能性があります。Kinesisをターゲットエンドポイントとして使用する場合、`BatchApply` を有効にしないでください。
+ Kinesis ターゲットは、レプリケーションインスタンスと同じ AWS AWS リージョン アカウントの Kinesis データストリームでのみサポートされます。
+ MySQL ソースから移行する場合、BeforeImage データには CLOB データ型と BLOB データ型は含まれません。詳細については、「[前イメージを使用した Kinesis データストリームの CDC 行の元の値のターゲットとしての表示](#CHAP_Target.Kinesis.BeforeImage)」を参照してください。
+ AWS DMS は、16 桁を超える`BigInt`データ型の値の移行をサポートしていません。この制限を回避するには、次の変換ルールを使用して `BigInt` 列を文字列に変換できます。変換ルールの詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ 1 つのトランザクション内の複数の DML オペレーションが、ソースデータベースのラージオブジェクト (LOB) 列を変更すると、ターゲットデータベースは、対象トランザクションの最後のオペレーションにおける最終的な LOB 値のみを保持します。同じトランザクションの以前のオペレーションで設定された中間 LOB 値は上書きされるため、データの損失や不整合が発生する可能性があります。この動作は、レプリケーション中の LOB データの処理方法が原因で発生します。
+ AWS DMS Kinesis をターゲットエンドポイントとして使用する場合、 は埋め込み`'\0'`文字を含むソースデータをサポートしていません。埋め込み`'\0'`文字を含むデータは、最初の`'\0'`文字で切り捨てられます。

## Kinesis データストリームにデータを移行するためのオブジェクトマッピングの使用
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS はテーブルマッピングルールを使用して、ソースからターゲット Kinesis データストリームにデータをマッピングします。ターゲットストリームにデータをマッピングするために、オブジェクトマッピングと呼ばれるテーブルマッピングルールのタイプを使用します。オブジェクトマッピングを使用して、ソースのデータレコードがどのように Kinesis データストリームに発行されたデータレコードにマッピングされるかを定義します。

Kinesis データストリームには、パーティション　キー以外にプリセット構造はありません。オブジェクトマッピングルールでは、データレコードの `partition-key-type` に指定できる値は、`schema-table`、`transaction-id`、`primary-key`、`constant`、`attribute-name` です。

オブジェクトマッピングルールを作成するには、`object-mapping` として `rule-type` を指定します。このルールが、使用したいオブジェクトマッピングのタイプを指定します。

ルールの構造は次のとおりです。

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS は現在、 `rule-action`パラメータの唯一の有効な値`map-record-to-document`として `map-record-to-record`と をサポートしています。これらの設定は、`exclude-columns` 属性リストの一部として除外されない値に影響します。`map-record-to-record` および `map-record-to-document`値は、デフォルトで がこれらのレコード AWS DMS を処理する方法を指定します。これらの値は、どのような方法でも属性マッピングに影響しません。

リレーショナルデータベースから Kinesis データストリームに移行する際に `map-record-to-record` を使用します。このルールタイプでは、Kinesis データストリームのパーティション キーとしてリレーショナルデータベースから `taskResourceId.schemaName.tableName` 値を使用し、ソースデータベース内の各列の属性を作成します。

`map-record-to-record` を使用する場合は、次の点に注意します。
+ この設定は、`exclude-columns` リストで除外されている列にのみ影響します。
+ このような列ごとに、 はターゲットトピックで対応する属性 AWS DMS を作成します。
+ AWS DMS は、ソース列が属性マッピングで使用されているかどうかに関係なく、この対応する属性を作成します。

`map-record-to-document` を使用して、属性名「\$1doc」を使用しソース列を適切なターゲットストリーム内の単一のフラットドキュメントに配置します。 AWS DMS 说「`_doc`」という名前のソースで 1 つのフラットマップにデータを配置します。この配置は、`exclude-columns` 属性リストに含まれていないソーステーブル内のすべての列に適用されます。

`map-record-to-record` を理解するための 1 つの方法は、実際の動作を確認することです。この例では、次の構造とデータを含むリレーショナルデータベースのテーブルの行から始めると想定してください。


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

この情報を `Test` という名前のスキーマから Kinesis データストリームに移行するには、データをターゲットストリームにマッピングするルールを作成します。以下のルールはマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKinesis",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

次は、Kinesis データストリームの結果のレコード形式を示しています：
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaName.tableName
+ データ: //次の JSON メッセージ

  ```
    {
       "FirstName": "Randy",
       "LastName": "Marsh",
       "StoreId":  "5",
       "HomeAddress": "221B Baker Street",
       "HomePhone": "1234567890",
       "WorkAddress": "31 Spooner Street, Quahog",
       "WorkPhone": "9876543210",
       "DateOfBirth": "02/29/1988"
    }
  ```

ただし、同じルールを使用しますが、`rule-action` パラメータを `map-record-to-document` に変更して特定の列を除外します。以下のルールはマッピングを示しています。

```
{
	"rules": [
	   {
			"rule-type": "selection",
			"rule-id": "1",
			"rule-name": "1",
			"rule-action": "include",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "%"
			}
		},
		{
			"rule-type": "object-mapping",
			"rule-id": "2",
			"rule-name": "DefaultMapToKinesis",
			"rule-action": "map-record-to-document",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "Customers"
			},
			"mapping-parameters": {
				"exclude-columns": [
					"homeaddress",
					"homephone",
					"workaddress",
					"workphone"
				]
			}
		}
	]
}
```

この場合、`exclude-columns` パラメータ、`FirstName`、`LastName`、`StoreId`、`DateOfBirth` は `_doc` にマッピングされます。次は、この結果のレコード形式を示しています。

```
       {
            "data":{
                "_doc":{
                    "FirstName": "Randy",
                    "LastName": "Marsh",
                    "StoreId":  "5",
                    "DateOfBirth": "02/29/1988"
                }
            }
        }
```

### 属性マッピングを使用したデータの再構築
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

属性マップを使用してデータを Kinesis データストリームに移行している間にデータを再構築できます。例えば、ソース内の複数のフィールドを結合してターゲット内に 1 つのフィールドを構成することもできます。以下の属性マップはデータを再構築する方法を示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

の定数値を設定するには`partition-key`、 を指定します。これにより`"partition-key-type: "constant"`、パーティション値が に設定されます`constant`。たとえば、すべてのデータを 1 つのシャードに強制的に格納するためにこれを行うことができます。以下のマッピングはこの方法を示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"

                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "target-attribute-name": "DateOfBirth",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**注記**  
特定のテーブル用のコントロールレコードの `partition-key` 値は、`TaskId.SchemaName.TableName` です。特定のタスク用のコントロールレコードの `partition-key` 値は、そのレコードの `TaskId` です。オブジェクトマッピングの `partition-key` 値を指定することは、コントロールレコードの `partition-key` には影響しません。  
 テーブルマッピングルール`attribute-name`で `partition-key-type`が に設定されている場合、 を指定する必要があります。これは`partition-key-name`、ソーステーブルの列またはマッピングで定義されたカスタム列を参照する必要があります。さらに、ソース列がターゲット Kinesis Stream にどのようにマッピングされるかを定義するには、 を指定`attribute-mappings`する必要があります。

### Kinesis Data Streams のメッセージ形式
<a name="CHAP_Target.Kinesis.Messageformat"></a>

JSON 出力は、単にキーと値のペアのリストです。JSON\$1UNFORMATTED メッセージ形式は、改行区切り文字を含む単一行の JSON 文字列です。

AWS DMS には、Kinesis Data Streams からのデータを簡単に消費できるように、次の予約済みフィールドが用意されています。

**RecordType**  
レコードタイプはデータまたはコントロールのいずれかです。*データレコード*は、ソースの実際の行を表します。*コントロールレコード*は、タスクの再起動など、ストリーム内の重要なイベント用です。

**運用**  
データレコードの場合、オペレーションは `load`、`insert`、`update`、または `delete` です。  
コントロールレコードの場合、オペレーションは `create-table`、`rename-table`、`drop-table`、`change-columns`、`add-column`、`drop-column`、`rename-column`、`column-type-change` です。

**SchemaName**  
レコードのソーススキーマ。コントロールレコードの場合、このフィールドは空です。

**TableName**  
レコードのソーステーブル。コントロールレコードの場合、このフィールドは空です。

**タイムスタンプ**  
JSON メッセージが構築された時刻のタイムスタンプ。このフィールドは ISO 8601 形式でフォーマットされます。

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

を使用して AWS DMS 、Apache Kafka クラスターにデータを移行できます。Apache Kafka は分散ストリーミング プラットフォームです。Apache Kafka を使用すると、ストリーミング　データをリアルタイムで取り込み、処理できます。

AWS は、 AWS DMS ターゲットとして使用する Amazon Managed Streaming for Apache Kafka (Amazon MSK) も提供します。Amazon MSK は、Apache Kafka インスタンスの実装と管理を簡素化する、フルマネージド型 Apache Kafka ストリーミング サービスです。オープンソースの Apache Kafka バージョンで動作し、Apache Kafka インスタンスとまったく同じ AWS DMS ターゲットとして Amazon MSK インスタンスにアクセスします。詳細については、*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*の「[Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)」をご参照ください。

Kafka クラスターは、パーティションに分割されたトピックと呼ばれるカテゴリにレコードのストリームを保存します。*パーティション*は、トピック内のデータレコード (メッセージ) の一意に識別されたシーケンスです。パーティションは、トピックレコードの並列処理を可能にするために、クラスター内の複数のブローカーに分散することができます。トピックとパーティション、および Apache Kafka での分散の詳細については、「[トピックとログ](https://kafka.apache.org/documentation/#intro_topics)」と「[分散](https://kafka.apache.org/documentation/#intro_distribution)」をご参照ください。

Kafka クラスターは、Amazon MSK インスタンス、Amazon EC2 インスタンス上で実行されるクラスター、またはオンプレミスのクラスターのいずれかです。Amazon MSK インスタンスまたは Amazon EC2 インスタンス上のクラスターは、同じ VPC 内にも、別の VPC 内にも配置できます。クラスターがオンプレミスの場合は、レプリケーションインスタンスに独自のオンプレミスのネーム サーバーを使用して、クラスターのホスト名を解決できます。レプリケーションインスタンスのネームサーバーのセットアップについては、「[独自のオンプレミスネームサーバーの使用](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver)」を参照してください。ネットワークの設定の詳細については、「[レプリケーション インスタンスのためのネットワークのセットアップ](CHAP_ReplicationInstance.VPC.md)」を参照してください。

Amazon MSK クラスターを使用する場合、セキュリティグループがレプリケーションインスタンスからのアクセスを許可していることを確認します。Amazon MSK クラスターのセキュリティグループの変更については、「[Amazon MSK クラスターのセキュリティグループの変更](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html)」を参照してください。

AWS Database Migration Service は、JSON を使用して Kafka トピックにレコードを発行します。変換時、 AWS DMS はソースデータベースからの各レコードを JSON フォーマットの属性と値のペアにシリアル化します。

サポートされている任意のデータソースから、ターゲット Kafka クラスターにデータを移行するために、オブジェクトのマッピングを使用します。オブジェクトマッピングを使用して、ターゲットトピックにデータ レコードを構築する方法を決定します。データをそのパーティションにグループ化するために Apache Kafka で使用する、各テーブルのパーティションキーも定義します。

現在、 はタスクごとに 1 つのトピック AWS DMS をサポートしています。単一のタスクに複数のテーブルがある場合、すべてのメッセージが単一のトピックに送信されます。各メッセージには、ターゲットスキーマと table. AWS DMS versions 3.4.6 以降を識別するメタデータセクションが含まれており、オブジェクトマッピングを使用したマルチトピックレプリケーションをサポートしています。詳細については、「[オブジェクトマッピングを使用したマルチトピックレプリケーション](#CHAP_Target.Kafka.MultiTopic)」を参照してください。

**Apache Kafka のエンドポイント設定**

 AWS DMS コンソールのエンドポイント設定、または CLI の `--kafka-settings`オプションを使用して、接続の詳細を指定できます。各設定の要件は次のとおりです。
+ `Broker` — Kafka クラスター内の 1 つ以上のブローカーの場所を、`broker-hostname:port` のカンマ区切りリストの形式で指定します。例: `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`。この設定では、クラスター内の任意またはすべてのブローカーのロケーションを指定できます。クラスターブローカーはすべて、トピックに移行されたデータレコードのパーティション化を処理するために通信します。
+ `Topic` - (オプション) 最大 255 文字および記号のトピック名を指定します。ピリオド (.)、アンダースコア (\$1)、マイナス (-) を使用できます。ピリオド (.) またはアンダースコア (\$1) があるトピック名は、内部データ構造内で衝突する可能性があります。トピック名には、どちらか一方を使用し、両方とも使用することは避けてください。トピック名を指定しない場合、 AWS DMS を移行トピック`"kafka-default-topic"`として使用します。
**注記**  
で指定した移行トピックまたはデフォルトのトピック AWS DMS を作成するには、Kafka クラスター設定`auto.create.topics.enable = true`の一部として を設定します。詳細については、[のターゲットとして Apache Kafka を使用する場合の制限 AWS Database Migration Service](#CHAP_Target.Kafka.Limitations)を参照してください。
+ `MessageFormat` - エンドポイントで作成されたレコードの出力形式。メッセージ形式は `JSON` (デフォルト) または `JSON_UNFORMATTED` (タブなし 1 行) です。
+ `MessageMaxBytes` — エンドポイントで作成されたレコードの最大サイズ (バイト単位)。デフォルトは 1,000,000 です。
**注記**  
CLI/SDK AWS のみを使用して、デフォルト以外の値`MessageMaxBytes`に変更できます。例えば、既存の Kafka エンドポイントを変更して `MessageMaxBytes` を変更するには、以下のコマンドを使用します。  

  ```
  aws dms modify-endpoint --endpoint-arn your-endpoint 
  --kafka-settings Broker="broker1-server:broker1-port,broker2-server:broker2-port,...",
  Topic=topic-name,MessageMaxBytes=integer-of-max-message-size-in-bytes
  ```
+ `IncludeTransactionDetails` - ソースデータベースからの詳細のトランザクション情報を提供します。この情報には、コミットタイムスタンプ、ログの位置、`transaction_id`、`previous_transaction_id`、および `transaction_record_id` (トランザクション内のレコードオフセット) の値が含まれます。デフォルトは `false` です。
+ `IncludePartitionValue` パーティションタイプが でない限り、Kafka メッセージ出力内のパーティション値を表示します。`schema-table-type`デフォルトは `false` です。
+ `PartitionIncludeSchemaTable` パーティションタイプが `primary-key-type` の場合、スキーマとテーブル名をパーティション値にプレフィックスします。これにより、Kafka パーティション間のデータ分散が増加します。例えば、`SysBench` スキーマに数千のテーブルがあり、各テーブルのプライマリ キーの範囲が制限されているとします。この場合、同じプライマリキーが数千のテーブルから同じパーティションに送信され、スロットリングが発生します。デフォルトは `false` です。
+ `IncludeTableAlterOperations` – `rename-table`、`drop-table`、`add-column`、`drop-column`、`rename-column` など、制御データのテーブルを変更するデータ定義言語 (DDL) オペレーションが含まれます。デフォルトは `false` です。
+ `IncludeControlDetails` - Kafka メッセージ出力に、テーブル定義、列定義、テーブルおよび列の変更の詳細な制御情報を表示します。デフォルトは `false` です。
+ `IncludeNullAndEmpty` — ターゲットに NULL 列と空の列を含めます。デフォルトは `false` です。
+ `SecurityProtocol` — Transport Layer Security (TLS) を使用して Kafka ターゲット エンドポイントへの安全な接続を設定します。オプションには `ssl-authentication`、`ssl-encryption`、および `sasl-ssl` があります。`sasl-ssl` を使用して `SaslUsername` と `SaslPassword` を要求します。
+ `SslEndpointIdentificationAlgorithm` - 証明書のホスト名検証を設定します。この設定は、 AWS DMS バージョン 3.5.1 以降でサポートされています。オプションは以下のとおりです。
  + `NONE`: クライアント接続でブローカーのホスト名検証を無効にします。
  + `HTTPS`: クライアント接続でブローカーのホスト名検証を有効にします。
+ `useLargeIntegerValue` - AWS DMS バージョン 3.5.4 で利用可能な倍精度で入力をキャストする代わりに、最大 18 桁の整数を使用します。デフォルトは False です。

設定を使用すると、転送速度を上げることができます。これを行うために、 AWS DMS は Apache Kafka ターゲット　クラスターへのマルチスレッド全ロードをサポートしています。 AWS DMS は、次のようなタスク設定を使用して、このマルチスレッドをサポートします：
+ `MaxFullLoadSubTasks` – このオプションを使用して、並列でロードするソーステーブルの最大数を指定します。 は、専用サブタスクを使用して、各テーブルを対応する Kafka ターゲットテーブルに AWS DMS ロードします。デフォルトは 8、最大値は 49 です。
+ `ParallelLoadThreads` – このオプションを使用して、 AWS DMS が各テーブルを Kafka ターゲットテーブルにロードするために使用するスレッドの数を指定します。Apache Kafka ターゲットの最大値は 32 です。この上限を増やすよう依頼できます。
+ `ParallelLoadBufferSize` - Kafka ターゲットにデータをロードするために並列ロードスレッドが使用する、バッファ内に保存するレコードの最大数を指定するには、このオプションを使用します。デフォルト値は 50 です。最大値は 1000 です。この設定は `ParallelLoadThreads` で使用します。`ParallelLoadBufferSize` は、複数のスレッドがある場合にのみ有効です。
+ `ParallelLoadQueuesPerThread` - このオプションを使用して、各同時スレッドがキューからデータレコードを取り出し、ターゲットのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルトは 1 です。最大数は 512。

Kafka エンドポイントの変更データキャプチャ (CDC) のパフォーマンスを向上するには、並列スレッドと一括オペレーションのタスク設定を調整します。これを行うには、`ParallelApply*` タスク設定を使用して、同時スレッドの数、スレッドあたりのキュー数、バッファに格納するレコード数を指定します。例えば、CDC ロードを実行し、128 本のスレッドを並列に適用するとします。また、スレッドあたり 64 個のキューにアクセスして、バッファあたり 50 個のレコードを保存する必要があります。

CDC パフォーマンスを向上させるために、 は次のタスク設定 AWS DMS をサポートしています。
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを Kafka ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。
+ `ParallelApplyBufferSize` - CDC ロード中に同時スレッドが Kafka ターゲット エンドポイントにプッシュする場合に、各バッファキューに保存するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、`ParallelApplyThreads` で複数のスレッドを指定する場合に使用します。
+ `ParallelApplyQueuesPerThread` - 各スレッドがキューからデータレコードを取り出し、CDC 中に Kafka エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルトは 1 です。最大数は 512。

`ParallelApply*` タスク設定を使用する場合、`partition-key-type` のデフォルトは `schema-name.table-name` ではなくテーブルの `primary-key` です。

## Transport Layer Security (TLS) を使用した Kafka への接続
<a name="CHAP_Target.Kafka.TLS"></a>

このクラスターは Transport Layer Security (TLS) を使用した安全な接続のみを受け入れます。DMS では、次の 3 つのセキュリティプロトコルオプションのいずれかを使用して、Kafka エンドポイント接続をセキュリティで保護できます。

**SSL 暗号化 (`server-encryption`)**  
クライアントは、サーバーの証明書を使用してサーバー ID を検証します。次に、サーバーとクライアント間で暗号化された接続が確立されます。

**SSL 認証 (`mutual-authentication`)**  
サーバーとクライアントは、独自の証明書を使用して ID を相互に検証します。次に、サーバーとクライアント間で暗号化された接続が確立されます。

**SASL-SSL (`mutual-authentication`)**  
簡易認証およびセキュリティ レイヤー (SASL) メソッドは、クライアントの証明書をユーザー名とパスワードに置き換えて、クライアント ID を検証します。具体的には、サーバーがクライアントの ID を検証できるように、サーバーが登録したユーザー名とパスワードを指定します。次に、サーバーとクライアント間で暗号化された接続が確立されます。

**重要**  
Apache Kafka と Amazon MSK は解決済みの証明書を受け入れます。これは、Kafka と Amazon MSK が対処すべき既知の制限です。詳細については、「[Apache Kafka の問題、KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700)」をご参照ください。  
Amazon MSK を使用している場合は、この既知の制限の回避策としてアクセスコントロールリスト (ACL) を使用することを検討してください。ACL の使用の詳細については、*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*の [Apache Kafka ACL](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) セクションをご参照ください。  
自己管理 Kafka クラスターを使用している場合クラスターの設定の詳細については、「[2018/10/21日付のコメント](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376)」をご参照ください。

### Amazon MSK または自己管理 Kafka クラスターでの SSL 暗号化の使用
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

SSL 暗号化を使用して、Amazon MSK または自己管理 Kafka クラスターへのエンドポイント接続をセキュリティで保護できます。SSL 暗号化認証方法を使用する場合、クライアントはサーバーの証明書を使用してサーバーの ID を検証します。次に、サーバーとクライアント間で暗号化された接続が確立されます。

**SSL 暗号化を使用して Amazon MSK に接続するには**
+ ターゲットの Kafka エンドポイントを作成するとき、`ssl-encryption` オプションを使うセキュリティ プロトコル エンドポイントの設定 (`SecurityProtocol`) を行います。

  次の JSON 例では、セキュリティプロトコルを SSL 暗号化として設定しています。

```
"KafkaSettings": {
    "SecurityProtocol": "ssl-encryption", 
}
```

**自己管理 Kafka クラスターに SSL 暗号化を使用するには**

1. オンプレミス Kafka クラスターでPrivate Certificate Authority (CA) を使用している場合は、プライベート CA 証明書をアップロードして Amazon リソースネーム (ARN) を取得します。

1. ターゲットの Kafka エンドポイントを作成するとき、`ssl-encryption` オプションを使うセキュリティ プロトコル エンドポイントの設定 (`SecurityProtocol`) を行います。次の JSON の例では、セキュリティプロトコルを `ssl-encryption` として設定します。

   ```
   "KafkaSettings": {
       "SecurityProtocol": "ssl-encryption", 
   }
   ```

1. プライベート CA を使用している場合は、上記の最初のステップで取得した ARN に `SslCaCertificateArn` を設定します。

### SSL 認証の使用
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

SSL 認証を使用して、Amazon MSK または自己管理 Kafka クラスターへのエンドポイント接続をセキュリティで保護できます。

SSL 認証を使用したクライアント認証と暗号化を有効にして Amazon MSK に接続するには、次の手順を実行します：
+ Kafka の秘密キーと公開証明書を準備します。
+ 証明書を DMS Certificate Manager にアップロードします。
+ Kafka エンドポイント設定で指定された、対応する証明書 ARN を使用して Kafka ターゲットエンドポイントを作成します。

**Amazon MSK の秘密キーと公開証明書を準備するには**

1. EC2 インスタンスを作成し、*Amazon Managed Streaming for Apache Kafka 開発者ガイド*の[クライアント認証](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)セクションにあるステップ 1 ～ 9 の説明に従って、認証を使用するようにクライアントをセットアップします。

   これらの手順を完了したら、Certificate-ARN（ACM に保存された公開証明書 ARN）と、 `kafka.client.keystore.jks` ファイル内のプライベートキーができます。

1. 公開証明書を取得し、次のコマンドを使用し証明書を `signed-certificate-from-acm.pem` ファイルにコピーします：

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private_CA_ARN --certificate-arn Certificate_ARN
   ```

   コマンドは以下のような情報を返します：

   ```
   {"Certificate": "123", "CertificateChain": "456"}
   ```

   次に、`"123"` に同等のものを `signed-certificate-from-acm.pem` ファイルにコピーします。

1. 次の例に示すように,`msk-rsa` キーを `kafka.client.keystore.jks to keystore.p12` からインポートしてプライベートキーを取得します:

   ```
   keytool -importkeystore \
   -srckeystore kafka.client.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias msk-rsa-client \
   -deststorepass test1234 \
   -destkeypass test1234
   ```

1. 次のコマンドを使用して`keystore.p12` を `.pem` の形式にエクスポートします。

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-client-key.pem –nocerts
   ```

   **[Enter PEM pass phrase]**(PEM パスフレーズを入力してください) メッセージが表示され、証明書の暗号化に適用されるキーを識別します。

1. バッグ属性とキー属性を `.pem` ファイルから削除し、最初の行が次の文字列でスタートしていることを確認します。

   ```
                                   ---BEGIN ENCRYPTED PRIVATE KEY---
   ```

**公開証明書とプライベートキーを DMS Certificate Managerにアップロードし、Amazon MSK への接続をテストするには**

1. 次のコマンドを使用して、DMS Certificate Managerにアップロードします。

   ```
   aws dms import-certificate --certificate-identifier signed-cert --certificate-pem file://path to signed cert
   aws dms import-certificate --certificate-identifier private-key —certificate-pem file://path to private key
   ```

1. Amazon MSK ターゲット エンドポイントを作成し、接続をテストして TLS 認証が機能することを確認します。

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:0000", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "arn:aws:dms:us-east-1:012346789012:cert:",
   "SslClientKeyArn": "arn:aws:dms:us-east-1:0123456789012:cert:","SslClientKeyPassword":"test1234"}'
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

**重要**  
SSL 認証を使用して、自己管理 Kafka クラスターへの接続をセキュリティで保護できます。場合によっては、オンプレミス Kafka クラスターでPrivate Certificate Authority (CA) を使用することがあります。その場合は、CA チェーンおよび公開証明書、プライベートキーを DMS Certificate Managerにアップロードします。次に、オンプレミス Kafka ターゲットエンドポイントを作成するときに、エンドポイント設定で対応する Amazon リソースネーム (ARN) を使用します。

**自己管理 Kafka クラスターのプライベートキーと署名付き証明書を準備するには**

1. 以下に示すようにキーペアを生成します。

   ```
   keytool -genkey -keystore kafka.server.keystore.jks -validity 300 -storepass your-keystore-password 
   -keypass your-key-passphrase -dname "CN=your-cn-name" 
   -alias alias-of-key-pair -storetype pkcs12 -keyalg RSA
   ```

1. 証明書署名リクエスト (CSR) を取得します。

   ```
   keytool -keystore kafka.server.keystore.jks -certreq -file server-cert-sign-request-rsa -alias on-premise-rsa -storepass your-key-store-password 
   -keypass your-key-password
   ```

1. クラスター トラストストアの CA を使用して CSR に署名します。CA がない場合は、独自のプライベート CA を作成できます。

   ```
   openssl req -new -x509 -keyout ca-key -out ca-cert -days validate-days                            
   ```

1. `ca-cert` をサーバーのトラストストアとキーストアにインポートします。トラストストアをお持ちでない場合は、次のコマンドを使用してトラストストアを作成してこれに `ca-cert ` をインポートします。

   ```
   keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
   keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
   ```

1. 証明書に署名します。

   ```
   openssl x509 -req -CA ca-cert -CAkey ca-key -in server-cert-sign-request-rsa -out signed-server-certificate.pem 
   -days validate-days -CAcreateserial -passin pass:ca-password
   ```

1. 署名付き証明書をキーストアにインポートします。

   ```
   keytool -keystore kafka.server.keystore.jks -import -file signed-certificate.pem -alias on-premise-rsa -storepass your-keystore-password 
   -keypass your-key-password
   ```

1. 次のコマンドを使用して、`on-premise-rsa` キーを `kafka.server.keystore.jks` から `keystore.p12` にインポートします。

   ```
   keytool -importkeystore \
   -srckeystore kafka.server.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias on-premise-rsa \
   -deststorepass your-truststore-password \
   -destkeypass your-key-password
   ```

1. 次のコマンドを使用して `keystore.p12` を `.pem` の形式にエクスポートします。

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-server-key.pem –nocerts
   ```

1. `encrypted-private-server-key.pem` および `signed-certificate.pem`、`ca-cert`を DMS Certificate Managerにアップロードします。

1. 返された ARN を使用してエンドポイントを作成します。

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:9092", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "your-client-cert-arn","SslClientKeyArn": "your-client-key-arn","SslClientKeyPassword":"your-client-key-password", 
   "SslCaCertificateArn": "your-ca-certificate-arn"}'
                               
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

### SASL-SSL 認証を使用して Amazon MSK に接続する
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

簡易認証およびセキュリティレイヤー (SASL) 方式では、ユーザー名とパスワードを使用してクライアント ID を検証し、サーバーとクライアント間で暗号化された接続を作成します。

SASL を使用するには、Amazon MSK クラスターを設定するときに、まず安全なユーザー名とパスワードを作成します。Amazon MSK クラスターの安全なユーザー名とパスワードを設定する方法については、*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*の「[Amazon MSK クラスターの SALS/SCRAM 認証の設定](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial)」をご参照ください。

次に、Kafka ターゲット エンドポイントを作成するときに、`sasl-ssl` オプションを使ってセキュリティプロトコル エンドポイントの設定（`SecurityProtocol`) を行います。`SaslUsername` と `SaslPassword` オプションも設定します。次の JSON の例に示すように、Amazon MSK クラスターを初めてセットアップしたときに作成した安全なユーザー名とパスワードと一致していることを確認してください。

```
                   
"KafkaSettings": {
    "SecurityProtocol": "sasl-ssl",
    "SaslUsername":"Amazon MSK cluster secure user name",
    "SaslPassword":"Amazon MSK cluster secure password"                    
}
```

**注記**  
現在、 はパブリック CA ベースの SASL-SSL のみ AWS DMS をサポートしています。DMS は、プライベート CA を基盤とするセルフマネージド型 Kafka で使用する SASL-SSL はサポートしていません。
SASL-SSL 認証の場合、 はデフォルトで SCRAM-SHA-512 メカニズム AWS DMS をサポートします。 AWS DMS バージョン 3.5.0 以降は、プレーンメカニズムもサポートしています。Plain メカニズムを使用するには、`KafkaSettings` API データ型の `SaslMechanism` パラメータを `PLAIN` に設定します。データ型 `PLAIN` は Kafka でサポートされていますが、Amazon Kafka (MSK) ではサポートされていません。

## ターゲットとして Apache Kafka の CDC 行の元の値を表示するために前イメージを使用
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Kafka のようなデータストリーミングターゲットに CDC 更新を書き込むときは、更新によって変更される前に、ソースデータベースの行の元の値を表示できます。これを可能にするために、 はソースデータベースエンジンによって提供されたデータに基づいて、更新イベントの*前のイメージ* AWS DMS を入力します。

ソースデータベースエンジンによって、前イメージに対してさまざまな量の情報が提供されます。
+ Oracle では、列が変更された場合にのみ列の更新が提供されます。
+ PostgreSQL は、プライマリキーの一部である列のデータ (変更されたかどうか) のみを提供します。論理レプリケーションを使用し、ソーステーブルに REPLICA IDENTITY FULL を設定した場合は、WAL に書き込まれた行の変更前と変更後の情報をすべて取得できます。このような情報はここで確認できます。
+ MySQL は通常、すべての列のデータ (変更されたかどうか) を提供します。

前イメージを有効にして、ソースデータベースから元の値を AWS DMS 出力に追加するには、`BeforeImageSettings` タスク設定または `add-before-image-columns` パラメータを使用します。このパラメータは、列変換ルールを適用します。

`BeforeImageSettings` は、次に示すように、ソースデータベースシステムから収集された値を使用して、すべての更新オペレーションに新しい JSON 属性を追加します。

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**注記**  
全ロード \$1 CDCタスク (既存のデータを移行して進行中の変更をレプリケートする)、または CDC のみのタスク (データ変更のみをレプリケートする) に `BeforeImageSettings` を適用します。全ロードのタスクには `BeforeImageSettings` を適用しないでください。

`BeforeImageSettings` オプションには、次の項目が適用されます。
+ `EnableBeforeImage` オプションを `true` に設定して、前イメージを有効にします。デフォルトは `false` です。
+ `FieldName` オプションを使用して、新しい JSON 属性に名前を割り当てます。`EnableBeforeImage` が `true` の場合、`FieldName` は必須であり、空にすることはできません。
+ `ColumnFilter` オプションは、前イメージを使用して追加する列を指定します。テーブルのプライマリキーの一部である列だけを追加するには、デフォルト値 `pk-only` を使用します。LOB タイプではない列のみを追加するには、`non-lob` を使用します。前イメージ値を持つ列を追加するには、`all` を使用します。

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

### 前イメージ変換ルールの使用
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

タスク設定の代わりに、列変換ルールを適用する `add-before-image-columns` パラメータを使用できます。このパラメータを使用すると、Kafka のようなデータストリーミングターゲットで CDC 中に前イメージを有効にできます。

変換ルールで `add-before-image-columns` を使用すると、前イメージの結果のよりきめ細かい制御を適用することができます。変換ルールを使用すると、オブジェクトロケーターを使用し、ルールに選択したテーブルを制御できます。また、変換ルールを連結することもできます。これにより、テーブルごとに異なるルールを適用できます。その後、他のルールを使用して生成された列を操作できます。

**注記**  
同じタスク内で、`add-before-image-columns` パラメータと同時に `BeforeImageSettings` タスク設定を使用しないでください。代わりに、1 つのタスクにこのパラメータとこの設定のいずれかを使用し、両方を使用しないでください。

列の `add-before-image-columns` パラメータを持つ `transformation` ルールタイプは、`before-image-def` セクションを提供する必要があります。例を以下に示します。

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

`column-prefix` の値は列名の前に付加され、`column-prefix` のデフォルト値は `BI_` です。`column-suffix` の値は列名に追加され、デフォルトは空です。`column-prefix` と `column-suffix` の両方を空の文字列に設定しないでください。

`column-filter` の値を 1 つ選択します。テーブルのプライマリキーの一部である列だけを追加するには、`pk-only` を選択します。LOB タイプではない列のみを追加するように `non-lob` を選択します。または、前イメージの値を持つ任意の列を追加するように `all` を選択します。

### 前イメージ変換前ルールの例
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

次の例の変換ルールは、ターゲットに `BI_emp_no` という新しい列を追加します。したがって、`UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` のようなステートメントは、`BI_emp_no` フィールドに 1 を設定します。CDC 更新を Amazon S3 ターゲットに書き込むと、更新された元の行は `BI_emp_no` 列からわかります。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

`add-before-image-columns` ルールアクションの使用方法については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」をご参照ください。

## のターゲットとして Apache Kafka を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

ターゲットとして Apache Kafka を使用する場合、以下の制限が適用されます。
+ AWS DMS Kafka ターゲットエンドポイントは、Amazon Managed Streaming for Apache Kafka (Amazon MSK) の IAM アクセスコントロールをサポートしていません。
+ 完全 LOB モードはサポートされていません。
+ が新しいトピックを自動的に作成できるようにするプロパティを使用して AWS DMS 、クラスターの Kafka 設定ファイルを指定します。設定 `auto.create.topics.enable = true` を含めます。Amazon MSK を使用している場合は、Kafka クラスターを作成するときにデフォルト設定を指定し、`auto.create.topics.enable` 設定を `true` に変更できます。デフォルト設定の詳細については、*Amazon Managed Streaming for Apache Kafka デベロッパーガイド*の「[Amazon MSK のデフォルト設定](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html)」をご参照ください。Amazon MSK を使用して作成された既存の Kafka クラスターを変更する必要がある場合は、次の例のように AWS CLI コマンドを実行して Kafka 設定`aws kafka create-configuration`を更新します。

  ```
  14:38:41 $ aws kafka create-configuration --name "kafka-configuration" --kafka-versions "2.2.1" --server-properties file://~/kafka_configuration
  {
      "LatestRevision": {
          "Revision": 1,
          "CreationTime": "2019-09-06T14:39:37.708Z"
      },
      "CreationTime": "2019-09-06T14:39:37.708Z",
      "Name": "kafka-configuration",
      "Arn": "arn:aws:kafka:us-east-1:111122223333:configuration/kafka-configuration/7e008070-6a08-445f-9fe5-36ccf630ecfd-3"
  }
  ```

  ここでは、`//~/kafka_configuration` は必要なプロパティ設定を使用して作成した設定ファイルです。

  Amazon EC2 にインストールされている独自の Kafka インスタンスを使用している場合は、 `auto.create.topics.enable = true`インスタンスに用意されているオプションを使用して、 AWS DMS が新しいトピックを自動的に作成できるように Kafka クラスター設定を変更します。
+ AWS DMS は、トランザクションに関係なく、特定の Kafka トピック内の 1 つのデータレコード (メッセージ) としてソースデータベース内の 1 つのレコードに各更新を発行します。
+ AWS DMS では、パーティションキーに次の 4 つのフォームがサポートされています。
  + `SchemaName.TableName`: スキーマとテーブル名の組み合わせ。
  + `${AttributeName}`: JSON のいずれかのフィールドの値、またはソースデータベースのテーブルのプライマリキー。
  + `transaction-id`: CDC トランザクション ID。同じトランザクション内のすべてのレコードは、同じパーティションに移動します。
  + `constant`: テーブルやデータに関係なく、すべてのレコードの固定リテラル値。すべてのレコードは同じパーティションキー値「定数」に送信され、すべてのテーブルで厳密なグローバル順序が提供されます。

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "TransactionIdPartitionKey",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ `IncludeTransactionDetails` エンドポイント設定は、ソースエンドポイントが Oracle、SQL Server、PostgreSQL、または MySQL の場合にのみサポートされます。他のソースエンドポイントタイプでは、トランザクションの詳細は含まれません。
+ `BatchApply` は Kafka エンドポイントではサポートされていません。Batch 適用 (例えば、`BatchApplyEnabled` のターゲットメタデータ タスク設定) を使用すると、Kafka ターゲットデータが失われる可能性があります。
+ AWS DMS は、16 桁を超える`BigInt`データ型の値の移行をサポートしていません。この制限を回避するには、次の変換ルールを使用して `BigInt` 列を文字列に変換できます。変換ルールの詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ AWS DMS Kafka ターゲットエンドポイントは Amazon MSK サーブレスをサポートしていません。
+ マッピングルールを定義する場合、オブジェクトマッピングルールと変換ルールの両方を保有するのはサポートされていません。設定の必要があるルールは 1 つのみです。
+ AWS DMS は、3.8 までの Apache Kafka バージョン用の SASL 認証をサポートしています。Kafka 4.0 以降を使用している場合は、SASL 認証なしでのみ接続できます。
+ AWS DMS は、Kafka をターゲットエンドポイントとして使用する場合、埋め込み`'\0'`文字を含むソースデータをサポートしていません。埋め込み`'\0'`文字を含むデータは、最初の`'\0'`文字で切り捨てられます。

## データを Kafka トピックに移行するためのオブジェクトマッピングの使用
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS はテーブルマッピングルールを使用して、ソースからターゲット Kafka トピックにデータをマッピングします。ターゲットトピックにデータをマッピングするために、オブジェクトマッピングと呼ばれるテーブルマッピングルールのタイプを使用します。オブジェクトマッピングを使用して、ソースのデータレコードがどのように Kafka トピックに発行されたデータレコードにマッピングされるかを定義します。

Kafka トピックには、パーティションキー以外にプリセット構造はありません。

**注記**  
オブジェクトマッピングは必ずしも使用する必要はありません。通常のテーブルマッピングは、さまざまな変換に使用できます。ただし、パーティションキータイプは次のデフォルト動作に従います。  
プライマリキーはフルロードのパーティションキーとして使用されます。
並行適用タスク設定を使用しない場合は、`schema.table` が CDC のパーティションキーとして使用されます。
並列適用タスク設定を使用する場合、プライマリキーは CDC のパーティションキーとして使用されます。

オブジェクトマッピングルールを作成するには、`object-mapping` として `rule-type` を指定します。このルールが、使用したいオブジェクトマッピングのタイプを指定します。

ルールの構造は次のとおりです。

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS は現在、 `rule-action`パラメータの唯一の有効な値`map-record-to-document`として `map-record-to-record`と をサポートしています。これらの設定は、`exclude-columns` 属性リストの一部として除外されない値に影響します。`map-record-to-record` および `map-record-to-document`値は、デフォルトで がこれらのレコード AWS DMS を処理する方法を指定します。これらの値は、どのような方法でも属性マッピングに影響しません。

リレーショナルデータベースから Kafka トピックに移行する際に `map-record-to-record` を使用します。このルールタイプでは、Kafka トピックのパーティションキーとしてリレーショナルデータベースから `taskResourceId.schemaName.tableName` 値を使用し、ソースデータベース内の各列の属性を作成します。

`map-record-to-record` を使用する場合は、次の点に注意します。
+ この設定は、`exclude-columns` リストで除外されている列にのみ影響します。
+ このような列ごとに、 はターゲットトピックで対応する属性 AWS DMS を作成します。
+ AWS DMS は、ソース列が属性マッピングで使用されているかどうかに関係なく、この対応する属性を作成します。

`map-record-to-record` を理解するための 1 つの方法は、実際の動作を確認することです。この例では、次の構造とデータを含むリレーショナルデータベースのテーブルの行から始めると想定してください。


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

この情報を `Test` という名前のスキーマから Kafka トピックに移行するには、データをターゲットストリームにマッピングするルールを作成します。以下のルールはマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Kafka トピックとパーティション キー (この場合は `taskResourceId.schemaName.tableName`) を指定すると、以下の説明は Kafka ターゲットトピックのサンプルデータを使用した結果のレコード形式を示します。

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

**Topics**
+ [属性マッピングを使用したデータの再構築](#CHAP_Target.Kafka.AttributeMapping)
+ [オブジェクトマッピングを使用したマルチトピックレプリケーション](#CHAP_Target.Kafka.MultiTopic)
+ [Apache Kafka のメッセージ形式](#CHAP_Target.Kafka.Messageformat)

### 属性マッピングを使用したデータの再構築
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

属性マップを使用してデータを Kafka トピックに移行している間にデータを再構築できます。例えば、ソース内の複数のフィールドを結合してターゲット内に 1 つのフィールドを構成することもできます。以下の属性マップはデータを再構築する方法を示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

の定数値を設定するには`partition-key`、 を指定します。これにより`"partition-key-type: "constant"`、パーティション値が に設定されます`constant`。たとえば、すべてのデータを 1 つのパーティションに強制的に格納するためにこれを行うことができます。以下のマッピングはこの方法を示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "attribute-name": "CustomerName",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "attribute-name": "ContactDetails",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "attribute-name": "DateOfBirth",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**注記**  
特定のテーブル用のコントロールレコードの `partition-key` 値は、`TaskId.SchemaName.TableName` です。特定のタスク用のコントロールレコードの `partition-key` 値は、そのレコードの `TaskId` です。オブジェクトマッピングの `partition-key` 値を指定することは、コントロールレコードの `partition-key` には影響しません。  
 テーブルマッピングルール`attribute-name`で `partition-key-type`が に設定されている場合、 を指定する必要があります。これは`partition-key-name`、ソーステーブルの列またはマッピングで定義されたカスタム列を参照する必要があります。さらに、ソース列がターゲット Kafka トピックにどのようにマッピングされるかを定義するには、 を指定`attribute-mappings`する必要があります。

### オブジェクトマッピングを使用したマルチトピックレプリケーション
<a name="CHAP_Target.Kafka.MultiTopic"></a>

デフォルトでは、 AWS DMS タスクはすべてのソースデータを次のいずれかの Kafka トピックに移行します。
+  AWS DMS ターゲットエンドポイントの**トピック**フィールドで指定します。
+ ターゲットエンドポイントの **[トピック]** フィールドが入力されておらず、Kafka `auto.create.topics.enable` 設定が `true` に設定されている場合、`kafka-default-topic` の指定に従う。

 AWS DMS エンジンバージョン 3.4.6 以降では、 `kafka-target-topic` 属性を使用して、移行された各ソーステーブルを個別のトピックにマッピングできます。例えば、次のオブジェクトマッピングルールは、ソーステーブルを `Customer` と`Address` をそれぞれ Kafka トピック `customer_topic` と `address_topic` に移行します。同時に、 `Test` はスキーマ内のテーブルを含む他のすべてのソース`Bills`テーブルを、ターゲットエンドポイントで指定されたトピック AWS DMS に移行します。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "MapToKafka1",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "customer_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer" 
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "3",
            "rule-name": "MapToKafka2",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "address_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Address"
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "4",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Bills"
            }
        }
    ]
}
```

Kafka マルチトピックレプリケーションを使用すると、単一のレプリケーションタスクでソーステーブルをグループ化して個別の Kafka トピックに移行できます。

### Apache Kafka のメッセージ形式
<a name="CHAP_Target.Kafka.Messageformat"></a>

JSON 出力は、単にキーと値のペアのリストです。

**RecordType**  
レコードタイプはデータまたはコントロールのいずれかです。*データレコード*は、ソースの実際の行を表します。*コントロールレコード*は、タスクの再起動など、ストリーム内の重要なイベント用です。

**運用**  
データレコードの場合、オペレーションは `load`、`insert`、`update`、または `delete` です。  
コントロールレコードの場合、オペレーションは `create-table`、`rename-table`、`drop-table`、`change-columns`、`add-column`、`drop-column`、`rename-column`、`column-type-change` です。

**SchemaName**  
レコードのソーススキーマ。コントロールレコードの場合、このフィールドは空です。

**TableName**  
レコードのソーステーブル。コントロールレコードの場合、このフィールドは空です。

**タイムスタンプ**  
JSON メッセージが構築された時刻のタイムスタンプ。このフィールドは ISO 8601 形式でフォーマットされます。

次の JSON メッセージの例は、追加メタデータをすべて含むデータ型メッセージを示しています。

```
{ 
   "data":{ 
      "id":100000161,
      "fname":"val61s",
      "lname":"val61s",
      "REGION":"val61s"
   },
   "metadata":{ 
      "timestamp":"2019-10-31T22:53:59.721201Z",
      "record-type":"data",
      "operation":"insert",
      "partition-key-type":"primary-key",
      "partition-key-value":"sbtest.sbtest_x.100000161",
      "schema-name":"sbtest",
      "table-name":"sbtest_x",
      "transaction-id":9324410911751,
      "transaction-record-id":1,
      "prev-transaction-id":9324410910341,
      "prev-transaction-record-id":10,
      "commit-timestamp":"2019-10-31T22:53:55.000000Z",
      "stream-position":"mysql-bin-changelog.002171:36912271:0:36912333:9324410911751:mysql-bin-changelog.002171:36912209"
   }
}
```

次の JSON メッセージの例は、コントロールタイプのメッセージを示しています。

```
{ 
   "control":{ 
      "table-def":{ 
         "columns":{ 
            "id":{ 
               "type":"WSTRING",
               "length":512,
               "nullable":false
            },
            "fname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "lname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "REGION":{ 
               "type":"WSTRING",
               "length":1000,
               "nullable":true
            }
         },
         "primary-key":[ 
            "id"
         ],
         "collation-name":"latin1_swedish_ci"
      }
   },
   "metadata":{ 
      "timestamp":"2019-11-21T19:14:22.223792Z",
      "record-type":"control",
      "operation":"create-table",
      "partition-key-type":"task-id",
      "schema-name":"sbtest",
      "table-name":"sbtest_t1"
   }
}
```

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

を使用して AWS DMS 、Amazon OpenSearch Service (OpenSearch Service) にデータを移行できます。OpenSearch Service は、OpenSearch Service クラスターのデプロイ、運用、スケーリングが簡単に実行できるマネージドサービスです。

OpenSearch Service では、インデックスとドキュメントを操作します。*インデックス*はドキュメントのコレクションであり、*ドキュメント*はスカラー値、配列、およびその他のオブジェクトを含む JSON オブジェクトです。 は JSON ベースのクエリ言語 OpenSearch を提供するため、インデックス内のデータをクエリして対応するドキュメントを取得できます。

 AWS DMS が OpenSearch Service のターゲットエンドポイントのインデックスを作成すると、ソースエンドポイントからテーブルごとに 1 つのインデックスが作成されます。OpenSearch Service インデックスの作成コストは、いくつかの要因によって異なります。これらは、作成されたインデックスの数、これらのインデックス内のデータの合計量、および が各ドキュメントに OpenSearch 保存する少量のメタデータです。

移行の範囲に適したコンピューティングリソースとストレージリソースを使用して OpenSearch サービスクラスターを設定します。使用するレプリケーションタスクに応じて、次の要素を考慮することをお勧めします。
+ 全データロードの場合、移行するデータの合計量、さらに転送の速度を考慮します。
+ 継続的な変更のレプリケートの場合、更新頻度、エンドツーエンドのレイテンシーの要件を考慮します。

また、OpenSearch クラスターでインデックスを設定し、ドキュメントの数に細心の注意を払います。

**マルチスレッド全ロードタスク設定**

転送速度を向上させるために、 は OpenSearch Service ターゲットクラスターへのマルチスレッド全ロード AWS DMS をサポートします。 は、以下を含むタスク設定でこのマルチスレッド AWS DMS をサポートします。
+ `MaxFullLoadSubTasks` - このオプションを使用して、並列ロードするソーステーブルの最大数を指定します。DMS は、専用のサブタスクを使用して、対応する OpenSearch Service ターゲットインデックスに各テーブルをロードします。デフォルトは 8、最大値は 49 です。
+ `ParallelLoadThreads` – このオプションを使用して、 AWS DMS が各テーブルを OpenSearch Service ターゲットインデックスにロードするために使用するスレッドの数を指定します。OpenSearch Service ターゲットの最大値は 32 です。この上限を増やすよう依頼できます。
**注記**  
`ParallelLoadThreads` をデフォルト値 (0) から変更しない場合、 AWS DMS は一度に 1 つのレコードを転送します。この方法の場合、OpenSearch Service クラスターに過度の負荷がかかります。このオプションを 1 以上に設定していることを確認します。
+ `ParallelLoadBufferSize` – 並列ロードスレッドが OpenSearch Service ターゲットにデータをロードするために使用するバッファに保存するレコードの最大数を指定するには、このオプションを使用します。デフォルト値は 50 です。最大値は 1000 です。この設定は `ParallelLoadThreads` で使用します。`ParallelLoadBufferSize` は、複数のスレッドがある場合にのみ有効です。

マルチスレッドを使用して DMS が OpenSearch Service クラスターをロードする方法の詳細については、 AWS ブログ記事[「移行のために AWS Database Migration Service Amazon OpenSearch Service をスケールする](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/)」を参照してください。

**マルチスレッド CDC ロードタスクの設定**

タスク設定を使用して `PutRecords` API コールの動作を変更するなど、OpenSearch Service ターゲットクラスターの変更データキャプチャ (CDC) のパフォーマンスを向上できます。これを行うには、`ParallelApply*` タスク設定を使用して、同時スレッドの数、スレッドあたりのキュー数、バッファに格納するレコード数を指定します。例えば、CDC ロードを実行し、32 本のスレッドを並列に適用するとします。また、スレッドあたり 64 個のキューにアクセスして、バッファあたり 50 個のレコードを保存する必要があります。
**注記**  
CDC から Amazon OpenSearch Service ターゲットエンドポイントへの`ParallelApply*`タスク設定の使用のサポートは、 AWS DMS バージョン 3.4.0 以降で利用できます。

CDC パフォーマンスを向上させるために、 は次のタスク設定 AWS DMS をサポートしています。
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを OpenSearch Service ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。
+ `ParallelApplyBufferSize` – CDC ロード中に OpenSearch Service ターゲットエンドポイントにプッシュする同時スレッドの各バッファキューに格納するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、`ParallelApplyThreads` で複数のスレッドを指定する場合に使用します。
+ `ParallelApplyQueuesPerThread` – CDC 中に各スレッドがキューからデータレコードを取り出して OpenSearch Service エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定する。

`ParallelApply*` タスク設定を使用する場合、`partition-key-type` のデフォルトは `schema-name.table-name` ではなくテーブルの `primary-key` です。

## リレーショナルデータベースから OpenSearch Service インデックスへの移行
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS は、OpenSearch Service のスカラーデータ型へのデータの移行をサポートしています。Oracle や MySQL などのリレーショナルデータベースから OpenSearch Service に移行する場合は、データを格納する方法を再編成が必要となる場合があります。

AWS DMS は、次の OpenSearch Service スカラーデータ型をサポートしています。
+ ブール値 
+ 日付
+ 浮動小数点数
+ Int
+ String

AWS DMS は、Date 型のデータを String 型に変換します。これらの日付を解釈するカスタムマッピングを指定できます。

AWS DMS は LOB データ型の移行をサポートしていません。

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

のターゲットとして OpenSearch Service データベースを使用する前に AWS DMS、 AWS Identity and Access Management 必ず (IAM) ロールを作成してください。このロールは、 がターゲットエンドポイントの OpenSearch Service インデックス AWS DMS にアクセスできるようにします。アクセス許可の最小設定は、次の IAM ポリシーで示します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "Service": "dms.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

OpenSearch Service への移行に使用するロールには、次のアクセス権限が必要です。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "*"
    }
  ]
}
```

------

前の例では、 `region`を AWS リージョン識別子、 *`account-id`* を AWS アカウント ID、 を Amazon OpenSearch Service ドメインの名前`domain-name`に置き換えます。例: `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`。

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

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

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


| 属性名 | 有効値 | デフォルト値と説明 | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  0 より大きく、100 より小さい正の整数。  |  10 – 全ロードタスクの場合、この属性によって、タスクが失敗するまでに許容されるエラーのしきい値が決まります。たとえば、ソースエンドポイントに 1,500 行あり、このパラメータが 10 に設定されているとします。ターゲットエンドポイントへの書き込み時に が 150 個を超えるエラー (行数の 10%) AWS DMS を検出した場合、タスクは失敗します。  | 
|   `ErrorRetryDuration`   |  0 より大きい正の整数。  |  300 – ターゲットエンドポイントでエラーが発生した場合、 はこの数秒間 AWS DMS 再試行します。再試行しない場合、タスクは失敗します｡  | 
|  `UseNewMappingType`  | true、または false |  `false`、ただし opensearch v2.x を使用するには、`true` に設定する必要があります。  | 

## のターゲットとして Amazon OpenSearch Service を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

Amazon OpenSearch Service をターゲットとして使用する場合、次の制限が適用されます。
+ OpenSearch Service は、動的マッピング (自動推測) を使用して、移行されたデータに使用するデータ型を決定します。
+ OpenSearch サービスは、各ドキュメントを一意の ID で保存します。以下は ID の例です。

  ```
  "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"
  ```

  各ドキュメント ID は 64 バイト長であるため、ストレージ要件と予想されます。たとえば、 AWS DMS ソースから 100,000 行を移行する場合、結果の OpenSearch Service インデックスにはさらに 6,400,000 バイトのストレージが必要です。
+ OpenSearch Service では、プライマリキー属性を更新できません。この制限は、ターゲットで不要なデータが発生する可能性があるため、変更データキャプチャ (CDC) で継続的なレプリケーションを使用する場合に重要です。CDC モードでは、プライマリキーは 32 バイト長の SHA256 値にマップされます。この値はユーザーが判読できる 64 バイト文字列に変換され、OpenSearch サービスのドキュメント ID として使用されます。
+ が移行できない項目 AWS DMS を検出した場合、Amazon CloudWatch Logs にエラーメッセージを書き込みます。この動作は、例外テーブルにエラーを書き込む他の AWS DMS ターゲットエンドポイントの動作とは異なります。
+ AWS DMS は、マスターユーザーとパスワードできめ細かなアクセスコントロールが有効になっている Amazon ES クラスターへの接続をサポートしていません。
+ AWS DMS は OpenSearch Service サーバーレスをサポートしていません。
+ OpenSearch サービスは、既存のインデックスへのデータの書き込みをサポートしていません。
+ レプリケーションタスクの `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` 設定は、OpenSearch ターゲットエンドポイントでの使用には対応していません。
+ を使用して Amazon Elasticsearch にデータを移行する場合 AWS DMS、ソースデータにはプライマリキーまたは一意の識別子列が必要です。ソースデータにプライマリキーまたは一意の識別子がない場合は、define-primary-key の変換ルールを使用して定義する必要があります。

## Amazon OpenSearch Service のターゲットデータ型
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

が異種データベースからデータを AWS DMS 移行すると、サービスはソースデータベースのデータ型をデータ型と呼ばれる中間 AWS DMS データ型にマッピングします。その後、サービスは中間データ型をターゲットデータ型にマッピングします。次の表は、OpenSearch Service で各 AWS DMS データ型とマッピングされるデータ型を示しています。


| AWS DMS データ型 | OpenSearch Service のデータ型 | 
| --- | --- | 
|  ブール値  |  boolean  | 
|  日付  |  string  | 
|  時間  |  date  | 
|  タイムスタンプ  |  date  | 
|  INT4  |  integer  | 
|  Real4  |  float  | 
|  UINT4  |  integer  | 

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

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

 が AWS DMS サポートする Amazon DocumentDB (MongoDB 互換) のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。 AWS DMS を使用して、 AWS DMS がサポートするソースデータエンジンから Amazon DocumentDB にデータを移行できます。ソースエンジンは、Amazon RDS、Aurora、Amazon S3 などの AWS マネージドサービス上に配置できます。このエンジンは Amazon EC2 またはオンプレミスで実行されている MongoDB などの自己管理データベース上に存在していてもかまいません。

を使用して AWS DMS 、ソースデータを Amazon DocumentDB データベース、コレクション、またはドキュメントにレプリケートできます。

**注記**  
ソース エンドポイントが MongoDB または Amazon DocumentDB の場合は、**[Document mode]** (ドキュメントモード) で移行します。

MongoDB はバイナリ JSON 形式 (BSON) でデータを保存します。 は、Amazon DocumentDB でサポートされているすべての BSON データ型 AWS DMS をサポートします。これらのデータ型のリストについては、*Amazon DocumentDB デベロッパーガイド* の「[サポートされている MongoDB API およびオペレーション、データ型](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html)」をご参照ください。

ソースエンドポイントがリレーショナルデータベースの場合、 は次のようにデータベースオブジェクトを Amazon DocumentDB に AWS DMS マッピングします。
+ リレーショナルデータベースあるいはデータベーススキーマは、Amazon DocumentDB の*データベース*にマップされます。
+ リレーショナルデータベース内のテーブルは、Amazon DocumentDB 内の*コレクションです*にマップされます。
+ リレーショナルテーブル内のレコードは、Amazon DocumentDB 内の*文書*にマップされます。ソースレコードのデータから各ドキュメントが構築されます。

ソース エンドポイントが Amazon S3 である場合は、Amazon S3 の AWS DMS マッピングルールに対応する Amazon DocumentDB オブジェクトが作成されます。たとえば次のような URI があったとします。

```
s3://amzn-s3-demo-bucket/hr/employee
```

この場合、 は のオブジェクトを次のように Amazon DocumentDB `amzn-s3-demo-bucket`に AWS DMS マッピングします。
+ URI の最上位パート (`hr`) は、 Amazon DocumentDB データベースにマップされます。
+ 次の URI パート (`employee`) は、Amazon DocumentDB のコレクションにマップされます。
+ `employee` の各オブジェクトは Amazon DocumentDB 内のドキュメントにマップされます。

Amazon S3 のマッピングルールの詳細については、「[のソースとしての Amazon S3 の使用 AWS DMS](CHAP_Source.S3.md)」をご参照ください。

**Amazon DocumentDB のエンドポイント設定**

 AWS DMS バージョン 3.5.0 以降では、並列スレッドと一括オペレーションのタスク設定を調整することで、Amazon DocumentDB エンドポイントの変更データキャプチャ (CDC) のパフォーマンスを向上させることができます。これを行うには、`ParallelApply*` タスク設定を使用して、同時スレッドの数、スレッドあたりのキュー数、バッファに格納するレコード数を指定します。例えば、CDC ロードを実行し、128 本のスレッドを並列に適用するとします。また、スレッドあたり 64 個のキューにアクセスして、バッファあたり 50 個のレコードを保存する必要があります。

CDC パフォーマンスを向上させるために、 は次のタスク設定 AWS DMS をサポートしています。
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを Amazon DocumentDB ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。
+ `ParallelApplyBufferSize` – CDC ロード中に Amazon DocumentDB ターゲットエンドポイントにプッシュする同時スレッドの各バッファキューに格納するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、`ParallelApplyThreads` で複数のスレッドを指定する場合に使用します。
+ `ParallelApplyQueuesPerThread` – CDC 中に各スレッドがキューからデータレコードを取り出して Amazon DocumentDB エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定する。デフォルトは 1 です。最大数は 512。

**注記**  
 Amazon DocumentDB ターゲットの場合、並列 CDC 適用によってキーエラーが重複したり、セカンダリ一意インデックスを使用するワークロードや変更の厳密な順序付けが必要なワークロードに CDC 適用が停止されたりする可能性があります。これらのワークロードには、デフォルトのシングルスレッド CDC 適用設定を使用します。

のターゲットとして Amazon DocumentDB を使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [ソースから Amazon DocumentDB ターゲットへのデータのマッピング](#CHAP_Target.DocumentDB.data-mapping)
+ [ターゲットとしての Amazon DocumentDB Elastic Cluster への接続](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Amazon DocumentDB をターゲットとする継続的なレプリケーション](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Amazon DocumentDB をターゲットとして使用する場合の制限事項](#CHAP_Target.DocumentDB.limitations)
+ [ターゲットとしての Amazon DocumentDB のエンドポイントの設定](#CHAP_Target.DocumentDB.ECAs)
+ [Amazon DocumentDB のターゲットデータ型](#CHAP_Target.DocumentDB.datatypes)

**注記**  
移行プロセスのstep-by-stepのチュートリアルについては、 AWS Database Migration Service Step-by-Step移行ガイド[」のMongoDB から Amazon DocumentDB への移行](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html)」を参照してください。

## ソースから Amazon DocumentDB ターゲットへのデータのマッピング
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS はソースエンドポイントからレコードを読み取り、読み取りデータに基づいて JSON ドキュメントを作成します。JSON ドキュメントごとに、一意の識別子として機能する `_id`フィールドを決定 AWS DMS する必要があります。このターゲットは次に、その `_id` フィールドをプライマリ キーとして使用してJSON ドキュメントを、Amazon DocumentDB コレクションに書き込みます。

### 単一列のソースデータ
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

ソースデータが 1 つの列で構成されている場合、そのデータは文字列型である必要があります。(ソースエンジンに応じて、実際のデータ型は VARCHAR、NVARCHAR、TEXT、LOB、CLOB などです）。データは有効な JSON ドキュメントであると AWS DMS 想定し、そのまま Amazon DocumentDB にレプリケートします。

結果の JSON ドキュメントに `_id` という名前のフィールドが含まれている場合は、そのフィールドが Amazon DocumentDB で一意の `_id` として使用されます。

JSON に `_id` フィールドが含まれていない場合は、Amazon DocumentDB によって自動的に `_id` 値が生成されます。

### 複数列のソースデータ
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

ソースデータが複数の列で構成されている場合、 はこれらのすべての列から JSON ドキュメント AWS DMS を作成します。ドキュメントの `_id`フィールドを決定するために、 は次のように AWS DMS 処理します。
+ `_id` という名前の列がある場合は、その列のデータがターゲット `_id` として使用されます。
+ `_id` 列がないが、ソースデータにプライマリキーまたは一意のインデックスがある場合、 AWS DMS はそのキーまたはインデックス値を`_id`値として使用します。プライマリキーや一意のインデックスのデータは、JSON ドキュメント内の明示的なフィールドとしても表示されます。
+ `_id` 列も、プライマリ キーも、一意のインデックスもない場合は、Amazon DocumentDB によって自動的に `_id` 値が生成されます。

### ターゲットエンドポイントのデータ型の強制変換
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS は、Amazon DocumentDB ターゲットエンドポイントに書き込むときにデータ構造を変更できます。これらの変更をリクエストするには、ソースエンドポイントでテーブルや列の名前を変更するか、タスクの実行時に適用される変換ルールを指定します。

#### ネストされた JSON ドキュメント (json\$1 プレフィックス) の使用
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

ソース列の名前に `json_` というプレフィックスを付けることによってデータ型を強制変換することができます (`json_columnName`)。手動で行うことも、変換を使用して行うこともできます。この場合、その列は、文字列フィールドとしてではなく、ターゲットドキュメント内のネストされた JSON ドキュメントとして作成されます。

たとえば、MongoDB ソースエンドポイントから次のドキュメントを移行するとします。

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}"
}
```

これらのソースデータ型を強制変換しない場合、埋め込まれている `ContactDetails` ドキュメントは文字列として移行されます。

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}"
}
```

しかし、変換ルールを追加して、`ContactDetails` を JSON オブジェクトに強制変換することができます。たとえば、ソース列の元の名前が `ContactDetails` である場合に、データ型をネストされた JSON に強制変換するには、ソースに「\$1json\$1\$1」プレフィックスを手動で追加するか、変換ルールを使用して、ソースエンドポイントの列名前「JSON\$1ContactDetails」に変更する必要があります。例えば、次の変換ルールを使用できます。

```
{
    "rules": [
    {
    "rule-type": "transformation",
    "rule-id": "1",
    "rule-name": "1",
    "rule-target": "column",
    "object-locator": {
    "schema-name": "%",
    "table-name": "%",
    "column-name": "ContactDetails"
     },
    "rule-action": "rename",
    "value": "json_ContactDetails",
    "old-value": null
    }
    ]
}
```

AWS DMS は、次のように ContactDetails フィールドをネストされた JSON としてレプリケートします。

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactDetails": {
        "Home": {
            "Address": "Boston",
            "Phone": "1111111111"
        },
        "Work": {
            "Address": "Boston",
            "Phone": "2222222222"
        }
    }
}
```

#### JSON 配列 (array\$1 プレフィックス) の使用
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

列の名前に `array_` というプレフィックスを付けることによってデータ型を強制変換することができます (`array_columnName`)。手動で行うことも、変換を使用して行うこともできます。この場合、 は列 AWS DMS を JSON 配列と見なし、ターゲットドキュメントにそのように作成します。

たとえば、MongoDB ソースエンドポイントから次のドキュメントを移行するとします。

```
{
    "_id" : "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": ["Boston", "New York"],             
    "ContactPhoneNumbers": ["1111111111", "2222222222"]
}
```

これらのソースデータ型を強制変換しない場合、埋め込まれている `ContactDetails` ドキュメントは文字列として移行されます。

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": "[\"Boston\", \"New York\"]",             
    "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]" 
}
```

 しかし、変換ルールを追加して、`ContactAddress` と `ContactPhoneNumbers` を JSON 配列に強制変換することができます。その例を次の表に示します。


****  

| ソース列の元の名前 | ソース列の変更後の名前 | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS は`ContactPhoneNumbers`次のように `ContactAddress`と をレプリケートします。

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactAddresses": [
        "Boston",
        "New York"
    ],
    "ContactPhoneNumbers": [
        "1111111111",
        "2222222222"
    ]
}
```

### TLS を使用して Amazon DocumentDB に接続する
<a name="CHAP_Target.DocumentDB.tls"></a>

デフォルトでは、新しく作成された Amazon DocumentDB クラスターは、Transport Layer Security (TLS) を使用したセキュアな接続のみを受け入れます。TLS が有効になっている場合、Amazon DocumentDB へのすべての接続で公開キーが必要になります。

Amazon DocumentDB のパブリックキーを取得するには、ホストされている Amazon Amazon S3バケット`rds-combined-ca-bundle.pem`から ファイル をダウンロードします。 AWS ファイルのダウンロードの詳細については、*Amazon DocumentDB デベロッパーガイド*の「[TLS を使用した接続の暗号化](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html)」をご参照ください。

この .pem ファイルをダウンロードしたら、以下 AWS DMS に示すように、そのファイルに含まれるパブリックキーを にインポートできます。

#### AWS マネジメントコンソール
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**パブリックキー (.pem) ファイルをインポートするには**

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

1. ナビゲーションペインで [**Certificates**] を選択します。

1. [**Import certificate (証明書のインポート)**] を選択し、次の操作を行います。
   + [**Certificate identifier (証明書の識別子)**] に、証明書の一意の名前を入力します (例: `docdb-cert`)。
   + [**Import file (ファイルのインポート)**] で、.pem ファイルを保存した場所を参照します。

   すべての設定が正しいことを確認したら、[**Add new CA certificate (新しい CA 証明書の追加)**] を選択します。

#### AWS CLI
<a name="CHAP_Target.DocumentDB.tls.cli"></a>

次の例に示すように `aws dms import-certificate` コマンドを使用します。

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

 AWS DMS ターゲットエンドポイントを作成するときは、証明書識別子 ( など`docdb-cert`) を指定します。また、[SSL mode (SSL モード)] パラメータを [`verify-full`] に設定します。

## ターゲットとしての Amazon DocumentDB Elastic Cluster への接続
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

 AWS DMS バージョン 3.4.7 以降では、Amazon DocumentDB ターゲットエンドポイントを Elastic クラスターとして作成できます。ターゲットエンドポイントを Elastic クラスターとして作成する場合、既存の SSL 証明書は機能しないため、Amazon DocumentDB Elastic クラスターエンドポイントに新しい SSL 証明書をアタッチする必要があります。

**新しい SSL 証明書を Amazon DocumentDB Elastic クラスターエンドポイントにアタッチするには**

1. ブラウザで [https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) を開いて、コンテンツを `.pem` に一意のファイル名を付けて保存します (`SFSRootCAG2.pem` など)。この証明書ファイルは、後半の手順でインポートする必要がありますす。

1. Elastic クラスターエンドポイントを作成して、次のオプションを設定します。

   1. **[エンドポイント設定]** の下で、**[新しい CA 証明書の追加]** をクリックします。

   1. **[証明書の識別子]** には、**SFSRootCAG2.pem** を入力します。

   1. **[証明書ファイルのインポート]** では、**[ファイルを選択]** をクリックして、前のタスクでダウンロードした `SFSRootCAG2.pem` ファイルに移動します。

   1. ファイルを選択して、ダウンロードした `SFSRootCAG2.pem` ファイルを選択します。

   1. [**証明書のインポート**] を選択します。

   1. **[証明書の選択]** ドロップダウンで、**[SFSRootCAG2.pem]** を選択します。

ダウンロードした `SFSRootCAG2.pem` ファイルからの新しい SSL 証明書が、Amazon DocumentDB Elastic クラスターエンドポイントにアタッチされます。

## Amazon DocumentDB をターゲットとする継続的なレプリケーション
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Amazon DocumentDB をターゲットとした継続的なレプリケーション (変更データキャプチャ、CDC) が有効になっている場合、 AWS DMS バージョン 3.5.0 以降では以前のリリースと比べてパフォーマンスが 20 倍向上しています。が 1 秒あたり最大 250 レコード AWS DMS を処理する以前のリリースでは、 AWS DMS は現在、1 秒あたり 5000 レコード以上を効率的に処理します。 AWS DMS また、 は Amazon DocumentDB のドキュメントがソースと同期していることを確認します。ソースレコードを作成または更新するときは、まず以下を実行して、影響を受ける Amazon DocumentDB レコードを決定 AWS DMS する必要があります。
+ ソースレコードに `_id` という名前の列がある場合は、その列の値を使用して Amazon DocumentDB コレクションの対応する `_id` が特定されます。
+ `_id` 列がないが、ソースデータにプライマリキーまたは一意のインデックスがある場合、 AWS DMS はそのキーまたはインデックス値を Amazon DocumentDB コレクションの として使用`_id`します。
+ ソースレコードに `_id`列、プライマリキー、または一意のインデックスがない場合、 はすべてのソース列を Amazon DocumentDB コレクションの対応するフィールドに AWS DMS 一致させます。

新しいソースレコードが作成されると、 は対応するドキュメントを Amazon DocumentDB に AWS DMS 書き込みます。既存のソースレコードが更新されると、 は Amazon DocumentDB のターゲットドキュメントの対応するフィールド AWS DMS を更新します。ターゲットドキュメントには存在するがソースレコードには存在しないフィールドは、一切変更されません。

ソースレコードが削除されると、 は Amazon DocumentDB から対応するドキュメント AWS DMS を削除します。

### ソースの構造の変更 (DDL)
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

継続的レプリケーションでは、ソースのデータ構造 (テーブル、列など) の変更が Amazon DocumentDB の対応する要素に反映されます。リレーショナルデータベースでは、これらの変更はデータ定義言語 (DDL) ステートメントを使用して開始されます。がこれらの変更を Amazon DocumentDB AWS DMS に伝達する方法を次の表に示します。


****  

| ソースの DDL | Amazon DocumentDB ターゲットでの効果 | 
| --- | --- | 
| CREATE TABLE | 空のコレクションが作成されます。 | 
| テーブル名を変更するステートメント (RENAME TABLE、ALTER TABLE...RENAME など) | コレクションの名前が変更されます。 | 
| TRUNCATE TABLE | コレクションからすべてのドキュメントが削除されます (HandleSourceTableTruncated が true の場合のみ)。詳細については、「[変更処理の DDL 処理のタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md)」をご参照ください。 | 
| DROP TABLE | コレクションが削除されます (HandleSourceTableDropped が true の場合のみ)。詳細については、「[変更処理の DDL 処理のタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md)」をご参照ください。 | 
| テーブルに列を追加するステートメント (ALTER TABLE...ADD など) | この DDL ステートメントは無視され、警告が表示されます。ソースで最初の INSERT が実行されたときに、ターゲットドキュメントに新しいフィールドが追加されます。 | 
| ALTER TABLE...RENAME COLUMN | この DDL ステートメントは無視され、警告が表示されます。ソースで最初の INSERT が実行されたときに、ターゲットドキュメントに新しい名前のフィールドが追加されます。 | 
| ALTER TABLE...DROP COLUMN | この DDL ステートメントは無視され、警告が表示されます。 | 
| 列のデータ型を変更するステートメント (ALTER COLUMN...MODIFY など) | この DDL ステートメントは無視され、警告が表示されます。ソースでその新しいデータ型を使用した最初の INSERT が実行されたときに、その新しいデータ型のフィールドを使用してターゲットドキュメントが作成されます。 | 

## Amazon DocumentDB をターゲットとして使用する場合の制限事項
<a name="CHAP_Target.DocumentDB.limitations"></a>

Amazon DocumentDB をターゲットとして使用する場合は、次の制限が適用されます AWS DMS。
+ Amazon DocumentDB では、コレクション名にドル記号 (\$1) を含めることはできません。また、データベース名に Unicode 文字を含めることもできません。
+ AWS DMS では、複数のソーステーブルを 1 つの Amazon DocumentDB コレクションに統合することはできません。
+  AWS DMS がプライマリキーを持たないソーステーブルから変更を処理すると、そのテーブル内の LOB 列は無視されます。
+ **[変更テーブル]** オプションが有効で、 AWS DMS で「*\$1id*」という名前のソース列が検出されると、その列が変更テーブルに 「*\$1\$1id*」 (アンダースコア 2 つが前に付く) として表示されます。
+ ソースエンドポイントとして Oracle を選択する場合は、Oracle ソースで完全なサプリメンタルロギングが有効になっている必要があります。有効になっていないと、ソースに変更されていない列がある場合にデータが null 値として Amazon DocumentDB にロードされます。
+ レプリケーション タスクの設定、`TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` は、DocumentDB ターゲット エンドポイントでの使用には対応していません。
+ MongoDB の上限付きコレクションは、Amazon DocumentDB ではサポートされていません。ただし AWS DMS は、ターゲット DocumentDB の上限なしのコレクションなどのオブジェクトを自動的に移行します。
+ Amazon DocumentDB ターゲットに並列 CDC を適用すると、キーエラーが重複したり、セカンダリ一意インデックスを使用するワークロードや変更の厳密な順序付けが必要なワークロードに CDC 適用が停止されたりする可能性があります。このようなワークロードでは、デフォルトのシングルスレッド CDC 適用設定を使用します。

## ターゲットとしての Amazon DocumentDB のエンドポイントの設定
<a name="CHAP_Target.DocumentDB.ECAs"></a>

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

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


| 属性名 | 有効値 | デフォルト値と説明 | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  boolean `true` `false`  |  `true` の場合、このエンドポイント設定には次のような影響がおよび、次のとおりの制限がある。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Amazon DocumentDB のターゲットデータ型
<a name="CHAP_Target.DocumentDB.datatypes"></a>

次の表に、DMS の使用時にサポートされる Amazon DocumentDB AWS ターゲットデータ型と、 AWS DMS データ型からのデフォルトのマッピングを示します。DMS データ型の詳細については、 AWS 「」を参照してください[AWS Database Migration Service のデータ型](CHAP_Reference.DataTypes.md)。


|  AWS DMS データ型  |  Amazon DocumentDB データ型  | 
| --- | --- | 
|  BOOLEAN  |  ブール値  | 
|  BYTES  |  バイナリデータ  | 
|  DATE  | 日付 | 
|  TIME  | 文字列 (UTF8) | 
|  DATETIME  | 日付 | 
|  INT1  | 32 ビット整数 | 
|  INT2  |  32 ビット整数  | 
|  INT4  | 32 ビット整数 | 
|  INT8  |  64 ビット整数  | 
|  NUMERIC  | 文字列 (UTF8) | 
|  REAL4  |  Double  | 
|  REAL8  | Double | 
|  STRING  |  データが JSON として認識された場合、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。  | 
|  UINT1  | 32 ビット整数 | 
|  UINT2  | 32 ビット整数 | 
|  UINT4  | 64 ビット整数 | 
|  UINT8  |  文字列 (UTF8)  | 
|  WSTRING  | データが JSON として認識された場合、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 | 
|  BLOB  | バイナリ | 
|  CLOB  | データが JSON として認識された場合、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 | 
|  NCLOB  | データが JSON として認識された場合、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 | 

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

Amazon Neptune は、高速で信頼性に優れたフルマネージド型のグラフデータベースサービスであり、高度に接続されたデータセットを使用するアプリケーションの構築と実行を容易にします。Neptune の中核は、専用のハイパフォーマンスなグラフデータベース エンジンです。このエンジンは、数十億の関係を保存し、ミリ秒単位のレイテンシーでグラフをクエリできるよう最適化されています。Neptune は、人気の高いグラフクエリ言語 Apache TinkerPop Gremlin と W3C の SPARQL をサポートしています。Amazon Neptune の詳細については、*Amazon Neptune ユーザーガイド* の「[Amazon Neptune のクォータ](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html)」をご参照ください。

Neptune などのグラフデータベースがなければ、リレーショナルデータベースで高接続データをモデル化するとよいでしょう。データに動的接続がある可能性があるため、このようなデータソースを使用するアプリケーションは SQL で接続されたデータクエリをモデル化する必要があります。この方法では、グラフクエリを SQL に変換するために余分なレイヤーを記述する必要があります。また、リレーショナルデータベースにはスキーマの剛性があります。接続を変更するスキーマのすべての変更には、新しいスキーマをサポートするために、ダウンタイムおよびクエリ変換の追加メンテナンスが必要になります。アプリケーションの設計時に考慮すべき別の大きな制約は、クエリのパフォーマンスです。

グラフデータベースは、このような状況を大幅に簡素化することができます。スキーマから解放され、豊富なグラフクエリレイヤー (Gremlin または SPARQL) とグラフクエリ用に最適化されたインデックスにより、柔軟性とパフォーマンスが向上します。Amazon Neptune グラフデータベースには、保存時の暗号化、安全な認可レイヤー、デフォルトバックアップ、マルチ AZ サポート、リードレプリカ サポートなどのエンタープライズ機能もあります。

を使用すると AWS DMS、高度に接続されたグラフをモデル化するリレーショナルデータを、サポートされている SQL データベースの DMS ソースエンドポイントから Neptune ターゲットエンドポイントに移行できます。

詳細については、以下をご参照ください。

**Topics**
+ [ターゲットとしての Amazon Neptune への移行の概要](#CHAP_Target.Neptune.MigrationOverview)
+ [ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)
+ [ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)
+ [ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)
+ [ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型](#CHAP_Target.Neptune.DataTypes)
+ [ターゲットとしての Amazon Neptune の使用における制限](#CHAP_Target.Neptune.Limitations)

## ターゲットとしての Amazon Neptune への移行の概要
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Neptune ターゲットへの移行を開始する前に、 AWS アカウントに次のリソースを作成します。
+ ターゲット エンドポイントの Neptune クラスター。
+ ソースエンドポイント AWS DMS の でサポートされている SQL リレーショナルデータベース。
+ ターゲット エンドポイントの Amazon S3 バケット。この S3 バケットを Neptune クラスターと同じ AWS リージョンに作成します。 AWS DMS は、この S3 バケットを Neptune データベースに一括ロードするターゲットデータの中間ファイルストレージとして使用します。Amazon S3 バケットの作成の詳細については、*Amazon Simple Storage Service ユーザーガイド*の[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)をご参照ください。
+ Neptune クラスターと同じ VPC 内の S3 の Virtual Private Cloud (VPC) エンドポイント。
+ IAM ポリシーを含む AWS Identity and Access Management (IAM) ロール。このポリシーでは、ターゲットエンドポイントの S3 バケットに対する、`GetObject`、`PutObject`、`DeleteObject` および `ListObject` アクセス許可を指定する必要があります。このロールは、ターゲット S3 バケット AWS DMS と Neptune データベースの両方への IAM アクセスを持つ と Neptune の両方によって引き受けられます。詳細については、「[ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)」を参照してください。

これらのリソースを取得したら、Neptune ターゲットへの移行の設定とスタートは、コンソールまたは DMS API を使用した全ロードの移行と同様です。ただし、Neptune ターゲットへの移行には固有のステップが必要です。

**AWS DMS リレーショナルデータベースを Neptune に移行するには**

1. [レプリケーション インスタンスの作成](CHAP_ReplicationInstance.Creating.md) の説明に従って、レプリケーションインスタンスを作成します。

1. ソースエンドポイントの でサポートされている SQL リレーショナルデータベースを作成してテスト AWS DMS します。

1. Neptune データベースのターゲット エンドポイントを作成してテストします。

   ターゲット エンドポイントを Neptune データベースに接続するには、Neptune クラスター エンドポイントまたは Neptune ライター インスタンス エンドポイントのサーバー名を指定します。また、 の S3 バケットフォルダを指定 AWS DMS して、Neptune データベースへの一括ロード用に中間ファイルを保存します。

   移行中、 は、指定した最大ファイルサイズまで、移行されたすべてのターゲットデータをこの S3 バケットフォルダに AWS DMS 保存します。このファイルストレージがこの最大サイズに達すると、 AWS DMS は保存された S3 データをターゲットデータベースにロードします。フォルダをクリアして、後でターゲットデータベースにロードするために、追加ターゲットデータの保存を有効にします。これらの設定の指定の詳細については、「[ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)」をご参照ください。

1. 手順 1 ～ 3 で作成したリソースを使用して全ロードレプリケーション タスクを作成し、次の手順を実行します：

   1. 通常のタスクテーブルマッピングを使用して、適切な選択ルールと変換ルールを使用して、リレーショナルデータベースから移行する特定のソーススキーマ、テーブルおよびビューを指定します。詳細については、「[テーブルマッピングを使用して、タスクの設定を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.md)」をご参照ください。

   1. 次のいずれかを選択して、ターゲットマッピングを指定し、ソーステーブルおよびビューから Neptune ターゲット　データベースグラフへのマッピングルールを指定します。
      + Gremlin JSON — Gremlin JSON を使用して Neptune データベースをロードする方法については、*Amazon Neptune ユーザーガイド*の「[Gremlin ロードデータ形式](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html)」をご参照ください。
      + SPARQL RDB からリソース記述フレームワーク マッピング言語 (R2RML) への SPARQL R2RML の使用方法については、W3C 仕様の「[R2RML: RDB から RDF へのマッピング言語](https://www.w3.org/TR/r2rml/)」をご参照ください。

   1. 次のいずれかを行います。
      +  AWS DMS コンソールを使用して、**「データベース移行タスクの作成**」ページのグラフマッピング**ルールを使用してグラフマッピング**オプションを指定します。
      +  AWS DMS API を使用して、`CreateReplicationTask`API コールの `TaskData` リクエストパラメータを使用してこれらのオプションを指定します。

      Gremlin JSON および SPARQL R2RML を使用してグラフマッピングルールを指定する方法の詳細と例については、「[ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)」をご参照ください。

1. 移行タスクのレプリケーションを開始します。

## ターゲットとしての Amazon Neptune エンドポイント設定の指定
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

ターゲットエンドポイントを作成または変更するには、コンソール、`CreateEndpoint` または `ModifyEndpoint` API オペレーションを使用します。

 AWS DMS コンソールの Neptune ターゲットの場合、エンドポイント**の作成またはエンドポイント****コンソールの変更ページでエンドポイント****固有の設定**を指定します。`CreateEndpoint` と `ModifyEndpoint` に、`NeptuneSettings` オプションのリクエストパラメータを指定します。以下の例は CLI を使用してこれを行う方法を示しています。

```
dms create-endpoint --endpoint-identifier my-neptune-target-endpoint
--endpoint-type target --engine-name neptune 
--server-name my-neptune-db.cluster-cspckvklbvgf.us-east-1.neptune.amazonaws.com 
--port 8192
--neptune-settings 
     '{"ServiceAccessRoleArn":"arn:aws:iam::123456789012:role/myNeptuneRole",
       "S3BucketName":"amzn-s3-demo-bucket",
       "S3BucketFolder":"amzn-s3-demo-bucket-folder",
       "ErrorRetryDuration":57,
       "MaxFileSize":100, 
       "MaxRetryCount": 10, 
       "IAMAuthEnabled":false}‘
```

ここでは、CLI `--server-name` オプションで、Neptune クラスター ライター エンドポイントのサーバ名を指定します。または、Neptune ライターインスタンス エンドポイントのサーバー名を指定することもできます。

`--neptune-settings` オプションリクエストパラメータは次のとおりです。
+ `ServiceAccessRoleArn` – (必須) Neptune ターゲットエンドポイント用に作成したサービスロールの Amazon リソースネーム (ARN)。詳細については、「[ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成](#CHAP_Target.Neptune.ServiceRole)」をご参照ください。
+ `S3BucketName` – (必須) DMS が Neptune ターゲットデータベースへ一括ロードする前に、移行されたグラフデータを .csv ファイルに一時的に保存する S3 バケットの名前。DMS は、これらの .csv ファイルに格納する前に、SQL ソースデータをグラフデータにマッピングします。
+ `S3BucketFolder` – (必須) DMS が `S3BucketName` で指定された S3 バケットに移行されたグラフデータを保存するフォルダのパス
+ `ErrorRetryDuration` – (オプション) エラーを発生させる前に、DMS が Neptune ターゲットデータベースに移行されたグラフデータの一括ロードを再試行するまで待機する時間 (ミリ秒)。デフォルトは 250 です。
+ `MaxFileSize` – (オプション) DMS が Neptune ターゲットデータベースにデータを一括ロードする前に、.csv ファイルに保存される移行済みグラフデータの最大サイズ (KB 単位)。デフォルトは 1,048,576 KB (1 GB) です。成功すると、DMS はバケットをクリアし、移行されたグラフデータの次のバッチを保存する準備が整います。
+ `MaxRetryCount` – (オプション) エラーを発生させる前に、DMS が移行されたグラフデータの Neptune ターゲットデータベースへの一括ロード リトライ回数。デフォルトは 5 です。
+ `IAMAuthEnabled` – (オプション) このエンドポイントで IAM 認可を有効にする場合は、このパラメータを `true` に設定し、`ServiceAccessRoleArn` によって指定されたサービスロールに適切な IAM ポリシードキュメントをアタッチします。デフォルトは `false` です。

## ターゲットとして Amazon Neptune にアクセスするための IAM サービスロールの作成
<a name="CHAP_Target.Neptune.ServiceRole"></a>

ターゲットとして Neptune にアクセスするには、IAM を使用してサービスロールを作成します。Neptune エンドポイントの設定に応じて、以下で説明する IAM ポリシーと信頼ドキュメントの一部またはすべてをこのロールにアタッチします。Neptune エンドポイントを作成するときに、このサービスロールの ARN を指定します。これにより、 AWS DMS と Amazon Neptune は Neptune とそれに関連付けられた Amazon S3 バケットの両方にアクセスするためのアクセス許可を引き受けることができます。

Neptune エンドポイント設定で、`NeptuneSettings` の `IAMAuthEnabled` パラメータを `true` に設定した場合は、サービスロールに次のようなような IAM ポリシーをアタッチします。`IAMAuthEnabled` を `false` に設定すると、このポリシーを無視できます。

```
// Policy to access Neptune

    {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "neptune-db:*",
                "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-CLG7H7FHK54AZGHEH6MNS55JKM/*"
            }
        ]
    }
```

前述の IAM ポリシーは、`Resource` で指定された Neptune ターゲットクラスターへのフルアクセスを許可します。

サービスロールに次のような IAM ポリシーをアタッチします。このポリシーにより、DMS は、移行したグラフデータを Neptune ターゲットデータベースに一括ロードするために作成した S3 バケットに一時的に保存できます。

```
//Policy to access S3 bucket

{
	"Version": "2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "ListObjectsInBucket0",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket"
			]
		},
		{
			"Sid": "AllObjectActions",
			"Effect": "Allow",
			"Action": ["s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],

			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		},
		{
			"Sid": "ListObjectsInBucket1",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket",
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		}
	]
}
```

前述の IAM ポリシーでは、Neptune ターゲット用に作成された S3 バケット (`arn:aws:s3:::amzn-s3-demo-bucket`) の内容をアカウントからクエリできます。また、アカウントはすべてのバケットファイルとフォルダ (`arn:aws:s3:::amzn-s3-demo-bucket/`) の内容を完全に操作できます。

信頼関係を編集し、次の IAM ロールをサービスロールにアタッチして、 AWS DMS と Amazon Neptune データベースサービスの両方がロールを引き受けることを許可します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "neptune",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Neptune ターゲット エンドポイントにこのサービスロールを指定する方法については、「[ターゲットとしての Amazon Neptune エンドポイント設定の指定](#CHAP_Target.Neptune.EndpointSettings)」をご参照ください。

## ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定
<a name="CHAP_Target.Neptune.GraphMapping"></a>

作成するグラフ マッピングルールは、SQL リレーショナル データベースソースから抽出されたデータを Neptune データベース クラスター ターゲットにロードする方法を指定します。これらのマッピングルールの形式は、ルールが Apache TinkerPop Gremlin を使用してプロパティグラフデータをロードするか、R2RML を使用してリソース記述フレームワーク (RDF) データをロードするかによって異なります。以下で、これらの形式に関する情報と詳細を確認できます。

これらのマッピングルールは、コンソールまたは DMS API を使用して移行タスクを作成するときに指定できます。

コンソールを使用して、**[Create database migration task]** (データベース移行タスクの作成) ページで**[Graph mapping rules]** (グラフマッピングのルール) を使用してこれらのマッピングルールを指定します。[**グラフマッピングルール**] では、付属のエディタを使用して直接マッピングルールを入力および編集できます。または、適切なグラフマッピング形式のマッピングルールを含むファイルを参照することもできます。

API を使用して、`TaskData` API コールの `CreateReplicationTask` リクエストパラメータを使用してこれらのオプションを指定します。`TaskData` に、適切なグラフマッピング形式のマッピングルールを含むファイルのパスを設定します。

### Gremlin を用いたプロパティグラフデータ生成のためのグラフマッピングルール
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Gremlin を使用してプロパティグラフデータを生成し、ソースデータから生成される各グラフエンティティのマッピングルールを使用する JSON オブジェクトを指定します。この JSON の形式は、Amazon Neptune の一括ロード用に定義されています。次のテンプレートは、このオブジェクトの各ルールがどのようになるかを示しています。

```
{
    "rules": [
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{col1}",
                    "vertex_label": "(the vertex to create)",
                    "vertex_definition_id": "(an identifier for this vertex)",
                    "vertex_properties": [
                        {
                            "property_name": "(name of the property)",
                            "property_value_template": "{col2} or text",
                            "property_value_type": "(data type of the property)"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{col1}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{col3}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "edge_id_template": {
                        "label": "(the edge label to add)",
                        "template": "{col1}_{col3}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "(the property to add)",
                            "property_value_template": "{col4} or text",
                            "property_value_type": "(data type like String, int, double)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

頂点ラベルが存在することは、頂点がここに作成されていることを意味します。頂点ラベルがない場合は、頂点が別のソースによって作成され、この定義では頂点プロパティだけが追加されることを意味します。必要な数の頂点定義とエッジ定義を指定して、リレーショナルデータベースソース全体のマッピングを指定します。

次に、`employee` テーブルのルール例を示します。

```
{
    "rules": [
        {
            "rule_id": "1",
            "rule_name": "vertex_mapping_rule_from_nodes",
            "table_name": "nodes",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{emp_id}",
                    "vertex_label": "employee",
                    "vertex_definition_id": "1",
                    "vertex_properties": [
                        {
                            "property_name": "name",
                            "property_value_template": "{emp_name}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "2",
            "rule_name": "edge_mapping_rule_from_emp",
            "table_name": "nodes",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{emp_id}",
                        "vertex_definition_id": "1"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{mgr_id}",
                        "vertex_definition_id": "1"
                    },
                    "edge_id_template": {
                        "label": "reportsTo",
                        "template": "{emp_id}_{mgr_id}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "team",
                            "property_value_template": "{team}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        }
    ]
}
```

ここでは、頂点とエッジの定義は、従業員 ID (`EmpID`) を持つ `employee` ノードとマネージャ ID (`managerId`) を持つ `employee` ノードからのレポート関係をマッピングします。

Gremlin JSON を使用したグラフ マッピングルールの作成の詳細については、*Amazon Neptune ユーザーガイド*の「[Gremlin ロードデータ形式](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html)」をご参照ください。

### RDF/SPARQL データ生成のためのグラフマッピングルール
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

SPARQL を使用してクエリする RDF データをロードする場合は、R2RML にグラフマッピングルールを記述します。R2RML は、リレーショナルデータを RDF にマッピングするための標準の W3C 言語です。R2RML ファイルで、*トリプルマップ* (以下の `<#TriplesMap1>` など) は、論理テーブルの各行を 0 個以上の RDF トリプルに変換するルールを指定します。*サブジェクトマップ* (以下の `rr:subjectMap` のいずれか) は、トリプルマップによって生成された RDF トリプルのサブジェクトを生成するためのルールを指定します。*述語オブジェクトマップ* (以下の `rr:predicateObjectMap` のいずれか) は、論理テーブルの論理テーブル行ごとに 1 つ以上の述語オブジェクトのペアを作成する関数です。

`nodes` テーブルの簡単な例を次に示します。

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "nodes" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{id}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:name;
        rr:objectMap [ rr:column "label" ];
    ]
```

前の例では、マッピングは、従業員のテーブルからマッピングされたグラフノードを定義します。

`Student` テーブルの別の簡単な例を次に示します。

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

<#TriplesMap2>
    rr:logicalTable [ rr:tableName "Student" ];
    rr:subjectMap   [ rr:template "http://example.com/{ID}{Name}";
                      rr:class foaf:Person ];
    rr:predicateObjectMap [
        rr:predicate ex:id ;
        rr:objectMap  [ rr:column "ID";
                        rr:datatype xsd:integer ]
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:name ;
        rr:objectMap  [ rr:column "Name" ]
    ].
```

前の例では、マッピングは、`Student` テーブル内の人物間の友だち関係をマッピングするグラフノードを定義します。

SPARQL R2RML を使用したグラフマッピングルールの作成の詳細については、W3C 仕様の「[R2RML: RDB から RDF へのマッピング言語](https://www.w3.org/TR/r2rml/)」をご参照ください。

## ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS は、SQL ソースエンドポイントから Neptune ターゲットへのデータ型マッピングを 2 つの方法のいずれかで実行します。どちらの方法を使用するかは、Neptune データベースのロードに使用しているグラフマッピング形式によって異なります。
+ 移行データの JSON 形式を使用する、Apache TinkerPop Gremlin。
+ 移行データの R2RML 形式を使用する W3C の SPARQL。

これら 2 つのグラフマッピング形式の詳細については、「[ターゲットとしての Amazon Neptune 用の Gremlin および R2RML を使用したグラフ　マッピングルールの指定](#CHAP_Target.Neptune.GraphMapping)」をご参照ください。

次に、各形式のデータ型マッピングの説明を示します。

### SQL ソースから Gremlin ターゲットへのデータ型マッピング
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

次の表に、SQL ソースから Gremlin 形式のターゲットへのデータ型マッピングを示します。

AWS DMS は、リストにない SQL ソースデータ型を Gremlin にマッピングします`String`。



[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Neptune.html)

Neptune を読み込むための Gremlin データ型の詳細については、*Neptune ユーザーガイド*の「[Gremlin データ型](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes)」をご参照ください。

### SQL ソースから R2RML (RDF) ターゲットへのデータ型マッピング
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

次の表に、SQL ソースから R2RML 形式のターゲットへのデータ型マッピングを示します。

RDF literal. AWS DMS maps any unlisted SQL source data type to an RDF literal を除き、リストされているすべての RDF データ型では大文字と小文字が区別されます。

*RDF リテラル*は、さまざまなリテラル辞書形式およびデータ型の 1 つです。詳細については、W3C 仕様*リソース記述フレームワーク (RDF): 概念と抽象構文*の「[RDF リテラル](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal)」をご参照ください。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Neptune.html)

Neptune をロードするための RDF データ型と SQL ソースデータ型へのマッピングの詳細については、W3C 仕様*R2RML: RDB から RDF マッピング言語*の「[データ型の変換](https://www.w3.org/TR/r2rml/#datatype-conversions)」をご参照ください。

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

ターゲットとして Neptuneを使用する場合、以下の制限が適用されます。
+ AWS DMS は現在、Neptune ターゲットへの移行にのみ全ロードタスクをサポートしています。Neptune ターゲットへの変更データ　キャプチャ (CDC) の移行はサポートされていません。
+ 移行タスクをスタートする前に、次の例のように、ターゲット Neptune データベースで、すべてのデータが手動でクリアされていることを確認してください。

  グラフ内のすべてのデータ (頂点とエッジ) をドロップするには、次の Gremlin コマンドを実行します。

  ```
  gremlin> g.V().drop().iterate()
  ```

  `'customer'` ラベルのある頂点をドロップするには、次の Gremlin コマンドを実行します。

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**注記**  
大きなデータセットをドロップするには時間がかかる場合があります。`limit(1000)` などの制限を使用して、`drop()` を反復処理することができます。

  `'rated'` ラベルのあるエッジをドロップするには、以下の Gremlin コマンドを実行します。

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**注記**  
大きなデータセットをドロップするには時間がかかる場合があります。`limit(1000)` などの制限を使用して、`drop()` を反復処理することができます。
+ DMS API オペレーション `DescribeTableStatistics` は、Neptune グラフデータ構造の性質上、特定のテーブルについて不正確な結果を返すことがあります。

  移行中、 は各ソーステーブル AWS DMS をスキャンし、グラフマッピングを使用してソースデータを Neptune グラフに変換します。変換されたデータは、まずターゲットエンドポイントに指定された S3 バケットフォルダに保存されます。ソースがスキャンされ、この中間の S3 データが正常に生成された場合、`DescribeTableStatistics` はデータが Neptune ターゲットデータベースに正常にロードされたと見なします。しかし、これは常に正しいとは限りません。特定のテーブルのデータが正しくロードされたことを確認するには、そのテーブルの移行の両端の `count()` の戻り値を比較します。

  次の例では、 はソースデータベースから`customer`テーブルを AWS DMS ロードし、ターゲット Neptune データベースグラフ`'customer'`に ラベルが割り当てられます。このラベルがターゲットデータベースに書き込まれることを確認できます。これを行うには、ソースデータベースから使用可能な `customer` 行の数と、タスクの完了後に Neptune ターゲットデータベースにロードされた `'customer'` ラベル付きの行の数を比較します。

  SQL を使用してソースデータベースから使用可能な customer 行の数を取得するには、次のコマンドを実行します。

  ```
  select count(*) from customer;
  ```

  Gremlin を使用してターゲットデータベースグラフにロードされた `'customer'` ラベル付きの行の数を取得するには、次のコマンドを実行します。

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ 現在、1 つのテーブルの読み込みに失敗すると、タスク全体が失敗します。リレーショナル データベースターゲットとは異なり、Neptune のデータは高度に接続されているため、多くの場合、タスクを再開することは不可能です。このタイプのデータロードの失敗のためにタスクが正常に再開できない場合は、ロードに失敗したテーブルをロードする新しいタスクを作成します。この新しいタスクを実行する前に、部分的にロードされたテーブルを Neptune ターゲットから手動でクリアします。
**注記**  
障害が回復可能な場合 (ネットワーク転送エラーなど)、Neptune ターゲットへの移行に失敗したタスクを再開できます。
+ AWS DMS は R2RML のほとんどの標準をサポートしています。ただし、逆式、結合、ビューなど、特定の R2RML 標準 AWS DMS はサポートされていません。R2RML ビューの回避策は、ソースデータベースに対応するカスタム SQL ビューを作成することです。移行タスクで、テーブルマッピングを使用してビューを入力として選択します。次に、ビューをテーブルにマップすると、R2RML によって消費され、グラフデータが生成されます。
+ サポートされていない SQL データ型を使用してソースデータを移行すると、結果のターゲットデータの精度が低下する可能性があります。詳細については、「[ターゲットとしての Amazon Neptune への Gremlin および R2RML 移行のデータ型](#CHAP_Target.Neptune.DataTypes)」を参照してください。
+ AWS DMS は、Neptune ターゲットへの LOB データの移行をサポートしていません。

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

Redis OSS は、オープンソースのインメモリ データ構造ストアで、データベース、キャッシュ、メッセージブローカーとして使用されます。データ インメモリを管理すると、読み取りまたは書き込みオペレーションにかかる時間が 1 msec 未満になり、毎秒数億のオペレーションが実行される可能性があります。インメモリデータストアとして、Redis OSS は、ミリ秒未満の応答時間を必要とする最も要求の厳しいアプリケーションの電源となります。

を使用すると AWS DMS、最小限のダウンタイムで、サポートされているソースデータベースからターゲット Redis OSS データストアにデータを移行できます。Redis OSS の詳細については、「[Redis OSS ドキュメント](https://redis.io/documentation)」をご参照ください。

オンプレミス Redis OSS に加えて、 は以下 AWS Database Migration Service をサポートしています。
+ ターゲットデータストアとしての [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/)。ElastiCache (Redis OSS) は Redis OSS クライアントと連携し、オープンな Redis OSS データ形式を使用してデータを格納します。
+ ターゲットデータストアとしての [Amazon MemoryDB](https://aws.amazon.com/memorydb/)。MemoryDB は Redis OSS と互換であり、今日使用されているすべての Redis OSS データ構造および API、コマンドを使用してアプリケーションを構築できます。

のターゲットとして Redis OSS を使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [のターゲットとして Redis OSS クラスターを使用するための前提条件 AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [のターゲットとして Redis を使用する場合の制限 AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [リレーショナルデータベースまたは非リレーショナルデータベースから Redis OSS ターゲットへのデータ移行](#CHAP_Target.Redis.Migrating)
+ [ターゲットとしての Redis OSS エンドポイント設定の指定](#CHAP_Target.Redis.EndpointSettings)

## のターゲットとして Redis OSS クラスターを使用するための前提条件 AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

DMS は、スタンドアロン構成で、またはデータが複数のノードにわたって自動的に*シャード*される Redis OSS クラスターとしてオンプレミス Redis OSS ターゲットに対応します。シャーディングとは、複数のサーバーまたはノードに分散されるシャードと呼ばれる小さなチャンクにデータを分離するプロセスです。実際、シャードは総データ セットのサブセットを含むデータ パーティションであり、全体的なワークロードのスライスを提供します。

Redis OSS はキー値 NoSQL データ ストアであるため、ソースがリレーショナルデータベースである場合に使用する Redis OSS キーの命名規則は、**schema-name.table-name.primary-key** です。Redis OSS では、キーと値に特殊文字 % を含めることはできません。それ以外の場合、DMS はレコードをスキップします。

**注記**  
ElastiCache (Redis OSS) をターゲットとして使用している場合、DMS は*クラスターモードの有効化*構成のみに対応します。ElastiCache (Redis OSS) バージョン 6.x 以降を使用してクラスターモードが有効になっているターゲットデータストアを作成する方法の詳細については、「*Amazon ElastiCache (Redis OSS) ユーザーガイド*」の「[Getting started](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html)」を参照してください。

データベースの移行を開始する前に、次の条件を使用して Redis OSS クラスターを起動します。
+ クラスターに 1 つ以上のシャードがあります。
+ ElastiCache (Redis OSS) ターゲットを使用している場合は、クラスターが IAM ロールベースのアクセス制御を使用していないことを確認してください。代わりに、Redis OSS Auth を使用してユーザーを認証します。
+ マルチ AZ (アベイラビリティーゾーン) を有効にします。
+ データベースから移行されるデータに適合するのに十分なメモリがクラスターにあることを確認します。
+ 最初の移行タスクをスタートする前に、ターゲット Redis OSS クラスターがすべてのデータからクリアされていることを確認してください。

クラスター構成を作成する前に、データ移行のセキュリティ要件を決定する必要があります。DMS は、暗号化構成に関係なく、ターゲット レプリケーション グループへの移行をサポートします。ただし、暗号化を有効または無効にできるのは、クラスター構成を作成するときに限られます。

## のターゲットとして Redis を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

ターゲットとして Redis OSS を使用する場合、以下の制限が適用されます。
+ Redis OSS はキー値 no-sql データストアであるため、ソースがリレーショナルデータベースである場合に使用する Redis OSS キー命名規則は `schema-name.table-name.primary-key` になります。
+ Redis OSS では、キー値に特殊文字 `%` を含めることはできません。それ以外の場合、DMS はレコードをスキップします。
+ DMS では、`%` 文字を含む行は移行されません。
+ DMS では、フィールド名に `%` 文字が含まれているフィールドは移行されません。
+ 完全 LOB モードはサポートされていません。
+  ElastiCache (Redis OSS) をターゲットとして使用する場合、Private Certificate Authority (CA) はサポートされません。
+ AWS DMS ターゲットエンドポイントとして Redis を使用する場合、 は埋め込み`'\0'`文字を含むソースデータをサポートしていません。埋め込み`'\0'`文字を含むデータは、最初の`'\0'`文字で切り捨てられます。

## リレーショナルデータベースまたは非リレーショナルデータベースから Redis OSS ターゲットへのデータ移行
<a name="CHAP_Target.Redis.Migrating"></a>

任意のソース SQL または NoSQL データストアから Redis OSS ターゲットに直接データを移行できます。Redis OSS ターゲットへの移行の設定とスタートは、DMS コンソールまたは API を使用した全ロードと変更データ キャプチャの移行と同様です。Redis OSS ターゲットへのデータベース移行を実行するには、次の操作を行います。
+ 移行のすべてのプロセスを実行するレプリケーション インスタンスを作成します。詳細については、「[レプリケーション インスタンスの作成](CHAP_ReplicationInstance.Creating.md)」をご参照ください。
+ ソースエンドポイントを指定します。詳細については、「[ソースおよびターゲットエンドポイントの作成](CHAP_Endpoints.Creating.md)」をご参照ください。
+ クラスターの DNS 名とポート番号を見つけます。
+ SSL 接続を確認するために使用できる証明書バンドルをダウンロードします。
+ 次の説明に従って、ターゲット エンドポイントを指定します。
+ 使用するテーブルとレプリケーション プロセスを定義するタスクまたはタスクセットを作成します。詳細については、「[[Creating a task] (タスクの作成)](CHAP_Tasks.Creating.md)」をご参照ください。
+ ソースデータベースからターゲット クラスターにデータを移行します。

データベースの移行は、次の 2 つのいずれかの方法で開始します：

1.  AWS DMS コンソールを選択し、そこで各ステップを実行できます。

1.  AWS Command Line Interface () を使用できますAWS CLI。で CLI を使用する方法の詳細については AWS DMS、「」の[AWS CLIAWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)「」を参照してください。

**クラスターの DNS 名とポート番号を見つけるには**
+ 次の AWS CLI コマンドを使用して、 `replication-group-id`にレプリケーショングループの名前を指定します。

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  ここで、出力は `Address` 属性では DNS 名、クラスター内のプライマリノードの`Port` 属性にポート番号を表示します。

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  MemoryDB をターゲットとして使用する場合は、以下の AWS CLI コマンドを使用して Redis OSS クラスターにエンドポイントアドレスを提供します。

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**SSL 接続を確認するために使用できる証明書バンドルをダウンロードします。**
+ コマンドラインで、以下の `wget` コマンドを入力します。Wget は、インターネットからファイルをダウンロードするために使用される無料の GNU コマンドライン ユーティリティツールです。

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  ここで、 は、指定した S3 バケットと、それが提供する rds-combined-ca-bundle.pem ファイルにアクセスするために必要なリージョンの Amazon S3 ドメイン`aws-api-domain`を完了します。 AWS rds-combined-ca-bundle

**AWS DMS コンソールを使用してターゲットエンドポイントを作成するには**

このエンドポイントは、既に実行中の Redis OSS ターゲット用です。
+ コンソールで、ナビゲーションペインから **[Endpoints]** (エンドポイント) を選択し、次に‭　**[Create Endpoint]** (エンドポイントの作成) を選択します。次の表で設定について説明します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Redis.html)

エンドポイントのすべての情報を入力したら、 AWS DMS は、データベース移行中に使用する Redis OSS ターゲットエンドポイントを作成します。

移行タスクの作成とデータベース移行のスタートについては、「[[Creating a task] (タスクの作成)](CHAP_Tasks.Creating.md)」をご参照ください。

## ターゲットとしての Redis OSS エンドポイント設定の指定
<a name="CHAP_Target.Redis.EndpointSettings"></a>

ターゲットエンドポイントを作成または変更するには、コンソール、`CreateEndpoint` または `ModifyEndpoint` API オペレーションを使用します。

 AWS DMS コンソールの Redis OSS ターゲットの場合は、エンドポイント**の作成またはエンドポイント****コンソールの変更ページでエンドポイント****固有の設定**を指定します。

`CreateEndpoint` と `ModifyEndpoint`API オペレーションを使用する際、`RedisSettings` オプションのリクエストパラメータを指定する。次の例では、 AWS CLIを使用してこの操作を行う方法を示しています。

```
aws dms create-endpoint --endpoint-identifier my-redis-target
--endpoint-type target --engine-name redis --redis-settings 
'{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", 
 "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}'

{
    "Endpoint": {
        "EndpointIdentifier": "my-redis-target",
        "EndpointType": "TARGET",
        "EngineName": "redis",
        "EngineDisplayName": "Redis",
        "TransferFiles": false,
        "ReceiveTransferredFiles": false,
        "Status": "active",
        "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x",
        "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ",
        "SslMode": "none",
        "RedisSettings": {
            "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com",
            "Port": 6379,
            "SslSecurityProtocol": "ssl-encryption",
            "AuthType": "auth-token"
        }
    }
}
```

`--redis-settings`パラメータは次のとおりです:
+ `ServerName` — (必須) タイプ `string` で、データの移行先となる Redis OSS クラスターを指定し、同じ VPC に存在します。
+ `Port`— (必須) タイプ `number` で、エンドポイントへのアクセスに使用されるポート値。
+ `SslSecurityProtocol`— (オプション) 有効な値は `plaintext` と `ssl-encryption` です。デフォルトは `ssl-encryption` です。

  `plaintext` オプションは、エンドポイントとデータベース間のトラフィックに Transport Layer Security (TLS) 暗号化を提供しません。

  `ssl-encryption` を使用して、暗号化された接続を作成します。`ssl-encryption` はサーバーの証明書を検証するために SSL 認定権限 (CA) ARN を必要としませんが、オプションで `SslCaCertificateArn` 設定を使用して特定可能です。認定権限 ARN が指定されていない場合、DMS は Amazon ルート CA を使用します。

  オンプレミスの Redis OSS ターゲットを使用する場合、`SslCaCertificateArn` を使用して公開またはPrivate Certificate Authority (CA) を DMS にインポートし、サーバー認証用にその ARN を指定します。ElastiCache (Redis OSS) をターゲットとして使用する場合、プライベート CA はサポートされません。
+ `AuthType` — (必須) Redis OSS に接続するときに実行する認証のタイプを示します。有効な値は、`none`、`auth-token`、および `auth-role` です。

  `auth-token` オプションには「*[AuthPassword]* (認証パスワード)」の入力が必要ですが、一方、`auth-role` オプションには必要「*[AuthUserName]* (認証ユーザー名)」と「*[AuthPassword]* (認証パスワード)」を入力します。

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

を使用して、Microsoft SQL Server ソースデータベースから Babelfish ターゲットにデータを移行できます AWS Database Migration Service。

Aurora 用の Babelfish PostgreSQL は、Microsoft SQL Server クライアントからデータベース接続を受け入れる機能を使用して Amazon Aurora PostgreSQL 互換エディションデータベースを拡張します。これにより、SQL Server 向けに構築されたアプリケーションは、従来の移行と比較してほとんどコードを変更することなく、データベースドライバーを変更せずに、Aurora PostgreSQL と直接連携できるようになります。

がターゲットとして AWS DMS サポートする Babelfish のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。Aurora PostgreSQL 上の Babelfish の以前のバージョンの場合は、 Babelfish エンドポイントを使用する前にアップグレードする必要があります。

**注記**  
データを Babelfish に移行するには、Aurora PostgreSQL ターゲットエンドポイントの使用をお勧めします。詳細については、「[ターゲットとしての Babelfish for Aurora PostgreSQL の使用](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish)」を参照してください。

Babelfish をデータベースエンドポイントとして使用する方法の詳細については、「*Amazon Aurora のユーザーガイド*」の「[Babelfish for Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)」を参照してください。

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

が適切なデータ型とテーブルメタデータ AWS DMS を使用していることを確認するには、データを移行する前にテーブルを作成する必要があります。移行を実行する前にターゲットにテーブルを作成しない場合は、誤ったデータ型とアクセス許可を持つテーブルを作成する AWS DMS 可能性があります。たとえば、 は代わりにタイムスタンプ列を binary(8) として AWS DMS 作成し、予想されるタイムスタンプ/ローバージョン機能を提供しません。

**移行前にテーブルを準備して作成するには**

1. 一意の制約、プライマリキー、またはデフォルト制約を含む create table DDL ステートメントを実行します。

   外部キー制約、ビュー、ストアドプロシージャ、関数、トリガーなどのオブジェクトの DDL ステートメントは含めないでください。上記はソースデータベースを移行した後に適用できます。

1. テーブルのアイデンティティ列、計算列、または rowversion や timestamp などのデータ型を含む列を特定します。次に、移行タスクを実行する際の既知の問題に対処するために必要な変換ルールを作成します。詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。

1. Babelfish がサポートしていないデータ型の列を特定します。次に、サポートされているデータ型を使用するようにターゲットテーブル内の影響を受ける列を変更するか、移行タスク中にこのような列を削除する変換ルールを作成します。詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。

   次の表は、Babelfish でサポートされていないソースデータ型と、それに対して使用することが推奨されるターゲットでのデータ型を示しています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Babelfish.html)

**ソースの Aurora PostgreSQL Serverless V2 データベースの Aurora キャパシティユニット (ACU) レベルを設定するには**

最小 ACU 値を設定することで、 AWS DMS 移行タスクを実行する前にパフォーマンスを向上させることができます。
+ **[Severless v2 キャパシティ設定]** ウィンドウで、**[最小 ACU]** を **2**、または Aurora DB クラスターに適切なレベルに設定します。

  詳細については、「**Amazon Aurora ユーザーガイド」の「[Aurora クラスターの Aurora Serverless v2 での容量範囲の選択](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html)」を参照してください。

 AWS DMS 移行タスクを実行した後、ACUs の最小値を Aurora PostgreSQL Serverless V2 ソースデータベースの妥当なレベルにリセットできます。

## のターゲットとして Babelfish を使用する場合のセキュリティ要件 AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

以下では、Babelfish ターゲット AWS DMS で を使用するためのセキュリティ要件について説明します。
+ データベースの作成に使用される管理者ユーザー名 (Admin ユーザー)
+ PSQL ログインと、十分な SELECT、INSERT、UPDATE、DELETE、および REFERENCES アクセス権限を持つユーザー

## のターゲットとして Babelfish を使用するためのユーザーアクセス許可 AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**重要**  
セキュリティ上の理由から、データ移行に使用するユーザーアカウントは、ターゲットとして使用する Babelfish データベースに登録されているユーザーである必要があります。

Babelfish ターゲットエンドポイントでは、 AWS DMS 移行を実行するための最低限のユーザーのアクセス権限が必要です。

**ログインと低特権の Transact-SQL (T-SQL) ユーザーを作成するには**

1. サーバーに接続する際に使用するログイン名とパスワードを作成します。

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Babelfish クラスターの仮想データベースを作成します。

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. ターゲットデータベースの T-SQL ユーザーを作成します。

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Babelfish データベース内の各テーブルごとにテーブルに対するアクセス権限を付与します。

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## のターゲットとしての Babelfish の使用に関する制限 AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

Babelfish データベースを AWS DMSのターゲットとして使用する場合、次の制限が適用されます。
+ テーブル作成モードについては、**[何もしない]** のみがサポートされています。
+ ROWVERSION データ型には、移行タスク中にテーブルから列名を削除するテーブルマッピングルールが必要です。
+ sql\$1variant データ型はサポートされていません。
+ 完全 LOB モードはサポートされています。SQL Server をソースエンドポイントとして使用する場合、LOB をターゲットエンドポイントに移行するために SQL Server エンドポイント接続属性設定 `ForceFullLob=True` を設定する必要があります。
+ レプリケーションタスクの設定には次の制限があります。

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Babelfish の TIME (7)、DATETIME2 (7)、DATETIMEOFFSET (7) のデータ型では、時刻の秒部分の精度値が 6 桁に制限されます。上記のデータ型を使用する際は、ターゲットテーブルの精度値を 6 に設定することを検討します。Babelfish バージョン 2.2.0 以降では、TIME (7) と DATETIME2 (7) を使用すると、精度の 7 桁目は常にゼロになります。
+ DO\$1NOTHING モードでは、DMS はテーブルが既に存在するかどうかを確認します。テーブルがターゲットスキーマに存在しない場合、DMS はソースのテーブル定義に基づいてテーブルを作成し、ユーザー定義のデータ型を基本データ型にマップします。
+ Babelfish ターゲットへの移行 AWS DMS タスクは、ROWVERSION または TIMESTAMP データ型を使用する列を持つテーブルをサポートしていません。転送プロセス中にテーブルから列名を削除するテーブルマッピングルールを使用できます。次の変換ルールの例では、ソースの `Actor` という名前のテーブルを変換して、ターゲットの `Actor` テーブル内の先頭文字が `col` であるすべての列を削除します。

  ```
  {
   	"rules": [{
  		"rule-type": "selection",is 
  		"rule-id": "1",
  		"rule-name": "1",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "%"
  		},
  		"rule-action": "include"
  	}, {
  		"rule-type": "transformation",
  		"rule-id": "2",
  		"rule-name": "2",
  		"rule-action": "remove-column",
  		"rule-target": "column",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "Actor",
  			"column-name": "col%"
  		}
  	}]
   }
  ```
+ アイデンティティ列または計算列を含むテーブルの場合、ターゲットテーブルで Categories などの大文字と小文字が混合した名前が使用されている場合、DMS タスクのためにテーブル名を小文字に変換する変換ルールアクションを作成する必要があります。次の例は、変換ルールアクションを作成する方法を示しています。 AWS DMS コンソールを使用して**小文字**にします。詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。  
![\[Babelfish の変換ルール\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Babelfish バージョン 2.2.0 以前のバージョンの場合、DMS では Babelfish ターゲットエンドポイントにレプリケートできる列の数が 20 列に制限されていました。Babelfish 2.2.0 では、この制限は 100 列に引き上げられています。ただし、Babelfish バージョン 2.4.0 以降では、レプリケートできる列の数がさらに増大しています。SQL Server データベースに対して次のコードサンプルを実行すると、長すぎるテーブルを特定できます。

  ```
  USE myDB;
  GO
  DECLARE @Babelfish_version_string_limit INT = 8000; -- Use 380 for Babelfish versions before 2.2.0
  WITH bfendpoint
  AS (
  SELECT 
  	[TABLE_SCHEMA]
        ,[TABLE_NAME]
  	  , COUNT( [COLUMN_NAME] ) AS NumberColumns
  	  , ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  AS InsertIntoCommandLength -- values string
        , CASE WHEN ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  -- values string
  			>= @Babelfish_version_string_limit
  			THEN 1
  			ELSE 0
  		END AS IsTooLong
  FROM [INFORMATION_SCHEMA].[COLUMNS]
  GROUP BY [TABLE_SCHEMA], [TABLE_NAME]
  )
  SELECT * 
  FROM bfendpoint
  WHERE IsTooLong = 1
  ORDER BY TABLE_SCHEMA, InsertIntoCommandLength DESC, TABLE_NAME
  ;
  ```

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

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

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


|  AWS DMS データ型  |  Babelfish のデータ型   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(長さ)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  列が日付または時刻列の場合、次の操作を行います。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Babelfish.html) 列が日付または時刻列ではない場合、VARCHAR (長さ) を使用します。  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(長さ)  | 
|  BLOB  |  VARBINARY(最大) DMS でこのデータ型を使用するには、特定のタスク用に BLOB の使用を有効にする必要がある。DMS は、プライマリキーがあるテーブルでのみ BLOB データ型をサポートする。  | 
|  CLOB  |  VARCHAR(max) DMS でこのデータ型を使用するには、特定のタスクで CLOB の使用を有効にする必要がある。  | 
|  NCLOB  |  NVARCHAR(最大) DMS でこのデータ型を使用するには、特定のタスクで NCLOB の使用を有効にする必要がある。CDC 中に、DMS はプライマリキーがあるテーブルでのみ NCLOB データ型をサポートする。  | 

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

を使用して AWS Database Migration Service 、フルロードと CDC データ移行をサポートしながら、ソースデータベースから Amazon Timestream ターゲットエンドポイントにデータを移行できます。

Amazon Timestream は、大量のデータインジェスト用に構築された、高速でスケーラブルなサーバーレスの時系列データベースサービスです。時系列データは、一定の間隔で収集された一連のデータポイントで、時間の経過とともに変化するイベントの測定に使用します。IoT アプリケーション、DevOps アプリケーション、分析アプリケーションのメトリクスの収集、保存、分析に役立ちます。Timestream にデータを保存すると、データの傾向やパターンをほぼリアルタイムで視覚化して特定できます。Amazon Timestream の詳細については、「Amazon Timestream デベロッパーガイド」の「[Amazon Timestream とは](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)」を参照してください。**

**Topics**
+ [のターゲットとして Amazon Timestream を使用するための前提条件 AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [マルチスレッド全ロードタスク設定](#CHAP_Target.Timestream.FLTaskSettings)
+ [マルチスレッド CDC ロードタスクの設定](#CHAP_Target.Timestream.CDCTaskSettings)
+ [のターゲットとして Timestream を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Amazon Timestream ターゲットエンドポイントの作成と変更](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [データを Timestream トピックに移行するためのオブジェクトマッピングの使用](#CHAP_Target.Timestream.ObjectMapping)
+ [のターゲットとして Amazon Timestream を使用する場合の制限 AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

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

Amazon Timestream を のターゲットとして設定する前に AWS DMS、必ず IAM ロールを作成してください。このロールは AWS DMS 、 が Amazon Timestream に移行するデータにアクセスできるようにする必要があります。Timestream への移行に使用するロールの最低限のアクセス許可は、次の IAM ポリシーに示されます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDescribeEndpoints",
      "Effect": "Allow",
      "Action": [
        "timestream:DescribeEndpoints"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "timestream:ListTables",
        "timestream:DescribeDatabase"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "timestream:DeleteTable",
        "timestream:WriteRecords",
        "timestream:UpdateTable",
        "timestream:CreateTable"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME/table/TABLE_NAME"
    }
  ]
}
```

------

すべてのテーブルを移行する場合は、上の例の *TABLE\$1NAME* として `*` を使用します。

Timestream をターゲットとして使用する場合は、次の点に注意してください。
+ タイムスタンプが 1 年を超える履歴データを取り込む場合は、 AWS DMS を使用してデータをカンマ区切り値 (csv) 形式で Amazon S3 に書き込むことをお勧めします。次に、Timestream のバッチロードを使用してデータを Timestream に取り込みます。詳細については、「Amazon Timestream デベロッパーガイド」の「[Timestream でのバッチロードの使用](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html)」を参照してください。[https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)
+ 1 年未満のデータをフルロードで移行する場合は、Timestream テーブルのメモリストア保持期間を最も古いタイムスタンプ以上に設定することをお勧めします。次に、移行が完了したら、テーブルのメモリストア保持期間を編集して希望の値に変更します。例えば、データの最も古いタイムスタンプが 2 か月前である場合、このデータを移行するには、次の操作を行います。
  + Timestream ターゲットテーブルのメモリストア保持期間を 2 か月に設定します。
  + を使用してデータ移行を開始します AWS DMS。
  + データ移行が完了したら、ターゲット Timestream テーブルの保持期間を希望の値に変更します。

   以下のページの情報を使用して、移行前にメモリストアのコストを見積もることをお勧めします。
  + [Amazon Timestream の料金](https://aws.amazon.com/timestream/pricing)
  + [AWS 料金計算ツール](https://calculator.aws/#/addService) 
+ CDC データ移行では、取り込まれたデータがメモリストア保持期間の範囲内に収まるように、ターゲットテーブルのメモリストア保持期間を設定することをお勧めします。詳細については、「Amazon Timestream デベロッパーガイド」の「[書き込みのベストプラクティス](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html)」を参照してください。[https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)

## マルチスレッド全ロードタスク設定
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

データ転送速度を向上させるために、 は、以下のタスク設定で Timestream ターゲットエンドポイントへのマルチスレッド全ロード移行タスク AWS DMS をサポートします。
+ `MaxFullLoadSubTasks` - このオプションを使用して、並列ロードするソーステーブルの最大数を指定します。DMS は、専用のサブタスクを使用して、対応する Amazon Timestream ターゲットテーブルに各テーブルをロードします。デフォルトは 8、最大値は 49 です。
+ `ParallelLoadThreads` – このオプションを使用して、 AWS DMS が各テーブルを Amazon Timestream ターゲットテーブルにロードするために使用するスレッドの数を指定します。Timestream ターゲットの最大値は 32 です。この上限を増やすよう依頼できます。
+ `ParallelLoadBufferSize` – このオプションを使用して、Amazon Timestream ターゲットにデータをロードするために並列ロードスレッドで使用する、バッファ内に保存するレコードの最大数を指定します。デフォルト値は 50 です。最大値は 1000 です。この設定は `ParallelLoadThreads` で使用します。`ParallelLoadBufferSize` は、複数のスレッドがある場合にのみ有効です。
+ `ParallelLoadQueuesPerThread` - このオプションを使用して、各同時スレッドがキューからデータレコードを取り出し、ターゲットのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルトは 1 です。ただし、さまざまなペイロードサイズの Amazon Timestream ターゲットの場合、有効な範囲は 1 スレッドあたり 5～512 キューです。

## マルチスレッド CDC ロードタスクの設定
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

CDC パフォーマンスを向上させるために、 は次のタスク設定 AWS DMS をサポートしています。
+ `ParallelApplyThreads` – CDC ロード中に AWS DMS がデータレコードを Timestream ターゲットエンドポイントにプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0、最大値は 32 です。
+ `ParallelApplyBufferSize` – 同時スレッドが CDC ロード中に Timestream ターゲットエンドポイントにプッシュするために、各バッファキューに保存するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、`ParallelApplyThreads` で複数のスレッドを指定する場合に使用します。
+ `ParallelApplyQueuesPerThread` – 各スレッドがキューからデータレコードを取り出し、CDC 中に Timestream エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルト値は 1、最大値は 512 です。

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

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Timestream.html)

## Amazon Timestream ターゲットエンドポイントの作成と変更
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

IAM ロールを作成し、アクセス許可の最小セットを確立したら、 AWS DMS コンソールを使用するか、JSON 構文で の `create-endpoint` コマンドを使用して [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)Amazon Timestream `--timestream-settings '{"EndpointSetting": "value", ...}'` ターゲットエンドポイントを作成できます。

以下の例は、 AWS CLIを使用して Timestream ターゲットエンドポイントを作成および変更する方法を示しています。

**Timestream ターゲットエンドポイントの作成コマンド**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**Timestream ターゲットエンドポイントの変更コマンド**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

## データを Timestream トピックに移行するためのオブジェクトマッピングの使用
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS はテーブルマッピングルールを使用して、ソースからターゲットの Timestream トピックにデータをマッピングします。ターゲットトピックにデータをマッピングするために、オブジェクトマッピングと呼ばれるテーブルマッピングルールのタイプを使用します。オブジェクトマッピングを使用して、ソースのデータレコードをどのように Timestream トピックに発行されたデータレコードにマッピングするかを定義します。

Timestream トピックには、パーティションキー以外にプリセット構造はありません。

**注記**  
オブジェクトマッピングは必ずしも使用する必要はありません。通常のテーブルマッピングは、さまざまな変換に使用できます。ただし、パーティションキータイプは次のデフォルト動作に従います。  
プライマリキーはフルロードのパーティションキーとして使用されます。
並行適用タスク設定を使用しない場合は、`schema.table` が CDC のパーティションキーとして使用されます。
並列適用タスク設定を使用する場合、プライマリキーは CDC のパーティションキーとして使用されます。

オブジェクトマッピングルールを作成するには、`object-mapping` として `rule-type` を指定します。このルールが、使用したいオブジェクトマッピングのタイプを指定します。ルールの構造は次のとおりです。

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```



```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "timestream-map",
            "rule-action": "map-record-to-record",
            "target-table-name": "tablename",
            "object-locator": {
                "schema-name": "",
                "table-name": ""
            },
            "mapping-parameters": {
                "timestream-dimensions": [
                    "column_name1",
                     "column_name2"
                ],
                "timestream-timestamp-name": "time_column_name",
                "timestream-multi-measure-name": "column_name1or2",
                "timestream-hash-measure-name":  true or false,
                "timestream-memory-duration": x,
                "timestream-magnetic-duration": y
            }
        }
    ]
}
```

AWS DMS は現在、 `rule-action`パラメータの唯一の有効な値`map-record-to-document`として `map-record-to-record`と をサポートしています。`map-record-to-record` と の`map-record-to-document`値は、`exclude-columns`属性リストの一部として除外されていないレコードに対してデフォルトで AWS DMS 何を行うかを指定します。これらの値は、どのような方法でも属性マッピングに影響しません。

リレーショナルデータベースから Timestream トピックに移行する場合は `map-record-to-record` を使用します。このルールタイプでは、Timestream トピックのパーティションキーとしてリレーショナルデータベースの `taskResourceId.schemaName.tableName` 値を使用し、ソースデータベース内の各列の属性を作成します。を使用する場合`map-record-to-record`、`exclude-columns`属性リストにリストされていないソーステーブルの任意の列に対して、 はターゲットトピックに対応する属性 AWS DMS を作成します。この対応する属性は、そのソース列が属性マッピングで使用されているかどうかにかかわらず作成されます。

`map-record-to-record` を理解するための 1 つの方法は、実際の動作を確認することです。この例では、次の構造とデータを含むリレーショナルデータベースのテーブルの行から始めると想定してください。


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 02/29/1988 | 

この情報を `Test` という名前のスキーマから Timestream トピックに移行するには、データをターゲットトピックにマッピングするルールを作成します。以下のルールはマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToTimestream",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Timestream トピックとパーティションキー (この例では `taskResourceId.schemaName.tableName`) を指定した場合、Timestream ターゲットトピックのサンプルデータを使用した結果のレコード形式は次のとおりです。

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

## のターゲットとして Amazon Timestream を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

Amazon Timestream をターゲットとして使用する場合は、以下の制限が適用されます。
+ **ディメンションとタイムスタンプ:** Timestream はソースデータ内のディメンションとタイムスタンプを複合プライマリキーのように使用します。また、これらの値を更新することを許可しません。つまり、ソースデータベース内のレコードのタイムスタンプまたはディメンションを変更すると、Timestream データベースは新しいレコードを作成しようとします。したがって、レコードのディメンションまたはタイムスタンプを別の既存のレコードのディメンションまたはタイムスタンプと一致するように変更すると、 は新しいレコードを作成したり、以前の対応するレコードを更新したりする代わりに、他のレコードの値 AWS DMS を更新します。
+ **DDL コマンド:** の現在のリリースでは、 `CREATE TABLE`および `DROP TABLE` DDL コマンド AWS DMS のみがサポートされています。
+ **レコードの制限:** Timestream には、レコードサイズやメジャーサイズなど、レコードに関する制限があります。詳細については、「Amazon Timestream デベロッパーガイド」の「[クォータ](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)」を参照してください。[https://docs.aws.amazon.com/](https://docs.aws.amazon.com/)
+ **レコードと NULL 値の削除:** Timestream はレコードの削除をサポートしていません。ソースから削除されたレコードの移行をサポートするために、 は Timestream ターゲットデータベースのレコード内の対応するフィールド AWS DMS をクリアします。 は、対応するターゲットレコードのフィールドの値を、数値フィールドの場合は **0**、テキストフィールドの場合は **null**、ブール型フィールドの場合は **false** AWS DMS に変更します。
+ ターゲットとしての Timestream は、リレーショナルデータベース (RDBMS) 以外のソースをサポートしていません。
+ AWS DMS は、次のリージョンのターゲットとして Timestream のみをサポートします。
  + 米国東部 (バージニア北部)
  + 米国東部 (オハイオ)
  + 米国西部 (オレゴン)
  + 欧州 (アイルランド)
  + 欧州 (フランクフルト)
  + アジアパシフィック (シドニー)
  + アジアパシフィック (東京)
+ ターゲットとしての Timestream は、`TargetTablePrepMode` を `TRUNCATE_BEFORE_LOAD` に設定することをサポートしていません。この設定で `DROP_AND_CREATE` を使用しないことをお勧めします。

# のターゲットとしての Amazon RDS for Db2 と IBM Db2 LUW の使用 AWS DMS
<a name="CHAP_Target.DB2"></a>

 AWS Database Migration Service () を使用して、Db2 LUW データベースから Amazon RDS for Db2 またはオンプレミス Db2 データベースにデータを移行できますAWS DMS。

がターゲットとして AWS DMS サポートする Db2 LUW のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

Secure Sockets Layer (SSL) を使用して、Db2 LUW エンドポイントとレプリケーションインスタンスとの接続を暗号化できます。Db2 LUW エンドポイントで SSL を使用する方法の詳細については、「[での SSL の使用 AWS Database Migration Service](CHAP_Security.SSL.md)」を参照してください。

## のターゲットとして Db2 LUW を使用する場合の制限 AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

Db2 LUW データベースをターゲットとして使用する場合は、次の制限が適用されます AWS DMS。Db2 LUW をソースとして使用する場合の制限については、「[のソースとして Db2 LUW を使用する場合の制限 AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations)」を参照してください。
+ AWS DMS は、ソースが Db2 LUW または Db2 for z/OS の場合にのみ、ターゲットとして Db2 LUW をサポートします。
+ Db2 LUW をターゲットとして使用する場合、フル LOB モードのレプリケーションはサポートされません。
+ Db2 LUW をターゲットとして使用する場合、フルロードフェーズでは XML データ型がサポートされません。これは IBM dbload ユーティリティの制限です。詳細については、*IBM Informix Servers* ドキュメントの「[dbload ユーティリティ](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility)」を参照してください。
+ AWS DMS は、二重引用符 (") に対応する値を持つ BLOB フィールドを切り捨てます。これは IBM dbload ユーティリティの制限です。
+ AWS DMS DMS バージョン 3.5.3 で Db2 LUW ターゲットに移行する場合、 は並列全ロードオプションをサポートしていません。このオプションは、DMS バージョン 3.5.4 以降でのみ使用可能です。

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

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

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


| 名前 | 説明 | 
| --- | --- | 
|  `KeepCsvFiles`  |  true の場合、データのレプリケートに使用された .csv ファイルを Db2 LUW ターゲットに AWS DMS 保存します。DMS は、これらのファイルを分析とトラブルシューティングに使用します。  | 
|  `LoadTimeout`  |  DMS が Db2 ターゲットに対して実行するオペレーションを AWS DMS タイムアウトするまでの時間 (ミリ秒単位）。デフォルト値は 1200 (20 分) です。  | 
|  `MaxFileSize`  |  Db2 LUW へのデータ転送に使用する .csv ファイルの最大サイズ (KB 単位) を指定します。  | 
|  `WriteBufferSize`  |  DMS レプリケーションインスタンスで .csv ファイルをローカルディスクに生成するときに使用するメモリ内ファイル書き込みバッファのサイズ (KB 単位)。デフォルト値は 1024 (1 MB) です。  | 