

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

# DMS AWS エンドポイントの使用
<a name="CHAP_Endpoints"></a>

エンドポイントは、データストアに関する接続、データストアタイプ、位置情報を提供します。 AWS データベース移行サービスはこの情報を使用してデータストアに接続し、ソースエンドポイントからターゲットエンドポイントにデータを移行します。エンドポイント設定を使用して、エンドポイントの追加の接続属性を指定できます。このような設定で、ログ記録、ファイルサイズ、その他のパラメータを制御できます。エンドポイント設定の詳細については、データストアのドキュメントセクションを参照してください。

以下で、エンドポイントの詳細についてご参照ください。

**Topics**
+ [ソースおよびターゲットエンドポイントの作成](CHAP_Endpoints.Creating.md)
+ [「データ移行のソース」](CHAP_Source.md)
+ [「データ移行のターゲット」](CHAP_Target.md)
+ [の VPC エンドポイントの設定 AWS DMS](CHAP_VPC_Endpoints.md)
+ [でサポートされている DDL ステートメント AWS DMS](CHAP_Introduction.SupportedDDL.md)
+ [高度なエンドポイント設定](CHAP_Advanced.Endpoints.md)

# ソースおよびターゲットエンドポイントの作成
<a name="CHAP_Endpoints.Creating"></a>

レプリケーションインスタンスの作成時にソースエンドポイントとターゲットエンドポイントを作成することができます。また、レプリケーションインスタンスの作成後にエンドポイントを作成することもできます。ソースおよびターゲットデータストアには、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、Amazon Relational Database Service (Amazon RDS) DB インスタンス、またはオンプレミスデータベースを使用できます。(エンドポイントの 1 つが AWS サービス上にある必要があることに注意してください。 AWS DMS を使用してオンプレミスデータベースから別のオンプレミスデータベースに移行することはできません。)

次の手順では、DMS AWS コンソールウィザードを選択していることを前提としています。このステップは、 AWS DMS コンソールのナビゲーションペインで **[Endpoints]** (エンドポイント)、**[Create endpoint]** (エンドポイントの作成)の順に選択しても実行できます。コンソールウィザードを使用するときは、ソースエンドポイントとターゲットエンドポイントの両方を同じページで作成します。コンソールウィザードを使用しないときは、各エンドポイントを個別に作成します。

**AWS コンソールを使用してソースまたはターゲットデータベースエンドポイントを指定するには**

1. **[Connect source and target database endpoints]** (ソースおよびターゲット データベース エンドポイントの接続) ページで、ソースまたはターゲットデータベースの接続情報を指定します。次の表で設定について説明します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Endpoints.Creating.html)

   次の表に、リストされたデータベースエンジンのエンドポイントパスワードとシークレットマネージャーのシークレットでサポートされていない文字を示します。エンドポイントパスワードにカンマ (,) を使用する場合は、 で提供されている Secrets Manager サポートを使用して AWS DMS インスタンスへのアクセス AWS DMS を認証します。詳細については、「[シークレットを使用した AWS Database Migration Service エンドポイントへのアクセス](security_iam_secretsmanager.md)」を参照してください。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Endpoints.Creating.html)

1. 必要に応じて、**[エンドポイント設定]** と **[AWS KMS key ]** を選択します。**[Run test]** (テストの実行) を選択して、エンドポイントの接続をテストできます。次の表で設定について説明します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Endpoints.Creating.html)

# での Amazon RDS エンドポイントの IAM 認証の使用 AWS DMS
<a name="CHAP_Endpoints.Creating.IAMRDS"></a>

AWS Identity and Access Management (IAM) データベース認証は、IAM 認証情報を使用して AWS データベースアクセスを管理することで、Amazon RDS データベースのセキュリティを強化します。IAM 認証は、従来のデータベースパスワードを使用する代わりに、 AWS の認証情報を使用して、15 分間有効な短期の認証トークンを生成します。このアプローチにより、アプリケーションコードにデータベースパスワードを保存する必要がなくなり、認証情報が漏洩するリスクが軽減され、IAM による一元的なアクセス管理が提供されるため、セキュリティが大幅に向上します。また、既存の IAM AWS ロールとポリシーを活用してアクセス管理を簡素化し、他の AWS サービスで使用するのと同じ IAM フレームワークを使用してデータベースアクセスを制御できます。

AWS DMS Amazon RDS で MySQL、PostgreSQL、Aurora PostgreSQL、Aurora MySQL、または MariaDB エンドポイントに接続するときに、DMS バージョン 3.6.1 以降を実行しているレプリケーションインスタンスの IAM 認証をサポートするようになりました。これらのエンジンの新しいエンドポイントを作成するときは、データベース認証情報を提供する代わりに、IAM 認証を選択し、IAM ロールを指定できます。この統合により、移行タスクのデータベースパスワードの管理および保存が不要になるため、セキュリティが強化されます。

## での Amazon RDS エンドポイントの IAM 認証の設定 AWS DMS
<a name="CHAP_Endpoints.Creating.IAMRDS.config"></a>

エンドポイントの作成時に、Amazon RDS データベースの IAM 認証を設定できます。IAM 認証を設定するには、以下を実行します。

### DMS コンソール
<a name="CHAP_Endpoints.Creating.IAMRDS.console"></a>

1. Amazon RDS とデータベースユーザーの IAM 認証が有効になっていることを確認します。詳細については、「*Amazon リレーショナルデータベースサービスユーザーガイド*」の「[IAM データベース認証の有効化と無効化](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Enabling.html)」を参照してください。

1. IAM コンソールに移動し、以下のポリシーを使用して IAM ロールを作成します。

   ポリシー

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "rds-db:connect"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   信頼ポリシー:

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

****  

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

------

1. [https://console.aws.amazon.com/dms/v2](https://console.aws.amazon.com/dms/v2)のエンドポイント設定で、**[エンドポイントデータベースへのアクセス]** セクションに移動し、**[IAM 認証]** を選択します。

1. **[RDS データベース認証の IAM ロール]** ドロップダウンメニューで、データベースにアクセスするための適切なアクセス許可を持つ IAM ロールを選択します。

    詳細については、「[ソースおよびターゲットエンドポイントの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)」を参照してください。

### AWS CLI
<a name="CHAP_Endpoints.Creating.IAMRDS.awscli"></a>

1. Amazon RDS とデータベースユーザーの IAM 認証が有効になっていることを確認します。詳細については、「*Amazon リレーショナルデータベースサービスユーザーガイド*」の「[IAM データベース認証の有効化と無効化](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Enabling.html)」を参照してください。

1.  AWS CLI に移動し、IAM ロールを作成し、DMS がそのロールを引き受けることを許可します。

   ポリシー:

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "rds-db:connect"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   信頼ポリシー:

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

****  

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

------

1. 次のコマンドを実行して証明書をインポートし、PEM ファイルをダウンロードします。詳細については、「*Amazon リレーショナルデータベースサービスユーザーガイド*」の「[Amazon RDS 用認証バンドルのダウンロード](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesDownload)」を参照してください。

   ```
   aws dms import-certificate --certificate-identifier rdsglobal --certificate-pem file://~/global-bundle.pem
   ```

1. 次のコマンドを実行して IAM エンドポイントを作成します。
   + PostgreSQL/Aurora PostgreSQL エンドポイントの場合 (`sslmode` が `required` に設定されている場合、`--certificate-arn` フラグは必要ありません）: 

     ```
     aws dms create-endpoint --endpoint-identifier <endpoint-name> --endpoint-type <source/target> --engine-name <postgres/aurora-postgres> --username <db username with iam auth privileges> --server-name <db server name> --port <port number> --ssl-mode <required/verify-ca/verify-full> --postgre-sql-settings "{\"ServiceAccessRoleArn\": \"role arn created from step 2 providing permissions for iam authentication\", \"AuthenticationMethod\": \"iam\", \"DatabaseName\": \"database name\"}" --certificate-arn <if sslmode is verify-ca/verify full use cert arn generated in step 3, otherwise this parameter is not required>
     ```
   + MySQL、MariaDB、Aurora MySQL エンドポイントの場合: 

     ```
     aws dms create-endpoint --endpoint-identifier <endpoint-name> --endpoint-type <source/target> --engine-name <mysql/mariadb/aurora> --username <db username with iam auth privileges> --server-name <db server name> --port <port number> --ssl-mode <verify-ca/verify-full> --my-sql-settings "{\"ServiceAccessRoleArn\": \"role arn created from step 2 providing permissions for iam authentication\", \"AuthenticationMethod\": \"iam\", \"DatabaseName\": \"database name\"}" --certificate-arn <cert arn from previously imported cert in step 3>
     ```

1. 目的のレプリケーションインスタンスに対してテスト接続を実行してインスタンスエンドポイントの関連付けを作成し、すべてが正しく設定されていることを確認します。

   ```
   aws dms test-connection --replication-instance-arn <replication instance arn> --endpoint-arn <endpoint arn from previously created endpoint in step 4>
   ```
**注記**  
IAM 認証を使用する場合、テスト接続で提供されるレプリケーションインスタンスは AWS DMS バージョン 3.6.1 以降である必要があります。

## 制限事項
<a name="CHAP_Endpoints.Creating.IAMRDS.Limitations"></a>

AWS DMS Amazon RDS エンドポイントで IAM 認証を使用する場合、 には次の制限があります。
+ 現在、Amazon RDS PostgreSQL および Amazon Aurora PostgreSQL インスタンスは、IAM 認証による CDC 接続をサポートしていません。詳細については、「*Amazon リレーショナルデータベースサービスユーザーガイド*」の「[IAM データベース認証の制限事項](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Limitations)」を参照してください。

# 「データ移行のソース」
<a name="CHAP_Source"></a>

AWS Database Migration Service (AWS DMS) は、最も人気のあるデータエンジンの多くをデータレプリケーションのソースとして使用できます。データベースソースには、Amazon EC2 インスタンスまたはオンプレミスのデータベースで実行されているセルフ マネージド エンジンを使用できます。または、Amazon RDS や Amazon S3 などの AWS サービスのデータソースにすることもできます。

有効なソースの一覧については、「[AWS DMSのソース](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.title)」をご参照ください。

**Topics**
+ [のソースとしての Oracle データベースの使用 AWS DMS](CHAP_Source.Oracle.md)
+ [のソースとしての Microsoft SQL Server データベースの使用 AWS DMS](CHAP_Source.SQLServer.md)
+ [のソースとしての Microsoft Azure SQL データベースの使用 AWS DMS](CHAP_Source.AzureSQL.md)
+ [のソースとしての Microsoft Azure SQL マネージドインスタンスの使用 AWS DMS](CHAP_Source.AzureMgd.md)
+ [のソースとして Microsoft Azure Database for PostgreSQL Flexible Server を使用する AWS DMS](CHAP_Source.AzureDBPostgreSQL.md)
+ [Microsoft Azure Database for MySQL Flexible Server を のソースとして使用する AWS DMS](CHAP_Source.AzureDBMySQL.md)
+ [のソースとしての OCI MySQL Heatwave の使用 AWS DMS](CHAP_Source.heatwave.md)
+ [のソースとしての Google Cloud for MySQL の使用 AWS DMS](CHAP_Source.GC.md)
+ [のソースとしての Google Cloud for PostgreSQL の使用 AWS DMS](CHAP_Source.GCPostgres.md)
+ [PostgreSQL データベースを AWS DMS ソースとして使用する](CHAP_Source.PostgreSQL.md)
+ [のソースとしての MySQL 互換データベースの使用 AWS DMS](CHAP_Source.MySQL.md)
+ [のソースとしての SAP ASE データベースの使用 AWS DMS](CHAP_Source.SAP.md)
+ [のソースとしての MongoDB の使用 AWS DMS](CHAP_Source.MongoDB.md)
+ [のソースとしての Amazon DocumentDB (MongoDB 互換) の使用 AWS DMS](CHAP_Source.DocumentDB.md)
+ [のソースとしての Amazon S3 の使用 AWS DMS](CHAP_Source.S3.md)
+ [IBM Db2 for Linux、Unix、Windows、Amazon RDS データベース (Db2 LUW) を のソースとして使用する AWS DMS](CHAP_Source.DB2.md)
+ [IBM Db2 for z/OS データベースを のソースとして使用する AWS DMS](CHAP_Source.DB2zOS.md)

# のソースとしての Oracle データベースの使用 AWS DMS
<a name="CHAP_Source.Oracle"></a>

を使用して、1 つ以上の Oracle データベースからデータを移行できます AWS DMS。ソースとして Oracle データベースを使用すると、 AWS DMSが対応しているどのターゲットにもデータを移行できます。

AWS DMS は、次の Oracle データベースエディションをサポートしています。
+ Oracle Enterprise Edition
+ Oracle Standard Edition
+ Oracle Express Edition
+ Oracle Personal Edition

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

Secure Sockets Layer (SSL) を使用して、Oracle エンドポイントとレプリケーションインスタンスとの接続を暗号化できます。Oracle エンドポイントで SSL を使用する方法の詳細については、「[Oracle エンドポイントでの SSL のサポート](#CHAP_Security.SSL.Oracle)」を参照してください。

AWS DMS では、Oracle 透過的なデータ暗号化 (TDE) を使用して、ソースデータベースに保管中のデータを暗号化できます。Oracle ソースエンドポイントで Oracle TDE を使用する方法については、「[Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS](#CHAP_Source.Oracle.Encryption)」をご参照ください。

AWS は、Oracle エンドポイント (および他のすべてのエンドポイントタイプ) での TLS バージョン 1.2 以降の使用をサポートし、TLS バージョン 1.3 以降を使用することをお勧めします。

Oracle データベースを AWS DMS ソースエンドポイントとして設定するには、次の手順に従います。

1. が Oracle ソースデータベースにアクセス AWS DMS するための適切なアクセス許可を持つ Oracle ユーザーを作成します。

1. 選択した Oracle データベース設定に準拠する Oracle ソース エンドポイントを作成します。全ロードのみのタスクを作成する場合、これ以上設定は必要ありません。

1. 変更データキャプチャ (CDC のみまたは全ロードおよび CDC タスク) を処理するタスクを作成するには、Oracle LogMiner または AWS DMS Binary Reader を選択してデータ変更をキャプチャします。LogMiner または Binary Reader を選択すると、それ以降のアクセス許可と設定オプションのいくつかが決定されます。LogMiner と Binary Reader の比較については、次のセクションをご参照ください。

**注記**  
全ロードタスク、CDC のみのタスク、および全ロードおよび CDC タスクの詳細については、「[[Creating a task] (タスクの作成)](CHAP_Tasks.Creating.md)」をご参照ください。

Oracle ソースデータベースと の操作の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)
+ [のセルフマネージド型または AWSマネージド型の Oracle ソースデータベースを設定するためのワークフロー AWS DMSOracle ソースデータベースの設定](#CHAP_Source.Oracle.Workflows)
+ [のソースとしての自己管理型 Oracle データベースの使用 AWS DMS](#CHAP_Source.Oracle.Self-Managed)
+ [のソースとしての AWSマネージド Oracle データベースの使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed)
+ [のソースとして Oracle を使用する場合の制限 AWS DMS](#CHAP_Source.Oracle.Limitations)
+ [Oracle エンドポイントでの SSL のサポート](#CHAP_Security.SSL.Oracle)
+ [Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS](#CHAP_Source.Oracle.Encryption)
+ [Oracle を のソースとして使用するためのサポートされている圧縮方法 AWS DMS](#CHAP_Source.Oracle.Compression)
+ [Oracle を のソースとして使用してネストされたテーブルをレプリケートする AWS DMS](#CHAP_Source.Oracle.NestedTables)
+ [Oracle を のソースとして使用する場合の Oracle ASM への REDO の保存 AWS DMS](#CHAP_Source.Oracle.REDOonASM)
+ [のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)
+ [Oracle のソースデータ型](#CHAP_Source.Oracle.DataTypes)

## CDC での Oracle LogMiner または AWS DMS Binary Reader の使用
<a name="CHAP_Source.Oracle.CDC"></a>

では AWS DMS、Oracle の変更データキャプチャ (CDC) をソースとして実行する際に REDO ログを読み取るには、Oracle LogMiner と AWS DMS Binary Reader の 2 つの方法があります。LogMiner は、オンライン REDO ログとアーカイブ REDO ログファイルを読み取るための Oracle API です。Binary Reader は、raw REDO ログファイルを直接読み取り、解析する AWS DMS メソッドです。これらのメソッドには次の特徴があります。


| 機能 | LogMiner | Binary Reader | 
| --- | --- | --- | 
| 設定しやすい | はい | なし | 
| ソースシステムのI/Oと CPU への影響軽減 | いいえ | はい | 
| CDC パフォーマンスの向上 | いいえ | はい | 
| Oracle テーブル クラスターのサポート | はい | なし | 
| すべてのタイプの Oracle ハイブリッド列圧縮（HCC）をサポート | はい |  部分的 バイナリリーダーは CDC のタスクで QUERY LOW をサポートしていません。他のすべての HCC タイプが完全にサポートされています。  | 
| Oracle 12c でのみ LOB カラムのサポート | いいえ (LOB サポートは Oracle 12c の LogMiner では利用不可) | はい | 
| LOB カラムにのみ影響を与える UPDATE ステートメントに対応 | いいえ | はい | 
| Oracle Transparent データ暗号化 (TDE) に対応 |  部分的 Oracle LogMiner を使用する場合、 AWS DMS は Amazon RDS for Oracle の列レベルで TDE 暗号化をサポートしていません。  |  部分的 Binary Reader は、自己管理 Oracle データベースに対してのみ TDE をサポートします。  | 
| すべての Oracle 圧縮法に対応 | はい | なし | 
| XA トランザクションに対応 | いいえ | はい | 
| RAC |  はい パフォーマンス上の理由や DMS の内部制限事項により、推奨されません。  |  はい 強く推奨  | 

**注記**  
デフォルトでは、 は (CDC) に Oracle LogMiner AWS DMS を使用します。  
AWS DMS は、Oracle ソースデータベースを使用する際に透過的なデータ暗号化 (TDE) メソッドをサポートしています。指定した TDE 認証情報が正しくない場合でも、 AWS DMS の移行タスクは失敗しません。これにより、暗号化されたテーブルの継続的なレプリケーションに影響が及ぶ可能性があります。TDE 認証情報の指定の詳細については、「[Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS](#CHAP_Source.Oracle.Encryption)」を参照してください。

で LogMiner を使用する主な利点 AWS DMS は次のとおりです。
+ LogMiner では、暗号化オプションや圧縮オプションなど、ほとんどの Oracle オプションがサポートされています。Binary Reader では、すべての Oracle オプションがサポートされているわけではありません (特に圧縮とほとんどの暗号化のオプション)。
+ LogMiner には、特に Binary Reader の直接アクセスセットアップや、REDO ログが Oracle Automatic Storage Management (ASM) を使用して管理されている場合と比較して、シンプルな設定になっています。
+ LogMiner は、 で使用するテーブルクラスターをサポートしています AWS DMS。Binary Reader はサポートしません。

で Binary Reader を使用する主な利点 AWS DMS は次のとおりです。
+ 大量の変更を含む移行の場合、LogMiner は Oracle ソースデータベースをホストするコンピュータの I/O や CPU にある程度の影響を及ぼすことがあります。Binary Reader では、ログが複数のデータベース クエリを行うのではなく、直接マイニングされるため、I/O や CPU に影響を与える可能性が高くありません。
+ 大量の変更を含む移行の場合、Oracle LogMiner を使用するより Binary Reader を使用した方が CDC のパフォーマンスが通常はかなり高くなります。
+ Binary Reader では、Oracle バージョン 12c における LOB の CDC がサポートされています。LogMiner ではサポートされていません。

通常、次のいずれかの状況に該当しない限り、Oracle データベースの移行には Oracle LogMiner を使用します。
+ ソース Oracle データベースで複数の移行タスクを実行する必要がある。
+ ソース Oracle データベース上の変更のボリュームまたは REDO ログボリュームが多いか、または変更があり、Oracle ASM も使用している場合。

**注記**  
Oracle LogMiner と AWS DMS Binary Reader の使用を切り替える場合は、必ず CDC タスクを再起動してください。

### Oracle ソース データベースでの CDC の設定
<a name="CHAP_Source.Oracle.CDC.Configuration"></a>

Oracle ソース エンドポイントが変更データ キャプチャ (CDC) タスクでデータベースに接続するには、特に追加の接続属性を指定する必要があります。これは、全ロードタスクと CDC タスク、または CDC のみのタスクに当てはまります。指定する追加の接続属性は、REDO ログへのアクセスに使用する方法、Oracle LogMiner または AWS DMS Binary Reader によって異なります。

ソース エンドポイントを作成するときに追加の接続属性を指定します。接続属性の設定が複数ある場合は、空白を追加せずにそれぞれをセミコロンで区切ります (例: `oneSetting;thenAnother`)。

AWS DMS はデフォルトで LogMiner を使用します。これを使用するために、追加の接続属性を指定する必要はありません。

Binary Reader を使用してREDO ログにアクセスするには、以下の追加の接続属性を加えます。

```
useLogMinerReader=N;useBfile=Y;
```

次の追加の接続属性形式を使用して、Binary Reader で ASM を使用するサーバーにアクセスします。

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
```

ソースエンドポイントの `Password` リクエストパラメータに、Oracle ユーザーパスワードと ASM パスワードの両方をカンマで区切って含める必要があります。

```
oracle_user_password,asm_user_password
```

Oracle ソースが ASM を使用する場合、Binary Reader でハイ パフォーマンスオプションを使用して、スケールが大きいなトランザクション処理を実行できます。これらのオプションには、並列スレッド数 (`parallelASMReadThreads`) および先読みバッファ数 (`readAheadBlocks`) を指定する追加の接続属性が含まれます。これらの属性を一括設定すると、CDC タスクのパフォーマンスを大幅に改善できます。次に示す設定は、ほとんどの ASM 設定で良好な結果を提供します。

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
    parallelASMReadThreads=6;readAheadBlocks=150000;
```

追加の接続属性がサポートする値の詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」をご参照ください。

また、 ASM を使用したOracle ソースで CDC タスクのパフォーマンスは、選択した他の設定によって異なります。これらの設定には、 AWS DMS の追加の接続属性と Oracle ソースを設定するための SQL 設定が含まれます。ASM を使用した Oracle ソースの追加接続属性の詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」をご参照ください。

また、適切な CDC スタートポイントを選択する必要があります。通常、これを行う場合、CDC を開始する最も早いオープントランザクションをキャプチャするトランザクション処理点を特定します。そうしないと、CDC タスクは以前のオープントランザクションを見逃す可能性があります。Oracle ソースデータベースの場合、Oracle システム変更番号 (SCN) に基づいて CDC ネイティブのスタートポイントを選択して、この最も早いオープントランザクションを識別できます。詳細については、「[CDC 開始ポイントからのレプリケーションの実行](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint)」を参照してください。

自己管理型 Oracle データベースをソースとして使用するための CDC 設定の詳細については、「[Oracle LogMiner を使用して REDO ログにアクセスする場合に必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges)」、「[AWS DMS Binary Reader を使用して REDO ログにアクセスするときに必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)」や「[Oracle ASM で Binary Reader の使用時に必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)」をご参照ください。

マネージド Oracle データベースの CDC をソースとして設定する方法の詳細については、 AWS[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)「」および「」を参照してください[で Amazon RDS Oracle Standby (リードレプリカ) を Binary Reader for CDC のソースとして使用する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)。

## のセルフマネージド型または AWSマネージド型の Oracle ソースデータベースを設定するためのワークフロー AWS DMS


## Oracle ソースデータベースの設定
<a name="CHAP_Source.Oracle.Workflows"></a>

セルフマネージド型のソースデータベースインスタンスを設定するには、CDC の実行方法に応じて、次のワークフローステップを使用します。


| このワークフロー ステップの場合 | LogMiner を使用して CDC を実行する場合は、これを行います | Binary Reader を使用して CDC を実行する場合は、これを行います | 
| --- | --- | --- | 
| Oracle アカウントの特権を付与します。 | 「[のセルフマネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)」を参照してください | 「[のセルフマネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)」を参照してください | 
| CDC を使用してレプリケーション用のソースデータベースを準備します。 | 「[を使用した CDC 用の Oracle セルフマネージド型ソースデータベースの準備 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)」を参照してください | 「[を使用した CDC 用の Oracle セルフマネージド型ソースデータベースの準備 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)」を参照してください | 
| CDC に必要な追加の Oracle ユーザー権限を付与します。 | 「[Oracle LogMiner を使用して REDO ログにアクセスする場合に必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges)」を参照してください | 「[AWS DMS Binary Reader を使用して REDO ログにアクセスするときに必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)」を参照してください | 
| ASM を持つ Oracle インスタンスの場合は、 CDC のために ASM へのアクセスに必要な追加のユーザーアカウント権限を付与します。 | 追加のアクションはありません。 は、追加のアカウント権限なしで Oracle ASM AWS DMS をサポートします。 | 「[Oracle ASM で Binary Reader の使用時に必要なアカウント権限](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)」を参照してください。 | 
| まだ CDC の LogMiner または Binary Reader を使用するようにタスクを設定していない場合は、タスクを設定します。 | 「[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)」を参照してください | 「[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)」を参照してください | 
| Oracle スタンバイを CDC のソースとして設定します。 | AWS DMS はソースとして Oracle Standby をサポートしていません。 | 「[の Binary Reader for CDC でのソースとしての自己管理型 Oracle スタンバイの使用 AWS DMS](#CHAP_Source.Oracle.Self-Managed.BinaryStandby)」を参照してください。 | 

 AWSマネージド Oracle ソースデータベースインスタンスを設定するには、次のワークフローステップを使用します。


| このワークフロー ステップの場合 | LogMiner を使用して CDC を実行する場合は、これを行います | Binary Reader を使用して CDC を実行する場合は、これを行います | 
| --- | --- | --- | 
| Oracle アカウントの特権を付与します。 | 詳細については、「[AWSの マネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)」を参照してください。 | 詳細については、「[AWSの マネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)」を参照してください。 | 
| CDC を使用してレプリケーション用のソースデータベースを準備します。 | 詳細については、「[AWSの マネージド Oracle ソースの設定 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)」を参照してください。 | 詳細については、「[AWSの マネージド Oracle ソースの設定 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)」を参照してください。 | 
| CDC に必要な追加の Oracle ユーザー権限を付与します。 | 追加のアカウント権限は必要ありません。 | 詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。 | 
| まだ CDC の LogMiner または Binary Reader を使用するようにタスクを設定していない場合は、タスクを設定します。 | 詳細については、「[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)」を参照してください。 | 詳細については、「[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)」を参照してください。 | 
| Oracle スタンバイを CDC のソースとして設定します。 | AWS DMS はソースとして Oracle Standby をサポートしていません。 | 詳細については、「[で Amazon RDS Oracle Standby (リードレプリカ) を Binary Reader for CDC のソースとして使用する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)」を参照してください。 | 

## のソースとしての自己管理型 Oracle データベースの使用 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed"></a>

*セルフ管理データベース*は自分で構成および制御するデータベースで、ローカルのオンプレミス データベース インスタンスまたは Amazon EC2 上のデータベースのいずれかです。次に、 でセルフマネージド Oracle データベースを使用する際に必要な権限と設定について説明します AWS DMS。

### のセルフマネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Privileges"></a>

でソースとして Oracle データベースを使用するには AWS DMS、Oracle エンドポイント接続設定で指定された Oracle ユーザーに次の権限を付与します。

**注記**  
権限を付与する場合、オブジェクトのシノニムではなく、各オブジェクトの実際の名前を使用します。たとえば、下線のある `V_$OBJECT` を使用します。下線のない `V$OBJECT` は使用しません。

```
GRANT CREATE SESSION TO dms_user;
GRANT SELECT ANY TRANSACTION TO dms_user;
GRANT SELECT ON V_$ARCHIVED_LOG TO dms_user;
GRANT SELECT ON V_$LOG TO dms_user;
GRANT SELECT ON V_$LOGFILE TO dms_user;
GRANT SELECT ON V_$LOGMNR_LOGS TO dms_user;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO dms_user;
GRANT SELECT ON V_$DATABASE TO dms_user;
GRANT SELECT ON V_$THREAD TO dms_user;
GRANT SELECT ON V_$PARAMETER TO dms_user;
GRANT SELECT ON V_$NLS_PARAMETERS TO dms_user;
GRANT SELECT ON V_$TIMEZONE_NAMES TO dms_user;
GRANT SELECT ON V_$TRANSACTION TO dms_user;
GRANT SELECT ON V_$CONTAINERS TO dms_user;                   
GRANT SELECT ON ALL_INDEXES TO dms_user;
GRANT SELECT ON ALL_OBJECTS TO dms_user;
GRANT SELECT ON ALL_TABLES TO dms_user;
GRANT SELECT ON ALL_USERS TO dms_user;
GRANT SELECT ON ALL_CATALOG TO dms_user;
GRANT SELECT ON ALL_CONSTRAINTS TO dms_user;
GRANT SELECT ON ALL_CONS_COLUMNS TO dms_user;
GRANT SELECT ON ALL_TAB_COLS TO dms_user;
GRANT SELECT ON ALL_IND_COLUMNS TO dms_user;
GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO dms_user;
GRANT SELECT ON ALL_LOG_GROUPS TO dms_user;
GRANT SELECT ON ALL_TAB_PARTITIONS TO dms_user;
GRANT SELECT ON SYS.DBA_REGISTRY TO dms_user;
GRANT SELECT ON SYS.OBJ$ TO dms_user;
GRANT SELECT ON DBA_TABLESPACES TO dms_user;
GRANT SELECT ON DBA_OBJECTS TO dms_user; -– Required if the Oracle version is earlier than 11.2.0.3.
GRANT SELECT ON SYS.ENC$ TO dms_user; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS.
GRANT SELECT ON GV_$TRANSACTION TO dms_user; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher.
GRANT SELECT ON V_$DATAGUARD_STATS TO dms_user; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
GRANT SELECT ON V_$DATABASE_INCARNATION TO dms_user;
```

特定のテーブルリストを使用する場合は、レプリケーションテーブルごとに次の追加権限を付与します。

```
GRANT SELECT on any-replicated-table to dms_user;
```

検証機能を使用するための以下の権限を追加で付与します。

```
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO dms_user;
```

LogMiner の代わりに Binary Reader を使用する場合は、次の追加の権限を付与します。

```
GRANT SELECT ON SYS.DBA_DIRECTORIES TO dms_user;
```

ビューを公開するには、次の追加の権限を付与します。

```
GRANT SELECT on ALL_VIEWS to dms_user;
```

ビューを公開するには、ソースエンドポイントに追加の`exposeViews=true`接続属性も追加します。

サーバーレスレプリケーションを使用する場合は、次の追加のアクセス権限を付与します。

```
GRANT SELECT on dba_segments to dms_user;
GRANT SELECT on v_$tablespace to dms_user;
GRANT SELECT on dba_tab_subpartitions to dms_user;
GRANT SELECT on dba_extents to dms_user;
```

サーバーレスレプリケーションの詳細については、「[AWS DMS Serverless の使用](CHAP_Serverless.md)」を参照してください。

Oracle 独自の移行前評価を使用する場合は、以下のアクセス権限を追加で付与します。

```
GRANT SELECT on gv_$parameter  to dms_user;
GRANT SELECT on v_$instance to dms_user;
GRANT SELECT on v_$version to dms_user;
GRANT SELECT on gv_$ASM_DISKGROUP to dms_user;
GRANT SELECT on gv_$database to dms_user;
GRANT SELECT on dba_db_links to dms_user;
GRANT SELECT on gv_$log_History to dms_user;
GRANT SELECT on gv_$log to dms_user;
GRANT SELECT ON DBA_TYPES TO dms_user;
GRANT SELECT ON DBA_USERS to dms_user;
GRANT SELECT ON DBA_DIRECTORIES to dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

Oracle 独自の移行前評価の詳細については、「[Oracle の評価](CHAP_Tasks.AssessmentReport.Oracle.md)」を参照してください。

#### Oracle スタンバイのオープントランザクションを処理するための前提条件
<a name="CHAP_Source.Oracle.Self-Managed.Privileges.Standby"></a>

 AWS DMS バージョン 3.4.6 以降を使用する場合は、次の手順を実行して Oracle スタンバイのオープントランザクションを処理します。

1. プライマリデータベースに `AWSDMS_DBLINK` という名前のデータベースリンクを作成します。 `DMS_USER` は、データベースリンクを使用してプライマリデータベースに接続します。このデータベースリンクは、プライマリデータベースで実行されるオープントランザクションをクエリするためにスタンバイインスタンスから実行されることに注意します。次の例を参照してください。

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 次の例に示されるとおり、`DMS_USER` を使用したデータベースリンクへの接続が確立されていることを確認します。

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### を使用した CDC 用の Oracle セルフマネージド型ソースデータベースの準備 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Configuration"></a>

次の手順を実行して、CDC タスクを実行するソースとして自己管理型 Oracle データベースを準備します：
+ [がソースデータベースバージョン AWS DMS をサポートしていることの検証](#CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion).
+ [ARCHIVELOG モードがオンになっていることを確認する](#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode).
+ [サプリメンタル ロギングの設定](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).

#### がソースデータベースバージョン AWS DMS をサポートしていることの検証
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion"></a>

以下のようなクエリを実行して、現在のバージョンの Oracle ソースデータベースが AWS DMSでサポートされていることを確認します。

```
SELECT name, value, description FROM v$parameter WHERE name = 'compatible';
```

ここで `name`、`value`、および `description` は `name` の値に基づいてクエリされるデータベース内の任意の列です。このクエリがエラーなしで実行された場合、 はデータベースの最新バージョン AWS DMS をサポートし、移行を続行できます。クエリでエラーが発生した場合、 AWS DMS はデータベースの最新バージョンをサポートしていません。移行を続行するには、まず Oracle データベースを でサポートされているバージョンに変換します AWS DMS。

#### ARCHIVELOG モードがオンになっていることを確認する
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode"></a>

Oracle は、`ARCHIVELOG` モードと `NOARCHIVELOG` モードの 2 つの異なるモードで実行できます。CDC タスクを実行するには、`ARCHIVELOG` モードでデータベースを実行します。データベースが `ARCHIVELOG` モードにあるかどうかを確認するため、次のクエリを実行します。

```
SQL> SELECT log_mode FROM v$database;
```

もし `NOARCHIVELOG` mode が返されれば、オラクルの命令に従ってデータベースを `ARCHIVELOG` に設定します。

#### サプリメンタル ロギングの設定
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging"></a>

進行中の変更をキャプチャするには、Oracle ソースデータベースで最小限のサプリメンタルロギングを有効にする AWS DMS 必要があります。さらに、データベース内のレプリケーションされた各テーブルでサプリメンタル ロギングを有効にする必要があります。

デフォルトでは、 はレプリケートされたすべてのテーブルに`PRIMARY KEY`サプリメンタルロギング AWS DMS を追加します。 AWS DMS が`PRIMARY KEY`サプリメンタルロギングを追加できるようにするには、レプリケートされたテーブルごとに次の権限を付与します。

```
ALTER on any-replicated-table;
```

追加の接続属性 AWS DMS を使用して、追加されたデフォルトの`PRIMARY KEY`サプリメンタルロギングを無効にすることができます`addSupplementalLogging`。詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」を参照してください。

プライマリキー列を参照しない `WHERE` 句を使用してレプリケーション タスクでテーブルを更新する場合は、必ずサプリメンタル ログを有効にしてください。

**サプリメンタル ログをマニュアルでセットアップするには**

1. 次のクエリを実行して、データベースのサプリメンタル ログが有効になっていることを確認します。

   ```
   SELECT supplemental_log_data_min FROM v$database;
   ```

   返される結果が `YES` または `IMPLICIT` の場合は、データベースのサプリメンタル ログは有効です。

   そうなっていなければ、次のコマンドを実行して、データベースのサプリメンタル ログを有効にします。

   ```
   ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
   ```

1. 必要なサプリメンタル ログがレプリケートされたテーブルごとに追加されていることを確認します。

   以下の点を考慮してください。
   + `ALL COLUMNS` サプリメンタル ログがテーブルに追加済みなら、その追加は不要です。
   + プライマリキーが存在する場合は、プライマリキーのサプリメンタルロギングを追加します。これを行うには、プライマリキーにサプリメンタル ログを追加する形式を使用するか、サプリメンタル ログをデータベースのプライマリキー列に追加します。

     ```
     ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ```
   + プライマリキーが存在せず、テーブルに一意のインデックスが 1 つある場合、一意のインデックスのすべての列をサプリメンタルログに追加します。

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG GROUP LogGroupName (UniqueIndexColumn1[, UniqueIndexColumn2] ...) ALWAYS;
     ```

     `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` を使用しても、一意のインデックス列はログに追加されません。
   + プライマリキーがなく、テーブルに複数の一意のインデックスがある場合、 はアルファベット順の昇順リストで最初の一意のインデックス AWS DMS を選択します。前の項目と同様に、選択したインデックスの列にサプリメンタル ログを追加する必要があります。

     `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` を使用しても、一意のインデックス列はログに追加されません。
   + プライマリキーが存在せず、一意のインデックスがない場合は、すべての列にサプリメンタルロギングを追加します。

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
     ```

     場合によっては、ターゲットテーブルのプライマリキーまたは一意のインデックスは、ソーステーブルのプライマリキーまたは一意のインデックスと異なります。その場合、ターゲット テーブルのプライマリ キーまたは一意のインデックスを構成するソース テーブル列でサプリメンタル ログを手動で追加します。

     ターゲットテーブルのプライマリキーを変更する場合、ソースプライマリキーまたは一意のインデックスではなく、ターゲットの一意のインデックスの列にサプリメンタルロギングを追加する必要があります。

テーブルにフィルターまたは変換が定義されている場合は、追加のロギングを有効にする必要があります。

以下の点を考慮してください。
+ `ALL COLUMNS` サプリメンタル ログがテーブルに追加済みなら、その追加は不要です。
+ テーブルに一意のインデックスやプライマリ キーがある場合、フィルターまたは変換に関係する列ごとにサプリメンタル ログを追加します。ただし、これらの列がプライマリ キーまたは一意のインデックス列と異なる場合にのみ行ってください。
+ 変換で列が 1 つしか使用されない場合は、この列をサプリメンタル ログ グループに追加しないでください。たとえば、変換 `A+B` の場合は、列 `A` と `B` の両方にサプリメンタルロギングを追加します。ただし、変換 `substring(A,10)` の場合、列 `A` にサプリメンタルロギングを追加しないでください。
+ プライマリ キーや一意のインデックス列、フィルタリングまたは変換されるその他の列の両方にサプリメンタル ログを設定するには、`USER_LOG_GROUP` サプリメンタル ログを追加できます。プライマリ キー/一意のインデックス列、フィルタリングまたは変換されるその他の特定の列の両方にこのサプリメンタル ログを追加します。

  たとえば、`TEST.LOGGING` という名前のテーブルをプライマリ キー `ID` と列 `NAME` によるフィルターでレプリケーションするには、次のようなコマンドを実行して、ロググループのサプリメンタル ログを作成します。

  ```
  ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
  ```

### Oracle LogMiner を使用して REDO ログにアクセスする場合に必要なアカウント権限
<a name="CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges"></a>

Oracle LogMiner を使用して REDO ログにアクセスするには、Oracle エンドポイント接続設定で指定されている Oracle ユーザーに次の権限を付与します。

```
GRANT EXECUTE on DBMS_LOGMNR to dms_user;
GRANT SELECT on V_$LOGMNR_LOGS to dms_user;
GRANT SELECT on V_$LOGMNR_CONTENTS to dms_user;
GRANT LOGMINING to dms_user; -– Required only if the Oracle version is 12c or higher.
```

### AWS DMS Binary Reader を使用して REDO ログにアクセスするときに必要なアカウント権限
<a name="CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges"></a>

 AWS DMS Binary Reader を使用して REDO ログにアクセスするには、Oracle エンドポイント接続設定で指定された Oracle ユーザーに次の権限を付与します。

```
GRANT SELECT on v_$transportable_platform to dms_user;   -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM.
GRANT CREATE ANY DIRECTORY to dms_user;                  -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance does not have file-level access to the redo logs and the redo logs are on non-ASM storage.
GRANT EXECUTE on DBMS_FILE_TRANSFER to dms_user;         -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method.
GRANT EXECUTE on DBMS_FILE_GROUP to dms_user;
```

Binary Reader は、Oracle ディレクトリを含む Oracle ファイル機能で動作します。各 Oracle ディレクトリオブジェクトには、処理する REDO ログファイルが格納されているフォルダの名前が含まれます。これらの Oracle ディレクトリは、ファイルシステムレベルでは認識されません。代わりに、これらは Oracle データベースレベルで作成される論理ディレクトリとなります。これらのビューは、Oracle `ALL_DIRECTORIES` ビューで表示できます。

これらの Oracle ディレクトリ AWS DMS を作成する場合は、前述の`CREATE ANY DIRECTORY`権限を付与します。 は、 `DMS_`プレフィックスを使用してディレクトリ名 AWS DMS を作成します。`CREATE ANY DIRECTORY` 権限を付与しない場合は、対応するディレクトリを手動で作成します。このような場合、Oracle ディレクトリを手動で作成すると、Oracle ソースエンドポイントで指定された Oracle ユーザーがこれらのディレクトリを作成したユーザーではない場合があります。このような場合は、`READ on DIRECTORY` 権限も付与します。

**注記**  
AWS DMS CDC は、自動REDOトランスポートサービスを使用するように設定されていないアクティブデータ保護スタンバイをサポートしていません。

このような場合、Oracle 管理ファイル (OMF) を使用してログを保存することがあります。または、ソース エンドポイントは ADG にあり、CREATE ANY DIRECTORY 権限を付与できません。このような場合は、 AWS DMS レプリケーションタスクを開始する前に、可能なすべてのログの場所を含むディレクトリを手動で作成します。が想定する事前作成されたディレクトリを見つけ AWS DMS られない場合、タスクは停止します。また、 AWS DMS は`ALL_DIRECTORIES`ビューで作成したエントリを削除しないため、手動で削除します。

### Oracle ASM で Binary Reader の使用時に必要なアカウント権限
<a name="CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges"></a>

Binary Reader を使用して Automatic Storage Management (ASM) の REDO ログにアクセスするには、Oracle エンドポイント接続設定で指定された Oracle ユーザーに次の権限を付与します。

```
SELECT ON v_$transportable_platform
SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and higher, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.
```

ASM アカウントへのアクセスを検証するには、上記で指定された Oracle バージョンに応じて、コマンド プロンプトを開き、次のいずれかのステートメントを呼び出します。

`SYSDBA` 特権が必要な場合は、以下を使用します。

```
sqlplus asmuser/asmpassword@+asmserver as sysdba
```

`SYSASM` 特権が必要な場合は、以下を使用します。

```
sqlplus asmuser/asmpassword@+asmserver as sysasm
```

### の Binary Reader for CDC でのソースとしての自己管理型 Oracle スタンバイの使用 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.BinaryStandby"></a>

CDC 用 Binary Reader を使用するときにソースとして Oracle Standby インスタンスを構成するには、次の前提条件からスタートします：
+ AWS DMS は現在、Oracle Active Data Guard スタンバイのみをサポートしています。
+ Oracle Data Guard の構成で次のものが使用されていることを確認します：
  + REDO データの自動転送用 REDO トランスポート サービス。
  + サービスを適用して、スタンバイデータベースに REDO を自動的に適用します。

上記の要件が満たされていることを確認するには、次のクエリを実行します。

```
SQL> select open_mode, database_role from v$database;
```

クエリの出力で、スタンバイデータベースが読み取り専用モードで開かれており、REDO が自動的に適用されていることを確認します。例えば、次のようになります。

```
OPEN_MODE             DATABASE_ROLE
--------------------  ----------------
READ ONLY WITH APPLY  PHYSICAL STANDBY
```

**CDC 用 Binary Reader を使用するときにソースとして Oracle スタンバイインスタンスを設定するには**

1. スタンバイ ログファイルへのアクセスに必要な追加の権限を付与します。

   ```
   GRANT SELECT ON v_$standby_log TO dms_user;
   ```

1.  AWS マネジメントコンソール または AWS CLIを使用して、Oracle スタンバイのソースエンドポイントを作成します。エンドポイントを作成する場合、次の追加の接続属性を指定します。

   ```
   useLogminerReader=N;useBfile=Y;
   ```
**注記**  
では AWS DMS、追加の接続属性を使用して、REDO ログの代わりにアーカイブログから移行するかどうかを指定できます。詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」を参照してください。

1. アーカイブログの保存先を設定します。

   ASM を使用しない Oracle ソースの DMS Binary Reader は、Oracle ディレクトリを使用してアーカイブの REDO ログにアクセスします。データベースがアーカイブログの宛先として高速リカバリ領域 (FRA) を使用するように設定されている場合、アーカイブ REDO ファイルの場所は一定ではありません。アーカイブ REDO ログが毎日生成されると、YYYY\$1MM\$1DD 形式のディレクトリ名を使用して、FRA に新しいディレクトリが作成されます。例えば、次のようになります。

   ```
   DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD
   ```

   DMS が新しく作成された FRA ディレクトリ内のアーカイブ REDOファイルにアクセスする必要があり、プライマリの読み取り/書き込みデータベースがソースとして使用されている場合、DMS は次のとおり新しい Oracle ディレクトリを作成するか、既存の Oracle ディレクトリを置き換えます。

   ```
   CREATE OR REPLACE DIRECTORY dmsrep_taskid AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD’;
   ```

   スタンバイデータベースがソースとして使用されている場合、データベースは読み取り専用モードであるため、DMS は Oracle ディレクトリを作成または置換できません。ただし、次の追加手順のいずれかを実行できます。

   1. Oracle が毎日サブディレクトリを作成しない設定の場合、FRA の代わりに実際のパスを使用するように `log_archive_dest_id_1` を変更します。

      ```
      ALTER SYSTEM SET log_archive_dest_1=’LOCATION=full directory path’
      ```

      次に、DMS が使用する Oracle ディレクトリオブジェクトを作成します。

      ```
      CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘full directory path’;
      ```

   1. 追加のアーカイブログの保存先と、その保存先を指す Oracle ディレクトリオブジェクトを作成します。例えば、次のようになります。

      ```
      ALTER SYSTEM SET log_archive_dest_3=’LOCATION=full directory path’; 
      CREATE DIRECTORY dms_archived_log AS ‘full directory path’;
      ```

      次に、タスクのソースエンドポイントに追加の接続属性を追加します。

      ```
      archivedLogDestId=3
      ```

   1. DMS で使用する Oracle ディレクトリオブジェクトを手動で事前作成します。

      ```
      CREATE DIRECTORY dms_archived_log_20210301 AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01’;
      CREATE DIRECTORY dms_archived_log_20210302 AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02’; 
      ...
      ```

   1. 毎日実行され、必要なディレクトリを作成する Oracle スケジューラジョブを作成します。

1. オンラインログの送信先を設定します。

   スタンバイ REDO ログを使用して OS ディレクトリを指す Oracle ディレクトリを作成します。

   ```
   CREATE OR REPLACE DIRECTORY STANDBY_REDO_DIR AS '<full directory path>';
   GRANT READ ON DIRECTORY STANDBY_REDO_DIR TO <dms_user>;
   ```

### での CDC のソースとしての Oracle Cloud Infrastructure (OCI) でのユーザー管理データベースの使用 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.OCI"></a>

ユーザー管理データベースとは、仮想マシン (VM)、ベアメタル、または Exadata サーバー上に作成された Oracle データベースなど、ユーザーが設定して管理するデータベースです。または、Oracle Cloud Infrastructure (OCI) などの専用インフラストラクチャ上で実行される、ユーザーが設定して管理するデータベースもあります。次の情報は、 AWS DMSの変更データキャプチャ (CDC) のソースとして OCI 上の Oracle ユーザー管理データベースを使用する際に必要なアクセス権限と設定について説明しています。

**OCI でホストされるユーザー管理の Oracleデータベースを変更データキャプチャのソースとして設定するには**

1. OCI 上のユーザーマネージドの Oracle ソースデータベースに必要なユーザーアカウントアクセス権限を付与します。詳細については、「[Account privileges for a self-managed Oracle source endpoint](#CHAP_Source.Oracle.Self-Managed.Privileges)」を参照してください。

1. Binary Reader を使用して REDO ログにアクセスする際に必要なアカウントアクセス権限を付与します。詳細については、「[Account privileges required when using Binary Reader](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)」を参照してください。

1. Oracle Automatic Storage Management (ASM)で Binary Reader を使用する場合に必要なアカウントアクセス権限を追加します。詳細については、「[Additional account privileges required when using Binary Reader with Oracle ASM](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)」を参照してください。

1. サプリメンタルロギングをセットアップします。詳細については、「[Setting up supplemental logging](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)」を参照してください。

1. TDE 暗号化を設定します。詳細については、「[Encryption methods when using an Oracle database as a source endpoint](#CHAP_Source.Oracle.Encryption)」を参照してください。

Oracle Cloud Infrastructure (OCI) 上の Oracle ソースデータベースからデータをレプリケートする場合、次の制限が適用されます。

**制限事項**
+ DMS では、Oracle LogMiner を使用した REDO ログへのアクセスをサポートしていません。
+ DMS は Autonomous DB をサポートしていません。

## のソースとしての AWSマネージド Oracle データベースの使用 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed"></a>

 AWSマネージドデータベースは、Amazon RDS、Amazon Aurora、Amazon S3 などの Amazon サービス上にあるデータベースです。で AWSマネージド Oracle データベースを使用するときに設定する必要がある権限と設定を以下に示します AWS DMS。

### AWSの マネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges"></a>

Oracle ソース エンドポイント定義で指定された Oracle ユーザーアカウントに、以下の権限を付与します。

**重要**  
`dms_user` や `any-replicated-table` などすべてのパラメータ値では、大文字と小文字を区別する識別子を使用して値を指定しない限り、Oracle は値をすべて大文字と見なします。たとえば、`CREATE USER myuser` または `CREATE USER MYUSER` のように引用符を使用しない `dms_user` の値を作成するとします。この場合、Oracle は値をすべて大文字 (`MYUSER`) として識別して格納します。`CREATE USER "MyUser"`や`CREATE USER 'MyUser'`のように引用符を使用すると、Oracle は、指定した大文字と小文字を区別する値を識別して格納します (`MyUser`)。

```
GRANT CREATE SESSION to dms_user;
GRANT SELECT ANY TRANSACTION to dms_user;
GRANT SELECT on DBA_TABLESPACES to dms_user;
GRANT SELECT ON any-replicated-table to dms_user;
GRANT EXECUTE on rdsadmin.rdsadmin_util to dms_user;
 -- For Oracle 12c or higher:
GRANT LOGMINING to dms_user; – Required only if the Oracle version is 12c or higher.
```

さらに、`SELECT` と `EXECUTE` のアクセス許可を次のように Amazon RDS 手順 `rdsadmin.rdsadmin_util.grant_sys_object` を使用して `SYS` オブジェクトに付与します。詳細については、「[SYS オブジェクトへの SELECT または EXECUTE 権限の付与](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html#Appendix.Oracle.CommonDBATasks.TransferPrivileges)」をご参照ください。

```
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','dms_user','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'dms_user', 'EXECUTE');

-- (as of Oracle versions 12.1 and higher)
exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'dms_user', 'SELECT');

-- (for Amazon RDS Active Dataguard Standby (ADG))
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'dms_user', 'SELECT'); 

-- (for transparent data encryption (TDE))

exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'dms_user', 'SELECT'); 
               
-- (for validation with LOB columns)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'dms_user', 'EXECUTE');
                    
-- (for binary reader)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','dms_user','SELECT'); 
                    
-- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'dms_user', 'SELECT');
```

 AWS DMS で Amazon RDS アクティブデータガードスタンバイ (ADG) の使用の詳細については、「[で Amazon RDS Oracle Standby (リードレプリカ) を Binary Reader for CDC のソースとして使用する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)」をご参照ください。

での Oracle TDE の使用の詳細については AWS DMS、「」を参照してください[Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS](#CHAP_Source.Oracle.Encryption)。

#### Oracle スタンバイのオープントランザクションを処理するための前提条件
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges.Standby"></a>

 AWS DMS バージョン 3.4.6 以降を使用する場合は、次の手順を実行して Oracle スタンバイのオープントランザクションを処理します。

1. プライマリデータベースに `AWSDMS_DBLINK` という名前のデータベースリンクを作成します。 `DMS_USER` は、データベースリンクを使用してプライマリデータベースに接続します。このデータベースリンクは、プライマリデータベースで実行されるオープントランザクションをクエリするためにスタンバイインスタンスから実行されることに注意します。次の例を参照してください。

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 次の例に示されるとおり、`DMS_USER` を使用したデータベースリンクへの接続が確立されていることを確認します。

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### AWSの マネージド Oracle ソースの設定 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Configuration"></a>

 AWSマネージド Oracle データベースを のソースとして使用する前に AWS DMS、Oracle データベースに対して次のタスクを実行します。
+ 自動バックアップを有効化します。自動バックアップの有効化の詳細については、*Amazon RDS ユーザーガイド* の「[自動バックアップの有効化](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling)」をご参照ください。
+ サプリメンタルロギングをセットアップします。
+ アーカイブを設定します。Amazon RDS for Oracle DB インスタンスの REDO ログをアーカイブすると AWS DMS 、 は Oracle LogMiner または Binary Reader を使用してログ情報を取得できます。

**アーカイブを設定するには**

1. `rdsadmin.rdsadmin_util.set_configuration` コマンドを実行してアーカイブをセットアップします。

   たとえば、アーカイブされた REDO ログを 24 時間保持するには、次のコマンドを実行します。

   ```
   exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
   commit;
   ```
**注記**  
変更を反映するにはコミットが必要です。

1. 指定された保持期間中、アーカイブされた REDO ログのための十分な容量がストレージにあることを確認します。たとえば、保持期間が 24 時間の場合は、通常のトランザクション処理時間における累積アーカイブ REDO ログの合計サイズを計算し、その合計に 24 を掛けます。この計算された 24 時間の合計と、使用可能なストレージ容量を比較し、24 時間のトランザクション処理を処理するのに十分なストレージ領域があるかどうかを判断します。

**サプリメンタルロギングをセットアップするには**

1. データベース レベルでサプリメンタル ログを有効にするには、次のコマンドを実行します。

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
   ```

1. 次のコマンドを実行してプライマリ キー列のサプリメンタル ログを有効にします。

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
   ```

1. (オプション) テーブル レベルでキーレベルのサプリメンタル ログを有効にします。

   キーレベルのサプリメンタル ログを有効にすると、ソースデータベースで多少のオーバーヘッドが生じます。したがって、テーブルのサブセットのみを移行する場合は、テーブルレベルでのサプリメンタル ログを有効にすることをお勧めします。キーレベルのサプリメンタル ログをテーブル レベルで有効にするには、次のコマンドを使用します。

   ```
   alter table table_name add supplemental log data (PRIMARY KEY) columns;
   ```

### の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.CDC"></a>

Binary Reader for CDC を使用して、ソース Amazon RDS for Oracle インスタンスのREDOログにアクセスする AWS DMS ように を設定できます。

**注記**  
Oracle LogMiner を使用するには、最低限必要なユーザーアカウント権限で十分です。詳細については、「[AWSの マネージド Oracle ソースに必要なユーザーアカウント権限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)」を参照してください。

 AWS DMS Binary Reader を使用するには、バージョン AWS DMS に応じて、Oracle ソースエンドポイントの追加設定と追加の接続属性を指定します。

Binary Reader のサポートは、Amazon RDS for Oracle の次のバージョンで利用できます。
+ Oracle バージョン 12.1.0.2.v11 以降
+ Oracle バージョン 12.1.0.2.v7 以降
+ Oracle 12.2 – すべてのバージョン
+ Oracle 18.0 – すべてのバージョン
+ Oracle 19.0 – すべてのバージョン

**Binary Reader を使用して CDC を設定するには**

1. Amazon RDS for Oracle ソース データベースにマスターユーザーとしてログインし、次のストアド プロシージャを実行してサーバーレベル ディレクトリを作成します。

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. Oracle ユーザーアカウントに、Oracle ソース エンドポイントにアクセスするための以下の権限を付与します。

   ```
   GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user;
   ```

1. Amazon RDS Oracle ソースエンドポイントで、次の追加の接続属性を設定します。
   + RDS Oracle バージョン 11.2 と 12.1 では、次のように設定します。

     ```
     useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true;
     oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
     ```
   + RDS Oracle バージョン 12.2、18.0、19.0 では、次のように設定します。

     ```
     useLogminerReader=N;useBfile=Y;
     ```

**注記**  
複数の属性設定には、セミコロン区切り文字 (;) の後に空白を含めることはできません、例えば `oneSetting;thenAnother`。

CDC タスクの設定の詳細については、「[Oracle ソース データベースでの CDC の設定](#CHAP_Source.Oracle.CDC.Configuration)」をご参照ください。

### で Amazon RDS Oracle Standby (リードレプリカ) を Binary Reader for CDC のソースとして使用する AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.StandBy"></a>

 AWS DMSで CDC 用 Binary Reader を使用する場合は、ソースとして Amazon RDS for Oracle スタンバイを使用するための次の前提条件を確認します:
+ Oracle マスターユーザーを使用して、 Binary Reader を設定します。
+  AWS DMS 現在、 が Oracle Active Data Guard Standby のみの使用をサポートしていることを確認します。

その後、CDC 用 Binary Reader を使用するときに、次の手順に従ってソースとして RDS for Oracle スタンバイを使用します。

**CDC 用 Binary Reader を使用するときにソースとして RDS for Oracle スタンバイを設定するには**

1. RDS for Oracle のプライマリインスタンスに管理ユーザーとしてサインインします。

1. Amazon RDS ユーザーガイドに記載されている次のストアドプロシージャを実行して、サーバーレベル ディレクトリを作成します。

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. ステップ 2 で作成したディレクトリを特定します。

   ```
   SELECT directory_name, directory_path FROM all_directories
   WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' )
           OR directory_name LIKE ( 'ONLINELOG_DIR_%' )
   ```

   たとえば、前述のコードでは、次のようなディレクトリの一覧が表示されます。  
![\[Table showing directory names and their corresponding paths for archive and online logs.\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-rds-server-level-directories.png)

1. Oracle スタンバイにアクセスするために使用する Oracle ユーザーアカウントに対する前述のディレクトリに対する `Read` の権限を許可します。

   ```
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_B TO dms_user;
   ```

1. プライマリ インスタンスでアーカイブ ログ スイッチを実行します。これを行うと、`ALL_DIRECTORIES` の変更が Oracle スタンバイにも移植されることを確認します。

1. `ALL_DIRECTORIES` Oracle Standby でクエリを実行して、変更が適用されたことを確認します。

1. マネジメントコンソールまたは AWS Command Line Interface () を使用して、Oracle スタンバイの AWS DMS ソースエンドポイントを作成しますAWS CLI。エンドポイントの作成時に、次の追加の接続属性を指定します。

   ```
   useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
   ```

1. エンドポイントを作成したら、コンソールのエンドポイント**の作成ページでエンドポイント****接続をテスト**するか、 AWS CLI `test-connection` コマンドを使用して接続が確立されていることを確認します。

## のソースとして Oracle を使用する場合の制限 AWS DMS
<a name="CHAP_Source.Oracle.Limitations"></a>

Oracle データベースを AWS DMSのソースとして使用する場合は、以下の制限が適用されます。
+ AWS DMS は、 AWS DMS バージョン 3.5.0 以降の Oracle Extended データ型をサポートしています。
+ AWS DMS は長いオブジェクト名 (30 バイト以上) をサポートしていません。
+ AWS DMS は関数ベースのインデックスをサポートしていません。
+ サプリメンタル ログを管理し、いずれかの列で変換を実行する場合は、すべてのフィールドと列でサプリメンタル ログが有効になっていることを確認してください。サプリメンタル ログの設定の詳細については、以下のトピックをご参照ください：
  + セルフ管理 Oracle ソースデータベースについては、「[サプリメンタル ロギングの設定](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)」をご参照ください。
  +  AWSマネージド Oracle ソースデータベースについては、「」を参照してください[AWSの マネージド Oracle ソースの設定 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)。
+ AWS DMS は、マルチテナントコンテナルートデータベース (CDB\$1ROOT) をサポートしていません。しかし、Binary Reader を使用した PDB をサポートしています。
+ AWS DMS は遅延制約をサポートしていません。
+ AWS DMS バージョン 3.5.3 以降では、安全な LOBs。
+ AWS DMS は、サポートされているすべての Oracle バージョン 11 以降の`rename table table-name to new-table-name`構文をサポートしています。この構文は Oracle バージョン 10 ソースデータベースではサポートされていません。
+ AWS DMS は DDL ステートメント の結果をレプリケートしません`ALTER TABLE ADD column data_type DEFAULT default_value`。ターゲットに `default_value` をレプリケートする代わりに、新しい列を `NULL` に設定します。
+  AWS DMS バージョン 3.4.7 以降を使用する場合、パーティションまたはサブパーティションオペレーションに起因する変更をレプリケートするには、DMS タスクを開始する前に次の操作を行います。
  + パーティション分割されたテーブル構造 (DDL) を手動で作成します。
  + DDL が Oracle ソースと Oracle ターゲットの両方で同じであることを確認します。
  + 追加の接続属性 `enableHomogenousPartitionOps=true` を設定します。

  `enableHomogenousPartitionOps` の詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」を参照してください。また、全ロード \$1 CDC タスクでは、DMS はキャッシュした変更の一部としてキャプチャしたデータ変更をレプリケートしないことにも注意します。このようなユースケースでは、Oracle ターゲットでテーブル構造を再作成して、該当テーブルをもう一度ロードします。

   AWS DMS バージョン 3.4.7 より前:

  DMS は、パーティション操作またはサブパーティション操作 (`ADD`、`DROP`、`EXCHANGE`、`TRUNCATE`) によるデータ変更をレプリケートしません。このような更新により、レプリケーション中に次のエラーが発生する可能性があります：
  + `ADD` オペレーションの場合、追加されたデータの更新と削除により、「影響を受ける行は 0 です」という警告が表示されることがあります。
  + `DROP` および `TRUNCATE` オペレーションの場合、新しい挿入によって「重複」エラーが発生する可能性があります。
  + `EXCHANGE` オペレーションは、「影響を受ける行は 0 です」警告と「重複」エラーの両方が発生する可能性があります。

  パーティションオペレーションまたはサブパーティションオペレーションによる変更をレプリケートするには、対象のテーブルをリロードします。新しい空のパーティションを追加した後、新しく追加されたテーブルに対するオペレーションは、通常どおりターゲットへのレプリケーションとなります。
+ AWS DMS 3.4 より前のバージョンでは、ソースで `CREATE TABLE AS`ステートメントを実行した結果生じるターゲットのデータ変更をサポートしていません。ただし、新しいテーブルがターゲットで作成されます。
+ AWS DMS は、テーブルメタデータや `OBJECT_ID`フィールドなど、Oracle `DBMS_REDEFINITION`パッケージによって行われた変更をキャプチャしません。
+ サイズ制限のある LOB モードが有効な場合、Oracle ソース上の空のBLOB/CLOB 列は NULL 値としてレプリケートされます。完全 LOB モードが有効な場合、空の文字列 (' ') としてレプリケートされます。
+ Oracle 11 LogMiner で変更をキャプチャすると、文字列の長さが 1982 より大きい CLOB 列の更新が失われ、ターゲットは更新されません。
+ 変更データキャプチャ (CDC) 中、 AWS DMS はプライマリキーとして定義された数値列へのバッチ更新をサポートしていません。
+ AWS DMS は、特定の`UPDATE`コマンドをサポートしていません。次の例は、サポートされていない `UPDATE` コマンドです。

  ```
  UPDATE TEST_TABLE SET KEY=KEY+1;
  ```

  ここで、`TEST_TABLE` はテーブル名であり、`KEY` は、プライマリキーとして定義された数値列です。
+ AWS DMS は、LONG 列と LONG RAW 列をロードするためのフル LOB モードをサポートしていません。この代わりに、制限付き LOB モードを使用してこのようなデータ型を Oracle ターゲットに移行できます。限定 LOB モードでは、 は、64 KB を超える LONG または LONG RAW 列に設定したデータを 64 KB に AWS DMS 切り捨てます。
+ AWS DMS は、XMLTYPE 列をロードするためのフル LOB モードをサポートしていません。この代わりに、制限付き LOB モードを使用して XMLTYPE 列を Oracle ターゲットに移行できます。制限付き LOB モードでは、DMS はユーザー定義の「最大 LOB サイズ」変数以上のデータは切り捨てます。「最大 LOB サイズ」の最大推奨値は 100 MB です。
+ AWS DMS は、名前にアポストロフィが含まれているテーブルをレプリケートしません。
+ AWS DMS は、マテリアライズドビューからの CDC をサポートします。ただし、DMS はその他のビューからの CDC はサポートしていません。
+ AWS DMS は、オーバーフローセグメントを持つインデックス組織テーブルの CDC をサポートしていません。
+ AWS DMS は、 を `enableHomogenousPartitionOps`に設定して参照によってパーティション分割されたテーブルの `Drop Partition`オペレーションをサポートしていません`true`。
+ Oracle LogMiner を使用して REDO ログにアクセスする場合、 には次の制限 AWS DMS があります。
  + Oracle 12 の場合のみ、 AWS DMS は LOB 列に変更をレプリケートしません。
  + AWS DMS は、Oracle LogMiner の使用中にレプリケーションで XA トランザクションをサポートしていません。
  + Oracle LogMiner はプラグイン可能なデータベース (PDB) への接続をサポートしていません。PDB に接続するには、Binary Reader を使用して REDO ログにアクセスします。
  + SHRINK SPACE 操作はサポートされていません。
+ Binary Reader を使用する場合、 には次の制限 AWS DMS があります。
  + テーブルクラスターはサポートされていません。
  + テーブルレベルでの `SHRINK SPACE` オペレーションのみがサポートされます。このレベルには、テーブル全体、パーティション、サブパーティションが含まれます。
  + キー圧縮によるインデックス構成表への変更はサポートされません。
  + RAW デバイスでのオンライン REDO ログの実装はサポートされていません。
  + RDS for Oracle では、TDE 暗号化キーのウォレットパスワードの取得がサポートされていないため、Binary Reader は、セルフマネージド型 Oracle データベースに対してのみ TDE をサポートします。
+ AWS DMS は、Oracle Automatic Storage Management (ASM) プロキシを使用した Amazon RDS Oracle ソースへの接続をサポートしていません。
+ AWS DMS は仮想列をサポートしていません。
+ AWS DMS は、ROWID 列に基づく`ROWID`データ型またはマテリアライズドビューをサポートしていません。

  AWS DMS は Oracle マテリアライズドビューを部分的にサポートしています。フルロードの場合、DMS は Oracle マテリアライズドビューのフルロードコピーを実行できます。DMS はマテリアライズドビューをベーステーブルとしてターゲットシステムにコピーして、マテリアライズドビューの ROWID 列は無視します。継続的なレプリケーション (CDC) の場合、DMS は変更をマテリアライズドビューのデータへの変更をレプリケート使用としますが、理想的でない結果となる可能性があります。具体的には、マテリアライズドビューが完全に更新されると、DMS はすべての行の個別の削除をレプリケートし、続いてすべての行の個別の挿入をレプリケートします。これはリソースを非常に大量に消費する作業であり、多数の行を含むマテリアライズドビューのパフォーマンスが低下する可能性があります。マテリアライズドビューが高速リフレッシュを実行する継続的なレプリケーションの場合、DMS は高速リフレッシュのデータの変更を処理してレプリケートしようとします。どちらの場合も、DMS はマテリアライズドビュー内の ROWID 列はスキップします。
+ AWS DMS は、グローバル一時テーブルをロードまたはキャプチャしません。
+ レプリケーションを使用する S3 ターゲットでは、ソース行の更新がすべての列の値を取得できるように、どの列でもサプリメンタル ログを有効にします。以下に例 `alter table yourtablename add supplemental log data (all) columns;` を示します。
+ `null` を含む複合一意キーを持つ行の更新はターゲットでレプリケーション不可です。
+ AWS DMS は、同じソースエンドポイントでの複数の Oracle TDE 暗号化キーの使用をサポートしていません。各エンドポイントは、TDE 暗号化キー名「`securityDbEncryptionName`」に対して属性を 1 つ、またこのキーの TDE パスワードが 1 つ持つことができます。
+ Amazon RDS for Oracle からレプリケートする場合、TDE は暗号化されたテーブルスペースと Oracle LogMinerを使用した場合のみサポートされます。
+ AWS DMS は、複数のテーブル名変更オペレーションを連続してすばやくサポートしていません。
+ Oracle 19.0 をソースとして使用する場合、 AWS DMS は次の機能をサポートしていません。
  + データガード DML リダイレクト
  + パーティション分割されたハイブリッドテーブル
  + スキーマのみの Oracle アカウント
+ AWS DMS は、 `BIN$`または タイプのテーブルまたはビューの移行をサポートしていません`DR$`。
+ Oracle 18.x 以降、 AWS DMS は Oracle Express Edition (Oracle Database XE) からの変更データキャプチャ (CDC) をサポートしていません。
+ CHAR 列からデータを移行する場合、DMS は末尾のスペースをすべて切り捨てます。
+ AWS DMS は、アプリケーションコンテナからのレプリケーションをサポートしていません。
+ AWS DMS は Oracle Flashback Database と復元ポイントの実行をサポートしていません。これらのオペレーションは Oracle Redo ログファイルの整合性に影響するためです。
+  AWS DMS バージョン 3.5.3 より前のバージョンでは、並列実行オプションを使用した Direct-load `INSERT`プロシージャは、次の場合にサポートされていません。
  + 255 列を超える非圧縮テーブル
  + 行サイズが 8K 以上
  + Exadata HCC テーブル
  + Big Endian プラットフォームで稼働しているデータベース
+ プライマリキーも一意キーもないソーステーブルでは、ALL COLUMN サプリメンタルロギングを有効にする必要があります。これにより、さらに多くの REDO ログアクティビティが作成され、DMS CDC のレイテンシーが増加する可能性があります。
+ AWS DMS は、ソースデータベース内の非表示の列からデータを移行しません。このような列を移行の範囲に含めるには、`ALTER TABLE` ステートメントを使用して列を表示します。
+ すべての Oracle バージョンで、 AWS DMS は `XMLTYPE`および LOB 列に対する`UPDATE`オペレーションの結果をレプリケートしません。
+ AWS DMS は、時間的有効性の制約があるテーブルからのレプリケーションをサポートしていません。
+ 全ロードタスク中に Oracle ソースが使用できなくなった場合は、データ移行が不完全であっても、再接続を複数回試行した後にタスクを完了済みとしてマーク AWS DMS する場合があります。このシナリオでは、接続が失われる前に移行されたレコードのみがターゲットテーブルに含まれるため、ソースシステムとターゲットシステムの間にデータの不整合が生じる可能性があります。データの完全性を確保するには、全ロードタスクを完全に再起動するか、接続の中断の影響を受ける特定のテーブルを再ロードする必要があります。

## Oracle エンドポイントでの SSL のサポート
<a name="CHAP_Security.SSL.Oracle"></a>

AWS DMS Oracle エンドポイントは、 `none`および SSL モードの SSL V3 `verify-ca` をサポートしています。Oracle エンドポイントで SSL を使用するには、.pem 証明書ファイルの代わりにエンドポイント用の Oracle ウォレットをアップロードします。

**Topics**
+ [Oracle SSL への既存の証明書の使用](#CHAP_Security.SSL.Oracle.Existing)
+ [Oracle SSL への自己署名証明書の使用](#CHAP_Security.SSL.Oracle.SelfSigned)

### Oracle SSL への既存の証明書の使用
<a name="CHAP_Security.SSL.Oracle.Existing"></a>

既存の Oracle クライアントインストールを使用して CA 証明書ファイルから Oracle ウォレットファイルを作成するには、以下の手順を実行します。

**で Oracle SSL の既存の Oracle クライアントインストールを使用するには AWS DMS**

1. 以下のコマンドを実行して、`ORACLE_HOME` システム変数を `dbhome_1` ディレクトリの場所に設定します。

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1                        
   ```

1. `$ORACLE_HOME/lib` を `LD_LIBRARY_PATH` システム変数に追加します。

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib                        
   ```

1. `$ORACLE_HOME/ssl_wallet` に Oracle Wallet のディレクトリを作成します。

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. CA 証明書ファイル `.pem` を `ssl_wallet` ディレクトリに配置します。Amazon RDS を使用する場合は、Amazon RDS によってホストされる `rds-ca-2015-root.pem` ルート CA 証明書ファイルをダウンロードできます。このファイルのダウンロード方法については、*Amazon RDS ユーザーガイド‭* の「[SSL/TLS を使用した DB インスタンス接続の暗号化](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)」をご参照ください。

1. CA 証明書に複数の PEM ファイル (Amazon RDS グローバルバンドルやリージョンバンドルなど) が含まれている場合は、別々のファイルに分割し、次の bash スクリプトを使用して Oracle ウォレットに追加する必要があります。このスクリプトには 2 つのパラメータ入力 (CA 証明書へのパスと、以前に作成した Oracle ウォレットのフォルダへのパス) が必要です。

   ```
   #!/usr/bin/env bash
   
   certnum=$(grep -c BEGIN <(cat $1))
   
   cnt=0
   temp_cert=""
   while read line
   do
   if [ -n "$temp_cert" -a "$line" == "-----BEGIN CERTIFICATE-----" ]
   then
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   temp_cert=""
   fi
   temp_cert+="$line"$'\n'
   done < <(cat $1)
   
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   echo ""
   ```

ここまでの手順を完了したら、`ImportCertificate` API コールで certificate-wallet パラメータを指定してウォレットファイルをインポートできます。Oracle エンドポイントの作成または変更時に SSL モードとして `verify-ca` を選択すると、インポートされたウォレット証明書を使用できます。

**注記**  
 Oracle ウォレットはバイナリファイルです。 AWS DMS はこれらのファイルをそのまま受け入れます。

### Oracle SSL への自己署名証明書の使用
<a name="CHAP_Security.SSL.Oracle.SelfSigned"></a>

Oracle SSL に自己署名証明書を使用するには、`oracle123` の Oracle ウォレットパスワードを次のように仮定して、次のステップを実行します。

**で Oracle SSL の自己署名証明書を使用するには AWS DMS**

1. 自己署名証明書で使用するディレクトリを作成します。

   ```
   mkdir -p /u01/app/oracle/self_signed_cert
   ```

1. 前の手順で作成したディレクトリに移動します。

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. ルートキーを作成します。

   ```
   openssl genrsa -out self-rootCA.key 2048
   ```

1. 前の手順で作成したルートキーを使用して、ルート証明書に自己署名します。

   ```
   openssl req -x509 -new -nodes -key self-rootCA.key 
           -sha256 -days 3650 -out self-rootCA.pem
   ```

   次のような、入力パラメーターを使用します。
   + `Country Name (2 letter code) [XX]`。例: `AU`
   + `State or Province Name (full name) []`。例: `NSW`
   + `Locality Name (e.g., city) [Default City]`。例: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`。例: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`。例: `DBeng`
   + `Common Name (e.g., your name or your server's hostname) []`。例: `aws`
   + `Email Address []`、例えば:abcd.efgh@amazonwebservice.com

1. Oracle データベース用の Oracle ウォレットディレクトリを作成します。

   ```
   mkdir -p /u01/app/oracle/wallet
   ```

1. 新しい Oracle ウォレットを作成します。

   ```
   orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
   ```

1. Oracle ウォレットにルート証明書を追加します。

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert 
   -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
   ```

1. Oracle ウォレットの内容のリストを表示します。リストにはルート証明書が含まれます。

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

   たとえば、次のような表示となることがあります。

   ```
   Requested Certificates:
   User Certificates:
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. ORAPKI ユーティリティを使用して証明書署名リクエスト (CSR) を生成します。

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 
   -dn "CN=aws" -keysize 2048 -sign_alg sha256
   ```

1. 以下のコマンドを実行してください。

   ```
   openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem
   ```

   これにより次のような出力が生成されます。

   ```
   Enter Import Password:
   MAC verified OK
   Warning unsupported bag type: secretBag
   ```

1. 共通名として「dms」を指定します。

   ```
   openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr
   ```

   次のような、入力パラメーターを使用します。
   + `Country Name (2 letter code) [XX]`。例: `AU`
   + `State or Province Name (full name) []`。例: `NSW`
   + `Locality Name (e.g., city) [Default City]`。例: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`。例: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`。例: `aws`
   + `Common Name (e.g., your name or your server's hostname) []`。例: `aws`
   + `Email Address []`、例えば:abcd.efgh@amazonwebservice.com

   これがステップ 4 と同じでないことを確認してください。たとえば、組織単位名を図のように別の名前に変更することで、これを行うことができます。

   証明書要求とともに送信する追加属性を入力します。
   + `A challenge password []`。例: `oracle123`
   + `An optional company name []`。例: `aws`

1. 証明書の署名を取得します。

   ```
   openssl req -noout -text -in certdms.csr | grep -i signature
   ```

   この投稿の署名キーは `sha256WithRSAEncryption` となります。

1. 次のコマンドを実行して、証明書 (`.crt`) ファイルを生成します。

   ```
   openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key 
   -CAcreateserial -out certdms.crt -days 365 -sha256
   ```

   これにより次のような出力が生成されます。

   ```
   Signature ok
   subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws
   Getting CA Private Key
   ```

1. 証明書をウォレットに追加します。

   ```
   orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
   ```

1. ウォレットを見る。エントリが 2 つあるはずです。次のコードが表示されます。

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

1. `sqlnet.ora` ファイル (`$ORACLE_HOME/network/admin/sqlnet.ora`) を設定します。

   ```
   WALLET_LOCATION =
      (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
          (DIRECTORY = /u01/app/oracle/wallet/)
        )
      ) 
   
   SQLNET.AUTHENTICATION_SERVICES = (NONE)
   SSL_VERSION = 1.0
   SSL_CLIENT_AUTHENTICATION = FALSE
   SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
   ```

1. Oracle リスナーを停止します。

   ```
   lsnrctl stop
   ```

1. `listener.ora` ファイル (`$ORACLE_HOME/network/admin/listener.ora`) に SSL のエントリを追加します。

   ```
   SSL_CLIENT_AUTHENTICATION = FALSE
   WALLET_LOCATION =
     (SOURCE =
       (METHOD = FILE)
       (METHOD_DATA =
         (DIRECTORY = /u01/app/oracle/wallet/)
       )
     )
   
   SID_LIST_LISTENER =
    (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = SID)
      (ORACLE_HOME = ORACLE_HOME)
      (SID_NAME = SID)
     )
    )
   
   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       )
     )
   ```

1. `tnsnames.ora` ファイル (`$ORACLE_HOME/network/admin/tnsnames.ora`) を設定します。

   ```
   <SID>=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   
   <SID>_ssl=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   ```

1. Oracle リスナーを再起動します。

   ```
   lsnrctl start
   ```

1. Oracle リスナーの状態を表示します。

   ```
   lsnrctl status
   ```

1. sqlplus と SSL tnsnames エントリを使用して、localhost からデータベースへの SSL 接続をテストします。

   ```
   sqlplus -L ORACLE_USER@SID_ssl
   ```

1. SSL を使用して正常に接続したことを確認します。

   ```
   SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;
   
   SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
   --------------------------------------------------------------------------------
   tcps
   ```

1. 現在のディレクトリを自己署名証明書のあるディレクトリに変更します。

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1.  AWS DMS が使用する新しいクライアント Oracle ウォレットを作成します。

   ```
   orapki wallet create -wallet ./ -auto_login_only
   ```

1. Oracle ウォレットに自己署名証明書を追加します。

   ```
   orapki wallet add -wallet ./ -trusted_cert -cert self-rootCA.pem -auto_login_only
   ```

1.  AWS DMS が使用する Oracle ウォレットの内容を一覧表示します。リストには自己署名証明書が含まれます。

   ```
   orapki wallet display -wallet ./
   ```

   これにより次のような出力が生成されます。

   ```
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. 先ほど作成した Oracle ウォレットをアップロードします AWS DMS。

## Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS
<a name="CHAP_Source.Oracle.Encryption"></a>

次の表に、Oracle ソースデータベースを使用する際に が AWS DMS サポートする透過的なデータ暗号化 (TDE) メソッドを示します。


| REDO ログのアクセス方法 | TDE テーブルスペース | TDE 列 | 
| --- | --- | --- | 
| Oracle LogMiner | はい  | はい | 
| Binary Reader | はい  | はい | 

AWS DMS は、バイナリリーダーを使用する場合、列レベルとテーブルスペースレベルの両方で Oracle TDE をサポートします。で TDE 暗号化を使用するには AWS DMS、まず TDE 暗号化キーと TDE パスワードが保存されている Oracle ウォレットの場所を特定します。次に、Oracle ソース エンドポイントの正しい TDE 暗号化キーとパスワードを特定します。

**TDE 暗号化の暗号化キーとパスワードを識別して指定するには**

1. 次のクエリを実行して、Oracle データベースホスト上の Oracle 暗号化ウォレットを検索します。

   ```
   SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET;
   
   WRL_PARAMETER
   --------------------------------------------------------------------------------
   /u01/oracle/product/12.2.0/dbhome_1/data/wallet/
   ```

   ここでは `/u01/oracle/product/12.2.0/dbhome_1/data/wallet/` がウォレットの場所です。

1. 次のように、CDB または CDB 以外のソースのマスターキー ID を取得します。

   1. CDB 以外のソースの場合は、次のクエリを実行してマスター暗号化キー ID を取得します。

      ```
      SQL>  select rownum, key_id, activation_time from v$encryption_keys;
      
      ROWNUM KEY_ID                                                 ACTIVATION_TIME
      ------ ------------------------------------------------------ ---------------
           1 AeKask0XZU+NvysflCYBEVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   04-SEP-24 10.20.56.605200 PM +00:00
           2 AV7WU9uhoU8rv8daE/HNnSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   10-AUG-21 07.52.03.966362 PM +00:00
           3 AckpoJ/f+k8xvzJ+gSuoVH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA   14-SEP-20 09.26.29.048870 PM +00:00
      ```

      アクティベーション時間は、過去のいずれかの時点から CDC を開始する予定がある場合に便利です。例えば、上記の結果を使用すると、10-AUG-21 07.52.03 PM から 14-SEP-20 09.26.29 PM までのいずれかの時点から、ROWNUM 2 のマスターキー ID で CDC を開始できます。タスクは、14-SEP-20 09.26.29 PM 以降に生成された REDO に到達すると失敗します。この場合、ソースエンドポイントを変更し、ROWNUM 3 のマスターキー ID を指定してからタスクを再開する必要があります。

   1. CDB ソースの場合、DMS には CDB\$1ROOT マスター暗号化キーが必要です。CDB\$1ROOT に接続し、次のクエリを実行します。

      ```
      SQL> select rownum, key_id, activation_time from v$encryption_keys where con_id = 1;
      
      ROWNUM KEY_ID                                               ACTIVATION_TIME
      ------ ---------------------------------------------------- -----------------------------------
           1 Aa2E/Vwb5U+zv5hCncS5ErMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 29-AUG-24 12.51.19.699060 AM +00:00
      ```

1. コマンド・ラインから、ソース Oracle データベース ホスト上の暗号化ウォレット エントリをリストします。

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list
   Oracle Secret Store entries:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY
   ORACLE.SECURITY.ID.ENCRYPTION.
   ORACLE.SECURITY.KB.ENCRYPTION.
   ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

   ステップ 2 (`AWGDC9glSk8Xv+3bVveiVSg`) で確認したマスター キー ID を含むエントリを検索します。このエントリは TDE 暗号化キー名です。

1. 前のステップで検索したエントリの詳細を表示します。

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   Oracle Secret Store Tool : Version 12.2.0.1.0
   Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
   Enter wallet password:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   ウォレット パスワードを入力して結果を確認します。

   ここで、`'='` の右にある値は TDE パスワードです。

1. Oracle ソース エンドポイントの TDE 暗号化キー名を指定するには、`securityDbEncryptionName` 追加の接続属性を設定します。

   ```
   securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

1. Oracle ソース**パスワード**値の一部としてコンソールでこのキーに関連付けられた TDE パスワードを入力します。パスワード値。TDE パスワード値で終わるコンマ区切りのパスワード値をフォーマットするには、次の順序を使用します。

   ```
   Oracle_db_password,ASM_Password,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   Oracle データベースの設定に関係なく、この順序でパスワード値を指定します。たとえば、TDE を使用していて Oracle データベースで ASM を使用していない場合、関連するパスワード値をカンマで区切って次の順序で指定します。

   ```
   Oracle_db_password,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

指定した TDE 認証情報が正しくない場合、 AWS DMS 移行タスクは失敗しません。ただしこのタスクでは、進行中のレプリケーションで、ターゲット データベースに対する変更の読み取りまたは適用を実行しません。タスクを開始したら、コンソール移行タスクページで**テーブル統計**を監視し、変更レプリケーションがなされていることを確認します。

タスクの実行中に DBA によって Oracle データベースの TDE 認証情報値が変更された場合、タスクは失敗します。エラーメッセージには、新しい TDE 暗号化キー名が含まれています。新しい値を指定してタスクを再開するには、前の手順を使用します。

**重要**  
OS レベルの`cp`、`mv`、`orapki` や `mkstore`などのコマンドではASM の場所に保存されているウォレットファイルが破損するため、Oracle 自動ストレージ管理(ASM)の場所で作成された TDE ウォレットを操作することはできません。この制限は、ASM の場所に格納された TDE ウォレット ファイルにのみに固有であり、ローカル OS ディレクトリに格納されている TDE ウォレット ファイルは対象外です。  
ASM に格納されている TDE ウォレットを OS レベルのコマンドで操作するには、ローカル キーストアを作成し、次のように ASM キーストアをローカル キーストアにマージします：  
ローカル キーストアを作成します。  

   ```
   ADMINISTER KEY MANAGEMENT create keystore file system wallet location identified by wallet password;
   ```
ASM キーストアをローカル キーストアにマージします。  

   ```
   ADMINISTER KEY MANAGEMENT merge keystore ASM wallet location identified by wallet password into existing keystore file system wallet location identified by wallet password with backup;
   ```
次に、暗号化ウォレット エントリと TDE パスワードを一覧表示するには、ローカル キーストアに対してステップ 3 と 4 を実行します。

## Oracle を のソースとして使用するためのサポートされている圧縮方法 AWS DMS
<a name="CHAP_Source.Oracle.Compression"></a>

次の表に、Oracle ソースデータベースを使用する際に が AWS DMS サポートする圧縮方法を示します。表に示すように、圧縮のサポートは、Oracle データベースのバージョンと、Oracle LogMiner を使用して REDO ログにアクセスするように DMS が設定されているかどうかによって異なります。


| バージョン | Basic | OLTP |  HCC (Oracle 11g R2 より)  | その他 | 
| --- | --- | --- | --- | --- | 
| Oracle 10 | いいえ | 該当なし | 該当なし | いいえ | 
| オラクル 11 以降 — Oracle LogMiner | はい  | はい | はい  | [Yes](はい) - Oracle LogMiner によってサポートされている任意の圧縮方法。 | 
| オラクル 11 以降 — Binary Reader | はい  | はい | [Yes](はい) - 詳細については、次の注をご参照ください。 | はい | 

**注記**  
Oracle ソースエンドポイントが Binary Reader を使用するように設定されている場合、HCC 圧縮方法の Query Low レベルは、全ロードタスクに対してのみサポートされます。

## Oracle を のソースとして使用してネストされたテーブルをレプリケートする AWS DMS
<a name="CHAP_Source.Oracle.NestedTables"></a>

AWS DMS は、ネストされたテーブルまたは定義された型である列を含む Oracle テーブルのレプリケーションをサポートします。この機能を有効にするには、Oracle ソース エンドポイントに以下の接続属性設定を追加します。

```
allowSelectNestedTables=true;
```

AWS DMS は、Oracle ネストされたテーブルからターゲットテーブルを、一意の制約なしでターゲット上の通常の親テーブルと子テーブルとして作成します。ターゲットの正しいデータにアクセスするには、親テーブルと子テーブルを結合します。これを行うには、まず、ターゲットの子テーブルの `NESTED_TABLE_ID` 列に一意でないインデックスを手動で作成します。その後、結合 `ON` 句の `NESTED_TABLE_ID` 列を、子テーブル名に対応する親列とともに使用できます。さらに、このようなインデックスを作成すると、ターゲットの子テーブルデータが によって更新または削除されるときのパフォーマンスが向上します AWS DMS。例については、[ターゲットの親テーブルと子テーブルの結合の例](#CHAP_Source.Oracle.NestedTables.JoinExample)を参照してください。

完全なロードが完了したら、タスクを停止するように設定することをお勧めします。次に、ターゲット上のすべてのレプリケートされた子テーブルに対して一意でないインデックスを作成し、タスクを再開します。

キャプチャされたネストされたテーブルが既存の親テーブルに追加された場合 (キャプチャ済みまたはキャプチャされていない）、 はそれを正しく AWS DMS 処理します。ただし、対応するターゲットテーブルの一意でないインデックスは作成されません。この場合、ターゲットの子テーブルが非常に大きくなると、パフォーマンスが影響を受ける可能性があります。このような場合は、タスクを停止し、インデックスを作成してからタスクを再開することをお勧めします。

ネストされたテーブルがターゲットにレプリケートされたら、DBA は親テーブルと対応する子テーブルに対して結合を実行し、データを平坦化します。

### Oracle ネストされたテーブルをソースとしてレプリケートするための前提条件
<a name="CHAP_Source.Oracle.NestedTables.Prerequisites"></a>

レプリケートされた、すべてのネストされたテーブルについて、親テーブルをレプリケートしてください。テーブル AWS DMS マッピングには、親テーブル (ネストされたテーブル列を含むテーブル) と子テーブル (ネストされたテーブル) の両方を含めます。

### ソースとしてサポートされている Oracle ネストされたテーブル型
<a name="CHAP_Source.Oracle.NestedTables.Types"></a>

AWS DMS は、ソースとして次の Oracle ネストされたテーブルタイプをサポートします。
+ データ型
+ ユーザー定義のオブジェクト

### ソースとしての Oracle ネストされたテーブル AWS DMS のサポートの制限
<a name="CHAP_Source.Oracle.NestedTables.Limitations"></a>

AWS DMS Oracle ネストされたテーブルをソースとしてサポートする場合、 には以下の制限があります。
+ AWS DMS は 1 レベルのテーブルネストのみをサポートします。
+ AWS DMS テーブルマッピングでは、親テーブルと子テーブルの両方がレプリケーション対象として選択されているかどうかはチェックされません。つまり、子のない親テーブル、または親のない子テーブルを選択する可能性があります。

### が Oracle ネストされたテーブルをソースとして AWS DMS レプリケートする方法
<a name="CHAP_Source.Oracle.NestedTables.HowReplicated"></a>

AWS DMS は、次のように親テーブルとネストされたテーブルをターゲットにレプリケートします。
+ AWS DMS はソースと同じ親テーブルを作成します。次に、親のネストされた列を `RAW(16)` として定義し、親のネストされたテーブルへの参照をその `NESTED_TABLE_ID` 列に含めます。
+ AWS DMS は、ネストされたソースと同じ子テーブルを作成しますが、 という名前の列を追加します`NESTED_TABLE_ID`。この列は、対応する親のネストされた列と同じ型と値を持ち、同じ意味を持ちます。

### ターゲットの親テーブルと子テーブルの結合の例
<a name="CHAP_Source.Oracle.NestedTables.JoinExample"></a>

親テーブルを平坦化するには、次の例に示すように、親テーブルと子テーブルの間で結合を実行します。

1. `Type` テーブルを作成します。

   ```
   CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
   ```

1. 前述のように型 `NESTED_TEST_T` 列を持つ親テーブルを作成します。

   ```
   CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
   ```

1. `CHILD.NESTED_TABLE_ID` が `PARENT.NAME` と一致する `NAME_KEY` 子テーブルとの結合を使用してテーブル `NESTED_PARENT_TEST` を平坦化します。

   ```
   SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_
   TABLE_ID = PARENT.NAME;
   ```

## Oracle を のソースとして使用する場合の Oracle ASM への REDO の保存 AWS DMS
<a name="CHAP_Source.Oracle.REDOonASM"></a>

REDO 生成が多い Oracle ソースの場合、REDO を Oracle ASM に保存すると、ASM REDO 読み取りをすべての ASM ノードに分散するように DMS を設定できるため、特に RAC 構成の場合にパフォーマンスが向上します。

この構成を利用するには、`asmServer` 接続属性を使用します。例えば、以下の接続文字列では、DMS REDO 読み取りが 3 つの ASM ノードに分散されます。

```
asmServer=(DESCRIPTION=(CONNECT_TIMEOUT=8)(ENABLE=BROKEN)(LOAD_BALANCE=ON)(FAILOVER=ON)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node1_ip_address)(PORT=asm_node1_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node2_ip_address)(PORT=asm_node2_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node3_ip_address)(PORT=asm_node3_port_number)))
(CONNECT_DATA=(SERVICE_NAME=+ASM)))
```

NFS を使用して Oracle REDO を保存する場合、適切な DNFS (ダイレクト NFS) クライアントパッチ、特に Oracle のバグ 25224242 に対処するパッチが適用されていることを確認することが重要です。詳細については、Direct NFS クライアント関連のパッチに関する「[Recommended Patches for Direct NFS Client](https://support.oracle.com/knowledge/Oracle Cloud/1495104_1.html)」を参照してください。

さらに、NFS の読み取りパフォーマンスを向上するには、次の例のとおり NFS `fstab` ボリュームの `rsize` と `wsize` in の値を増やすことをお勧めします。

```
NAS_name_here:/ora_DATA1_archive /u09/oradata/DATA1 nfs rw,bg,hard,nointr,tcp,nfsvers=3,_netdev,
timeo=600,rsize=262144,wsize=262144
```

また、`tcp-max-xfer-size`値を次のとおり調整します。

```
vserver nfs modify -vserver vserver -tcp-max-xfer-size 262144
```

## のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.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 をソースとして使用できるエンドポイント設定を説明しています。


| 名前 | 説明 | 
| --- | --- | 
| AccessAlternateDirectly |  ソースとして Amazon RDS for Oracle の変更データを Binary Reader でキャプチャするには、この属性を false に設定します。この設定は、DMS インスタンスに対して、指定されたパスプレフィックス置換を使用してファイルへの直接アクセスで REDO ログにアクセスしないように指示します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。 デフォルト値: true  有効な値: true/false 例: `--oracle-settings '{"AccessAlternateDirectly": false}'`  | 
|  `AdditionalArchivedLogDestId`  |  この属性を、プライマリ スタンバイ セットアップで `ArchivedLogDestId` と設定します。この属性は、Oracle Data Guard データベースをソースとして使用する場合のスイッチオーバーに役立ちます。この場合、 は、変更を読み取るためにアーカイブ REDO ログを取得する送信先を知る AWS DMS 必要があります。これは、スイッチオーバー後、前のプライマリがスタンバイインスタンスになるためです。  AWS DMS では Oracle `RESETLOGS`オプションを使用してデータベースを開くことができますが、必要`RESETLOGS`がない限り を使用しないでください。`RESETLOGS` に関する追加情報については [Oracle® データベース Backup およびリカバリ ユーザーガイド](https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-data-repair-concepts.html#GUID-1805CCF7-4AF2-482D-B65A-998192F89C2B)の「*RMANデータ修復の概念*」をご参照ください。 有効値: アーカイブ先 ID 例: `--oracle-settings '{"AdditionalArchivedLogDestId": 2}'`  | 
|  `AddSupplementalLogging`  |  Oracle データベースにテーブルレベルのサプリメンタルロギングをセットアップするには、この属性を設定します。この属性は、テーブルのメタデータに応じて、移行タスク用に選択したすべてのテーブルで次のいずれかを有効にします。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html) デフォルト値: false  有効な値: true/false  例: `--oracle-settings '{"AddSupplementalLogging": false}'`  このオプションを使用する場合でも、前述のようにデータベースレベルサプリメンタルロギングを有効にする必要があります。   | 
|  `AllowSelectNestedTables`  |  ネストされたテーブルまたは定義された型である列を含む Oracle テーブルのレプリケーションを有効にするには、この属性を true に設定します。詳細については、「[Oracle を のソースとして使用してネストされたテーブルをレプリケートする AWS DMS](#CHAP_Source.Oracle.NestedTables)」を参照してください。 デフォルト値: false  有効な値: true/false 例: `--oracle-settings '{"AllowSelectNestedTables": true}'`  | 
|  `ArchivedLogDestId`  |  アーカイブされた REDO ログの宛先 ID を指定します。この値は、v\$1archived\$1log ビューの dest\$1id 列の数値と同じにする必要があります。追加の REDO ログの保存先を使用する場合は、`AdditionalArchivedLogDestId` 属性を使用して、追加の宛先 ID を指定するようお勧めします。これにより、最初から適切なログにアクセスされるため、パフォーマンスが向上します。 デフォルト値： 1 有効な値: 数値  例: `--oracle-settings '{"ArchivedLogDestId": 1}'`  | 
|  `ArchivedLogsOnly`  |  このフィールドが Y に設定されている場合、 はアーカイブされた REDO ログ AWS DMS にのみアクセスします。アーカイブされた REDO ログが Oracle ASM にのみ保存されている場合、 AWS DMS ユーザーアカウントに ASM 権限を付与する必要があります。 デフォルト値: N  有効な値: Y/N  例: `--oracle-settings '{"ArchivedLogsOnly": Y}'`  | 
|  `asmUsePLSQLArray` (ECA のみ)  |  BinaryReader でソースの変更をキャプチャする場合、この追加の接続属性 (ECA) を使用する。この設定により、DMS は `parallelASMReadThreads` 属性を使用してスレッド数を制御しながら、単一の読み取りスレッドごとに ASM レベルで 50 件の読み取りをバッファできるようになる。この属性を設定すると、 AWS DMS バイナリリーダーは匿名の PL/SQL ブロックを使用して REDO データをキャプチャし、大きなバッファとしてレプリケーションインスタンスに送り返します。これにより、ソースへの往復回数が低減する。これにより、ソースキャプチャのパフォーマンスは大幅に向上するとはいえ、ASM インスタンスの PGA メモリ消費量が増える。メモリターゲットが十分でない場合、安定性の問題が発生する可能性がある。次の式を使用して、単一の DMS タスクによる ASM インスタンスの PGA メモリの使用量合計を見積もることができる。`number_of_redo_threads * parallelASMReadThreads * 7 MB` デフォルト値: false 有効な値: true/false ECA の例:`asmUsePLSQLArray=true;`  | 
|  `ConvertTimestampWithZoneToUTC`  |  TIMESTAMP WITH TIME ZONE 列と TIMESTAMP WITH LOCAL TIME ZONE 列のタイムスタンプ値を UTC に変換するには、この属性を `true` に設定する。デフォルトでは、この属性の値は「false」で、データはソースデータベースのタイムゾーンを使用してレプリケートされる。 デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"ConvertTimestampWithZoneToUTC": true}'`  | 
|  `EnableHomogenousPartitionOps`  |  この属性を `true` に設定すると、**Oracle の同種移行のための Oracle パーティションとサブパーティションの DDL 操作をレプリケートできる。 この機能はバージョン 3.4.7 AWS DMS で導入されたことに注意してください。 デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"EnableHomogenousPartitionOps": true}'`  | 
|  `EnableHomogenousTablespace`  |  同種のテーブルスペースのレプリケーションを有効にし、ターゲットの同じテーブルスペースで既存のテーブルまたはインデックスを作成するには、この属性を設定します。 デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"EnableHomogenousTablespace": true}'`  | 
|  `EscapeCharacter`  |  この属性はエスケープ文字に設定する。このエスケープ文字を使うと、単一のワイルドカード文字をテーブルマッピング式で通常の文字のように動作させることができる。詳細については、「[テーブルマッピングのワイルドカード](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Wildcards.md)」を参照してください。 デフォルト値: Null  有効値: ワイルドカード文字以外の任意の文字 例: `--oracle-settings '{"EscapeCharacter": "#"}'` `escapeCharacter` はテーブル名にのみ使用できる。スキーマ名や列名でエスケープ文字は使用できない。  | 
|  `ExposeViews`  |  この属性を使ってビューからデータを 1 回プルできます。これを継続的なレプリケーションに使用することはできません。ビューからデータを抽出すると、そのビューはターゲットスキーマのテーブルとして表示されます。 デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"ExposeViews": true}'`  | 
|  `ExtraArchivedLogDestIds`  |  1 つ以上のアーカイブされた REDO ログに対する 1 つ以上の送信先の ID を指定します。このような ID は、v\$1archived\$1log ビューの dest\$1id 列の値である。この設定は、プライマリからシングルへのセットアップまたはプライマリからマルチスタンバイへのセットアップの ArchivedLogDestId 追加接続属性で使用する。 この属性は、Oracle Data Guard データベースをソースとして使用するときの切り替えに役立ちます。この場合、 は変更を読み取るためにアーカイブ REDO ログを取得する送信先に関する情報 AWS DMS を必要とします。これは、前のプライマリのスイッチオーバー後がスタンバイインスタンスであるため AWS DMS です。 有効値:アーカイブ先 ID 例: `--oracle-settings '{"ExtraArchivedLogDestIds": 1}'`  | 
|  `FailTasksOnLobTruncation`  |  `true` に設定されると、LOB 列の実際のサイズが指定された `LobMaxSize` よりも大きい場合、この属性によりタスクは失敗します。 タスクが制限付き LOB モードに設定され、このオプションが `true` に設定されている場合、LOB データを切り捨てるのではなくタスクが失敗します。 デフォルト値: false  有効な値: ブール値  例: `--oracle-settings '{"FailTasksOnLobTruncation": true}'`  | 
|  `filterTransactionsOfUser` (ECA のみ)  |  LogMiner を使用する場合、Oracle からデータをレプリケートする際に、DMS が指定されたユーザーからのトランザクションを無視できるようにするには、この追加の接続属性 (ECA) を使用する。カンマ区切りのユーザー名の値を渡すことができる。ただし、すべて大文字にする必要がある。 ECA の例:`filterTransactionsOfUser=USERNAME;`  | 
|  `NumberDataTypeScale`  |  数値のスケールを指定します。最大 38 のスケールを選択するか、FLOAT には -1、VARCHAR には -2 を選択できます。デフォルトでは、NUMBER データ型が精度 38、スケール 10 に変換されます。 デフォルト値: 10  有効な値: -2〜38 (VARCHAR では -2、FLOAT の場合は -1) 例: `--oracle-settings '{"NumberDataTypeScale": 12}'`  精度スケールの組み合わせ、-1 (FLOAT) または -2 (VARCHAR) を選択します。DMS は、Oracle がサポートする精度スケールの組み合わせをサポートします。精度が 39 以上の場合は、-2 (VARCHAR) を選択します。Oracle データベースの NumberDataTypeScale 設定は、NUMBER データ型にのみ使用される (明示的な精度と位取りの定義はない)。この設定が正しくない場合、精度が失われる可能性があることに注意してください。   | 
|  `OpenTransactionWindow`  |   CDC のみのタスクでオープントランザクションを確認する時間枠を分単位で指定する。 `OpenTransactionWindow` を 1 以上に設定すると、DMS は `SCN_TO_TIMESTAMP` を使用して SCN 値をタイムスタンプ値に変換します。Oracle Database の制限事項により、CDC の開始点として古すぎる SCN を指定すると、SCN\$1TO\$1TIMESTAMP は `ORA-08181` エラーで失敗し、CDC のみのタスクを開始することはできません。 デフォルト値: 0  有効値: 0～240 の整数 例: `openTransactionWindow=15;`  | 
| OraclePathPrefix | Amazon RDS for Oracle をソースとして Binary Reader で変更データをキャプチャするには、この文字列属性を必要な値に設定します。この値は、REDO ログにアクセスするために使用されるデフォルトの Oracle ルートを指定します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。デフォルト値： なし 有効な値: /rdsdbdata/db/ORCL\$1A/ 例: `--oracle-settings '{"OraclePathPrefix": "/rdsdbdata/db/ORCL_A/"}'`  | 
| ParallelASMReadThreads |  この属性を設定して、DMS が Oracle 自動ストレージ管理 (ASM) を使用して変更データ キャプチャ (CDC) を実行するように設定するスレッドの数を変更します。2 (デフォルト) から 8 (最大) までの整数値を指定できます。この属性は `ReadAheadBlocks` 属性とともに使用します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。 デフォルト値: 2  有効な値: 2～8 の整数 例: `--oracle-settings '{"ParallelASMReadThreads": 6;}'`  | 
| ReadAheadBlocks |  この属性を設定して、 Oracle Automatic Storage Management (ASM) と ASM 以外の NAS ストレージを使用して CDC を実行するように DMS が設定する先読みブロック数を変更する。1000 (デフォルト) から 2,000,000 (最大値) までの整数値を指定できます。この属性は `ParallelASMReadThreads` 属性とともに使用します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。 デフォルト値: 1000  有効な値: 1,000～2,000,000 の整数 例: `--oracle-settings '{"ReadAheadBlocks": 150000}'`  | 
|  `ReadTableSpaceName`  |  `true` に設定すると、この属性はテーブルスペースのレプリケーションをサポートします。 デフォルト値: false  有効な値: ブール値  例: `--oracle-settings '{"ReadTableSpaceName": true}'`  | 
| ReplacePathPrefix | Amazon RDS for Oracle をソースとして Binary Reader で変更データをキャプチャするには、この属性を true に設定します。この設定は、DMS インスタンスに対して、デフォルトの Oracle ルートを UsePathPrefix の設定に置換して REDO ログにアクセスするように指示します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"ReplacePathPrefix": true}'`  | 
|  `RetryInterval`  |  システムがクエリを再送するまで待機する時間の秒数を指定します。 デフォルト値: 5  有効な値: 1 以降の数値  例: `--oracle-settings '{"RetryInterval": 6}'`  | 
|  `SecurityDbEncryptionName`  |  Oracle ソースデータベースの列およびテーブルスペースの透過的データ暗号化 (TDE) に使用されるキーの名前を指定します。Oracle ソースエンドポイントでのこの属性とそれに関連付けられたパスワードの設定の詳細については、「[Oracle を のソースとして使用するためのサポートされている暗号化方法 AWS DMS](#CHAP_Source.Oracle.Encryption)」をご参照ください。 デフォルト値: "" 有効な値: 文字列  例: `--oracle-settings '{"SecurityDbEncryptionName": "ORACLE.SECURITY.DB.ENCRYPTION.Adg8m2dhkU/0v/m5QUaaNJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}'`  | 
|  `SpatialSdo2GeoJsonFunctionName`  |  PostgreSQL ターゲットに移行する Oracle バージョン 12.1 以前のソースの場合、この属性を使用して SDO\$1GEOMETRY 形式を GEOJSON 形式に変換します。 デフォルトでは、 は AWS DMS 、ユーザーが存在し、アクセスできる必要がある`SDO2GEOJSON`カスタム関数を AWS DMS 呼び出します。または、`SDOGEOJSON` のオペレーションを模倣する独自のカスタム関数を作成し、代わりにそれを呼び出すように `SpatialSdo2GeoJsonFunctionName` を設定することもできます。 デフォルト値: SDO2GEOJSON 有効な値: 文字列  例: `--oracle-settings '{"SpatialSdo2GeoJsonFunctionName": "myCustomSDO2GEOJSONFunction"}'`  | 
|  `StandbyDelayTime`  |  この属性を使用して、スタンバイ同期の遅延時間を分単位で指定します。ソースが Active Data Guard スタンバイデータベースの場合、この属性を使用して、プライマリ データベースとスタンバイ データベース間のタイムラグを指定します。 では AWS DMS、進行中の変更をレプリケートするためのソースとして Active Data Guard スタンバイインスタンスを使用する Oracle CDC タスクを作成できます。これにより、運用中のアクティブなデータベースに接続する必要がなくなります。 デフォルト値: 0  有効な値: 数値  例: `--oracle-settings '{"StandbyDelayTime": 1}'` **注:** DMS 3.4.6、3.4.7 以降を使用している場合、この接続設定の使用は任意となる。DMS 3.4.6 とバージョン 3.4.7 の最新バージョンでは、DMS がスタンバイ遅延時間を計算できるように`dms_user` に `V_$DATAGUARD_STATS` に対する `select` アクセス権限が必要となる。  | 
| UseAlternateFolderForOnline | Amazon RDS for Oracle をソースとして Binary Reader で変更データをキャプチャするには、この属性を true に設定します。この設定は、DMS インスタンスに対して、指定されたプレフィックス置換を使用してすべてのオンライン REDO ログにアクセスするように指示します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。デフォルト値: false 有効な値: true/false 例: `--oracle-settings '{"UseAlternateFolderForOnline": true}'`  | 
| UseBfile |  Binary Reader ユーティリティを使用して変更データをキャプチャするには、この属性を Y に設定します。この属性を Y に設定するため、`UseLogminerReader` を N に設定します。また、 Amazon RDS for Oracle でソースとして Binary Reader を使用するには、追加の属性を設定します。この設定および Oracle 自動ストレージ管理 (ASM) の使用の詳細については、[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC) を参照してください 注: この値を追加の接続属性 (ECA) として設定する場合の有効な値は「Y」と「N」となる。この値をエンドポイント設定として設定する場合、有効な値は `true` と `false` となる。 デフォルト値: N  有効値: Y または N (この値を ECA として設定する場合)、true または false (この値をエンドポイント設定として設定する場合) 例: `--oracle-settings '{"UseBfile": Y}'`  | 
|  `UseLogminerReader`  |  LogMiner ユーティリティを使用して変更データをキャプチャするには、この属性を Y に設定します (デフォルト)。 AWS DMS がバイナリファイルとして REDO ログにアクセスするようにする場合は、このオプションを N に設定します。このオプションを N に設定すると、useBfile=Y という設定も追加されます。この設定および Oracle 自動ストレージ管理 (ASM) の使用の詳細については、「[CDC での Oracle LogMiner または AWS DMS Binary Reader の使用](#CHAP_Source.Oracle.CDC)」をご参照ください。 注: この値を追加の接続属性 (ECA) として設定する場合の有効な値は「Y」と「N」となる。この値をエンドポイント設定として設定する場合、有効な値は `true` と `false` となる。 デフォルト値: Y  有効値: Y または N (この値を ECA として設定する場合)、true または false (この値をエンドポイント設定として設定する場合) 例: `--oracle-settings '{"UseLogminerReader": Y}'`  | 
| UsePathPrefix | Amazon RDS for Oracle をソースとして Binary Reader で変更データをキャプチャするには、この文字列属性を必要な値に設定します。この値は、デフォルトの Oracle ルートを置換して REDO ログにアクセスするために使用されるパスプレフィックスを指定します。詳細については、「[の RDS for Oracle ソースで Binary Reader を使用するように CDC タスクを設定する AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)」を参照してください。デフォルト値： なし 有効な値: /rdsdbdata/log/ 例: `--oracle-settings '{"UsePathPrefix": "/rdsdbdata/log/"}'`  | 

## Oracle のソースデータ型
<a name="CHAP_Source.Oracle.DataTypes"></a>

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

**注記**  
LONG と LONG RAW データ型を除き、Oracle ソースから Oracle ターゲットにレプリケーションする場合 (*均質なレプリケーション*)、ソースとターゲットのすべてのデータ型が同一になります。ただし、LONG データ型は CLOB にマッピングされ、LONG RAW データ型は BLOB にマップされます。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  Oracle のデータ型  |  AWS DMS データ型  | 
| --- | --- | 
|  BINARY\$1FLOAT  |  REAL4  | 
|  BINARY\$1DOUBLE  |  REAL8  | 
|  BINARY  |  BYTES  | 
|  FLOAT (P)  |  精度が 24 以下の場合、REAL4 を使用します。 精度が 24 より高い場合、REAL8 を使用します。  | 
|  NUMBER (P,S)  |  位取りが 0 より大きい場合、NUMERIC を使用する。 スケールが 0 の場合 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html) 位取りが 0 未満の場合、REAL8 を使用する。 | 
|  DATE  |  DATETIME  | 
|  INTERVAL\$1YEAR TO MONTH  |  STRING (間隔 year\$1to\$1month を指定)  | 
|  INTERVAL\$1DAY TO SECOND  |  STRING (間隔 day\$1to\$1second を指定)  | 
|  TIMESTAMP  |  DATETIME  | 
|  タイムスタンプ時間帯あり  |  STRING (timestamp\$1with\$1timezone を指定)  | 
|  タイムスタンプ現地時間帯あり  |  STRING (timestamp\$1with\$1local\$1 timezone を指定)  | 
|  CHAR  |  STRING  | 
|  VARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  RAW  |  BYTES  | 
|  REAL  |  REAL8  | 
|  BLOB  |  BLOB このデータ型を で使用するには AWS DMS、特定のタスクで BLOB データ型の使用を有効にする必要があります。 は、プライマリキーを含むテーブルでのみ BLOB データ型 AWS DMS をサポートします。  | 
|  CLOB  |  CLOB このデータ型を で使用するには AWS DMS、特定のタスクで CLOB データ型の使用を有効にする必要があります。CDC 中、 はプライマリキーを含むテーブルでのみ CLOB データ型 AWS DMS をサポートします。  | 
|  NCLOB  |  NCLOB このデータ型を で使用するには AWS DMS、特定のタスクで NCLOB データ型の使用を有効にする必要があります。CDC 中、 はプライマリキーを含むテーブルでのみ NCLOB データ型 AWS DMS をサポートします。  | 
|  LONG  |  CLOB LONG データ型は、最適化バッチ適用モード (TurboStream CDC モード) ではサポートされません。 このデータ型を で使用するには AWS DMS、特定のタスクで LOBs の使用を有効にします。 CDC または全ロード中、 はプライマリキーを持つテーブルでのみ LOB データ型 AWS DMS をサポートします。 また、 AWS DMS は LONG 列をロードするためのフル LOB モードをサポートしていません。この代わりに、制限付き LOB モードを使用して LONG 列を Oracle ターゲットに移行できる。限定 LOB モードでは、 は、64 KB を超える LONG 列に設定したすべてのデータを 64 KB に AWS DMS 切り捨てます。での LOB サポートの詳細については AWS DMS、「」を参照してください。 [AWS DMS タスクでのソースデータベースの LOB サポートの設定](CHAP_Tasks.LOBSupport.md)  | 
|  LONG RAW  |  BLOB LONG RAW データ型は、最適化バッチ適用モード (TurboStream CDC モード) ではサポートされません。 このデータ型を で使用するには AWS DMS、特定のタスクで LOBs の使用を有効にします。 CDC または全ロード中、 はプライマリキーを持つテーブルでのみ LOB データ型 AWS DMS をサポートします。 また、 AWS DMS は LONG RAW 列をロードするためのフル LOB モードをサポートしていません。この代わりに、制限付き LOB モードを使用して LONG RAW 列を Oracle ターゲットに移行できる。制限付き LOB モードでは、 AWS DMS は 64 KB を超える LONG RAW 列に設定したデータを 64 KB に切り捨てる。での LOB サポートの詳細については AWS DMS、「」を参照してください。 [AWS DMS タスクでのソースデータベースの LOB サポートの設定](CHAP_Tasks.LOBSupport.md)  | 
|  XMLTYPE  |  CLOB  | 
| SDO\$1GEOMETRY | BLOB (Oracle から Oracle への移行の場合)CLOB (Oracle から PostgreSQL への移行の場合) | 

以下のデータ型の列とともにソースとして使用されている Oracle テーブルはサポートされておらず、レプリケートすることができません。これらのデータ型の列をレプリケートすると NULL 列が発生します。
+ BFILE
+ ROWID
+ REF
+ UROWID
+ ユーザー定義のデータタイプ
+ ANYDATA
+ VARRAY

**注記**  
仮想列はサポートされていません。

### Oracle 空間データ型の移行
<a name="CHAP_Source.Oracle.DataTypes.Spatial"></a>

*空間データ*は、空間内のオブジェクトまたは場所のジオメトリ情報を識別します。Oracle データベースでは、空間オブジェクトのジオメトリ説明は型 SDO\$1GEOMETRY のオブジェクトに保存されます。このオブジェクト内では、ジオメトリ説明は、ユーザー定義テーブルの 1 つの列の 1 つの行に格納されます。

AWS DMS は、Oracle ソースから Oracle または PostgreSQL ターゲットへの Oracle タイプ SDO\$1GEOMETRY の移行をサポートします。

を使用して Oracle 空間データ型を移行する場合は AWS DMS、次の考慮事項に注意してください。
+ Oracle ターゲットに移行する場合は、型情報を含む USER\$1SDO\$1GEOM\$1METADATA エントリを手動で転送してください。
+ Oracle ソースエンドポイントから PostgreSQL ターゲットエンドポイントに移行すると、 はターゲット列 AWS DMS を作成します。これらの列には、2D ディメンションとゼロ (0) に等しい空間参照識別子 (SRID) を持つデフォルトのジオメトリおよび地理的型情報があります。例: `GEOMETRY, 2, 0`。
+ PostgreSQL ターゲットに移行する Oracle バージョン 12.1 以前のソースの場合、`SDO2GEOJSON` 関数または `spatialSdo2GeoJsonFunctionName` 追加の接続属性を使用して `SDO_GEOMETRY` オブジェクトを `GEOJSON` 形式に変換します。詳細については、「[のソースとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)」を参照してください。
+ AWS DMS は、フル LOB モードの Oracle 空間列移行のみをサポートします。 AWS DMS は、制限付き LOB モードまたはインライン LOB モードをサポートしていません。LOB モードの詳細については、「[AWS DMS タスクでのソースデータベースの LOB サポートの設定](CHAP_Tasks.LOBSupport.md)」を参照。
+ は Oracle Spatial 列を移行するためのフル LOB モード AWS DMS のみをサポートしているため、列のテーブルにはプライマリキーと一意のキーが必要です。プライマリキーと一意のキーがないテーブルは移行でスキップされる。

# のソースとしての Microsoft SQL Server データベースの使用 AWS DMS
<a name="CHAP_Source.SQLServer"></a>

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

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

ソース SQL Server データベースは、ネットワーク内のどのコンピュータにもインストールできます。選択したタスクのタイプに応じてソースデータベースに対する適切なアクセス権限のある SQL Server アカウントは、そのデータベースを AWS DMSで使用するために必要です。詳細については、「[SQL Server タスクのアクセス許可](#CHAP_Source.SQLServer.Permissions)」を参照してください。

AWS DMS は、SQL Server の名前付きインスタンスからのデータの移行をサポートしています。ソースエンドポイントを作成するとき、サーバー名では次の表記を使用できます。

```
IPAddress\InstanceName
```

たとえば、正しいソースエンドポイントサーバー名を以下に示します。ここでは、名前の最初の部分はサーバーの IP アドレス、2 番目の部分は SQL Server インスタンス名 (この例では SQLTest) です。

```
10.0.0.25\SQLTest
```

また、SQL Server の名前付きインスタンスがリッスンするポート番号を取得し、それを使用して AWS DMS ソースエンドポイントを設定します。

**注記**  
ポート 1433 は、Microsoft SQL Server のデフォルトです。ただし、SQL Server をスタートするたびに変化する動的ポート、およびファイアウォール経由で SQL Server に接続するために使用される特定の静的ポート番号もよく使用されます。したがって、 AWS DMS ソースエンドポイントを作成するときに、SQL Server の名前付きインスタンスの実際のポート番号を知る必要があります。

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

SQL Server データベースからの継続的な移行に CDC を使用できます。CDC のソースの SQL Server データベースへの設定方法の詳細については、「[SQL Server からの継続的なレプリケーションのデータ変更をキャプチャする](CHAP_Source.SQLServer.CDC.md)」を参照してください。

SQL Server ソースデータベースと の操作の詳細については AWS DMS、以下を参照してください。

**Topics**
+ [SQL Server を のソースとして使用する場合の制限 AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [SQL Server タスクのアクセス許可](#CHAP_Source.SQLServer.Permissions)
+ [SQL Server のソースからの継続的なレプリケーション (CDC) を使用するための前提条件](#CHAP_Source.SQLServer.Prerequisites)
+ [SQL Server でサポートされている圧縮方法](#CHAP_Source.SQLServer.Compression)
+ [セルフマネージド型 SQL Server の AlwaysOn 可用性グループの使用](#CHAP_Source.SQLServer.AlwaysOn)
+ [SQL Server を のソースとして使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [SQL Server のソースデータ型](#CHAP_Source.SQLServer.DataTypes)
+ [SQL Server からの継続的なレプリケーションのデータ変更をキャプチャする](CHAP_Source.SQLServer.CDC.md)

## SQL Server を のソースとして使用する場合の制限 AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

SQL Server データベースを AWS DMSのソースとして使用する場合は、以下の制限が適用されます。
+ 列のアイデンティティプロパティは、ターゲットデータベース列に移行されません。
+ SQL Server エンドポイントでは、スパース列のあるテーブルの使用はサポートされていません。
+ Windows 認証はサポートされていません。
+ SQL Server の計算済みフィールドの変更はレプリケーションされていません。
+ 一時テーブルはサポートされていません。
+ SQL Server パーティション切り替えはサポートされていません。
+ WRITETEXT および UPDATETEXT ユーティリティを使用する場合、ソースデータベースに適用されたイベントはキャプチャ AWS DMS されません。
+ 次のデータ操作言語 (DML) パターンはサポートされていません。

  ```
  SELECT * INTO new_table FROM existing_table
  ```
+ SQL Server をソースとして使用している場合、列レベルの暗号化はサポートされていません。
+ AWS DMS は、ソースとしての SQL Server 2008 または SQL Server 2008 R2 でのサーバーレベルの監査をサポートしていません。これは、SQL Server 2008 および 2008 R2 に関する既知の問題が原因です。たとえば、次のコマンドを実行すると、 は失敗 AWS DMS します。

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ SQL Server をソースとして使用する場合、GEOMETRY および GEOGRAPHY 型の列は完全 LOB モードではサポートされません。代わりに、制限付き LOB モードを使用するか、インライン LOB モードを使用するように `InlineLobMaxSize` タスク設定を行います。
+ レプリケーションタスクで Microsoft SQL Server のソースデータベースを使用する場合、このタスクを削除しても、SQL Server Replication Publisher 定義は削除されません。Microsoft SQL Server システム管理者がそれらの定義を Microsoft SQL Server から削除する必要があります。
+ スキーマバインドビューと非スキーマバインドビューからのデータの移行は、フルロードのみのタスクでサポートされます。
+ sp\$1rename を使用したテーブルの名前の変更はサポートされていません (たとえば、`sp_rename 'Sales.SalesRegion', 'SalesReg;)`)。
+ sp\$1rename を使用した列の名前の変更はサポートされていません (たとえば、`sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`)。
+ AWS DMS では、列のデフォルト値を設定および設定解除する変更処理はサポートされていません ( `ALTER TABLE` ステートメントで `ALTER COLUMN SET DEFAULT`句を使用）。
+ AWS DMS は、列の null 可能性を設定する変更処理をサポートしていません ( `ALTER TABLE` ステートメントで `ALTER COLUMN [SET|DROP] NOT NULL`句を使用）。
+ SQL Server 2012 および SQL Server 2014 では、可用性グループで DMS レプリケーションを使用する場合、ディストリビューション データベースを可用性グループに配置できません。SQL 2016 では、マージ、双方向、またはピアツーピアのレプリケーション トポロジで使用されるディストリビューション データベースを除き、ディストリビューション データベースを可用性グループに配置できます。
+ パーティションテーブルの場合、 AWS DMS はパーティションごとに異なるデータ圧縮設定をサポートしていません。
+ SQL Server の空間データ型 (GEOGRAPHY および GEOMETRY) に値を挿入するときは、SRID (空間リファレンス系識別子) プロパティを無視するか、別の数値を指定できます。空間データ型のテーブルをレプリケートする場合、 は SRID をデフォルトの SRID (GEOMETRY の場合は 0、GEOGRAPHY の場合は 4326) AWS DMS に置き換えます。
+ データベースが MS-REPLICATION または MS-CDC 用に設定されていない場合でも、プライマリキーを持たないテーブルをキャプチャできますが、INSERT/DELETE DML イベントのみがキャプチャされます。UPDATE イベント TRUNCATE TABLE イベントは無視されます。
+ Columnstore インデックスはサポートされていません。
+ メモリ最適化テーブル (インメモリ OLTP を使用) はサポートされていません。
+ 複数の列で構成されるプライマリ キーを持つテーブルをレプリケーションする場合、全ロード中にプライマリ キー列の更新はサポートされません。
+ 遅延永続化はサポートされていません。
+ RDS がバックアップを実行する方法が原因で、`readBackupOnly=true` エンドポイント設定 (追加の接続属性) は RDS for SQL Server ソースインスタンスでは機能しません。
+ RDS ユーザーは SQL Server ストアド プロシージャ (`sp_repldone`) を実行するアクセス権がないため、Amazon RDS SQL Server ソースインスタンスで `EXCLUSIVE_AUTOMATIC_TRUNCATION` は動作しません。
+ AWS DMS は切り捨てコマンドをキャプチャしません。
+ AWS DMS は、高速データベースリカバリ (ADR) が有効になっているデータベースからのレプリケーションをサポートしていません。
+ AWS DMS は、単一のトランザクション内でのデータ定義言語 (DDL) およびデータ操作言語 (DML) ステートメントのキャプチャをサポートしていません。
+ AWS DMS は、データ層アプリケーションパッケージ (DACPAC) のレプリケーションをサポートしていません。
+ プライマリキーまたは一意のインデックスが関連し、複数のデータ行を更新する UPDATE ステートメントについては、ターゲットデータベースに変更を適用すると競合が発生する可能性があります。これは例えば、ターゲットデータベースが単一の UPDATE ステートメントではなく INSERT や DELETE のステートメントとして更新を適用する場合に発生する可能性があります。バッチ最適化の適用モードでは、テーブルが無視されることがあります。トランザクション適用モードでは、UPDATE 操作により制約違反が発生する可能性があります。この問題を回避するには、関連するテーブルをもう一度ロードします。または、例外の適用コントロールテーブル (`dmslogs.awsdms_apply_exceptions`) で問題のあるレコードを検出して、ターゲットデータベースで手動で編集することもできます。詳細については、「[変更処理のチューニング設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)」を参照してください。
+ AWS DMS では、テーブルとスキーマのレプリケーションはサポートされていません。名前には次のセットの特殊文字が含まれます。

  `\\ -- \n \" \b \r ' \t ;` 
+ データマスキングはサポートされていません。 はマスキングなしでマスクされたデータを AWS DMS 移行します。
+ AWS DMS は、プライマリキーを持つ最大 32,767 個のテーブルと、テーブルごとに最大 1,000 個の列をレプリケートします。これは、 がレプリケートされたテーブルごとに SQL Server レプリケーション記事 AWS DMS を作成し、SQL Server レプリケーション記事にはこれらの制限があるためです。
+ 変更データキャプチャ (CDC) を使用する場合、一意のインデックスを構成するすべての列を `NOT NULL` として定義する必要があります。この要件が満たされない場合、SQL Server システムエラー 22838 が発生します。
+ SQL Server がアクティブトランザクションログからバックアップログにアーカイブしたり、アクティブトランザクションログから切り捨てたりすると、イベントが損失する可能性があります。

バックアップトランザクションログにアクセスするときには、次の制限が適用されます。
+ 暗号化バックアップはサポートされていません。
+ URL または Windows Azure に保存されたバックアップはサポートされていません。
+ AWS DMS doe は、代替共有フォルダからのファイルレベルでのトランザクションログバックアップの直接処理をサポートしていません。
+ Amazon RDS for Microsoft SQL Server 以外の Cloud SQL Server ソースの場合、 はアクティブなトランザクションログでのみ継続的なレプリケーション (CDC) AWS DMS をサポートします。CDC ではバックアップログを使用できません。SQL Server がアクティブトランザクションログからバックアップログにアーカイブしたり、DMS が読み取れるようになる前にアクティブトランザクションログから切り捨てたりすると、イベントが損失する可能性があります。
+ Amazon RDS for Microsoft SQL Server ソースの場合、DMS は CDC でバックアップログにアクセスできないため、 AWS DMS 3.5.2 以前はアクティブなトランザクションログでのみ継続的なレプリケーション (CDC) をサポートしています。RDS for SQL Server がアクティブトランザクションログからバックアップログにアーカイブしたり、DMS が読み取れるようになる前にアクティブトランザクションログから切り捨てたりすると、イベントが損失する可能性があります。この制限は、 AWS DMS バージョン 3.5.3 以降には適用されません。
+ AWS DMS は、ソースとして Amazon RDS Proxy for SQL Server の CDC をサポートしていません。
+ 全ロードタスク中に SQL Server ソースが使用できなくなった場合、データ移行が不完全であっても、 AWS DMS は再接続を複数回試行した後にタスクを完了済みとしてマークすることがあります。このシナリオでは、接続が失われる前に移行されたレコードのみがターゲットテーブルに含まれるため、ソースシステムとターゲットシステムの間にデータの不整合が生じる可能性があります。データの完全性を確保するには、全ロードタスクを完全に再起動するか、接続の中断の影響を受ける特定のテーブルを再ロードする必要があります。

## SQL Server タスクのアクセス許可
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [全ロードのみのタスクに対する許可](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [継続的なレプリケーションを使用するタスクのアクセス許可](#CHAP_Source.SQLServer.Permissions.Ongoing)

### 全ロードのみのタスクに対する許可
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

全ロード専用タスクを実行するには、次の許可が必要です。 AWS DMS は `dms_user` ログインを作成しないことに注意します。SQL Server のログインの作成については、*Microsoft のドキュメント*の「[データベースユーザーの作成](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16)」トピックを参照してください。

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### 継続的なレプリケーションを使用するタスクのアクセス許可
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

セルフマネージド型 SQL Server インスタンスは、`sysadmin` ロールの使用の有無にかかわらず、DMS を使用した継続的なレプリケーション用に設定できます。`sysadmin` ロールを付与できない SQL Server インスタンスの場合、DMS ユーザーに次に説明される権限があることを確認します。

**セルフマネージド型 SQL Server データベースからの継続的なレプリケーションのアクセス許可を設定する**

1. SQL Server Management Studio (SSMS) を使用したパスワード認証を使用して、また `self_managed_user` など、前に「[全ロードのみのタスクに対する許可](#CHAP_Source.SQLServer.Permissions.FullLoad)」で説明したように、新しい SQL Server アカウントを作成します。

1. 以下の `GRANT` コマンドを実行します。

   ```
   GRANT VIEW SERVER STATE TO self_managed_user;
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupmediafamily TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupfile TO self_managed_user;
       
   USE db_name;
       CREATE USER self_managed_user FOR LOGIN self_managed_user;
       ALTER ROLE [db_owner] ADD MEMBER self_managed_user;
       GRANT VIEW DEFINITION to self_managed_user;
   ```

1. 前述のアクセス許可に加えて、ユーザーは以下のいずれかが必要です。
   + ユーザーは `sysadmin` 固定サーバーロールのメンバーである必要があります
   + ソース設定に応じ、[可用性グループ環境の SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag) または [スタンドアロン SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone) で説明されている設定とアクセス許可。

#### クラウド SQL Server データベースからの継続的なレプリケーションのアクセス許可を設定する
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

クラウドでホストされる SQL Serverインスタンスは、Amazon RDS for Microsoft SQL Server、Azure SQL Manged Instance、または DMS でサポートされるその他のマネージド型クラウド SQL Server インスタンス上で実行されるインスタンスです。

SQL Server Management Studio (SSMS) を使用したパスワード認証を使用して、また `rds_user` など、前に「[全ロードのみのタスクに対する許可](#CHAP_Source.SQLServer.Permissions.FullLoad)」で説明したように、新しい SQL Server アカウントを作成します。

以下の付与コマンドを実行します。

```
GRANT VIEW SERVER STATE TO rds_user;
```

Amazon RDS for Microsoft SQL Server ソースの場合、DMS バージョン 3.5.3 以降では、トランザクションログのバックアップからの読み取りがサポートされています。DMS がログのバックアップにアクセスできるようにするには、上記に加えて `master` ユーザー権限、または RDS SQL Server ソースの以下の権限を付与します。

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

Amazon Azure SQL Managed Instance では、次の権限が付与されます。

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## SQL Server のソースからの継続的なレプリケーション (CDC) を使用するための前提条件
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

オンプレミスまたは Amazon EC2 上のセルフマネージド型 SQL Server データベース、または Amazon RDS や Microsoft Azure SQL マネージドインスタンスなどのクラウドデータベースでは、継続的なレプリケーション (変更データキャプチャ、CDC) を使用できます。

 AWS DMSのソースとして SQL Server データベースを使用して継続的なレプリケーションを使用する場合は、次の要件が特別に適用されます。
+ SQL Server を完全バックアップ用に設定し、データのレプリケートの開始前にバックアップを実行する必要があります。
+ 復旧モデルを [**Bulk logged**] または [**Full**] に設定する必要があります。
+ 複数のディスクへの SQL Server のバックアップはサポートされていません。データベースバックアップを異なるディスク上の複数のファイルに書き込むようにバックアップが定義されている場合、 AWS DMS はデータを読み取れず、 AWS DMS タスクは失敗します。
+ セルフ管理 SQL Server ソースの場合、DMS CDC タスクで使用されたソース データベースの SQL Server レプリケーション パブリッシャ定義は、そのタスクを削除しても削除されません。SQL Server システム管理者がそれらの定義をセルフマネージド型ソースの SQL Server から削除する必要があります。
+ CDC 中、 は SQL Server トランザクションログのバックアップを検索して変更を読み取る AWS DMS 必要があります。 AWS DMS は、ネイティブ形式*ではない*サードパーティーのバックアップソフトウェアを使用して作成された SQL Server トランザクションログのバックアップをサポートしていません。ネイティブフォーマット*の*トランザクションログバックアップをサポートするには、サードパーティーのバックアップソフトウェアを使用して作成されている場合は、ソース エンドポイントへの `use3rdPartyBackupDevice=Y` の接続属性を追加します。
+ セルフマネージド型 SQL Server ソースの場合、SQL Server は新しく作成されたテーブルの変更を、公開されるまでキャプチャしない点に注意してください。テーブルが SQL Server ソースに追加されると、 はパブリケーションの作成 AWS DMS を管理します。ただし、この処理には数分かかることがあります。この遅延中に新たに作成されたテーブルに行われたオペレーションは、ターゲットにキャプチャまたはレプリケーションされません。
+ AWS DMS 変更データキャプチャでは、SQL Server で完全なトランザクションログ記録を有効にする必要があります。SQL Server でフルトランザクションログを有効にするには、MS-REPLICATION または CHANGE DATA CAPTURE (CDC) を有効にします。
+ MS CDC キャプチャジョブがこのような変更を処理するまで、SQL Server の **tlog エントリは再利用対象としてマークされません。
+ CDC オペレーションはメモリ最適化テーブルに対してはサポートされていません。この制限は、SQL Server 2014 (この機能が最初に導入されたバージョン) 以降に適用されます。
+ AWS DMS 変更データキャプチャには、Amazon EC2 またはオンプレミス SQL サーバーをソースとするディストリビューションデータベースがデフォルトで必要です。このため、プライマリキーがあるテーブルの MS レプリケーションを設定する際は、ディストリビューターを有効にしていることを確認します。

## SQL Server でサポートされている圧縮方法
<a name="CHAP_Source.SQLServer.Compression"></a>

 AWS DMSでの SQL Server 圧縮方法のサポートについては、次の点に注意します。
+ AWS DMS は、SQL Server バージョン 2008 以降で行/ページ圧縮をサポートしています。
+ AWS DMS は Vardecimal ストレージ形式をサポートしていません。
+ AWS DMS は、スパース列と列構造圧縮をサポートしていません。

## セルフマネージド型 SQL Server の AlwaysOn 可用性グループの使用
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

SQL Server の Always On 可用性グループは、データベースミラーリングに代わるエンタープライズレベルの代替方法を提供する高可用性と災害復旧ソリューションです。

では AWS DMS、1 つのプライマリまたはセカンダリの可用性グループレプリカから変更を移行できます。

### プライマリ可用性グループレプリカの使用
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**でプライマリ可用性グループをソースとして使用するには AWS DMS、次の手順を実行します。**

1. 可用性レプリカ内のすべての SQL Server インスタンスでディストリビューションオプションを有効にします。詳細については、「[セルフマネージド型 SQL Server での継続的なレプリケーションのセットアップ](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC)」を参照してください。

1.  AWS DMS コンソールで、SQL Server ソースデータベース設定を開きます。**[サーバー名]** には、可用性グループリスナーのために設定したドメインネームサービス (DNS) 名または IP アドレスを指定します。

 AWS DMS タスクを初めて開始すると、開始に通常よりも時間がかかる場合があります。このような速度の低下は、テーブルアーティクルの作成が可用性グループサーバーによりレプリケートされるために発生します。

### セカンダリ可用性グループレプリカの使用
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**でセカンダリ可用性グループをソースとして使用するには AWS DMS、次の手順を実行します。**

1.  AWS DMS ソースエンドポイントユーザーが使用するものと同じ認証情報を使用して、個々のレプリカに接続します。

1.  AWS DMS レプリケーションインスタンスが既存のすべてのレプリカの DNS 名を解決できることを確認し、接続します。次の SQL クエリを使用して、すべてのレプリカの DNS 名を取得できます。

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. ソースエンドポイントを作成する際、エンドポイントの **[サーバー名]** またはエンドポイントのシークレットの **[サーバーアドレス]** として可用性グループリスナーの DNS 名を指定します。可用性グループリスナーの詳細については、SQL Server ドキュメントの「[可用性グループリスナーとは](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15)」を参照してください。

   パブリック DNS サーバーまたはオンプレミスの DNS サーバーのいずれかを使用して、可用性グループリスナー、プライマリレプリカ、セカンダリレプリカを解決できます。オンプレミスの DNS サーバーを使用するには、Amazon Route 53 Resolver を設定します。詳細については、「[独自のオンプレミスネームサーバーの使用](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver)」を参照してください。

1. 次の追加の接続属性をソースエンドポイントに追加します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. 可用性グループ内のすべてのレプリカでディストリビューションオプションを有効にします。すべてのノードをディストリビューターリストに追加します。詳細については、「[ディストリビューションを設定するには](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup)」を参照してください。

1. プライマリ読み取り/書き込みレプリカで次のクエリを実行して、データベースの公開を有効にします。このクエリはデータベースに対して 1 回だけ実行します。

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### 制限事項
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

セカンダリ可用性グループレプリカを使用する場合の制限は次のとおりです。
+ AWS DMS は、読み取り専用の可用性グループレプリカをソースとして使用する場合の Safeguard をサポートしていません。詳細については、「[SQL Server を のソースとして使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)」を参照してください。
+ AWS DMS は、読み取り専用の可用性グループレプリカをソースとして使用する場合、`setUpMsCdcForTables`追加の接続属性をサポートしていません。詳細については、「[SQL Server を のソースとして使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)」を参照してください。
+ AWS DMS は、バージョン 3.4.7 以降の継続的なレプリケーション (変更データキャプチャ、CDC) のソースデータベースとして、セルフマネージドセカンダリ可用性グループレプリカを使用できます。Cloud SQL Server のマルチ AZ リードレプリカはサポートされていません。の以前のバージョンを使用する場合は AWS DMS、プライマリ可用性グループレプリカを CDC のソースデータベースとして使用してください。

#### 他のノードへのフェイルオーバー
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

エンドポイント`ApplicationIntent`の追加の接続属性を に設定すると`ReadOnly`、 AWS DMS タスクは読み取り専用ルーティングの優先度が最も高い読み取り専用ノードに接続します。その後、最も優先度の高い読み取り専用ノードが使用できない場合は、可用性グループ内のその他の読み取り専用ノードにフェイルオーバーします。を設定しない場合`ApplicationIntent`、 AWS DMS タスクは可用性グループのプライマリ (読み取り/書き込み) ノードにのみ接続されます。

## SQL Server を のソースとして使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.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_Source.SQLServer.html)

## SQL Server のソースデータ型
<a name="CHAP_Source.SQLServer.DataTypes"></a>

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

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  SQL Server のデータ型  |  AWS DMS データ型  | 
| --- | --- | 
|  BIGINT  |  INT8  | 
|  BIT  |  BOOLEAN  | 
|  DECIMAL  |  NUMERIC  | 
|  INT  |  INT4  | 
|  MONEY  |  NUMERIC  | 
|  NUMERIC (p,s)  |  NUMERIC   | 
|  SMALLINT  |  INT2  | 
|  SMALLMONEY  |  NUMERIC  | 
|  TINYINT  |  UINT1  | 
|  REAL  |  REAL4  | 
|  FLOAT  |  REAL8  | 
|  DATETIME  |  DATETIME  | 
|  DATETIME2 (SQL Server 2008 以降)  |  DATETIME  | 
|  SMALLDATETIME  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIMEOFFSET  |  WSTRING  | 
|  CHAR  |  STRING  | 
|  VARCHAR  |  STRING  | 
|  VARCHAR(max)  |  CLOB TEXT このデータ型を で使用するには AWS DMS、特定のタスクで CLOB データ型の使用を有効にする必要があります。 SQL Server テーブルの場合、SQL Server の LOB 列の値を変更しない UPDATE ステートメントであっても、 はターゲットの LOB 列 AWS DMS を更新します。 CDC 中、 はプライマリキーを含むテーブルでのみ CLOB データ型 AWS DMS をサポートします。  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR (長さ)  |  WSTRING  | 
|  NVARCHAR (最大)  |  NCLOB NTEXT このデータ型を で使用するには AWS DMS、特定のタスクで SupportLobs の使用を有効にする必要があります。Lob サポートの有効化に関する詳細については、[AWS DMS タスクでのソースデータベースの LOB サポートの設定](CHAP_Tasks.LOBSupport.md) をご参照ください。 SQL Server テーブルの場合、SQL Server の LOB 列の値を変更しない UPDATE ステートメントであっても、 はターゲットの LOB 列 AWS DMS を更新します。 CDC 中、 はプライマリキーを含むテーブルでのみ CLOB データ型 AWS DMS をサポートします。  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  VARBINARY (最大)  |  BLOB IMAGE SQL Server テーブルの場合、SQL Server の LOB 列の値を変更しない UPDATE ステートメントであっても、 はターゲットの LOB 列 AWS DMS を更新します。 このデータ型を で使用するには AWS DMS、特定のタスクで BLOB データ型の使用を有効にする必要があります。 AWS DMS は、プライマリキーを含むテーブルでのみ BLOB データ型をサポートします。  | 
|  TIMESTAMP  |  BYTES  | 
|  UNIQUEIDENTIFIER  |  STRING  | 
|  HIERARCHYID   |  SQL Server ターゲットエンドポイントにレプリケートする場合は、HIERARCHYID を使用します。 他のすべてのターゲットエンドポイントにレプリケートする場合は、WSTRING (250) を使用します。  | 
|  XML  |  NCLOB SQL Server テーブルの場合、SQL Server の LOB 列の値を変更しない UPDATE ステートメントであっても、 はターゲットの LOB 列 AWS DMS を更新します。 このデータ型を で使用するには AWS DMS、特定のタスクで NCLOB データ型の使用を有効にする必要があります。 CDC 中、 はプライマリキーを含むテーブルでのみ NCLOB データ型 AWS DMS をサポートします。  | 
|  GEOMETRY  |  このデータ型をサポートするターゲットエンドポイントにレプリケートする場合は、GEOMETRY を使用します。 このデータ型をサポートしないターゲットエンドポイントにレプリケートする場合は、CLOB を使用します。  | 
|  GEOGRAPHY  |  このデータ型をサポートするターゲットエンドポイントにレプリケートする場合は、GEOGRAPHY を使用します。 このデータ型をサポートしないターゲットエンドポイントにレプリケートする場合は、CLOB を使用します。  | 

AWS DMS は、次のデータ型のフィールドを含むテーブルをサポートしていません。
+ CURSOR
+ SQL\$1VARIANT
+ TABLE

**注記**  
ユーザー定義のデータ型は、基本型に従ってサポートされます。たとえば、DATETIME をベースとするユーザー定義のデータ型は DATETIME データ型として扱われます。

# SQL Server からの継続的なレプリケーションのデータ変更をキャプチャする
<a name="CHAP_Source.SQLServer.CDC"></a>

このトピックでは、SQL Server ソースで CDC レプリケーションを設定する方法について説明します。

**Topics**
+ [オンプレミスまたは Amazon EC2 上のセルフマネージド型 SQL Server のデータ変更のキャプチャ](#CHAP_Source.SQLServer.CDC.Selfmanaged)
+ [Cloud SQL Server DB インスタンスでの継続的なレプリケーションのセットアップ](#CHAP_Source.SQLServer.Configuration)

## オンプレミスまたは Amazon EC2 上のセルフマネージド型 SQL Server のデータ変更のキャプチャ
<a name="CHAP_Source.SQLServer.CDC.Selfmanaged"></a>

Microsoft SQL Server ソースデータベースからの変更をキャプチャするには、データベースが完全バックアップ用に構成されていることを確認してください。データベースをフルリカバリモードまたは一括ログモードで構成します。

セルフマネージド SQL Server ソースの場合、 は以下 AWS DMS を使用します。

**MS レプリケーション**  
プライマリ キーを持たないテーブルの変更をキャプチャします。ソース SQL Server インスタンスの AWS DMS エンドポイントユーザーに sysadmin 権限を付与することで、これを自動的に設定できます。または、このセクションの手順に従ってソースを準備し、 AWS DMS エンドポイントの sysadmin 権限を持たないユーザーを使用できます。

**MS-CDC**  
プライマリ キーを持たないテーブルの変更をキャプチャします。MS-CDC は、すべてのテーブルのデータベースレベルで個別に有効にします。

継続的なレプリケーション (CDC) に SQL Server データベースをセットアップする場合、次のいずれかの操作を実行できます：
+ sysadmin ロールを使用する継続的なレプリケーションをセットアップします
+ sysadmin ロールを使用しない継続的なレプリケーションをセットアップします。

**注記**  
次のスクリプトを使用して、プライマリキーまたは一意のキーのないすべてのテーブルを検索できます。  

```
USE [DBname]
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
        AND  OBJECTPROPERTY(object_id, 'TableHasUniqueCnst') = 0
ORDER BY schema_name, table_name;
```

### セルフマネージド型 SQL Server での継続的なレプリケーションのセットアップ
<a name="CHAP_Source.SQLServer.CDC.MSCDC"></a>

このセクションには、sysadmin ロールを使用する場合と使用しない場合の、セルフマネージド型 SQL Server での継続的なレプリケーションの設定に関する情報が記載されています。

**Topics**
+ [セルフマネージド型 SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールを使用](#CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin)
+ [スタンドアロン SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし](#CHAP_SupportScripts.SQLServer.standalone)
+ [可用性グループ環境の SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし](#CHAP_SupportScripts.SQLServer.ag)

#### セルフマネージド型 SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールを使用
<a name="CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin"></a>

AWS DMS SQL Server の継続的なレプリケーションでは、プライマリキーを持つテーブルにはネイティブ SQL Server レプリケーションを使用し、プライマリキーを持たないテーブルには変更データキャプチャ (CDC) を使用します。

継続的レプリケーションを設定する前に、「[SQL Server のソースからの継続的なレプリケーション (CDC) を使用するための前提条件](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites)」をご参照ください。

プライマリキーを持つテーブルの場合、 AWS DMS は通常、ソースで必要なアーティファクトを設定できます。ただし、セルフ管理 SQL Server ソース インスタンスの場合、最初に、SQL Server のディストリビューションを手動で設定する必要があります。これを行うと、sysadmin アクセス許可を持つ AWS DMS ソースユーザーは、プライマリキーを持つテーブルのパブリケーションを自動的に作成できます。

ディストリビューションがすでに設定されているかどうかを確認するには、以下のコマンドを実行します。

```
sp_get_distributor
```

列ディストリビューションの結果が `NULL` の場合、ディストリビューションは設定されていません。ディストリビューションを設定するには、次の手順を使用します。<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup"></a>

**ディストリビューションを設定するには**

1. SQL Server Management Studio (SSMS) ツールを使用して SQL Server ソースデータベースに接続します。

1. **[Replication]** (レプリケーション) フォルダのコンテキスト (右クリック) メニューを開き、**[Configure Distribution]** (ディストリビューション設定) を選択します。ディストリビューションの構成ウィザードが開きます。

1. ウィザードに従ってデフォルト値を入力し、ディストリビューションを作成します。<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup.CDC"></a>

**CDC をセットアップするには**

AWS DMS バージョン 3.4.7 以降では、読み取り専用レプリカを使用していない場合、データベースとすべてのテーブルの MS CDC を自動的に設定できます。この機能を使用するには、`SetUpMsCdcForTables` ECA を true に設定します。ECA の詳細については、「[エンドポイント設定](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.ConnectionAttrib)」を参照してください。

3.4.7 より AWS DMS 前のバージョン、またはソースとしての読み取り専用レプリカの場合は、次の手順を実行します。

1. プライマリ キーがないテーブルの場合、データベースの MS-CDC をセットアップします。そのためには、sysadmin ロールが割り当てられたアカウントを使用し、次のコマンドを実行します。

   ```
   use [DBname]
   EXEC sys.sp_cdc_enable_db
   ```

1. 次に、ソーステーブルごとに MS-CDC を設定します。一意キーはあるがプライマリ キーがないテーブルごとに、次のクエリを実行して MS-CDC を設定します。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

1. プライマリ キーと一意キーの両方がないテーブルごとに、次のクエリを実行して MS-CDC を設定します。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

特定のテーブルの MS-CDC をセットアップする方法の詳細については、[ SQL Server のドキュメント](https://msdn.microsoft.com/en-us/library/cc627369.aspx)をご参照ください。

#### スタンドアロン SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし
<a name="CHAP_SupportScripts.SQLServer.standalone"></a>

このセクションでは、ユーザーアカウントで sysadmin アクセス権限を必要としないスタンドアロン SQL Server データベースソースの継続的なレプリケーションをセットアップする方法について説明します。

**注記**  
このセクションのステップを実行すると、システム管理者以外の DMS ユーザーには、以下を実行するアクセス許可が付与されます。  
オンライントランザクションログファイルからの変更の読み取り
トランザクションログのバックアップファイルから変更を読み取るためのディスクアクセス
DMS が使用するパブリケーションの追加または変更
パブリケーションへの記事の追加

1. [SQL Server からの継続的なレプリケーションのデータ変更をキャプチャする](#CHAP_Source.SQLServer.CDC) の説明に従って、レプリケーション向けに Microsoft SQL Server をセットアップします。

1. ソースデータベースで MS-REPLICATION を有効にします。これは手動で実行することも、sysadmin ユーザーとしてタスクを 1 回実行することによっても行うことができます。

1. 次のスクリプトを使用して、ソースデータベースに `awsdms` スキーマを作成します。

   ```
   use master
   go
   create schema awsdms
   go
   
   
   -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows:
   USE [master]
   GO
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   go
   
   if (object_id('[awsdms].[split_partition_list]','TF')) is not null
   
   drop function [awsdms].[split_partition_list];
   
   go
   
   create function [awsdms].[split_partition_list]
   
   (
   
   @plist varchar(8000), --A delimited list of partitions
   
   @dlm nvarchar(1) --Delimiting character
   
   )
   
   returns @partitionsTable table --Table holding the BIGINT values of the string fragments
   
   (
   
   pid bigint primary key
   
   )   
   
   as
   
   begin
   
   declare @partition_id bigint;
   
   declare @dlm_pos integer;
   
   declare @dlm_len integer;
   
   set @dlm_len = len(@dlm);
   
   while (charindex(@dlm,@plist)>0)
   
   begin
   
   set @dlm_pos = charindex(@dlm,@plist);
   
   set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
   
   insert into @partitionsTable (pid) values (@partition_id)
   
   set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
   
   end
   
   set @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
   
   insert into @partitionsTable (pid) values ( @partition_id );
   
   return
   
   end
   
   GO
   ```

1. 次のスクリプトを使用して Master データベースに `[awsdms].[rtm_dump_dblog]` プロシージャを作成します。

   ```
   use [MASTER]
   
   go
   
   if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog];
   go
   
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   GO
   
   
   
   CREATE procedure [awsdms].[rtm_dump_dblog]
   
   (
   
   @start_lsn varchar(32),
   
   @seqno integer,
   
   @filename varchar(260),
   
   @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn
   
   @programmed_filtering integer,
   
   @minPartition bigint,
   
   @maxPartition bigint
   
   )
   
   as begin
   
   declare @start_lsn_cmp varchar(32); -- Stands against the GT comparator
   
   SET NOCOUNT ON -- – Disable "rows affected display"
   
   set @start_lsn_cmp = @start_lsn;
   
   if (@start_lsn_cmp) is null
   
   set @start_lsn_cmp = '00000000:00000000:0000';
   
   if (@partition_list is null)
   
   begin
   
   RAISERROR ('Null partition list waspassed',16,1);
   
   return
   
   end
   
   if (@start_lsn) is not null
   
   set @start_lsn = '0x'+@start_lsn;
   
   if (@programmed_filtering=0)
   
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1]
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   else
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1] -- After Image
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   
   SET NOCOUNT OFF -- Re-enable "rows affected display"
   
   end
   
   GO
   ```

1. 次のスクリプトを使用して、Master データベースに証明書を作成します。

   ```
   Use [master]
   Go
   
   CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword'
   
   WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
   ```

1. 次のスクリプトを使用して、証明書からログインを作成します。

   ```
   Use [master]
   Go
   
   CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
   ```

1. 次のスクリプトを使用して、ログインを sysadmin サーバーロールに追加します。

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
   ```

1. 次のスクリプトを使用して、証明書を使って署名を [master].[awsdms].[rtm\$1dump\$1dblog] に追加します。

   ```
   Use [master]
   GO
   ADD SIGNATURE
   TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
   ```
**注記**  
ストアドプロシージャを再作成する場合は、署名を再度追加する必要があります。

1. 次のスクリプトを使用して、マスターデータベースに [awsdms].[rtm\$1position\$11st\$1timestamp] を作成します。

   ```
   use [master]
       if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
       DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
       go
       create procedure [awsdms].[rtm_position_1st_timestamp]
       (
       @dbname                sysname,      -- Database name
       @seqno                 integer,      -- Backup set sequence/position number within file
       @filename              varchar(260), -- The backup filename
       @1stTimeStamp          varchar(40)   -- The timestamp to position by
       ) 
       as begin
   
       SET NOCOUNT ON       -- Disable "rows affected display"
   
       declare @firstMatching table
       (
       cLsn varchar(32),
       bTim datetime
       )
   
       declare @sql nvarchar(4000)
       declare @nl                       char(2)
       declare @tb                       char(2)
       declare @fnameVar                 nvarchar(254) = 'NULL'
   
       set @nl  = char(10); -- New line
       set @tb  = char(9)   -- Tab separator
   
       if (@filename is not null)
       set @fnameVar = ''''+@filename +''''
   
       set @sql='use ['+@dbname+'];'+@nl+
       'select top 1 [Current LSN],[Begin Time]'+@nl+
       'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default)'+@nl+
       'where operation=''LOP_BEGIN_XACT''' +@nl+
       'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
   
       --print @sql
       delete from  @firstMatching 
       insert into @firstMatching  exec sp_executesql @sql    -- Get them all
   
       select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching;
   
       SET NOCOUNT OFF      -- Re-enable "rows affected display"
   
       end
       GO
   ```

1. 次のスクリプトを使用して、Master データベースに証明書を作成します。

   ```
   Use [master]
   Go
   CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
   ENCRYPTION BY PASSWORD = '@5trongpassword'
   WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
   ```

1. 次のスクリプトを使用して、証明書からログインを作成します。

   ```
   Use [master]
   Go
   CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
   ```

1. 次のスクリプトを使用して、sysadmin ロールにログインを追加します。

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
   ```

1. 次のスクリプトに従い、証明書を使用して [master].[awsdms].[rtm\$1position\$11st\$1timestamp] に署名を追加します。

   ```
   Use [master]
       GO
       ADD SIGNATURE
       TO [master].[awsdms].[rtm_position_1st_timestamp]
       BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
       WITH PASSWORD = '@5trongpassword';
   ```

1. 次のスクリプトを使用して、新しいストアドプロシージャへの実行アクセス権を DMS ユーザーに付与します。

   ```
   use master
   go
   GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
   ```

1. 次の各データベースに、次の権限とロールを持つユーザーを作成します。
**注記**  
dmsnosysadmin ユーザーアカウントは、各レプリカで同じ SID を使用して作成する必要があります。次の SQL クエリは、各レプリカの dmsnosysadmin アカウントの SID 値を確認するのに役立ちます。ユーザー作成の詳細については、「[Microsoft SQL Server ドキュメント](https://learn.microsoft.com/en-us/sql/)」の「[CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql)」を参照してください。Azure SQL Database の SQL ユーザーアカウントの作成の詳細については、「[アクティブな地理的レプリケーション](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)」を参照してください。

   ```
   use master
   go
   grant select on sys.fn_dblog to [DMS_user]
   grant view any definition to [DMS_user]
   grant view server state to [DMS_user]--(should be granted to the login).
   grant execute on sp_repldone to [DMS_user]
   grant execute on sp_replincrementlsn to [DMS_user]
   grant execute on sp_addpublication to [DMS_user]
   grant execute on sp_addarticle to [DMS_user]
   grant execute on sp_articlefilter to [DMS_user]
   grant select on [awsdms].[split_partition_list] to [DMS_user]
   grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
   ```

   ```
   use msdb
   go
   grant select on msdb.dbo.backupset to self_managed_user
   grant select on msdb.dbo.backupmediafamily to self_managed_user
   grant select on msdb.dbo.backupfile to self_managed_user
   ```

   ソースデータベースで次のスクリプトを実行します。

   ```
   use Source_DB
       Go
       EXEC sp_addrolemember N'db_owner', N'DMS_user'
   ```

1. 最後に、追加の接続属性 (ECA) をソースの SQL Server エンドポイントに追加します。

   ```
   enableNonSysadminWrapper=true;
   ```

#### 可用性グループ環境の SQL Server での継続的なレプリケーションのセットアップ: sysadmin ロールなし
<a name="CHAP_SupportScripts.SQLServer.ag"></a>

このセクションでは、ユーザーアカウントに sysadmin 権限を必要としない可用性グループ環境で、SQL Server データベースソースの継続的なレプリケーションをセットアップする方法について説明します。

**注記**  
このセクションのステップを実行すると、システム管理者以外の DMS ユーザーには、以下を実行するアクセス許可が付与されます。  
オンライントランザクションログファイルからの変更の読み取り
トランザクションログのバックアップファイルから変更を読み取るためのディスクアクセス
DMS が使用するパブリケーションの追加または変更
パブリケーションへの記事の追加

**可用性グループ環境で sysadmin ユーザーを使用せずに継続的なレプリケーションをセットアップするには**

1. [SQL Server からの継続的なレプリケーションのデータ変更をキャプチャする](#CHAP_Source.SQLServer.CDC) の説明に従って、レプリケーション向けに Microsoft SQL Server をセットアップします。

1. ソースデータベースで MS-REPLICATION を有効にします。これは手動で実行することも、sysadmin ユーザーを使用してタスクを 1 回実行することによっても行うことができます。
**注記**  
MS-REPLICATION ディストリビューターをローカルとして設定するか、関連するリンクサーバーを経由して sysadmin 以外のユーザーがアクセスできるように設定する必要があります。

1. **[Exclusively use sp\$1repldone within a single task]** エンドポイントオプションが有効になっている場合は、MS-REPLICATION Log Reader ジョブは停止します。

1. 各レプリカで次のステップを実行します。

   1. master データベースに `[awsdms]` [awsdms] スキーマを作成します。

      ```
      CREATE SCHEMA [awsdms]
      ```

   1. Masterデータベースに `[awsdms].[split_partition_list]` テーブル値関数を作成します。

      ```
      USE [master]
      GO
      
      SET ansi_nulls on
      GO
        
      SET quoted_identifier on
      GO
      
      IF (object_id('[awsdms].[split_partition_list]','TF')) is not null
        DROP FUNCTION [awsdms].[split_partition_list];
      GO
      
      CREATE FUNCTION [awsdms].[split_partition_list] 
      ( 
        @plist varchar(8000),    --A delimited list of partitions    
        @dlm nvarchar(1)    --Delimiting character
      ) 
      RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments
      (
        pid bigint primary key
      ) 
      AS 
      BEGIN
        DECLARE @partition_id bigint;
        DECLARE @dlm_pos integer;
        DECLARE @dlm_len integer;  
        SET @dlm_len = len(@dlm);
        WHILE (charindex(@dlm,@plist)>0)
        BEGIN 
          SET @dlm_pos = charindex(@dlm,@plist);
          SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
          INSERT into @partitionsTable (pid) values (@partition_id)
          SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
        END 
        SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
        INSERT into @partitionsTable (pid) values (  @partition_id  );
        RETURN
      END
      GO
      ```

   1. Masterデータベースに `[awsdms].[rtm_dump_dblog]` プロシージャを作成します。

      ```
      USE [MASTER] 
      GO
      
      IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null
        DROP PROCEDURE [awsdms].[rtm_dump_dblog]; 
      GO
      
      SET ansi_nulls on
      GO 
      
      SET quoted_identifier on 
      GO
                                          
      CREATE PROCEDURE [awsdms].[rtm_dump_dblog]
      (
        @start_lsn            varchar(32),
        @seqno                integer,
        @filename             varchar(260),
        @partition_list       varchar(8000), -- A comma delimited list: P1,P2,... Pn
        @programmed_filtering integer,
        @minPartition         bigint,
        @maxPartition         bigint
      ) 
      AS 
      BEGIN
      
        DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator
      
        SET NOCOUNT ON  -- Disable "rows affected display"
      
        SET @start_lsn_cmp = @start_lsn;
        IF (@start_lsn_cmp) is null
          SET @start_lsn_cmp = '00000000:00000000:0000';
      
        IF (@partition_list is null)
          BEGIN
            RAISERROR ('Null partition list was passed',16,1);
            return
            --set @partition_list = '0,';    -- A dummy which is never matched
          END
      
        IF (@start_lsn) is not null
          SET @start_lsn = '0x'+@start_lsn;
      
        IF (@programmed_filtering=0)
          SELECT
            [Current LSN],
            [operation],
            [Context],
            [Transaction ID],
            [Transaction Name],
            [Begin Time],
            [End Time],
            [Flag Bits],
            [PartitionID],
            [Page ID],
            [Slot ID],
            [RowLog Contents 0],
            [Log Record],
            [RowLog Contents 1] -- After Image
          FROM
            fn_dump_dblog (
              @start_lsn, NULL, N'DISK', @seqno, @filename,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default)
          WHERE 
            [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND       
                [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
              )
            OR
            ([operation] = 'LOP_HOBT_DDL')
          )
          ELSE
            SELECT
              [Current LSN],
              [operation],
              [Context],
              [Transaction ID],
              [Transaction Name],
              [Begin Time],
              [End Time],
              [Flag Bits],
              [PartitionID],
              [Page ID],
              [Slot ID],
              [RowLog Contents 0],
              [Log Record],
              [RowLog Contents 1] -- After Image
            FROM
              fn_dump_dblog (
                @start_lsn, NULL, N'DISK', @seqno, @filename,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default)
            WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
              )
              OR
              ([operation] = 'LOP_HOBT_DDL')
            )
            SET NOCOUNT OFF -- Re-enable "rows affected display"
      END
      GO
      ```

   1. Master データベースに次のとおり証明書を作成します。

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
      ```

   1. CSR から次のとおり証明書を作成します。

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE
        [awsdms_rtm_dump_dblog_cert];
      ```

   1. sysadmin サーバーロールにログイン情報を追加します。

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
      ```

   1. この証明書を使用して署名を [master].[awsdms].[rtm\$1dump\$1dblog] プロシージャに追加します。

      ```
      USE [master]
      GO
      
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_dump_dblog]
        BY CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**注記**  
ストアドプロシージャを再作成する場合は、署名を再度追加する必要があります。

   1. Masterデータベースに `[awsdms].[rtm_position_1st_timestamp]` プロシージャを作成します。

      ```
      USE [master]
      IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
        DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
      GO
      CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp]
      (
        @dbname                sysname,      -- Database name
        @seqno                 integer,      -- Backup set sequence/position number within file
        @filename              varchar(260), -- The backup filename
        @1stTimeStamp          varchar(40)   -- The timestamp to position by
      ) 
      AS 
      BEGIN
        SET NOCOUNT ON       -- Disable "rows affected display"
      
        DECLARE @firstMatching table
        (
          cLsn varchar(32),
          bTim datetime
        )
        DECLARE @sql nvarchar(4000)
        DECLARE @nl                       char(2)
        DECLARE @tb                       char(2)
        DECLARE @fnameVar                 sysname = 'NULL'
      
        SET @nl  = char(10); -- New line
        SET @tb  = char(9)   -- Tab separator
      
        IF (@filename is not null)
          SET @fnameVar = ''''+@filename +''''
        SET @filename = ''''+@filename +''''
        SET @sql='use ['+@dbname+'];'+@nl+
          'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+
          'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default)'+@nl+
          'WHERE operation=''LOP_BEGIN_XACT''' +@nl+
          'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
      
          --print @sql
          DELETE FROM @firstMatching 
          INSERT INTO @firstMatching  exec sp_executesql @sql    -- Get them all
          SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching;
      
          SET NOCOUNT OFF      -- Re-enable "rows affected display"
      
      END
      GO
      ```

   1. Master データベースに次のとおり証明書を作成します。

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
      ```

   1. CSR から次のとおり証明書を作成します。

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE
        [awsdms_rtm_position_1st_timestamp_cert];
      ```

   1. sysadmin サーバーロールにログイン情報を追加します。

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
      ```

   1. この証明書を使用して、署名を `[master].[awsdms].[rtm_position_1st_timestamp]` プロシージャに追加します。

      ```
      USE [master]
      GO
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_position_1st_timestamp]
        BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**注記**  
ストアドプロシージャを再作成する場合は、署名を再度追加する必要があります。

   1. 次の各データベースに次のアクセス権限またはロールを持つユーザーを作成します。
**注記**  
dmsnosysadmin ユーザーアカウントは、各レプリカで同じ SID を使用して作成する必要があります。次の SQL クエリは、各レプリカの dmsnosysadmin アカウントの SID 値を確認するのに役立ちます。ユーザー作成の詳細については、「[Microsoft SQL Server ドキュメント](https://learn.microsoft.com/en-us/sql/)」の「[CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql)」を参照してください。Azure SQL Database の SQL ユーザーアカウントの作成の詳細については、「[アクティブな地理的レプリケーション](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)」を参照してください。

      ```
      SELECT @@servername servername, name, sid, create_date, modify_date
        FROM sys.server_principals
        WHERE name = 'dmsnosysadmin';
      ```

   1. 各レプリカの master データベースに対するアクセス権限を付与します。

      ```
      USE master
      GO 
      
      GRANT select on sys.fn_dblog to dmsnosysadmin;
      GRANT view any definition to dmsnosysadmin;
      GRANT view server state to dmsnosysadmin -- (should be granted to the login).
      GRANT execute on sp_repldone to dmsnosysadmin;
      GRANT execute on sp_replincrementlsn to dmsnosysadmin;
      GRANT execute on sp_addpublication to dmsnosysadmin;
      GRANT execute on sp_addarticle to dmsnosysadmin;
      GRANT execute on sp_articlefilter to dmsnosysadmin;
      GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
      ```

   1. 各レプリカの msdb データベースに対するアクセス権限を付与します。

      ```
      USE msdb
      GO
      GRANT select on msdb.dbo.backupset TO self_managed_user
      GRANT select on msdb.dbo.backupmediafamily TO self_managed_user
      GRANT select on msdb.dbo.backupfile TO self_managed_user
      ```

   1. `db_owner` ロールをソースデータベースの `dmsnosysadmin` に追加します。データベースは同期しているため、プライマリレプリカにのみロールを追加します。

      ```
      use <source DB>
      GO 
      EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'
      ```

## Cloud SQL Server DB インスタンスでの継続的なレプリケーションのセットアップ
<a name="CHAP_Source.SQLServer.Configuration"></a>

このセクションでは、クラウドでホストされている SQL Server のデータベースインスタンスで CDC をセットアップする方法について説明します。クラウドでホストされる SQL Serverインスタンスは、Amazon RDS for SQL Server、Azure SQL Manged Instance、またはその他のマネージド型 Cloud SQL Server インスタンス上で実行されるインスタンスです。各データベースタイプでの継続的なレプリケーションの制限については、「[SQL Server を のソースとして使用する場合の制限 AWS DMS](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Limitations)」を参照してください。

継続的レプリケーションを設定する前に、[SQL Server のソースからの継続的なレプリケーション (CDC) を使用するための前提条件](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites) をご参照ください。

セルフ管理 SQL Server ソースとは異なり、Amazon RDS for SQL Server では MS レプリケーションはサポートされません。したがって、 AWS DMS では、プライマリキーの有無にかかわらず、テーブルに MS-CDC を使用する必要があります。

Amazon RDS は、ソース SQL Server インスタンスの継続的な変更に が AWS DMS 使用するレプリケーションアーティファクトを設定するための sysadmin 権限を付与しません。次の手順に従って、(管理ユーザーアクセス権限を使用して) Amazon RDS インスタンスの MS-CDC をオンにする必要があります。

**Cloud SQL Server DB インスタンスで MS-CDC を有効にするには**

1. 次のクエリのいずれかをデータベース レベルで実行します。

   RDS for SQL Server DB インスタンスの場合は、次のクエリを使用します。

   ```
   exec msdb.dbo.rds_cdc_enable_db 'DB_name'
   ```

   Azure SQL マネージド DB インスタンスの場合は、次のクエリを使用します。

   ```
   USE DB_name 
   GO 
   EXEC sys.sp_cdc_enable_db 
   GO
   ```

1. プライマリ キーがあるテーブルごとに、次のクエリを実行して MS-CDC を有効にします。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

   一意キーはあるがプライマリ キーがないテーブルごとに、次のクエリを実行して MS-CDC を有効にします。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

    プライマリキーと一意キーの両方がないテーブルごとに、次のクエリを実行して MS-CDC を有効にします。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

1. 保持期間を設定します。
   + DMS バージョン 3.5.3 以降を使用してレプリケートする RDS for SQL Server インスタンスの場合、保持期間がデフォルト値の 5 秒に設定されていることを確認します。DMS 3.5.2 以前から DMS 3.5.3 以降にアップグレードまたは移動する場合、新しいまたはアップグレードされたインスタンスでタスクが実行された後にポーリング間隔の値を変更します。以下のスクリプトでは、保持期間を 5 秒に設定しています。

     ```
     use dbname
     EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5
     exec sp_cdc_stop_job 'capture'
     exec sp_cdc_start_job 'capture'
     ```
   + パラメータ `@pollinginterval` は秒単位で測定され、推奨値 86399 に設定されます。つまり、`@pollinginterval = 86399` の場合、トランザクションログは 86,399 秒 (約 1 日) の変更を保持します。手順 `exec sp_cdc_start_job 'capture'` によって設定が開始されます。
**注記**  
SQL Server の一部のバージョンでは、`pollinginterval` が 3599 秒以上に設定されている場合、値はデフォルトの 5 秒にリセットされます。この場合、 が T ログエントリ AWS DMS を読み取る前に、T ログエントリが消去されます。この既知の問題の影響を受ける SQL Server のバージョンを確認するには、「[このマイクロソフト KB 記事](https://support.microsoft.com/en-us/topic/kb4459220-fix-incorrect-results-occur-when-you-convert-pollinginterval-parameter-from-seconds-to-hours-in-sys-sp-cdc-scan-in-sql-server-dac8aefe-b60b-7745-f987-582dda2cfa78)」をご参照ください。

     マルチ AZ で Amazon RDS を使用している場合は、フェイルオーバー時に適切な値を持つようにセカンダリも設定してください。

     ```
     exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or preferred value>
     ```

**AWS DMS レプリケーションタスクが 1 時間以上停止しても保持期間を維持するには**
**注記**  
DMS 3.5.3 以降を使用して RDS for SQL Server ソースをレプリケートする場合、以下の手順は必要ありません。

1. 次のコマンドを使用して、トランザクションログを切り捨てるジョブを停止します。

   ```
   exec sp_cdc_stop_job 'capture'
   ```

1.  AWS DMS コンソールでタスクを検索し、タスクを再開します。

1. **[Monitoring]** (モニタリング) タブを選択し、`CDCLatencySource` メトリクスを選択します。

1. `CDCLatencySource` メトリクスが 0 (ゼロ) に等しく、そのままの場合、次のコマンドを使用して、トランザクション ログ切り捨てジョブを再開します。

   ```
   exec sp_cdc_start_job 'capture'
   ```

必ず SQL Server トランザクションログを切り捨てるジョブをスタートしてください。そうしないと、SQL Server インスタンスのストレージがいっぱいになる可能性があります。

### RDS for SQL Server を のソースとして使用する場合の推奨設定 AWS DMS
<a name="CHAP_Source.SQLServer.Configuration.Settings"></a>

#### AWS DMS 3.5.3 以降
<a name="CHAP_Source.SQLServer.Configuration.Settings.353"></a>

**注記**  
RDS for SQL Server のログのバックアップ機能の初回リリースは、DMS バージョン 3.5.3 のリリース後に作成または変更されたエンドポイントに対して、デフォルトで有効になっています。既存のエンドポイントに対してこの機能を使用するには、変更を加えずにエンドポイントを変更します。

AWS DMS バージョン 3.5.3 では、ログバックアップからの読み取りがサポートされています。DMS は、主にアクティブトランザクションログからの読み取りに依存してイベントをレプリケートします。DMS がアクティブなログから読み取れるようになる前にトランザクションがバックアップされた場合、タスクは RDS バックアップにオンデマンドでアクセスし、アクティブトランザクションログに追いつくまで後続のバックアップログから読み取ります。DMS がログのバックアップにアクセスできるようにするには、RDS 自動バックアップ保持期間を少なくとも 1 日に設定します。自動バックアップ保持期間の設定の詳細については、「*Amazon RDS ユーザーガイド*」の「[バックアップの保存期間](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ManagingAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupRetention)」を参照してください。

ログのバックアップにアクセスする DMS タスクは、RDS インスタンス上のストレージを利用します。タスクは、レプリケーションに必要なログのバックアップにのみアクセスすることに注意してください。Amazon RDS は、ダウンロードしたこれらのバックアップを数時間で削除します。この削除は、Amazon S3 に保持されている Amazon RDS バックアップや Amazon RDS `RESTORE DATABASE` 機能には影響しません。DMS を使用してレプリケートする予定の場合、RDS for SQL Server ソースに追加のストレージを割り当てることをお勧めします。必要なストレージ量を見積もる方法の 1 つは、DMS がレプリケーションを開始または再開するバックアップを特定し、RDS `tlog backup` メタデータ関数を使用して後続のすべてのバックアップのファイルサイズを合計することです。`tlog backup` 関数の詳細については、「*Amazon RDS ユーザーガイド*」の「[利用可能なトランザクションログのバックアップの一覧表示](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER.SQLServer.AddlFeat.TransactionLogAccess.html#USER.SQLServer.AddlFeat.TransactionLogAccess.Listing)」を参照してください。

または、Amazon RDS インスタンスの CloudWatch `FreeStorageSpace` メトリクスに基づいてストレージの自動スケーリングを有効にしたり、ストレージのスケーリングをトリガーしたりすることができます。

SQL Server インスタンスのストレージがいっぱいになる可能性があるため、トランザクションログのバックアップをあまりに遠すぎる時点から開始または再開しないことを強くお勧めします。このような場合は、フルロードを開始することをお勧めします。トランザクションログのバックアップからのレプリケートは、アクティブトランザクションログからの読み取りよりも遅くなります。詳細については、「[RDS for SQL Server のトランザクションログのバックアップ処理](CHAP_Troubleshooting_Latency_Source_SQLServer.md#CHAP_Troubleshooting_Latency_Source_SQLServer_backup)」を参照してください。

ログのバックアップにアクセスするには、追加の権限が必要であることに注意してください。詳細については、「[クラウド SQL Server データベースからの継続的なレプリケーションのアクセス許可を設定する](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Permissions.Cloud)」の説明を参照してください。タスクのレプリケートを開始する前に、これらの権限が付与されていることを確認してください。

#### For AWS DMS 3.5.2 以下
<a name="CHAP_Source.SQLServer.Configuration.Settings.352"></a>

Amazon RDS for SQL Server をソースとして使用する場合、MS-CDC キャプチャジョブはパラメータ `maxscans` と `maxtrans` に依存しています。このようなパラメータは、MS-CDC キャプチャがトランザクションログに対して実行するスキャンの最大数と、スキャンごとに処理されるトランザクション数を制御します。

データベースでは、トランザクション数が `maxtrans*maxscans` の場合、`polling_interval` 値を増やすとアクティブなトランザクションログレコードが蓄積されてしまう可能性があります。これにより、トランザクションログのサイズが増大する可能性があります。

 AWS DMS は MS-CDC キャプチャジョブに依存しないことに注意してください。MS-CDC キャプチャジョブは、トランザクションログエントリを処理済みとしてマークします。これにより、トランザクションログのバックアップジョブはトランザクションログからエントリを削除できます。

トランザクションログのサイズと MS-CDC ジョブの正常な実行はモニタリングすることをお勧めします。MS-CDC ジョブが失敗すると、トランザクションログが過度に増加し、 AWS DMS レプリケーションが失敗する可能性があります。MS-CDC キャプチャジョブのエラーは、ソースデータベースの `sys.dm_cdc_errors` 動的管理ビューを使用してモニタリングできます。トランザクションログのサイズのモニタリングには、`DBCC SQLPERF(LOGSPACE)` 管理コマンドを使用します。

**MS-CDC によるトランザクション ログの増加に対処するには**

1. データベース`Log Space Used %`の AWS DMS が からレプリケートされていることを確認し、継続的に増加していることを確認します。

   ```
   DBCC SQLPERF(LOGSPACE)
   ```

1. トランザクションログのバックアッププロセスをブロックしている要因を特定します。

   ```
   Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();
   ```

   `log_reuse_wait_desc` 値が `REPLICATION` と等しい場合、ログバックアップの保持は MS-CDC のレイテンシーが原因です。

1. `maxtrans` と `maxscans` パラメータの値を増やして、キャプチャジョブが処理するイベント数を増やします。

   ```
   EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 
   exec sp_cdc_stop_job 'capture'
   exec sp_cdc_start_job 'capture'
   ```

この問題に対処するには、 `maxscans` と の値を、ソースデータベースからレ AWS DMS プリケートするテーブルに対して生成されるイベントの平均数と`maxtrans*maxscans`等しく`maxtrans`なるように設定します。

このようなパラメータを推奨値よりも高く設定すると、キャプチャジョブはトランザクションログ内のすべてのイベントを処理します。このようなパラメータを推奨値より低く設定すると、MS-CDC のレイテンシーが増加し、トランザクションログが増大します。

ワークロードの変化により生成されるイベントの数が変化するため、`maxtrans` と `maxscans`の適切な値を特定することが困難である場合があります。この場合、MS-CDC のレイテンシーのモニタリングを設定することをお勧めします。詳細については、SQL Server ドキュメントの「[プロセスを監視する](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver15#Monitor)」を参照してください。その後、モニタリング結果に基づいて`maxtrans` と `maxscans` を動的に設定します。

 AWS DMS タスクを再開または続行するために必要なログシーケンス番号 (LSNs) がタスクで見つからない場合、タスクは失敗し、完全な再ロードが必要になることがあります。

**注記**  
 AWS DMS を使用して RDS for SQL Server ソースからデータをレプリケートする場合、Amazon RDS インスタンスの停止開始イベント後にレプリケーションを再開しようとするとエラーが発生することがあります。これは、SQL Server エージェントプロセスが停止または開始のイベントの後に再起動する際、キャプチャジョブプロセスを再起動するためです。これにより、MS-CDC のポーリング間隔がバイパスされます。  
このため、MS-CDC キャプチャジョブ処理よりもトランザクションボリュームが低いデータベースでは、 が停止した場所から AWS DMS 再開する前に、データが処理またはレプリケートおよびバックアップとしてマークされ、次のエラーが発生する可能性があります。  

```
[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)
```
この問題を軽減するには、`maxtrans` と `maxscans` の値を上記の推奨のとおりに設定します。

# のソースとしての Microsoft Azure SQL データベースの使用 AWS DMS
<a name="CHAP_Source.AzureSQL"></a>

では AWS DMS、Microsoft Azure SQL Database を SQL Server と同じ方法でソースとして使用できます。 は、オンプレミスまたは Amazon EC2 インスタンスで実行されている SQL Server でサポートされているデータベースバージョンのリストをソースとして AWS DMS サポートします。

詳細については、「[のソースとしての Microsoft SQL Server データベースの使用 AWS DMS](CHAP_Source.SQLServer.md)」を参照してください。

**注記**  
AWS DMS は、Azure SQL Database での変更データキャプチャオペレーション (CDC) をサポートしていません。

# のソースとしての Microsoft Azure SQL マネージドインスタンスの使用 AWS DMS
<a name="CHAP_Source.AzureMgd"></a>

では AWS DMS、Microsoft Azure SQL Managed Instance をソースとして使用できます。これは、SQL Server AWS DMS がサポートするのとほぼ同じ方法で使用できます。ソースとして、オンプレミスまたは Amazon EC2 インスタンスで実行されている SQL Server でサポートされているデータベースバージョンのリストと同じです。

詳細については、「[のソースとしての Microsoft SQL Server データベースの使用 AWS DMS](CHAP_Source.SQLServer.md)」を参照してください。

# のソースとして Microsoft Azure Database for PostgreSQL Flexible Server を使用する AWS DMS
<a name="CHAP_Source.AzureDBPostgreSQL"></a>

では AWS DMS、Microsoft Azure Database for PostgreSQL Flexible Server を PostgreSQL とほぼ同じ方法でソースとして使用できます。

がソースとして AWS DMS サポートする Microsoft Azure Database for PostgreSQL Flexible Server のバージョンについては、「」を参照してください[のソース AWS DMS](CHAP_Introduction.Sources.md)。

## 論理レプリケーションとデコードのための Microsoft Azure for PostgreSQL フレキシブルサーバーのセットアップ
<a name="CHAP_Source.AzureDBPostgreSQL.setup"></a>

データベースの移行中に、Microsoft Azure Database for PostgreSQL フレキシブルサーバーの論理レプリケーションとデコード機能を使用できます。

論理デコードには、DMS は `test_decoding` または `pglogical` プラグインのどちらかを使用します。`pglogical` プラグインがソースのPostgreSQL データベースで利用できる場合、DMS は `pglogical` を使用してレプリケーションスロットを作成します。それ以外の場合は、`test_decoding` プラグインを使用します。

Microsoft Azure for PostgreSQL フレキシブルサーバーを DMS のソースエンドポイントとして設定するには、次の手順を実行します。

1. ポータルの [Server Parameters] ページを開きます。

1. `wal_level` サーバーパラメータを `LOGICAL` に設定します。

1. `pglogical` の拡張機能を使用する場合は、`shared_preload_libraries` パラメータと `azure.extensions` パラメータを `pglogical` に設定します。

1. `max_replication_slots` パラメータは、同時に実行する予定の DMS タスクの最大数に設定します。Microsoft Azure でのこのパラメータのデフォルト値は 10 です。このパラメータの最大値は PostgreSQL インスタンスの使用可能なメモリにより異なります。メモリ 1 GB あたり 2～8 のレプリケーションスロットを使用できます。

1. `max_wal_senders` パラメータを 1 以上の値に設定します。`max_wal_senders` パラメータは、実行可能な同時タスクの数を設定します。デフォルト値は 10 です。

1. `max_worker_processes` パラメータ値を 16 以上に設定します。この設定以外の場合は、次のようなエラーが表示されることがあります。

   ```
   WARNING: out of background worker slots.
   ```

1. 変更を保存します。サーバーを再起動して変更を適用します。

1. PostgreSQL インスタンスが接続するリソースからのネットワークトラフィックを許可していることを確認します。

1. 次のコマンドを使用して、既存のユーザーにレプリケーションのアクセス許可を付与するか、レプリケーションのアクセス許可を持つ新しいユーザーを作成します。
   + 次のコマンドを使用して、既存のユーザーにレプリケーションのアクセス許可を付与します。

     ```
     ALTER USER <existing_user> WITH REPLICATION;
     ```
   + 次のコマンドを使用して、レプリケーションのアクセス許可を持つ新しいユーザーを作成します。

     ```
     CREATE USER aws_dms_user PASSWORD 'aws_dms_user_password';
     GRANT azure_pg_admin to aws_dms_user;
     ALTER ROLE aws_dms_user REPLICATION LOGIN;
     ```

PostgreSQL を使用した論理レプリケーションの詳細については、次のトピックを参照してください。
+ [論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [ネイティブ CDC スタートポイントを使用して PostgreSQL ソース エンドポイントの CDC ロードを設定するには](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ 「[Azure Database for PostgreSQL のドキュメント](https://learn.microsoft.com/en-us/azure/postgresql/)」の「[Azure Database for PostgreSQL - フレキシブル サーバーでの論理レプリケーションと論理デコード](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-logical)」

# Microsoft Azure Database for MySQL Flexible Server を のソースとして使用する AWS DMS
<a name="CHAP_Source.AzureDBMySQL"></a>

を使用すると AWS DMS、Microsoft Azure Database for MySQL Flexible Server を MySQL とほぼ同じ方法でソースとして使用できます。

がソースとして AWS DMS サポートする Microsoft Azure Database for MySQL Flexible Server のバージョンについては、「」を参照してください[のソース AWS DMS](CHAP_Introduction.Sources.md)。

でカスタマー管理の MySQL 互換データベースを使用する方法の詳細については AWS DMS、「」を参照してください[のソースとしてのセルフマネージド MySQL 互換データベースの使用 AWS DMS](CHAP_Source.MySQL.md#CHAP_Source.MySQL.CustomerManaged)。

## のソースとして Azure MySQL を使用する場合の制限 AWS Database Migration Service
<a name="CHAP_Source.AzureDBMySQL.limitations"></a>
+ Azure MySQL Flexible Server System 変数の defaut 値は `sql_generate_invisible_primary_key`であり`ON`、サーバーは、明示的なプライマリキーなしで作成されたテーブルに、生成された非表示のプライマリキー (GIPK) を自動的に追加します。 AWS DMS は、GIPK 制約のある MySQL テーブルの継続的なレプリケーションをサポートしていません。

# のソースとしての OCI MySQL Heatwave の使用 AWS DMS
<a name="CHAP_Source.heatwave"></a>

では AWS DMS、MySQL とほぼ同じ方法で OCI MySQL Heatwave MySQL をソースとして使用できます。OCI MySQL Heatwave をソースとして使用するには、いくつかの追加の設定変更が必要です。

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

## 論理レプリケーションのための OCI MySQL Heatwave のセットアップ
<a name="CHAP_Source.heatwave.setup"></a>

OCI MySQL Heatwave インスタンスを DMS のソースエンドポイントとして設定するには、次を実行します。

1. OCI Console にサインインして、左上隅にあるメインのハンバーガーメニュー (≡) を開きます。

1. **[データベース]**、**[DB Systems]** の順に選択します。

1. **[設定]** メニューを開きます。

1. **[設定を作成]** を選択します。

1. 設定名 (など) を入力します。例えば、**dms\$1configuration** と入力します。

1. 現在作業中の OCI MySQL Heatwave インスタンスのシェイプを選択します。シェイプは、インスタンスの **[DB system configuration:Shape]** セクションの下にある **[DB system configuration]** プロパティタブで確認できます。

1. **[User variables]** セクションで、`binlog_row_value_options` システム変数を選択します。デフォルト値は `PARTIAL_JSON` です。この値を消去します。

1. **[サーバーの作成]** ボタンを選択します。

1. OCI MySQLHeatwave インスタンスを開き、**[編集]** ボタンをクリックします。

1. **[設定]** セクションで、**[Change configuration]** ボタンをクリックして、ステップ 4 で作成したシェープの設定を選択します。

1. 変更が有効になると、インスタンスの論理レプリケーションの準備が整います。

# のソースとしての Google Cloud for MySQL の使用 AWS DMS
<a name="CHAP_Source.GC"></a>

を使用すると AWS DMS、MySQL とほぼ同じ方法で Google Cloud for MySQL をソースとして使用できます。

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

詳細については、「[のソースとしての MySQL 互換データベースの使用 AWS DMS](CHAP_Source.MySQL.md)」を参照してください。

**注記**  
ソースとしての GCP MySQL 8.0 のサポートは AWS DMS 、バージョン 3.4.6 で利用できます。  
AWS DMS は、MySQL インスタンス`verify-full`の GCP の SSL モードをサポートしていません。  
GCP MySQL セキュリティ設定`Allow only SSL connections`は、サーバー証明書とクライアント証明書の両方の検証が必要なため、サポートされていません。 はサーバー証明書の検証 AWS DMS のみをサポートします。  
AWS DMS は、`binlog_checksum`データベースフラグのデフォルトの GCP CloudSQL for MySQL 値 `CRC32` をサポートします。

# のソースとしての Google Cloud for PostgreSQL の使用 AWS DMS
<a name="CHAP_Source.GCPostgres"></a>

を使用すると AWS DMS、セルフマネージド PostgreSQL データベースとほぼ同じ方法で、Google Cloud for PostgreSQL をソースとして使用できます。

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

詳細については、「[PostgreSQL データベースを AWS DMS ソースとして使用する](CHAP_Source.PostgreSQL.md)」を参照してください。

## 論理レプリケーションとデコードのための Google Cloud for PostgreSQL のセットアップ
<a name="CHAP_Source.GCPostgres.setup"></a>

データベースの移行中に、Google Cloud SQL for PostgreSQL の論理レプリケーションとデコード機能を使用できます。

論理デコードには、DMS は 次のプラグインのどちらかを使用します。
+ `test_decoding`
+ `pglogical`

`pglogical` プラグインがソースのPostgreSQL データベースで利用できる場合、DMS は `pglogical` を使用してレプリケーションスロットを作成します。それ以外の場合は、`test_decoding` プラグインを使用します。

での論理デコードの使用については、次の点に注意してください AWS DMS。

1. Google Cloud SQL for PostgreSQL の場合、`cloudsql.logical_decoding` フラグを `on` に設定して、論理デコード機能を有効にします。

1. `pglogical` を有効にするには、`cloudsql.enable_pglogical` フラグを `on` に設定して、データベースを再起動します。

1. 論理デコード機能を使用するには、`REPLICATION` 属性を持つ PostgreSQL ユーザーを作成します。`pglogical` 拡張機能を使用する場合、ユーザーには `cloudsqlsuperuser` ロールが必要です。`cloudsqlsuperuser` ロールを持つユーザーを作成するには次を実行します。

   ```
   CREATE USER new_aws_dms_user WITH REPLICATION
   IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'new_aws_dms_user_password';
   ```

   既存のユーザーにこの属性を設定するには、次を実行します。

   ```
   ALTER USER existing_user WITH REPLICATION;
   ```

1. `max_replication_slots` パラメータは、同時に実行する予定の DMS タスクの最大数に設定します。Google Cloud SQL では、このパラメータのデフォルト値は 10 です。このパラメータの最大値は PostgreSQL インスタンスの使用可能なメモリにより異なります。メモリ 1 GB あたり 2～8 のレプリケーションスロットを使用できます。

PostgreSQL を使用した論理レプリケーションの詳細については、次のトピックを参照してください。
+ [論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [ネイティブ CDC スタートポイントを使用して PostgreSQL ソース エンドポイントの CDC ロードを設定するには](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ 「[CLOUD SQL FOR POSTGRESQL のドキュメント](https://cloud.google.com/sql/docs/postgres)」の「[論理レプリケーションとデコードを設定する](https://cloud.google.com/sql/docs/postgres/replication/configure-logical-replication)」

# PostgreSQL データベースを AWS DMS ソースとして使用する
<a name="CHAP_Source.PostgreSQL"></a>

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

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

AWS DMS は、次のタイプのデータベースに対して PostgreSQL をサポートしています。
+  オンプレミスのデータベース
+ Amazon EC2 インスタンスでのデータベース
+ Amazon RDS DB インスタンス上のデータベース
+ Amazon Aurora PostgreSQL 互換エディションに基づく DB インスタンス上のデータベース
+ Amazon Aurora PostgreSQL 互換 Serverless エディションを基盤とする DB インスタンス上のデータベース

**注記**  
DMS は Amazon Aurora PostgreSQL—Serverless V1 についてはフルロードのソースとしてのみサポートしています。ただし、Amazon Aurora PostgreSQL—Serverless V2 は、フルロード、フルロード \$1 CDC、CDC のみのタスクのソースとして使用することができます。

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

ソースとして PostgreSQL を使用する場合の追加セキュリティ要件として、指定されるユーザーアカウントは PostgreSQL データベースの登録済みユーザーでなければなりません。

PostgreSQL データベースを AWS DMS ソースエンドポイントとして設定するには、次の手順を実行します。
+ PostgreSQL ソースデータベース AWS DMS へのアクセスを提供する適切なアクセス許可を持つ PostgreSQL ユーザーを作成します。
**注記**  
PostgreSQL ソースデータベースが自己管理型の場合は詳細については、「[でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)」をご参照ください。
PostgreSQL ソースデータベースが Amazon RDS によって管理されている場合詳細については、「[DMS ソースとしての AWSマネージド PostgreSQL データベースの使用](#CHAP_Source.PostgreSQL.RDSPostgreSQL)」をご参照ください。
+ 選択した PostgreSQL データベース設定に準拠する PostgreSQL ソース エンドポイントを作成します。
+ テーブルを移行するタスクまたはタスクのセットを作成します。

  全ロードのみのタスクを作成する場合、これ以上エンドポイントの設定は必要ありません。

  変更データキャプチャのタスク(CDC のみ、または全ロードおよび CDC タスク)を作成する前に、「[セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用して CDC を有効にする](#CHAP_Source.PostgreSQL.Prerequisites.CDC)」または「[で AWS管理された PostgreSQL DB インスタンスで CDC を有効にする AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC)」をご参照ください。

**Topics**
+ [でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)
+ [DMS ソースとしての AWSマネージド PostgreSQL データベースの使用](#CHAP_Source.PostgreSQL.RDSPostgreSQL)
+ [論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化](#CHAP_Source.PostgreSQL.Security)
+ [ネイティブ CDC スタートポイントを使用して PostgreSQL ソース エンドポイントの CDC ロードを設定するには](#CHAP_Source.PostgreSQL.v10)
+ [を使用した PostgreSQL から PostgreSQL への移行 AWS DMS](#CHAP_Source.PostgreSQL.Homogeneous)
+ [を使用した Babelfish for Amazon Aurora PostgreSQL からの移行 AWS DMS](#CHAP_Source.PostgreSQL.Babelfish)
+ [PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除](#CHAP_Source.PostgreSQL.CleanUp)
+ [DMS ソースとして PostgreSQL データベースを使用する場合の追加設定](#CHAP_Source.PostgreSQL.Advanced)
+ [PostgreSQL のソースとしてのリードレプリカ](#CHAP_Source.PostgreSQL.ReadReplica)
+ [`MapBooleanAsBoolean` PostgreSQL エンドポイント設定の使用](#CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting)
+ [DMS ソースとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib)
+ [DMS のソースとして PostgreSQL データベースを使用する場合の制限](#CHAP_Source.PostgreSQL.Limitations)
+ [PostgreSQL のソースデータ型](#CHAP_Source-PostgreSQL-DataTypes)

## でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites"></a>

セルフマネージド PostgreSQL データベースをソースとして使用すると、別の PostgreSQL データベース、または でサポートされている他のターゲットデータベースのいずれかにデータを移行できます AWS DMS。データベースソースには、オンプレミスのデータベースまたは Amazon EC2 インスタンスで実行されているセルフ管理エンジンを使用できます。DB インスタンスは、全ロードタスクと継続的レプリケーションの変更データキャプチャ (CDC) タスクの両方に使用できます。

### セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用するための前提条件
<a name="CHAP_Source.PostgreSQL.Prerequisites.SelfManaged"></a>

自己管理 PostgreSQL ソースデータベースからデータを移行する前に、次の操作を行います：
+ バージョン 9.4.x 以降の PostgreSQL データベースを使用していることを確認する。
+ 全ロードと CDC タスクまたは CDC のみのタスクの場合は、PostgreSQL ソースデータベースに指定されたユーザーアカウントにスーパーユーザー許可を付与します。ユーザー アカウントはソース内のレプリケーション固有機能にアクセスするには、スーパーユーザー許可が必要です。テーブルを正常に移行するため、DMS ユーザーアカウントには、すべての列に対する SELECT のアクセス許可が必要です。列に対するアクセス許可がない場合、DMS は通常の DMS データ型マッピングを使用してターゲットテーブルを作成するため、メタデータの相違やタスクの失敗につながります。
+  AWS DMS レプリケーションサーバーの IP アドレスを設定`pg_hba.conf`ファイルに追加し、レプリケーションとソケット接続を有効にします。以下に例を示します。

  ```
              # Replication Instance
              host all all 12.3.4.56/00 md5
              # Allow replication connections from localhost, by a user with the
              # replication privilege.
              host replication dms 12.3.4.56/00 md5
  ```

  PostgreSQL の `pg_hba.conf` の設定ファイルはクライアント認証を制御します。(HBA はホストベースの認証を表します) ファイルは従来、データベースクラスターのデータディレクトリに保存されています。
+ を使用して論理レプリケーションのソースとしてデータベースを設定する場合は、 AWS DMS 「」を参照してください。 [セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用して CDC を有効にする](#CHAP_Source.PostgreSQL.Prerequisites.CDC)

**注記**  
一部の AWS DMS トランザクションは、DMS エンジンが再度使用する前にしばらくアイドル状態になります。PostgreSQL バージョン 9.6 以降で `idle_in_transaction_session_timeout` パラメータを使用すると、アイドル状態のトランザクションでタイムアウトやエラーが生じる場合があります。 AWS DMSを使用する際、アイドル状態のトランザクションを終了しないでください。

### セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用して CDC を有効にする
<a name="CHAP_Source.PostgreSQL.Prerequisites.CDC"></a>

AWS DMS は、論理レプリケーションを使用した変更データキャプチャ (CDC) をサポートします。セルフ管理 PostgreSQL ソースデータベースの論理レプリケーションを有効にするには、`postgresql.conf` の設定ファイルで以下のパラメータと値を設定します:
+ `wal_level = logical` を設定します。
+ `max_replication_slots` を 1 より大きい値に設定します。

  `max_replication_slots` 値は、実行するタスクの数に従って設定してください。たとえば、5 つのタスクを実行するには、少なくとも 5 つのスロットを設定する必要があります。スロットは、タスクが開始するとすぐに自動的に開き、タスクが実行されなくなった場合でも開いたままです。開いているスロットは手動で削除してください。DMS でレプリケーションスロットを作成した場合、タスクを削除すると、DMS は自動的にレプリケーションスロットを削除することに注意してください。
+ `max_wal_senders` を 1 より大きい値に設定します。

  `max_wal_senders` パラメータは、実行可能な同時タスクの数を設定します。
+ `wal_sender_timeout` パラメータは、指定されたミリ秒数が過ぎても非アクティブなレプリケーション接続を終了します。オンプレミスの PostgreSQL データベースのデフォルトは 60,000 ミリ秒 (60 秒)。値を 0 (ゼロ) に設定するとタイムアウトメカニズムが無効になる。この設定は DMS では有効。

  `wal_sender_timeout` をゼロ以外の値に設定すると、CDC での DMS タスクには最低 10,000 ミリ秒 (10 秒) が必要となり、値が 10,000 ミリ秒未満になると失敗する。DMS レプリケーションインスタンスのマルチ AZ フェイルオーバー中に遅延が発生しないように、この値は 5 分未満にする。

一部のパラメータは静的であり、サーバースタート時にのみ設定できます。設定ファイル (セルフマネージドデータベースの場合) または DB パラメータグループ (RDS for PostgreSQL データベース) への変更は、サーバーが再起動されるまで無視されます。詳細については、[PostgreSQL ドキュメント](https://www.postgresql.org/docs/current/intro-whatis.html)をご参照ください。

CDC を有効にすることに関する詳細については、「[論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化](#CHAP_Source.PostgreSQL.Security)」をご参照ください。

## DMS ソースとしての AWSマネージド PostgreSQL データベースの使用
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL"></a>

 AWSマネージド PostgreSQL DB インスタンスをソースとして使用できます AWS DMS。 AWSが管理する PostgreSQL ソースを使用して、全ロードタスクと変更データキャプチャ (CDC) タスクの両方を実行できます。

### AWSマネージド PostgreSQL データベースを DMS ソースとして使用するための前提条件
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.Prerequisites"></a>

 AWSマネージド PostgreSQL ソースデータベースからデータを移行する前に、次の操作を行います。
+ PostgreSQL DB インスタンスに必要な最小限のアクセス許可を持つ AWS ユーザーアカウントをPostgreSQL ソースエンドポイントのユーザーアカウントとして使用することをお勧めします AWS DMS。管理アカウントの使用はお勧めしません。このアカウントには `rds_superuser` ロールと `rds_replication` ロールが必要です。`rds_replication` ロールは、論理スロットを管理し、論理スロットを使用してデータをストリーミングするアクセス権許可付与します。

  使用するアカウントの管理ユーザーアカウントで複数のオブジェクトを作成します。その作成についての詳細は、「[マスター ユーザーアカウントを使用せず Amazon RDS for PostgreSQL データベースの移行](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser)」をご参照ください。
+ ソースデータベースが仮想プライベートクラウド (VPC) にある場合は、データベースが常駐する DB インスタンスへのアクセス権を提供する VPC セキュリティグループを選択します。これは、DMS レプリケーション インスタンスがソース DB インスタンスに正常に接続するために必要です。データベースと DMS レプリケーション インスタンスが同じ VPC 内にある場合は、適切なセキュリティグループを独自のインバウンド ルールに追加します。

**注記**  
一部の AWS DMS トランザクションは、DMS エンジンが再度使用する前にしばらくアイドル状態になります。PostgreSQL バージョン 9.6 以降で `idle_in_transaction_session_timeout` パラメータを使用すると、アイドル状態のトランザクションでタイムアウトやエラーが生じる場合があります。 AWS DMSを使用する際、アイドル状態のトランザクションを終了しないでください。

### で AWS管理された PostgreSQL DB インスタンスで CDC を有効にする AWS DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC"></a>

AWS DMS DB インスタンスが論理レプリケーションを使用するように設定されている場合、 は Amazon RDS PostgreSQL データベースで CDC をサポートします。次の表は、各マネージド PostgreSQL バージョンの論理レプリケーションの互換性をまとめ AWSたものです。


|  PostgreSQL バージョン  |  AWS DMS フルロードのサポート   |  AWS DMS CDC サポート  | 
| --- | --- | --- | 
|  Aurora PostgreSQL バージョン 2.1 (PostgreSQL 10.5 以前と互換)  |  はい  |  なし  | 
|  PostgreSQL 10.6 と互換性のある Aurora PostgreSQL バージョン 2.2 (またはそれ以降)   |  はい   |  はい  | 
|  PostgreSQL 10.21 と互換性のある RDS for PostgreSQL (またはそれ以降)  |  はい   |  はい  | 

**RDS PostgreSQL DB インスタンスに対して論理レプリケーションを有効にするには**

1. PostgreSQL DB インスタンスの AWS マスターユーザーアカウントを PostgreSQL ソースエンドポイントのユーザーアカウントとして使用します。マスターユーザーアカウントには、CDC を設定するために必要なロールがあります。

   マスター ユーザーアカウント以外のアカウントを使用する場合は、使用するアカウントのマスター ユーザーアカウントから複数のオブジェクトを作成する必要があります。詳細については、「[マスター ユーザーアカウントを使用せず Amazon RDS for PostgreSQL データベースの移行](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser)」を参照してください。

1. DB CLUSTER パラメータグループの `rds.logical_replication` パラメータを 1 に設定します。この静的パラメータを有効にするには、DB インスタンスを再起動する必要があります。このパラメータを適用する一環として、 AWS DMS は `wal_level`、`max_wal_senders`、`max_replication_slots`、`max_connections` の各パラメータを設定します。これらのパラメータの変更によって先書きログ (WAL) の生成が増える可能性があるため、論理レプリケーションスロットを使用する場合にのみ `rds.logical_replication` を設定してください。

1. `wal_sender_timeout` パラメータは、指定されたミリ秒数が過ぎても非アクティブなレプリケーション接続を終了します。 AWSマネージド PostgreSQL データベースのデフォルトは 30,000 ミリ秒 (30 秒) です。値を 0 (ゼロ) に設定するとタイムアウトメカニズムが無効になる。この設定は DMS では有効です。

   `wal_sender_timeout` をゼロ以外の値に設定すると、CDC での DMS タスクには最低 10,000 ミリ秒 (10 秒) が必要となり、値が 0～10,000 ミリ秒の場合は失敗します。DMS レプリケーションインスタンスのマルチ AZ フェイルオーバー中に遅延が発生しないように、この値は 5 分未満にします。

1.  DB クラスター パラメータグループで `max_worker_processes` パラメータの値が、`max_logical_replication_workers`、`autovacuum_max_workers`、`max_parallel_workers`の合計値以上となるようにしてください。多数のバックグラウンド ワーカー プロセスが、スモールインスタンスではアプリケーション ワークロードに影響を与える可能性があります。したがって、`max_worker_processes` をデフォルト値より大きく設定した場合は、データベースのパフォーマンスをモニタリングしてください。

1.  Aurora PostgreSQL を CDC のソースとして使用する場合は、`synchronous_commit` を `ON` に設定します。

**CDC に PostgreSQL MultiAZ DB クラスターリードレプリカを使用するには (継続的なレプリケーション)**

1. DB CLUSTER パラメータグループの `rds.logical_replication` と `sync_replication_slots` のパラメータを 1 に設定します。この静的パラメータを有効にするには、DB インスタンスを再起動する必要があります。

1. 次のコマンドを実行して、ライターに `awsdms_ddl_audit` テーブルを作成し、`objects_schema` を使用するスキーマの名前に置き換えます。

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 次のコマンドを実行して、`awsdms_intercept_ddl` 関数を作成し、`objects_schema` を使用するスキーマの名前に置き換えます。

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. 次のコマンドを実行してイベントトリガー `awsdms_intercept_ddl` を作成します。

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

   これらのイベントにアクセスするすべてのユーザーおよびロールに必要な DDL 許可があることを確認します。例えば、次のようになります。

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

1. ライターでレプリケーションスロットを作成します。

   ```
   SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true);
   ```

1. レプリケーションスロットがリーダーで使用可能であることを確認します。

   ```
   select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot';
   
   slot_name            |plugin       |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since               |conflicting|invalidation_reason|failover|synced|
   ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+
   dms_read_replica_slot|test_decoding|logical  |     5|postgres|false    |false |          |    |3559        |0/180011B8 |0/180011F0         |reserved  |             |true     |2025-02-10 15:45:04.083 +0100|false      |                   |false   |false |
   ```

1. リードレプリカの DMS ソースエンドポイントを作成し、追加の接続属性を使用して論理レプリケーションスロット名を設定します。

   ```
   slotName=dms_read_replica_slot;
   ```

1. CDC/FL\$1CDC タスクを作成して開始します。
**注記**  
CDC/FL\$1CDC 移行の場合、DMS はタスク開始時刻を CDC 開始位置と見なします。レプリケーションスロットからの古い LSN はすべて無視されます。

### マスター ユーザーアカウントを使用せず Amazon RDS for PostgreSQL データベースの移行
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser"></a>

場合によっては、ソースとして使用している Amazon RDS PostgreSQL DB インスタンス用マスター ユーザーアカウントを使用しない場合があります。このような場合は、データ定義言語 (DDL) イベントをキャプチャするために複数のオブジェクトを作成します。マスターアカウント以外のアカウントでこれらのオブジェクトを作成し、マスターユーザーアカウントでトリガーを作成します。

**注記**  
ソースエンドポイントで `CaptureDdls` エンドポイント設定を `false` に設定すると、ソースデータベース上で次のテーブルおよびトリガーを作成する必要はありません。

これらのオブジェクトを作成するには、以下の手順を実行します。

**オブジェクトを作成するには**

1. オブジェクトが作成されるスキーマを選択します。デフォルトのスキーマは `public` です。スキーマが存在し、`OtherThanMaster` アカウントからアクセス可能であることを確認します。

1. マスターアカウント以外のユーザーアカウントを使用して PostgreSQL DB インスタンス、ここでは `OtherThanMaster` アカウントにログインします。

1. 以下のコマンドを実行し、以下のコード内の `objects_schema` を使用するスキーマの名前に置き換えて `awsdms_ddl_audit` テーブルを作成します。

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 以下のコマンドを実行して `awsdms_intercept_ddl` 関数を作成します。コード内の `objects_schema` は、使用するスキーマの名前に置き換えてください。

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. `OtherThanMaster` アカウントからログアウトし、`rds_superuser` ロールが割り当てられたアカウントを使用してログインします。

1. 以下のコマンドを実行してイベントトリガー `awsdms_intercept_ddl` を作成します。

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end 
   EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

1. これらのイベントにアクセスするすべてのユーザーおよびロールに必要な DDL 許可があることを確認します。例えば、次のようになります。

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

前の手順を完了したら、`OtherThanMaster` アカウントを使用して AWS DMS ソースエンドポイントを作成できます。

**注記**  
これらのイベントは、`CREATE TABLE`、`ALTER TABLE`、および `DROP TABLE` ステートメントによってトリガーされます。

## 論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化
<a name="CHAP_Source.PostgreSQL.Security"></a>

PostgreSQL のネイティブ論理レプリケーション機能を使用して、PostgreSQL DB ソース用データベース移行中に変更データ キャプチャ (CDC) を有効にすることができます。この機能は、セルフ管理 PostgreSQL および Amazon RDS for PostgreSQL SQL DB インスタンスで使用できます。この方法では、ダウンタイムが短縮され、ターゲットデータベースがソース PostgreSQL データベースと同期しやすくなります。

AWS DMS は、プライマリキーを持つ PostgreSQL テーブルの CDC をサポートします。テーブルにプライマリキーがない場合、先書きログ (WAL) にはデータベース行の前イメージが含まれません。この場合、DMS はテーブルを更新できません。ここでは、追加の構成設定を使用し、回避策としてテーブルレプリカ アイデンティティを使用できます。ただし、この方法では追加のログが生成される可能性があります。注意深いテストの後にのみ、回避策としてテーブルレプリカ アイデンティティ を使用することをお勧めします。詳細については、「[DMS ソースとして PostgreSQL データベースを使用する場合の追加設定](#CHAP_Source.PostgreSQL.Advanced)」を参照してください。

**注記**  
REPLICA IDENTITY FULL は論理デコードプラグインではサポートされていますが、pglogical プラグインではサポートされていません。詳細については、「[pglogical ドキュメント](https://github.com/2ndQuadrant/pglogical#primary-key-or-replica-identity-required)」を参照してください。

全ロードタスク、CDC および CDC のみのタスクの場合、 は論理レプリケーションスロット AWS DMS を使用して、ログがデコードされるまでレプリケーション用の WAL ログを保持します。全ロードおよび CDC タスクまたは CDC タスクの再起動(再開ではない)によって、レプリケーション スロットが再作成されます。

**注記**  
論理デコードの場合、DMS は test\$1decoding または pglogical プラグインのいずれかを使用します。pglogical プラグインがソース PostgreSQL データベースで使用できる場合、DMS は pglogical を使用してレプリケーション スロットを作成し、それ以外の場合は test\$1decoding プラグインが使用されます。test\$1decoding プラグインの詳細については、「[PostgreSQL のドキュメント](https://www.postgresql.org/docs/9.4/test-decoding.html)」を参照してください。  
データベースパラメータ `max_slot_wal_keep_size` がデフォルト以外の値に設定されており、レプリケーションスロットの `restart_lsn` の値が現在の LSN よりも大きい場合、必要な WAL ファイルが削除されるため、DMS タスクは失敗します。

### pgglogical プラグインの設定
<a name="CHAP_Source.PostgreSQL.Security.Pglogical"></a>

PostgreSQL 拡張機能として実装された pglogical プラグインは、選択的データ レプリケーション用論理レプリケーションシステムとモデルです。次の表に、pglogical プラグインをサポートするソース PostgreSQL データベースバージョンを挙げます。


|  PostgreSQL ソース   |  plogical のサポート  | 
| --- | --- | 
|  セルフ管理 PostgreSQL 9.4 以降  |  はい  | 
|  Amazon RDS PostgreSQL 9.5 以降  |  いいえ  | 
|  Amazon RDS PostgreSQL 9.6 以降  |  はい  | 
|  Aurora PostgreSQL 1.x から 2.5.x まで  |  いいえ  | 
|  Aurora PostgreSQL 2.6 以上  |  はい  | 
|  Aurora PostgreSQL 3.3 以上  |  はい  | 

で使用する pglogical を設定する前に AWS DMS、まず PostgreSQL ソースデータベースで変更データキャプチャ (CDC) の論理レプリケーションを有効にします。
+ *セルフ管理* PostgreSQL ソースデータベースにおいて CDC での論理レプリケーションの有効化について詳しくは、「[セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用して CDC を有効にする](#CHAP_Source.PostgreSQL.Prerequisites.CDC)」をご参照ください。
+ *AWSが管理する*PostgreSQL ソースデータベースでの CDC 用論理レプリケーションの有効化については、「[で AWS管理された PostgreSQL DB インスタンスで CDC を有効にする AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC)」をご参照ください。

PostgreSQL ソースデータベースで論理レプリケーションを有効にした後、次のステップに従って、DMS で使用する pglogical を設定します。

**で PostgreSQL ソースデータベースの論理レプリケーションに pglogical プラグインを使用するには AWS DMS**

1. PostgreSQL ソースデータベースに pglogical 拡張機能を作成します：

   1. 正しいパラメータを設定します：
      + セルフ管理 PostgreSQL データベースの場合は、データベースパラメータ `shared_preload_libraries= 'pglogical'` を設定します。
      + Amazon RDS と Amazon Aurora PostgreSQL 互換エディションの PostgreSQL で、パラメーター `shared_preload_libraries` を同じ RDS パラメーターグループ内の `pglogical` に設定します。

   1. PostgreSQL ソースデータベースを再起動します。

   1. PostgreSQL データベースで、コマンド `create extension pglogical;` を実行します。

1. pglogical が正常にインストールされたことを確認するには、次のコマンドを実行します：

   `select * FROM pg_catalog.pg_extension`

PostgreSQL ソースデータベースエンドポイントの変更データキャプチャを実行する AWS DMS タスクを作成できるようになりました。

**注記**  
PostgreSQL ソースデータベースで pglogical を有効にしないとき、 AWS DMS はデフォルトで `test_decoding` プラグインを使用します。pglogical が論理デコードに対して有効になっている場合、 はデフォルトで pglogical AWS DMS を使用します。ただし、代わりに `test_decoding` のプラグインを使用する追加の接続属性 `PluginName` を設定することもできます。

## ネイティブ CDC スタートポイントを使用して PostgreSQL ソース エンドポイントの CDC ロードを設定するには
<a name="CHAP_Source.PostgreSQL.v10"></a>

エンドポイントを作成するときに、`slotName` の追加の接続属性を既存の論理レプリケーション スロットの名前に設定することで、ソースとして PostgreSQL によりネイティブ CDC スタートポイントを有効にします。この論理レプリケーションスロットは、エンドポイントの作成時点からの継続的な変更を保持するため、以前の時点からのレプリケーションをサポートします。

PostgreSQL は、 AWS DMS が論理レプリケーションスロットから変更を正常に読み取った後にのみ破棄される WAL ファイルにデータベースの変更を書き込みます。論理レプリケーションスロットを使用すると、ログに記録された変更がレプリケーションエンジンによって消費される前に削除されないように保護できます。

ただし、変更率と消費率によっては、論理レプリケーションスロットに保持されている変更により、ディスク使用率が高くなることがあります。論理レプリケーション スロットを使用する場合は、ソース PostgreSQL インスタンスにスペース使用アラームを設定することをお勧めします。追加の `slotName` 接続属性の設定についての詳細は、「[DMS ソースとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib)」をご参照ください。

次の手順では、このアプローチについて詳しく説明します。

**ネイティブ CDC 開始ポイントを使用して PostgreSQL ソースエンドポイントの CDC ロードを設定するには**

1. 開始点として使用する以前のレプリケーションタスク (親タスク) によって使用されていた論理レプリケーションスロットを特定します。次に、ソースデータベースの `pg_replication_slots` ビューにクエリを実行して、このスロットにアクティブな接続がないことを確認します。その場合は、先に進む前に解決して終了します。

   次のステップでは、論理レプリケーションスロットが `abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef` であると仮定します。

1. 次の追加接続属性設定を含む新しいソースエンドポイントを作成します。

   ```
   slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
   ```

1. コンソール AWS CLI または AWS DMS API を使用して、新しい CDC 専用タスクを作成します。たとえば、CLI を使用して、次の `create-replication-task` コマンドを実行できます。

   ```
   aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test 
   --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 
   --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 
   --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE 
   --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" 
   --replication-task-settings "file://task-pg.json"
   ```

   前述のコマンドでは、次のオプションが設定されています。
   + `source-endpoint-arn` は、ステップ 2 で作成した新しい値に設定されます。
   + `replication-instance-arn` オプションは、ステップ 1 の親タスクと同じ値に設定されます。
   + `table-mappings` および `replication-task-settings` オプションは、ステップ 1 の親タスクと同じ値に設定されます。
   + `cdc-start-position` はオプションはスタート位置の値に設定されます。この開始位置を調べるには、ソースデータベースの `pg_replication_slots` ビューにクエリを実行するか、ステップ 1 で親タスクのコンソール詳細を表示します。詳細については、「[CDC ネイティブのスタートポイントの決定](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint.Native)」を参照してください。

    AWS DMS コンソールを使用して新しい CDC 専用タスクを作成するときにカスタム CDC 開始モードを有効にするには、次の手順を実行します。
   + **[タスク設定]** セクションの **[ソーストランザクションの CDC 開始モード]** では、**[カスタム CDC 開始モードを有効にする]** を選択する。
   + **[ソーストランザクションのカスタム CDC 開始点]** では、**[ログシーケンス番号を指定する]** を選択する。システム変更番号を指定するか、**[復旧チェックポイントを指定する]** を選択して、復旧チェックポイントを指定する。

   この CDC タスクが実行されると、指定された論理レプリケーションスロットが存在しない場合、 はエラーを AWS DMS レイズします。また、`cdc-start-position` の有効な設定を使用してタスクが作成されていない場合、エラーを返します。

pglogical プラグインでネイティブ CDC スタートポイントを使用し、新しいレプリケーション スロットを使用する場合は、CDC タスクを作成する前に、次のステップを実行してください。

**別の DMS タスクの一部として以前に作成されていない新しいレプリケーション スロットを使用するには**

1. 次に示すように、レプリケーション スロットを作成します：

   ```
   SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
   ```

1. データベースがレプリケーションスロットを作成した後、次のとおりスロットの **restart\$1lsn** と **confirmed\$1flush\$1lsn** の値を取得してメモしておきます。

   ```
   select * from pg_replication_slots where slot_name like 'replication_slot_name';
   ```

   レプリケーションスロットの後に作成された CDC タスクのネイティブな CDC 開始点は、**confirmed\$1flush\$1lsn** 値以前にできないことに注意します。

   **restart\$1lsn** と **confirmed\$1flush\$1lsn** の値の詳細については、「[pg\$1replication\$1slots](https://www.postgresql.org/docs/14/view-pg-replication-slots.html)」を参照してください。

1. pglogical ノードを作成します。

   ```
   SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
   ```

1. `pglogical.create_replication_set` 関数を使用して 2 つのレプリケーションセットを作成します。最初のレプリケーションセットは、プライマリキーを持つテーブルの更新と削除を追跡します。2 番目のレプリケーションセットは挿入のみを追跡し、最初のレプリケーションセットと同じ名前にプレフィックス「i」が追加されています。

   ```
   SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false);
   SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
   ```

1. レプリケーション集合にテーブルを追加します。

   ```
   SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true);
   SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
   ```

1. ソース エンドポイントを作成するときに、次の追加接続属性 (ECA) を設定します。

   ```
   PluginName=PGLOGICAL;slotName=slot_name;
   ```

新しいレプリケーション スロットを使用して PostgreSQL ネイティブのスタートポイントを使用して CDC のみのタスクを作成できるようになりました。pglogical プラグインの詳細については、「[pglogical 3.7 ドキュメント](https://www.enterprisedb.com/docs/pgd/3.7/pglogical/)」を参照してください。

## を使用した PostgreSQL から PostgreSQL への移行 AWS DMS
<a name="CHAP_Source.PostgreSQL.Homogeneous"></a>

PostgreSQL 以外のデータベースエンジンから PostgreSQL データベースに移行する場合、 AWS DMS はほとんどの場合、最適な移行ツールです。一方、PostgreSQL データベースから PostgreSQL データベースに移行する場合、PostgreSQL ツールがより効果的な場合があります。

### PostgreSQL ネイティブ ツールを使用してデータを移行する
<a name="CHAP_Source.PostgreSQL.Homogeneous.Native"></a>

以下の条件では、`pg_dump` などの PostgreSQL データベース移行ツールを使用することをお勧めします。
+ ソース PostgreSQL データベースからターゲット PostgreSQL データベースに移行する同種移行である。
+ データベース全体を移行する。
+ ネイティブツールで最小のダウンタイムでデータを移行できる。

pg\$1dump ユーティリティでは、COPY コマンドを使用して、PostgreSQL データベースのスキーマとデータダンプを作成します。pg\$1dump によって生成されるダンプ スクリプトは、同じ名前のデータベースにデータをロードし、テーブル、インデックス、外部キーを再作成します。`pg_restore` コマンドと `-d` パラメータを使用して、データを別の名前でデータベースに復元できます。

EC2 で実行されている PostgreSQL ソースデータベースから Amazon RDS for PostgreSQL ターゲットにデータを移行する場合は、pglogical プラグインを使用できます。

PostgreSQL データベースを Amazon RDS for PostgreSQL や Amazon Aurora (PostgreSQL 互換エディション) にインポートする詳しい方法については、「[https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html)」をご参照ください。

### DMS を使用した PostgreSQL から PostgreSQL へのデータの移行
<a name="CHAP_Source.PostgreSQL.Homogeneous.DMS"></a>

 AWS DMS は、例えば、オンプレミスのソース PostgreSQL データベースからターゲット Amazon RDS for PostgreSQL または Aurora PostgreSQL インスタンスにデータを移行できます。通常、PostgreSQL のコアまたは基本のデータ型は正常に移行されます。

**注記**  
パーティションテーブルを PostgreSQL ソースから PostgreSQL ターゲットにレプリケーションする場合、DMS タスクの選択条件の一部として親テーブルを言及する必要はありません。親テーブルに言及すると、ターゲット上の子テーブルでデータが複製され、PK 違反が発生する可能性があります。テーブルマッピングの選択基準で子テーブルのみを選択すると、親テーブルに自動代入されます。

ソースデータベースでサポートされているが、ターゲットでサポートされていないデータ型は正常に移行されない場合があります。データ型が不明な場合、 は一部のデータ型を文字列として AWS DMS ストリーミングします。XML や JSON などの一部のデータ型は、小さなファイルの場合は正常に移行されますが、大きなドキュメントの場合は失敗することがあります。

データ型の移行を実行するときは、以下について注意してください：
+ 場合によっては、PostgreSQL NUMERIC (p, s) データ型で精度とスケールが指定されない場合があります。DMS バージョン 3.4.2 以前では、DMS はデフォルトでは 28 の精度と 6 のスケール (NUMERIC (28,6)) を使用します。たとえば、ソースからの値 0.611111104488373 は、PostgreSQL ターゲットの 0.611111 に変換されます。
+ ARRAY データ型を持つテーブルにはプライマリ キーが必要です。ARRAY データ型にプライマリ キーがないテーブルは、全ロード中に中断されます。

次の表は、ソース PostgreSQL のデータ型と、これらのデータ型が正常に移行されるかどうかを示しています。


| データ型 | 正常に移行 | 部分的に移行 | 移行しない | コメント | 
| --- | --- | --- | --- | --- | 
| INTEGER | X |  |  |  | 
| SMALLINT | X |  |  |  | 
| BIGINT | X |  |  |  | 
| NUMERIC/DECIMAL(p,s) |  | X |  | この場合、0<p<39 と 0<s | 
| NUMERIC/DECIMAL |  | X |  | この場合、p>38 または p=s=0 | 
| REAL | X |  |  |  | 
| DOUBLE | X |  |  |  | 
| SMALLSERIAL | X |  |  |  | 
| SERIAL | X |  |  |  | 
| BIGSERIAL | X |  |  |  | 
| MONEY | X |  |  |  | 
| CHAR |  | X |  | 精度の指定なし | 
| CHAR(n) | X |  |  |  | 
| VARCHAR |  | X |  | 精度の指定なし | 
| VARCHAR(n) | X |  |  |  | 
| TEXT | X |  |  |  | 
| BYTEA | X |  |  |  | 
| TIMESTAMP | X |  |  | 正と負の無限大値はそれぞれ '9999-12-31 23:59:59 'と '4713-01-01 00:00:00 BC' に切り捨てられます。 | 
| TIMESTAMP WITH TIME ZONE |  | X |  |  | 
| DATE | X |  |  |  | 
| TIME | X |  |  |  | 
| TIME WITH TIME ZONE | X |  |  |  | 
| INTERVAL |  | X |  |  | 
| BOOLEAN | X |  |  |  | 
| ENUM |  |  | X |  | 
| CIDR | X |  |  |  | 
| INET |  |  | X |  | 
| MACADDR |  |  | X |  | 
| TSVECTOR |  |  | X |  | 
| TSQUERY |  |  | X |  | 
| XML |  | X |  |  | 
| POINT | X |  |  | PostGIS 空間データ型 | 
| LINE |  |  | X |  | 
| LSEG |  |  | X |  | 
| BOX |  |  | X |  | 
| PATH |  |  | X |  | 
| POLYGON | X |  |  | PostGIS 空間データ型 | 
| CIRCLE |  |  | X |  | 
| JSON |  | X |  |  | 
| 配列 | X |  |  | プライマリ キーが必要です | 
| COMPOSITE |  |  | X |  | 
| RANGE |  |  | X |  | 
| LINESTRING | X |  |  | PostGIS 空間データ型 | 
| MULTIPOINT | X |  |  | PostGIS 空間データ型 | 
| MULTILINESTRING | X |  |  | PostGIS 空間データ型 | 
| MULTIPOLYGON | X |  |  | PostGIS 空間データ型 | 
| GEOMETRYCOLLECTION | X |  |  | PostGIS 空間データ型 | 

### PostGIS 空間データ型の移行
<a name="CHAP_Source.PostgreSQL.DataTypes.Spatial"></a>

*空間データ*は、空間内のオブジェクトまたは位置のジオメトリ情報を識別します。PostgreSQL オブジェクトリレーショナルデータベースは、PostGIS 空間データ型をサポートしています。

PostgreSQL 空間データオブジェクトを移行する前に、PostGIS プラグインがグローバルレベルで有効になっていることを確認してください。これにより、 は PostgreSQL ターゲット DB インスタンスの正確なソース空間データ列 AWS DMS を作成します。

PostgreSQL から PostgreSQL への同種移行の場合、 は PostGIS の幾何学的および地理的 (地理的座標) データオブジェクトタイプとサブタイプの移行 AWS DMS をサポートします。
+  POINT 
+  LINESTRING 
+  POLYGON 
+  MULTIPOINT 
+  MULTILINESTRING 
+  MULTIPOLYGON 
+  GEOMETRYCOLLECTION 

## を使用した Babelfish for Amazon Aurora PostgreSQL からの移行 AWS DMS
<a name="CHAP_Source.PostgreSQL.Babelfish"></a>

を使用して、Babelfish for Aurora PostgreSQL ソーステーブルをサポートされている任意のターゲットエンドポイントに移行できます AWS DMS。

DMS コンソール、API、または CLI コマンドを使用して AWS DMS ソースエンドポイントを作成する場合、ソースを **Amazon Aurora PostgreSQL** に設定し、データベース名を に設定します**babelfish\$1db**。**エンドポイント設定**セクションで、**DatabaseMode** が **Babelfish** に設定され、**BabelfishDatabaseName** がソースの Babelfish T-SQL データベースの名前に設定されていることを確認してください。Babelfish TCP ポート **1433** を使用する代わりに、Aurora PostgreSQL TCP ポート **5432** を使用します。

DMS で適切なデータ型とテーブルメタデータを使用するには、データを移行する前にテーブルを作成する必要があります。移行を実行する前にターゲットにテーブルを作成しないと、DMS は誤ったデータ型とアクセス権限を使用してテーブルを作成する可能性があります。

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

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

Babelfish for PostgreSQL クラスターを定義する際にマルチデータベース移行モードを設定した場合は、スキーマ名を T-SQL スキーマに変更する変換ルールを追加します。例えば、T-SQL のスキーマ名が `dbo` で、Babelfish for PostgreSQL スキーマ名が `mydb_dbo` の場合、変換ルールを使用してスキーマ名を `dbo` に変更します。PostgreSQL スキーマ名を見つけるには、「*Amazon Aurora ユーザーガイド*」の「[Babelfish のアーキテクチャ](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-architecture.html)」を参照してください。

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

次の変換ルールの例は、スキーマ名を `mydb_dbo` から `dbo` に戻す方法を示しています。

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

### Babelfish テーブルで PostgreSQL のソースエンドポイントを使用する場合の制限
<a name="CHAP_Source.PostgreSQL.Babelfish.Limitations"></a>

Babelfish テーブルで PostgreSQL のソースエンドポイントを使用する場合、次の制限が適用されます。
+ DMS は、Babelfish バージョン 16.2/15.6 以降、および DMS バージョン 3.5.3 以降の移行のみをサポートします。
+ DMS は、Babelfish テーブル定義の変更をターゲットエンドポイントにレプリケートしません。この制限を回避するには、まずターゲットにテーブル定義の変更を適用し、次に Babelfish ソースでテーブル定義を変更することです。
+ BYTEA データ型を使用して Babelfish テーブルを作成する場合、DMS は SQL Server をターゲットとして移行するときに、`varbinary(max)` データ型に変換します。
+ DMS は、バイナリデータ型の完全 LOB モードをサポートしていません。代わりにバイナリデータ型には制限付き LOB モードを使用します。
+ DMS は、Babelfish のデータ検証をソースとしてサポートしていません。
+ **[ターゲットテーブル作成モード]** タスク設定では、**[何もしない]** モードまたは **[切り捨て]** モードのみを使用します。**[ターゲット上のテーブルを削除]** モードは使用しないでください。**[ターゲット上のテーブルを削除]** を使用する場合、DMS は誤ったデータ型でテーブルを作成することがあります。
+ 継続的なレプリケーション (CDC またはフルロードと CDC) を使用する場合、`PluginName` 追加の接続属性 (ECA) を `TEST_DECODING` に設定します。
+ DMS は、Babelfish のパーティション化されたテーブルのレプリケーション (CDC またはフルロードおよび CDC) をソースとしてはサポートしていません。

## PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除
<a name="CHAP_Source.PostgreSQL.CleanUp"></a>

DDL イベントをキャプチャするために、 は移行タスクの開始時に PostgreSQL データベースにさまざまなアーティファクト AWS DMS を作成します。タスクが完了したら、これらのアーティファクトを削除できます。

アーティファクトを削除するには、以下のステートメントを発行します (示されている順序で)。ここに、`{AmazonRDSMigration}` は、アーティファクトが作成されたスキーマです。スキーマを削除する場合でも、細心の注意を払ってください。運用中のスキーマ (特に公開スキーマ) は絶対に削除しないでください。

```
drop event trigger awsdms_intercept_ddl;
```

イベントトリガーは特定のスキーマに属していません。

```
drop function {AmazonRDSMigration}.awsdms_intercept_ddl()
drop table {AmazonRDSMigration}.awsdms_ddl_audit
drop schema {AmazonRDSMigration}
```

## DMS ソースとして PostgreSQL データベースを使用する場合の追加設定
<a name="CHAP_Source.PostgreSQL.Advanced"></a>

PostgreSQL データベースからデータを移行するときは、2 つの方法で詳細設定を追加できます。
+ 追加接続属性に値を追加して、DDL イベントをキャプチャし、運用中の DDL データベースアーティファクトが作成されたスキーマを指定します。詳細については、「[DMS ソースとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECA)](#CHAP_Source.PostgreSQL.ConnectionAttrib)」を参照してください。
+ 接続文字列パラメータを上書きできます。これを行うには、次のいずれかのオプションを選択します：
  + 内部 AWS DMS パラメータを指定します。このようなパラメータが必要になることはめったにないため、ユーザー インターフェイスには表示されません。
  + 特定のデータベースクライアントのパススルー (パススルー) 値を指定します。 は、データベースクライアントに渡される接続スティングにパススルーパラメータ AWS DMS を含めます。
+ PostgreSQL バージョン 9.4 以降でテーブルレベルのパラメータ `REPLICA IDENTITY` を使用すると、ログ先行書き込み (WAL) に書き込まれる情報を制御できる。特に、更新または削除される行を識別する WAL に対してそうします。`REPLICA IDENTITY FULL` は行のすべての列の古い値を記録します。不必要に余分な量の WAL が `FULL` により生成されるため、`REPLICA IDENTITY FULL` はテーブルごとに慎重に使用してください。詳細については、「[ALTER TABLE-REPLICA IDENTITY](https://www.postgresql.org/docs/devel/sql-altertable.html)」を参照。

## PostgreSQL のソースとしてのリードレプリカ
<a name="CHAP_Source.PostgreSQL.ReadReplica"></a>

PostgreSQL リードレプリカを の CDC ソースとして使用 AWS DMS して、プライマリデータベースの負荷を軽減します。この機能は PostgreSQL 16.x から使用でき、 AWS DMS バージョン 3.6.1 以降が必要です。CDC 処理にリードレプリカを使用すると、プライマリデータベースに対する運用上の影響が軽減されます。

**注記**  
Amazon RDS PostgreSQL バージョン 16.x では、3-AZ (TAZ) 設定でのリードレプリカの論理レプリケーションに制限があります。TAZ デプロイで完全リードレプリカの論理レプリケーションをサポートするには、PostgreSQL バージョン 17.x 以降を使用する必要があります。

### 前提条件
<a name="CHAP_Source.PostgreSQL.ReadReplica.prereq"></a>

の CDC ソースとしてリードレプリカを使用する前に AWS DMS、プライマリデータベースインスタンスとそのリードレプリカの両方で論理レプリケーションを有効にして、リードレプリカに論理デコードを作成する必要があります。次のアクションを実行します。
+ プライマリデータベースインスタンスとそのリードレプリカの両方で論理レプリケーションを有効化します (その他必要なデータベースパラメータを含む)。詳細については、[AWS「マネージド PostgreSQL データベースを DMS ソースとして使用する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.RDSPostgreSQL)」を参照してください。
+ CDC 専用タスクの場合は、プライマリ (ライター) インスタンスにレプリケーションスロットを作成します。詳細については、「[ネイティブ CDC スタートポイントを使用して PostgreSQL ソース エンドポイントの CDC ロードを設定するには](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)」を参照してください。リードレプリカがレプリケーションスロットの作成をサポートしていないため、このアクションが必要になります。
+ PostgreSQL バージョン 16 の場合、スロットはリードレプリカで手動で作成する必要があります。
+ PostgreSQL バージョン 17 以降では、レプリケーションスロットをプライマリに作成する必要があります。これはリードレプリカと自動的に同期されます。
+ Full Load \$1 CDC または CDC のみのタスクを使用する場合、 AWS DMS はプライマリインスタンスで論理レプリケーションスロットを自動的に管理できますが、リードレプリカでは管理できません。PostgreSQL バージョン 16 リードレプリカの場合、タスクを再起動 (再開ではない) する前に、レプリケーションスロットを手動で削除して再作成する必要があります。この手順を行わない場合、タスクが失敗する、CDC の開始位置が不正になるなどの可能性があります。PostgreSQL バージョン 17 以降では、プライマリインスタンスからの論理スロット同期によってこのプロセスは自動化されます。

前提条件を完了したら、 AWS DMS エンドポイント設定でリードレプリカソース`SlotName`のレプリケーションを使用してソースエンドポイントを設定し、ネイティブ CDC 開始ポイントを使用して AWS DMS タスクを設定できます。詳細については、「[PostgreSQL を DMS エンドポイントとして使用する場合のエンドポイント設定および追加の接続属性 (ECA)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.ConnectionAttrib)」および「[ネイティブ CDC 開始点を使用して PostgreSQL ソースの CDC ロードを設定する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)」を参照してください。

## `MapBooleanAsBoolean` PostgreSQL エンドポイント設定の使用
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting"></a>

PostgreSQL エンドポイント設定を使用して、ブール値を PostgreSQL ソースから Amazon Redshift ターゲットにブール値としてマッピングできます。ブール型はデフォルトで varchar (5) として移行されます。次の例のとおり、`MapBooleanAsBoolean` を指定すると、PostgreSQL がブール型をブール型として移行できるようになります。

```
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
```

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

MySQL には BOOLEAN 型がないため、BOOLEAN データを MySQL に移行する場合は、この設定ではなく変換ルールを使用します。

## DMS ソースとして PostgreSQL を使用する場合のエンドポイント設定と追加の接続属性 (ECA)
<a name="CHAP_Source.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)、ソースエンドポイントを作成するときに指定します。

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

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

## DMS のソースとして PostgreSQL データベースを使用する場合の制限
<a name="CHAP_Source.PostgreSQL.Limitations"></a>

PostgreSQL を AWS DMSのソースとして使用する場合は、以下の制限が適用されます。
+ AWS DMS は、Amazon RDS for PostgreSQL 10.4 または Amazon Aurora PostgreSQL 10.4 をソースまたはターゲットとして使用することはできません。
+ キャプチャされたテーブルにはプライマリキーが必要です。テーブルにプライマリキーがない場合、 はそのテーブルの DELETE および UPDATE レコードオペレーション AWS DMS を無視します。回避策については、「[Enabling change data capture (CDC) using logical replication](#CHAP_Source.PostgreSQL.Security)」を参照してください。

  **注:** プライマリキーまたは一意のインデックスなしでの移行はお勧めしません。この場合、「いいえ」Batch 適用機能、フル LOB 機能、データ検証、Redshift ターゲットへの効率的なレプリケートができないなどの追加の制限が適用されます。
+ AWS DMS は、プライマリキーセグメントを更新しようとする試みを無視します。この場合、ターゲットは、その更新によってどの行も更新されないと識別します。ただし、PostgreSQL でのプライマリキーの更新結果は予測できないため、どのレコードも例外テーブルには書き込まれません。
+ AWS DMS は、**タイムスタンプからプロセスの変更を開始する**実行オプションをサポートしていません。
+ AWS DMS は、パーティションまたはサブパーティションオペレーション (`ADD`、`DROP`、または ) に起因する変更をレプリケートしません`TRUNCATE`。
+ 大文字と小文字の組み合わせが異なる同じ名前 (table1、TABLE1、Table1) を持つ複数のテーブルをレプリケートすると、予測できない動作が生じることがあります。この問題のため、 AWS DMS はこのタイプのレプリケーションをサポートしていません。
+ ほとんどの場合、 は tables の CREATE、ALTER、DROP DDL ステートメントの変更処理 AWS DMS をサポートします。 は、テーブルが内部関数またはプロシージャ本文ブロックまたは他のネストされたコンストラクトに保持されている場合、この変更処理をサポート AWS DMS しません。

  たとえば、以下の変更はキャプチャされません。

  ```
  CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
  LANGUAGE plpgsql
  AS $$
  BEGIN
  create table attu.distributors1(did serial PRIMARY KEY,name
  varchar(40) NOT NULL);
  END;
  $$;
  ```
+ 現在のところ、PostgreSQL ソースの `boolean` データ型は、一貫性のない値を持つ `bit` データ型として SQLServer ターゲットに移行されます。回避策として、列`VARCHAR(1)`のデータ型を使用してテーブルを事前に作成します (または、 でテーブル AWS DMS を作成します）。次に、ダウンストリーム処理で「F」を False、「T」を True として扱います。
+ AWS DMS は、TRUNCATE オペレーションの変更処理をサポートしていません。
+ OID LOB データ型は、ターゲットに移行されません。
+ AWS DMS は、同種移行のみの PostGIS データ型をサポートしています。
+ 使用するソースがオンプレミスあるいは Amazon EC2 インスタンス上の PostgreSQL データベースの場合、test\$1decoding 出力プラグインがソースのエンドポイントにインストールされていることを確認してください。このプラグインは、PostgreSQL contrib パッケージで提供されています。test-decoding プラグインの詳細については、「[PostgreSQL のドキュメント](https://www.postgresql.org/docs/10/static/test-decoding.html)」をご参照ください。
+ AWS DMS では、列のデフォルト値を設定および設定解除する変更処理はサポートされていません (ALTER TABLE ステートメントの ALTER COLUMN SET DEFAULT 句を使用）。
+ AWS DMS は、列の nullability を設定する変更処理をサポートしていません (ALTER TABLE ステートメントで ALTER COLUMN [SET\$1DROP] NOT NULL 句を使用）。
+ 論理レプリケーションが有効な場合、トランザクションあたりのメモリに保持される変更の最大数は 4 MB です。その後、変更がディスクにこぼれます。その結果、`ReplicationSlotDiskUsage`が増加し、トランザクションが完了または停止し、ロールバックが完了するまで `restart_lsn` は進みません。長いトランザクションであるため、ロールバックに時間がかかることがあります。従って、論理レプリケーションが有効になっている場合は、トランザクションまたは多くのサブトランザクションの長期実行を避けてください。代わりに、トランザクションをいくつかの小さなトランザクションに分割します。

  Aurora PostgreSQL バージョン 13 以降では、`logical_decoding_work_mem` パラメータを調整して DMS がいつ変更データをディスクに書き出すかを制御することができます。詳細については、「[Aurora PostgreSQL のスピルファイル](CHAP_Troubleshooting_Latency_Source_PostgreSQL.md#CHAP_Troubleshooting_Latency_Source_PostgreSQL_Spill)」を参照してください。
+ ARRAY データ型を持つテーブルにはプライマリ キーが必要です。ARRAY データ型にプライマリ キーがないテーブルは、全ロード中に中断されます。
+ AWS DMS は、テーブルのパーティショニングまたはテーブル[の継承に関連するテーブル](https://www.postgresql.org/docs/15/ddl-inherit.html)メタデータの移行をサポートしていません。がパーティション分割されたテーブルまたは継承を使用するテーブル AWS DMS を検出すると、次の動作が観察されます。
  + AWS DMS は、ソースデータベースのパーティション化または継承に関連する親テーブルと子テーブルの両方を識別してレポートします。
  + **ターゲットでのテーブルの作成**: ターゲットデータベースで、 はテーブルを標準 (非パーティション化、非継承) テーブルとして AWS DMS 作成し、選択したテーブルの構造とプロパティは保持しますが、パーティション化または継承ロジックは保持しません。
  + **継承されたテーブルでのレコードの区別: **継承を使用するテーブルの場合、親テーブルの入力時に子テーブルに属するレコードを区別 AWS DMS しません。その結果、`SELECT * FROM ONLY parent_table_name` などの構文の SQL クエリは使用しません。
+ パーティション分割されたテーブルを PostgreSQL ソースから PostgreSQL ターゲットにレプリケーションする場合、まずターゲットで親テーブルと子テーブルを手動で作成する必要があります。次に、それらのテーブルにレプリケーションする別個のタスクを定義します。その場合、タスク設定を **[Truncate before loading]** (読み取り前切り捨て) に設定します。
+ PostgreSQL `NUMERIC` データ型はサイズが固定されていません。`NUMERIC` データ型ですが、精度とスケールがないデータを転送する場合、DMS はデフォルトで `NUMERIC(28,6)` (精度が 28、スケールが 6) を使用します。たとえば、ソースからの値 0.611111104488373 は、PostgreSQL ターゲットの 0.611111 に変換されます。
+ AWS DMS は、全ロードタスクのソースとしてのみ Aurora PostgreSQL Serverless V1 をサポートします。 は、全ロード、全ロードおよび CDC、CDC のみのタスクのソースとして Aurora PostgreSQL Serverless V2 AWS DMS をサポートします。
+ AWS DMS は、coalesce 関数で作成された一意のインデックスを持つテーブルのレプリケーションをサポートしていません。
+ ソースとターゲットのプライマリキー定義が一致しない場合、レプリケーションの結果は予測できない可能性があります。
+ 並列ロード機能を使用する場合、パーティションまたはサブパーティションに基づくテーブルのセグメント化はサポートされません。並列ロードの詳細については、「[選択したテーブルおよびビューさらにコレクションで並列ロードを使用する](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad)」を参照してください。
+ AWS DMS は遅延制約をサポートしていません。
+ AWS DMS バージョン 3.4.7 では、PostgreSQL 14.x をソースとしてサポートしていますが、以下の制限があります。
  + AWS DMS は、2 つのフェーズコミットの変更処理をサポートしていません。
  + AWS DMS は、進行中の長いトランザクションをストリーミングするための論理レプリケーションをサポートしていません。
+ AWS DMS は、ソースとして Amazon RDS Proxy for PostgreSQL の CDC をサポートしていません。
+ プライマリキー列を含まない [ソースフィルター](CHAP_Tasks.CustomizingTasks.Filters.md) を使用する場合、`DELETE` 操作はキャプチャされません。
+ ソースデータベースが別のサードパーティーのレプリケーションシステムのターゲットでもある場合、CDC 中に DDL の変更が移行されない可能性があります。これは、このような状況では `awsdms_intercept_ddl` イベントトリガーが起動しなくなる可能性があるためです。この状況を回避するには、ソースデータベースでこのトリガーを次のとおり変更します。

  ```
  alter event trigger awsdms_intercept_ddl enable always;
  ```
+ AWS DMS は、ソースデータベースのプライマリキー定義に加えられた変更のレプリケーションをサポートしていません。アクティブなレプリケーションタスク中にプライマリキー構造が変更された場合、影響を受けるテーブルに対するその後の変更はターゲットにレプリケートされません。
+ スクリプトの一部としての DDL レプリケーションでは、スクリプトあたりの DDL コマンドの最大合計数は 8192 で、スクリプトあたりの行の最大合計数は 8192 行です。
+ AWS DMS はマテリアライズドビューをサポートしていません。
+ ソースとしてリードレプリカを使用する全ロードおよび CDC タスクの場合、リードレプリカにレプリケーションスロットを作成 AWS DMS することはできません。

## PostgreSQL のソースデータ型
<a name="CHAP_Source-PostgreSQL-DataTypes"></a>

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

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  PostgreSQL のデータ型  |  DMS データ型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  NUMERIC (p,s)  |  精度が 0 ～ 38 の場合、NUMERIC を使用します。 精度が 39 以上の場合、STRING を使用します。  | 
|  DECIMAL(P,S)  |  精度が 0 ～ 38 の場合、NUMERIC を使用します。 精度が 39 以上の場合、STRING を使用します。  | 
|  REAL  |  REAL4  | 
|  DOUBLE  |  REAL8  | 
|  SMALLSERIAL  |  INT2  | 
|  SERIAL  |  INT4  | 
|  BIGSERIAL  |  INT8  | 
|  MONEY  |  NUMERIC(38,4) MONEY データ型は、SQL Server の FLOAT にマッピングされます。  | 
|  CHAR  |  WSTRING (1)  | 
|  CHAR(N)  |  WSTRING (n)  | 
|  VARCHAR(N)  |  WSTRING (n)  | 
|  TEXT  |  NCLOB  | 
|  CITEXT  |  NCLOB  | 
|  BYTEA  |  BLOB  | 
|  TIMESTAMP  |  DATETIME  | 
|  タイムスタンプ時間帯あり  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIME WITH TIME ZONE  |  TIME  | 
|  INTERVAL  |  STRING (128)—1 YEAR、2 MONTHS、3 DAYS、4 HOURS、5 MINUTES、6 SECONDS  | 
|  BOOLEAN  |  CHAR (5) false または true  | 
|  ENUM  |  STRING (64)  | 
|  CIDR  |  STRING (50)  | 
|  INET  |  STRING (50)  | 
|  MACADDR  |  STRING (18)  | 
|  BIT (n)  |  STRING (n)  | 
|  BIT VARYING (n)  |  STRING (n)  | 
|  UUID  |  STRING  | 
|  TSVECTOR  |  CLOB  | 
|  TSQUERY  |  CLOB  | 
|  XML  |  CLOB  | 
|  POINT  |  STRING (255) "(x,y)"  | 
|  LINE  |  STRING (255) "(x,y,z)"  | 
|  LSEG  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  BOX  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  PATH  |  CLOB "((x1,y1),(xn,yn))"  | 
|  POLYGON  |  CLOB "((x1,y1),(xn,yn))"  | 
|  CIRCLE  |  STRING (255) "(x,y),r"  | 
|  JSON  |  NCLOB  | 
|  JSONB  |  NCLOB  | 
|  配列  |  NCLOB  | 
|  COMPOSITE  |  NCLOB  | 
|  HSTORE  |  NCLOB  | 
|  INT4RANGE  |  STRING (255)  | 
|  INT8RANGE  |  STRING (255)  | 
|  NUMRANGE  |  STRING (255)  | 
|  STRRANGE  |  STRING (255)  | 

### PostgreSQL 用の LOB ソースデータ型での作業
<a name="CHAP_Source-PostgreSQL-DataTypes-LOBs"></a>

PostgreSQL の列サイズは、PostgreSQL LOB データ型の AWS DMS データ型への変換に影響します。これを使用するには、次の AWS DMS データ型で以下の手順を実行します。
+ BLOB - タスク作成で **[Limit LOB size to]** (LOB サイズ制限) 値を **[Maximum LOB Size (KB)]** (最大 LOB サイズ (KB)) に設定します。
+ CLOB - レプリケーションは各文字を UTF8 文字として処理します。次に、列で最長の文字テキストの長さ (ここでは、`max_num_chars_text`) を見つけます。この長さを使用して、**[Limit LOB size to]** (LOB サイズを以下に制限する) の値を指定します。データに 4 バイト文字が含まれている場合には、2 倍にして [**Limit LOB size to (LOB サイズ制限)**] 値をバイト単位で指定します。この場合、**[Limit LOB size to]** (LOB サイズ制限) は `max_num_chars_text` の 2 乗と等しくなります。
+ NCLOB - レプリケーションは各文字を 2 バイト文字として処理します。次に、列で最長の文字テキストの長さ (`max_num_chars_text`) を見つけ、2 倍します。これは、**[Limit LOB size to]** (LOB サイズを以下に制限する) の値の値を指定するために行います。この場合、**[Limit LOB size to]** (LOB サイズ制限) は `max_num_chars_text` の 2 乗と等しくなります。データに 4 バイト文字が含まれている場合は、再度 2 倍にします。この場合、[**Limit LOB size to (LOB サイズ制限)**] は `max_num_chars_text` の 4 乗と等しくなります。

# のソースとしての MySQL 互換データベースの使用 AWS DMS
<a name="CHAP_Source.MySQL"></a>

 AWS Database Migration Service を使用して、MySQL 互換データベース (MySQL、MariaDB、または Amazon Aurora MySQL) からデータを移行できます。

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

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

以下のセクションでは、「セルフ管理」という用語は、オンプレミスまたは Amazon EC2 にインストールされているデータベースが対象です。「AWSが管理する」という用語は、Amazon RDS、Amazon Aurora、Amazon S3 のデータベースが対象です。

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

**Topics**
+ [を使用した MySQL から MySQL への移行 AWS DMS](#CHAP_Source.MySQL.Homogeneous)
+ [のソースとしての MySQL 互換データベースの使用 AWS DMS](#CHAP_Source.MySQL.Prerequisites)
+ [のソースとしてのセルフマネージド MySQL 互換データベースの使用 AWS DMS](#CHAP_Source.MySQL.CustomerManaged)
+ [のソースとしての AWSマネージド MySQL 互換データベースの使用 AWS DMS](#CHAP_Source.MySQL.AmazonManaged)
+ [MySQL データベースを のソースとして使用する場合の制限 AWS DMS](#CHAP_Source.MySQL.Limitations)
+ [XA トランザクションのサポート](#CHAP_Source.MySQL.XA)
+ [のソースとして MySQL を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.MySQL.ConnectionAttrib)
+ [MySQL のソースデータ型](#CHAP_Source.MySQL.DataTypes)

**注記**  
 AWS Database Migration Service (AWS DMS) マッピングルールを設定するときは、データベース名またはスキーマ名にワイルドカード (%) を使用しないことが重要です。その代わりに、移行する必要があるユーザー作成のデータベースのみを明示的に指定する必要があります。ワイルドカード文字の使用には、ターゲットインスタンスで必要ではないシステムデータベース、および移行プロセス内のすべてのデータベースが含まれます。MySQL Amazon RDS マスターユーザーには、ターゲットシステムデータベースにデータをインポートするために必要なアクセス許可がないため、これらのシステムデータベースの移行は失敗します。

## を使用した MySQL から MySQL への移行 AWS DMS
<a name="CHAP_Source.MySQL.Homogeneous"></a>

MySQL 以外のデータベースエンジンから MySQL データベースに移行する異種移行の場合、 AWS DMS はほとんどの場合、最適な移行ツールです。ただし、MySQL データベースから MySQL データベースに移行する同種移行の場合は、同種データ移行プロジェクトを使用することをお勧めします。同種データ移行では、ネイティブのデータベースツールを使用して、 AWS DMSと比較してデータ移行のパフォーマンスと精度が向上します。

## のソースとしての MySQL 互換データベースの使用 AWS DMS
<a name="CHAP_Source.MySQL.Prerequisites"></a>

のソースとして MySQL データベースの使用を開始する前に AWS DMS、次の前提条件を満たしていることを確認してください。これらの前提条件は、セルフマネージドソースまたは AWSマネージドソースに適用されます。

レプリケーション管理者ロール AWS DMS を持つ のアカウントが必要です。ロールには、次の権限が必要です。
+ **[REPLICATION CLIENT]** (レプリケーション クライアント) – この権限は、CDC タスクにのみ必要です。つまり、フルロードのみのタスクにはこの権限は必要ありません。
**注記**  
MariaDB バージョン 10.5.2 以降では、BINLOG MONITOR を使用できます。これは REPLICATION CLIENT に代わるものです。
+ **[REPLICATION SLAVE]** (レプリケーション スレーブ) – この権限は、CDC タスクにのみ必要です。つまり、フルロードのみのタスクにはこの権限は必要ありません。
+ **SUPER** – この権限は、バージョン 5.6.6 より前の MySQL でのみ必要です。

 AWS DMS ユーザーには、レプリケーション用に指定されたソーステーブルに対する SELECT 権限も必要です。

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
grant select on performance_schema.replication_connection_status to <dms_user>;  #Required for primary instance validation - MySQL version 5.7 and higher only
```

RDS ソースを使用していて、MySQL 固有の移行前評価を実行する予定がある場合は、次のアクセス許可を追加します。

```
grant select on mysql.rds_configuration to <dms_user>;  #Required for binary log retention check
```

パラメータ `BatchEnable` が `true` の場合、以下を付与する必要があります。

```
grant create temporary tables on `<schema>`.* to <dms_user>;
```

## のソースとしてのセルフマネージド MySQL 互換データベースの使用 AWS DMS
<a name="CHAP_Source.MySQL.CustomerManaged"></a>

次のセルフマネージド型 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

CDC を使用するには、バイナリログを有効にしてください。バイナリロギングを有効にするには、MySQL の `my.ini` (Windows) または `my.cnf` (UNIX) ファイルで以下のパラメータを設定する必要があります。


| パラメータ | 値 | 
| --- | --- | 
| `server_id` | このパラメータは、1 以上の値に設定します。 | 
| `log-bin` | パスをバイナリログファイル (`log-bin=E:\MySql_Logs\BinLog`) に設定します。ファイル拡張子を含めないでください。 | 
| `binlog_format` | このパラメータは `ROW` に設定します。`binlog_format` が `STATEMENT` に設定されているときは場合によっては、ターゲットにデータレプリケーション時に矛盾が生じる可能性があるため、レプリケーション中にこの設定をお勧めします。データベースエンジンは、`binlog_format` が `MIXED` に設定されているとき、類似の矛盾したデータもターゲットに書き込みます。これはデータベースエンジンが自動的に`STATEMENT`ベースのログに切り替わり、ターゲットデータベースに一貫性のないデータが書き込まれることがあるためです。 | 
| `expire_logs_days` | このパラメータは、1 以上の値に設定します。ディスク容量の使いすぎを防ぐため、デフォルト値の 0 は使用しないことをお勧めします。 | 
| `binlog_checksum` | DMS バージョン 3.4.7 以前の場合、このパラメータを `NONE` に設定します。 | 
| `binlog_row_image` | このパラメータは `FULL` に設定します。 | 
| `log_slave_updates` | MySQL または MariaDB リードレプリカをソースとして使用している場合は、このパラメータを `TRUE` に設定します。 | 

**既存のデータを移行して継続的な変更をレプリケートする**を使用して MySQL または MariaDB リードレプリカを DMS 移行タスクのソースとして使用している場合、データ損失が生じる可能性があります。DMS は、以下の条件で、フルロードまたは CDC のいずれかの際中にはトランザクションを書き込みません。
+ DMS タスクが開始する前に、トランザクションがプライマリインスタンスにコミットされた。
+ プライマリインスタンスとレプリカ間の遅延により、トランザクションが DMS タスクが開始するまでレプリカにコミットされなかった。

プライマリインスタンスとレプリカ間の遅延が長いほど、データ損失の可能性が大きくなります。

ソースで NDB (クラスター化) データベースエンジンを使用している場合、そのストレージエンジンを使用するテーブルで CDC を有効にするには以下のパラメータを設定する必要があります。これらの変更を MySQL の `my.ini` (Windows) または `my.cnf` (UNIX) ファイルに追加します。


| パラメータ | 値 | 
| --- | --- | 
| `ndb_log_bin` | このパラメータは `ON` に設定します。この値により、クラスター化されたテーブルでの変更が確実にバイナリログに記録されます。 | 
| `ndb_log_update_as_write` | このパラメータは `OFF` に設定します。この値に設定すると、UPDATE ステートメントが INSERT ステートメントとしてバイナリログに書き込まれなくなります。 | 
| `ndb_log_updated_only` | このパラメータは `OFF` に設定します。この値に設定すると、バイナリログに変更された列だけでなく行全体が含められます。 | 

## のソースとしての AWSマネージド MySQL 互換データベースの使用 AWS DMS
<a name="CHAP_Source.MySQL.AmazonManaged"></a>

のソースとして、以下の AWSマネージド MySQL 互換データベースを使用できます AWS DMS。
+ MySQL Community Edition
+ MariaDB Community Edition
+ Amazon Aurora MySQL 互換エディション

 AWSマネージド MySQL 互換データベースを のソースとして使用する場合は AWS DMS、CDC に次の前提条件があることを確認してください。
+ RDS for MySQL と RDS for MariaDB のバイナリログを有効にするには、インスタンスレベルで自動バックアップを有効にします。Aurora MySQL クラスターのバイナリログを有効にするには、パラメータグループで変数 `binlog_format` を変更します。

  自動バックアップの設定の詳細については、*Amazon RDS ユーザーガイド*の「[自動バックアップの使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html)」をご参照ください。

  Amazon RDS for MySQL データベースのバイナリログ設定の詳細については、*Amazon RDS ユーザーガイド*の「[バイナリログ形式の設定](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)」をご参照ください。

  Aurora MySQL クラスターのバイナリログ設定の詳細については、「[Amazon Aurora MySQL クラスターのバイナリログを有効にする方法](https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/)」をご参照ください。
+ CDC を使用する予定の場合は、バイナリログを有効にします。Amazon RDS for MySQL データベースのバイナリログの設定の詳細については、*Amazon RDS ユーザーガイド*の「[バイナリログ形式の設定](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)」をご参照ください。
+ バイナリログが使用可能であることを確認します AWS DMS。 AWSマネージド MySQL 互換データベースはバイナリログをできるだけ早く消去するため、ログが利用可能なままになる時間を増やす必要があります。たとえば、ログ保持を 24 時間に伸ばすには、次のコマンドを実行します。

  ```
   call mysql.rds_set_configuration('binlog retention hours', 24);
  ```
+ `binlog_format` パラメータを `"ROW"` に設定します。
**注記**  
MySQL または MariaDB では、`binlog_format` は動的パラメータであるため、新しい値を有効にするために再起動する必要はありません。ただし、新しい値は新しいセッションにのみ適用されます。レプリケーションの目的で `binlog_format` を `ROW` に切り替えても、値を変更する前にセッションが開始されていれば、データベースは引き続き `MIXED` 形式を使用して続くバイナリログを作成できます。これにより、 AWS DMS がソースデータベースのすべての変更を適切にキャプチャできなくなる可能性があります。MariaDB または MySQL データベースの `binlog_format` 設定を変更する場合は、必ずデータベースを再起動して既存のすべてのセッションを閉じるか、DML (データ操作言語) 操作を実行するアプリケーションを再起動します。`binlog_format` パラメータを に変更した後、データベースにすべてのセッションの再起動を強制`ROW`すると、データベースが後続のすべてのソースデータベースの変更を正しい形式で書き込み、 がそれらの変更を適切にキャプチャ AWS DMS できるようになります。
+ `binlog_row_image` パラメータを `"Full"` に設定します。
+ DMS バージョン 3.4.7 以前の場合、`binlog_checksum` パラメータを `"NONE"` に設定します。Amazon RDS MySQL でのパラメータの設定の詳細については、*Amazon RDS ユーザーガイド*の「[自動バックアップの使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html)」をご参照ください。
+ Amazon RDS MySQL または Amazon RDS MariaDB リードレプリカをソースとして使用する場合は、リードレプリカでバックアップを有効にして、`log_slave_updates` パラメータが `TRUE` と設定されていることを確認します。

## MySQL データベースを のソースとして使用する場合の制限 AWS DMS
<a name="CHAP_Source.MySQL.Limitations"></a>

MySQL データベースをソースとして使用する場合は、次の点を考慮してください。
+  変更データキャプチャ (CDC) は、Amazon RDS MySQL 5.5 以下ではサポートされていません。Amazon RDS for MySQL の場合、CDC を有効にするには、バージョン 5.6、5.7、または 8.0 を使用する必要があります。CDC は、セルフ管理 MySQL 5.5 ソースでサポートされています。
+ CDC の場合、列データ型を変更する `CREATE TABLE`、`ADD COLUMN`、`DROP COLUMN`、`renaming a column` がサポートされています。ただし、`DROP TABLE`、`RENAME TABLE`、およびカラムのデフォルト値、カラムのNULL可能性、文字セットなどの他の属性に対する更新はサポートされていません。
+  ソースのパーティションテーブルの場合、**ターゲットテーブル準備モード**を**ターゲットのテーブルの削除**に設定すると、 は MySQL ターゲットにパーティションなしでシンプルなテーブル AWS DMS を作成します。パーティション分割されたテーブルをターゲットのパーティション分割されたテーブルに移行するには、ターゲット MySQL データベースにパーティション分割されたテーブルを事前に作成します。
+  `ALTER TABLE table_name ADD COLUMN column_name` ステートメントを使用してテーブルの先頭 (FIRST) または中間 (AFTER) に列を追加することは、リレーショナルターゲットではサポートされていません。列は常にテーブルの末尾に追加されます。ターゲットが Amazon S3 または Amazon Kinesis Data Streams の場合、FIRST または AFTER を使用した列の追加がサポートされます。
+ テーブル名に大文字と小文字が含まれていて、大文字と小文字が区別されるオペレーティングシステムにソースエンジンがホストされている場合、CDC はサポートされません。たとえば、Microsoft Windows や HFS\$1 を使用する OS X などです。
+ Aurora MySQL 互換エディションサーバーレス v1 はフルロードで使えますが、CDC には使えません。これは MySQL の前提条件を有効にできないためです。詳細については、「[パラメータグループと Aurora サーバーレス v1](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.parameter-groups)」をご参照ください。

  Aurora MySQL 互換エディションのサーバーレス v2 は CDC をサポートしています。
+  列の AUTO\$1INCREMENT 属性は、ターゲットデータベース列に移行されません。
+  バイナリログが標準のブロックストレージに保存されている場合の変更のキャプチャはサポートされていません。たとえば、バイナリログが Amazon S3 に保存されていると、CDC は機能しません。
+  AWS DMS は、デフォルトで InnoDB ストレージエンジンを使用してターゲットテーブルを作成します。InnoDB 以外のストレージエンジンを使用する必要がある場合、テーブルを手動で作成し、[何もしない](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)モードを使用してそのテーブルに移行する必要があります。
+ DMS 移行タスクモードが**既存のデータの移行** - フルロードのみである AWS DMS 場合を除き、Aurora MySQL レプリカを のソースとして使用することはできません。
+  全ロード時に MySQL 互換ソースが停止している場合、 AWS DMS タスクはエラーで停止しません。タスクは正常に終了しますが、ターゲットとソースが同期しない可能性があります。この場合、タスクを再開するか、影響を受けたテーブルを再ロードしてください。
+  列の値の一部で作成されたインデックスは移行されません。たとえば、インデックス CREATE INDEX first\$1ten\$1chars ON customer (name(10)) はターゲットに作成されません。
+ 場合によっては、タスクが LOB をレプリケートしないように設定されています (「SupportLobs」がタスク設定で false になっているか、タスクコンソールで**LOB 列を含めない**がオンになっている)。このような場合、 AWS DMS は MEDIUMBLOB、LONGBLOB、MEDIUMTEXT、および LONGTEXT の各列をターゲットに移行しません。

  BLOB、TINYBLOB、TEXT、および TINYTEXT 列は影響を受けず、ターゲットに移行されます。
+ 一時データテーブルまたはシステムでバージョン管理されたテーブルは、MariaDB ソースおよびターゲットデータベースではサポートされていません。
+ 2 つの Amazon RDS Aurora MySQL クラスター間で移行する場合、RDS Aurora MySQL ソース エンドポイントは、レプリカ インスタンスではなく読み取り/書き込みインスタンスである必要があります。
+ AWS DMS 現在、 は MariaDB のビュー移行をサポートしていません。
+ AWS DMS は、MySQL のパーティションテーブルの DDL 変更をサポートしていません。CDC 中にパーティション DDL が変更されてもテーブルが中断されないようにするには、`skipTableSuspensionForPartitionDdl` を `true` に設定します。
+ AWS DMS は、バージョン 3.5.0 以降の XA トランザクションのみをサポートします。以前のバージョンでは XA トランザクションはサポートされていません。MariaDB バージョン 10.6 以降の XA トランザクション AWS DMS はサポートされていません。詳細については、[XA トランザクションのサポート](#CHAP_Source.MySQL.XA)以下を参照してください。
+ AWS DMS は、ソースデータに GTIDs を使用しません。
+ AWS DMS は Aurora MySQL 拡張バイナリログをサポートしていません。
+ AWS DMS はバイナリログトランザクションの圧縮をサポートしていません。
+ AWS DMS は、InnoDB ストレージエンジンを使用して MySQL データベースの ON DELETE CASCADE イベントと ON UPDATE CASCADE イベントを伝播しません。 InnoDB このようなイベントについては、MySQL は子テーブルでのカスケード操作を反映する binlog イベントを生成しません。したがって、 AWS DMS は対応する変更を子テーブルにレプリケートできません。詳細については、「[インデックス、外部キー、カスケード更新、または削除が移行されない](CHAP_Troubleshooting.md#CHAP_Troubleshooting.MySQL.FKsAndIndexes)」を参照してください。
+ AWS DMS は、計算された (`VIRTUAL` および `GENERATED ALWAYS`) 列の変更をキャプチャしません。この制限を回避するには、次の手順を実行します。
  + ターゲットデータベースにターゲットテーブルを事前に作成して、`DO_NOTHING`または `TRUNCATE_BEFORE_LOAD` のフルロード設定の AWS DMS タスク設定を使用してタスクを作成する。
  + 計算列をタスクスコープから削除する変換ルールを追加する。変換ルールの詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照。
+ 内部 MySQL の制限により、 は 4GB 以下のサイズの BINLOGs を処理 AWS DMS できます。BINLOGが 4GB を超えると、DMS タスクの障害やその他の予期しない動作が発生する可能性があります。4GB を超える BINLOG を回避するには、トランザクションのサイズを小さくする必要があります。
+ AWS DMS は、スキーマ、テーブル、および列名でバックティック (```) または一重引用符 (`'`) をサポートしていません。
+ AWS DMS は、ソースデータベース内の非表示の列からデータを移行しません。このような列を移行の範囲に含めるには、ALTER TABLE ステートメントを使用して列を表示します。

## XA トランザクションのサポート
<a name="CHAP_Source.MySQL.XA"></a>

Extended Architecture (XA) トランザクションは、複数のトランザクションリソースによる操作セットを単一の信頼性の高いグローバルトランザクションにグループ化するために使用できるトランザクションです。XA トランザクションは 2 フェーズコミットプロトコルを使用します。通常、XA トランザクションがオープンである間に変更をキャプチャすると、データが損失する可能性があります。データベースが XA トランザクションを使用していない場合は、`IgnoreOpenXaTransactionsCheck` のデフォルト値 `TRUE` を使用してこのアクセス権限と設定を無視できます。XA トランザクションのあるソースからレプリケーションを開始するには、次を実行します。
+  AWS DMS エンドポイントユーザーに次のアクセス許可があることを確認します。

  ```
  grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  ```
+ エンドポイント設定 `IgnoreOpenXaTransactionsCheck` を `false` に設定する。

**注記**  
AWS DMS は、MariaDB Source DB バージョン 10.6 以降の XA トランザクションをサポートしていません。

## のソースとして MySQL を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.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_Source.MySQL.html)

## MySQL のソースデータ型
<a name="CHAP_Source.MySQL.DataTypes"></a>

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

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  MySQL のデータ型  |  AWS DMS データ型  | 
| --- | --- | 
|  INT  |  INT4  | 
|  BIGINT  |  INT8  | 
|  MEDIUMINT  |  INT4  | 
|  TINYINT  |  INT1  | 
|  SMALLINT  |  INT2  | 
|  UNSIGNED TINYINT  |  UINT1  | 
|  UNSIGNED SMALLINT  |  UINT2  | 
|  UNSIGNED MEDIUMINT  |  UINT4  | 
|  UNSIGNED INT  |  UINT4  | 
|  UNSIGNED BIGINT  |  UINT8  | 
|  DECIMAL(10)  |  NUMERIC (10,0)  | 
|  BINARY  |  BYTES(1)  | 
|  BIT  |  BOOLEAN  | 
|  BIT(64)  |  BYTES(8)  | 
|  BLOB  |  BYTES(65535)  | 
|  LONGBLOB  |  BLOB  | 
|  MEDIUMBLOB  |  BLOB  | 
|  TINYBLOB  |  BYTES(255)  | 
|  DATE  |  DATE  | 
|  DATETIME  |  DATETIME 括弧で囲まれた値が指定されていない DATETIME は、ミリ秒なしでレプリケートされる。括弧内の値が 1～5 (`DATETIME(5)` など) の DATETIME は、ミリ秒単位でレプリケートされる。 DATETIME 列をレプリケートしても、ターゲット上の時刻は変わらない。UTC には変換されない。  | 
|  TIME  |  STRING  | 
|  TIMESTAMP  |  DATETIME TIMESTAMP 列をレプリケートすると、時間はターゲットで UTC に変換される。  | 
|  YEAR  |  INT2  | 
|  DOUBLE  |  REAL8  | 
|  FLOAT  |  REAL(DOUBLE) FLOAT 値が次の範囲にない場合は、変換を使用して FLOAT を STRING にマップする。変換の詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」をご参照ください。 サポートされる FLOAT の範囲は、-1.79E\$1308～-2.23E-308、0、2.23E-308～1.79E\$1308。  | 
|  VARCHAR(45)  |  WSTRING (45)  | 
|  VARCHAR(2000)  |  WSTRING (2000)  | 
|  VARCHAR(4000)  |  WSTRING (4000)  | 
|  VARBINARY (4000)  |  BYTES (4000)  | 
|  VARBINARY (2000)  |  BYTES (2000)  | 
|  CHAR  |  WSTRING  | 
|  TEXT  |  WSTRING  | 
|  LONGTEXT  |  NCLOB  | 
|  MEDIUMTEXT  |  NCLOB  | 
|  TINYTEXT  |  WSTRING(255)  | 
|  GEOMETRY  |  BLOB  | 
|  POINT  |  BLOB  | 
|  LINESTRING  |  BLOB  | 
|  POLYGON  |  BLOB  | 
|  MULTIPOINT  |  BLOB  | 
|  MULTILINESTRING  |  BLOB  | 
|  MULTIPOLYGON  |  BLOB  | 
|  GEOMETRYCOLLECTION  |  BLOB  | 
|  ENUM  |  WSTRING (*[length]* (長さ)) ここで、*[length]* (長さ) は列挙型の最長値の長さです。  | 
|  SET  |  WSTRING (*[length]* (長さ)) ここで、*[length]* (長さ) は、カンマを含む SET 内のすべての値の合計の長さです。  | 
|  JSON  |  CLOB  | 

**注記**  
場合によっては、値が「ゼロ」(つまり、0000-00-00) の DATETIME データ型と TIMESTAMP データ型を指定できます。存在する場合は、レプリケーション タスクのターゲットデータベースが DATETIME データ型と TIMESTAMP データ型で「ゼロ」値に対応していることを確認してください。サポートされていない場合、これらの値はターゲットで NULL として記録されます。

# のソースとしての SAP ASE データベースの使用 AWS DMS
<a name="CHAP_Source.SAP"></a>

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

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

SAP ASE データベースと の操作の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [SAP ASE データベースを のソースとして使用するための前提条件 AWS DMS](#CHAP_Source.SAP.Prerequisites)
+ [SAP ASE を のソースとして使用する場合の制限 AWS DMS](#CHAP_Source.SAP.Limitations)
+ [のソースとして SAP ASE を使用するために必要なアクセス許可 AWS DMS](#CHAP_Source.SAP.Security)
+ [切り捨てポイントの削除](#CHAP_Source.SAP.Truncation)
+ [SAP ASE を のソースとして使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)
+ [SAP ASE のソースデータ型](#CHAP_Source.SAP.DataTypes)

## SAP ASE データベースを のソースとして使用するための前提条件 AWS DMS
<a name="CHAP_Source.SAP.Prerequisites"></a>

SAP ASE データベースをソースにするには AWS DMS、次の操作を行います。
+ `sp_setreptable` コマンドを使用して、テーブルで SAP ASE レプリケーションを有効にします。詳細については、「[Sybase Infocenter アーカイブ]( http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32410_1501/html/refman/X37830.htm)」をご参照ください。
+ SAP ASE データベースの `RepAgent` を無効にします。詳細については、「[プライマリデータベースの RepAgent スレッド停止と無効化](http://infocenter-archive.sybase.com/help/index.jsp?topic=/com.sybase.dc20096_1260/html/mra126ag/mra126ag65.htm)」をご参照ください。
+ 非ラテン文字 (例: 中国語) 用に設定された、Windows EC2 インスタンスで、SAP ASE バージョン 15.7 にレプリケーションするには、ターゲットコンピュータに SAP ASE 15.7 SP121 をインストールします。

**注記**  
継続的変更データ　キャプチャ (CDC) レプリケーションでは DMS が `dbcc logtransfer` と `dbcc log` を実行して、トランザクションログからデータを読み取ります。

## SAP ASE を のソースとして使用する場合の制限 AWS DMS
<a name="CHAP_Source.SAP.Limitations"></a>

SAP ASE データベースを AWS DMSのソースとして使用する場合は、以下の制限が適用されます。
+ SAP ASE データベースごとに継続的なレプリケーションまたは CDC を使用して実行できる AWS DMS タスクは 1 つだけです。フルロードのみのタスクは複数で並行して実行できます。
+ テーブルの名前を変更することはできません。たとえば、以下のコマンドは失敗します。

  ```
  sp_rename 'Sales.SalesRegion', 'SalesReg;
  ```
+ 列の名前を変更することはできません。たとえば、以下のコマンドは失敗します。

  ```
  sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';
  ```
+ バイナリデータ型文字列の末尾にあるゼロ値は、ターゲットデータベースにレプリケートされるときに切り捨てられます。たとえば、ソーステーブル内の `0x0000000000000000000000000100000100000000` はターゲットテーブルでは `0x00000000000000000000000001000001` になります。
+ データベースのデフォルトが NULL 値を許可しないように設定されている場合、 は NULL 値を許可しない列を持つターゲットテーブル AWS DMS を作成します。したがって、全ロードまたは CDC レプリケーションタスクに空の値が含まれている場合、 はエラーを AWS DMS スローします。以下のコマンドを使用してソースデータベースで NULL 値を許容することにより、これらのエラーを防ぐことができます。

  ```
  sp_dboption database_name, 'allow nulls by default', 'true'
  go
  use database_name
  CHECKPOINT
  go
  ```
+ `reorg rebuild` インデックスコマンドはサポートされていません。
+ AWS DMS では、クラスターや MSA (マルチサイト可用性)/ウォームスタンバイをソースとして使用することはできません。
+ `AR_H_TIMESTAMP` 変換ヘッダー式はマッピングルールで使用され、追加された列ではミリ秒がキャプチャされません。
+ CDC 中に Merge 操作を実行すると、回復不可能なエラーが発生します。ターゲットを同期状態に戻すには、フルロードを実行します。
+ ロールバックトリガーイベントは、データ行ロックスキームを使用するテーブルではサポートされません。
+ AWS DMS は、ソース SAP データベースからタスクスコープ内のテーブルを削除した後、レプリケーションタスクを再開できません。DMS レプリケーションタスクが停止し、DML 操作 (INSERT、UPDATE、DELETE) が実行された後にテーブルを削除した場合、レプリケーションタスクをもう一度開始する必要があります。

## のソースとして SAP ASE を使用するために必要なアクセス許可 AWS DMS
<a name="CHAP_Source.SAP.Security"></a>

SAP ASE データベースを AWS DMS タスクのソースとして使用するには、 アクセス許可を付与する必要があります。 AWS DMS データベース定義で指定されたユーザーアカウントに、SAP ASE データベースで次のアクセス許可を付与します。
+ sa\$1role
+ replication\$1role
+ sybase\$1ts\$1role
+ デフォルトでは、`sp_setreptable`ストアドプロシージャを実行するアクセス許可が必要な場合、 は SAP ASE レプリケーションオプション AWS DMS を有効にします。データベースエンドポイントから直接、 AWS DMS それ自体ではなくテーブル`sp_setreptable`で を実行する場合は、`enableReplication`追加の接続属性を使用できます。詳細については、「[SAP ASE を のソースとして使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)」を参照してください。

## 切り捨てポイントの削除
<a name="CHAP_Source.SAP.Truncation"></a>

タスクが開始されると、 は`syslogshold`システムビューに`$replication_truncation_point`エントリ AWS DMS を確立し、レプリケーションプロセスが進行中であることを示します。 AWS DMS が動作している間、ターゲットに既にコピーされているデータの量に応じて、レプリケーション切り捨てポイントを一定の間隔で進めます。

`$replication_truncation_point` エントリが確立されたら、データベースログが過度に大きくならないように AWS DMS タスクを実行したままにします。 AWS DMS タスクを完全に停止する場合は、次のコマンドを発行してレプリケーション切り捨てポイントを削除します。

```
dbcc settrunc('ltm','ignore')
```

切り捨てポイントが削除されると、 AWS DMS タスクを再開することはできません。ログは、引き続きチェックポイントで自動的に切り捨てられます (自動切り捨てが設定されている場合)。

## SAP ASE を のソースとして使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.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_Source.SAP.html)

## SAP ASE のソースデータ型
<a name="CHAP_Source.SAP.DataTypes"></a>

の使用 AWS DMS 時にサポートされる SAP ASE ソースデータ型と AWS DMS 、データ型からのデフォルトのマッピングのリストについては、次の表を参照してください。 AWS DMS は、ユーザー定義型 (UDT) データ型の列を持つ SAP ASE ソーステーブルをサポートしていません。このデータ型のレプリケートされた列は NULL として作成されます。

ターゲットにマッピングされるデータ型を表示する方法については、ターゲットエンドポイントの [「データ移行のターゲット」](CHAP_Target.md) セクションをご参照ください。

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


|  SAP ASE のデータ型  |  AWS DMS データ型  | 
| --- | --- | 
| BIGINT | INT8 | 
| UNSIGNED BIGINT | UINT8 | 
| INT | INT4 | 
| UNSIGNED INT | UINT4 | 
| SMALLINT | INT2 | 
| UNSIGNED SMALLINT | UINT2 | 
| TINYINT | UINT1 | 
| DECIMAL | NUMERIC | 
| NUMERIC | NUMERIC | 
| FLOAT | REAL8 | 
| DOUBLE | REAL8 | 
| REAL | REAL4 | 
| MONEY | NUMERIC | 
| SMALLMONEY | NUMERIC | 
| DATETIME | DATETIME | 
| BIGDATETIME | DATETIME(6) | 
| SMALLDATETIME | DATETIME | 
| DATE | DATE | 
| TIME | TIME | 
| BIGTIME | TIME | 
| CHAR | STRING | 
| UNICHAR | WSTRING | 
| NCHAR | WSTRING | 
| VARCHAR | STRING | 
| UNIVARCHAR | WSTRING | 
| NVARCHAR | WSTRING | 
| BINARY | BYTES | 
| VARBINARY | BYTES | 
| BIT | BOOLEAN | 
| TEXT | CLOB | 
| UNITEXT | NCLOB | 
| IMAGE | BLOB | 

# のソースとしての MongoDB の使用 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

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

MongoDB バージョンのサポートについては、次の点に注意します。
+ バージョン AWS DMS 3.4.5 以降では、MongoDB バージョン 4.2 および 4.4 がサポートされています。
+  AWS DMS 3.4.5 以降のバージョンと MongoDB 4.2 以降のバージョンでは、分散トランザクションがサポートされています。MongoDB の分散トランザクションの詳細については、「[MongoDB ドキュメント](https://www.mongodb.com/docs/)」の「[Transactions](https://docs.mongodb.com/manual/core/transactions/)」を参照してください。
+  AWS DMS 3.5.0 以降のバージョンは、3.6 より前のバージョンの MongoDB をサポートしていません。
+ バージョン AWS DMS 3.5.1 以降では、MongoDB バージョン 5.0 がサポートされています。
+ バージョン AWS DMS 3.5.2 以降では、MongoDB バージョン 6.0 がサポートされています。
+ バージョン AWS DMS 3.5.4 以降では、MongoDB バージョン 7.0 および 8.0 がサポートされています。



MongoDB を初めてお使いの方のために、以下の MongoDB データベースの概念について説明します。
+ MongoDB のレコードは、フィールドと値のペアで構成されるデータ構造である*ドキュメント*です。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。ドキュメントは、リレーショナルデータベースのテーブルの行とほぼ同等です。
+ MongoDB の*コレクション*はドキュメントのグループであり、リレーショナルデータベーステーブルとほぼ同等です。
+ MongoDB の*データベース*はコレクションの集合であり、リレーショナル データベーステーブルのスキーマとほぼ同等です。
+ 内部的には、MongoDB ドキュメントは、ドキュメント内の各フィールドのタイプを含む、圧縮形式でバイナリ JSON (BSON) ファイルとして格納されます。各ドキュメントには一意の ID があります。

AWS DMS は、MongoDB をソースとして使用する場合、*ドキュメントモード*または*テーブル*モードの 2 つの移行モードをサポートします。MongoDB エンドポイントを作成するときか、 AWS DMS コンソールからの**メタデータモード** パラメータを設定して、使用する移行モードを指定します。オプションとして、エンドポイント設定パネルで**\$1id を個別の列として指定する**のチェックマークボタンを選択して、プライマリ キーとして機能する `_id` という名前の 2 番目の列を作成できます。

移行モードの選択は、以下に説明するように、ターゲットデータの結果形式に影響します。

**ドキュメントモード**  
ドキュメントモードでは、MongoDB ドキュメントは「現状のまま」移行されます。これは、その中のドキュメントデータが `_doc` という名前のターゲットテーブルの 1 つの列と見なされることを意味します。MongoDB をソースエンドポイントとして使用する場合のデフォルト設定はドキュメントモードです。  
たとえば、myCollection という MongoDB コレクションの次のドキュメントを考えてみましょう。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
ドキュメントモードを使用してデータをリレーショナルデータベーステーブルに移行した後、データは以下のように構成されます。MongoDB ドキュメントのデータフィールドは ` _doc` 列に統合されています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)
オプションで、追加の接続属性 `extractDocID` を *true* に設定して、プライマリキーとして動作する、`"_id"` という名前の 2 つ目の列を作成できます。CDC を使用する場合は、このパラメータを **true に設定します。  
[マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを *true* に設定**する必要があります**。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  
ドキュメントモードでは、 は次のようなコレクションの作成と名前変更 AWS DMS を管理します。  
+ ソースデータベースに新しいコレクションを追加すると、 はコレクションの新しいターゲットテーブル AWS DMS を作成し、ドキュメントをレプリケートします。
+ ソースデータベースで既存コレクションの名前を変更すると、 AWS DMS はターゲット テーブルの名前を変更しません。
ターゲット エンドポイントが Amazon DocumentDB の場合は、**ドキュメントモード**で移行を実行します。

**テーブルモード**  
テーブルモードでは、 は MongoDB ドキュメントの各最上位フィールドをターゲットテーブルの列 AWS DMS に変換します。フィールドがネストされている場合、 はネストされた値を 1 つの列に AWS DMS フラット化します。 AWS DMS 次に、キーフィールドとデータ型をターゲットテーブルの列セットに追加します。  
MongoDB ドキュメントごとに、 は各キーとタイプをターゲットテーブルの列セット AWS DMS に追加します。たとえば、テーブルモードを使用すると、 は前の例を次のテーブル AWS DMS に移行します。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)
入れ子の値は、ドット区切りのキー名を含む列にフラット化されます。列は、ピリオドで区切られたフラット化されたフィールド名の連結と呼ばれます。たとえば、 は などのネストされた値のフィールドを持つ JSON ドキュメント`{"a" : {"b" : {"c": 1}}}`を という名前の列 AWS DMS に移行します。 `a.b.c.`  
ターゲット列を作成するには、 は指定された数の MongoDB ドキュメント AWS DMS をスキャンし、すべてのフィールドとそのタイプのセットを作成します。 AWS DMS 次に、このセットを使用してターゲットテーブルの列を作成します。コンソールを使用して MongoDB ソースエンドポイントを作成または変更する場合は、スキャンするドキュメントの数を指定できます。デフォルト値は 1000 ドキュメントです。を使用する場合は AWS CLI、追加の接続属性 を使用できます`docsToInvestigate`。  
テーブルモードでは、 は次のようなドキュメントとコレクション AWS DMS を管理します。  
+ 既存のコレクションにドキュメント (行) を追加する場合は、ドキュメントがレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントを更新すると、更新されたドキュメントはレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントの削除は完全にサポートされています。
+ CDC タスクの実行中に新しいコレクションを追加しても、ターゲット上に新しいテーブルは作成されません。
+ 変更データキャプチャ (CDC) フェーズ AWS DMS では、 はコレクションの名前変更をサポートしていません。

**Topics**
+ [のソースとして MongoDB を使用する場合に必要なアクセス許可 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [CDC 用 MongoDB レプリカセットの設定](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [のソースとして MongoDB を使用する場合のセキュリティ要件 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [MongoDB コレクションをセグメント化した並行移行](#CHAP_Source.MongoDB.ParallelLoad)
+ [MongoDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [のソースとして MongoDB を使用する場合の制限 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [のソースとして MongoDB を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB のソースデータ型](#CHAP_Source.MongoDB.DataTypes)

## のソースとして MongoDB を使用する場合に必要なアクセス許可 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

MongoDB ソースを使用した AWS DMS 移行では、ルート権限を持つユーザーアカウントを作成するか、移行するデータベースに対するアクセス許可のみを持つユーザーを作成できます。

次のコードは、ルートアカウントとなるユーザーを作成します。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

MongoDB 3.x ソースに関して次のコードは、移行するデータベースに対して最小限の権限を持つユーザーを作成します。

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

MongoDB 4.x ソースの場合、以下のコードは最小限の権限を持つユーザーを作成します。

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

たとえば、「admin」データベースに次のロールを作成します。

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

ロールが作成されたら、移行するデータベースにユーザーを作成します。

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## CDC 用 MongoDB レプリカセットの設定
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

MongoDB で継続的なレプリケーションまたは CDC を使用するには、MongoDB オペレーションログ (oplog) へのアクセス AWS DMS が必要です。レプリカセットが存在しない場合に oplog を作成するには、レプリカセットをデプロイする必要があります。詳細については、 [MongoDB のドキュメント](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)をご参照ください。

ソースエンドポイントとして設定された MongoDB レプリカのプライマリまたはセカンダリノードを持つ CDC を使用することができます。

**スタンドアロンインスタンスをレプリカセットに変換するには**

1. コマンドラインを使用して、`mongo` に接続します。

   ```
   mongo localhost
   ```

1. `mongod` サービスを停止します。

   ```
   service mongod stop
   ```

1. 次のコマンドを使用して、`mongod` を再起動します。

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 次のコマンドを使用して、レプリカセットへの接続をテストします。

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

ドキュメントモードの移行を実行する予定がある場合は、MongoDB エンドポイントを作成するときに `_id as a separate column` オプションを選択します。このオプションを選択すると、プライマリキーとして機能する `_id` という名前の 2 番目の列が作成されます。この 2 番目の列は、データ操作言語 (DML) オペレーションをサポートするために AWS DMS で必要です。

**注記**  
AWS DMS は、オペレーションログ (oplog) を使用して、継続的なレプリケーション中の変更をキャプチャします。がレコード AWS DMS を読み取る前に MongoDB がオログからレコードをフラッシュすると、タスクは失敗します。少なくとも 24 時間は変更が保持されるように oplog のサイジングを行うことをお勧めします。

## のソースとして MongoDB を使用する場合のセキュリティ要件 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS DMS は、MongoDB の 2 つの認証方法をサポートしています。この 2 つの認証方法はパスワードを暗号化する際に使用するため、`authType` パラメータが *PASSWORD* に設定されているときにのみ使用されます。

MongoDB の認証方法は次のとおりです。
+ **MONGODB-CR** — 下位互換性のために
+ **SCRAM-SHA-1** – バージョン 3.x と 4.0 認証を使用する場合のデフォルト

認証方法が指定されていない場合、 AWS DMS は MongoDB ソースのバージョンにデフォルトの方法を使用します。

## MongoDB コレクションをセグメント化した並行移行
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

移行タスクのパフォーマンスを向上させるために、MongoDB ソース エンドポイントは、テーブルマッピングでの並列全ロードの 2 つのオプションをサポートしています。

つまり、自動セグメンテーションまたはテーブルマッピングによる範囲セグメンテーションを使用して、JSON 設定で並列全ロードを行うことで、コレクションを並行移行できます。自動セグメンテーションでは、 の基準を指定 AWS DMS して、各スレッドで移行するソースを自動的にセグメント化できます。範囲セグメンテーションを使用すると、DMS が各スレッドで移行する各セグメントの特定 AWS DMS の範囲を指定できます。これらの設定の詳細については、「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)」をご参照ください。

### 自動セグメンテーション範囲を使用して MongoDB データベースを並列移行する
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

スレッドごとにデータを自動的にパーティション (セグメント化) する AWS DMS の基準を指定することで、ドキュメントを並列移行できます。特に、スレッドごとに移行するドキュメントの数を指定します。このアプローチを使用して、スレッドあたりのパフォーマンスを最大化するためにセグメントの境界を最適化 AWS DMS しようとします。

テーブルマッピングで以下のテーブル設定オプションを使用して、セグメンテーション基準を指定できます。


|  テーブル設定オプション  |  説明  | 
| --- | --- | 
|  `"type"`  |  (必須) ソースとして `"partitions-auto"` for MongoDB を設定します。  | 
|  `"number-of-partitions"`  |  (オプション) 移行に使用されるパーティション (セグメント) の総数。デフォルトは 16 です。  | 
|  `"collection-count-from-metadata"`  |  (オプション) このオプションが `true` に設定されている場合, AWS DMS は、パーティションの数を決定するために、推定コレクション数を使用します。このオプションが に設定されている場合`false`、 は実際のコレクション数 AWS DMS を使用します。デフォルトは `true` です。  | 
|  `"max-records-skip-per-page"`  |  (オプション) 各パーティションの境界を決定するときに一度にスキップするレコードの数。 は、ページ分割されたスキップアプローチ AWS DMS を使用してパーティションの最小境界を決定します。デフォルトは 10,000 です。 比較的高い値を設定すると、カーソルがタイムアウトし、タスクが失敗する可能性がある。相対的に低い値を設定すると、ページあたりのオペレーションが増え、全ロードが遅くなります。  | 
|  `"batch-size"`  |  (オプション) 1 つのバッチで返されるドキュメントの数を制限します。各バッチには、サーバーへの往復が必要です。バッチサイズがゼロ (0) の場合、カーソルはサーバー定義の最大バッチサイズを使用します。デフォルトは 0 です。  | 

次の例は、自動セグメンテーションのテーブルマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自動セグメンテーションには次のような制限があります。各セグメントの移行は、コレクション数とコレクション用の最小値 `_id` を別個にフェッチします。次に、ページ割りされたスキップを使用して、そのセグメントの最小境界を計算します。

従って、コレクション内のすべてのセグメント境界が計算されるまで、各コレクションで `_id` の最小値が一定のままであるようにします。セグメント境界の計算中にコレクションの `_id` 最小値を変更すると、データの損失や重複行のエラーが発生する可能性があります。

### 範囲セグメンテーションを使用して MongoDB データベースを並列移行する
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

スレッド内の各セグメント範囲を指定することで、ドキュメントを並列移行できます。このアプローチを使用して、スレッドあたりのドキュメント範囲の選択に応じて、各スレッドで移行するように AWS DMS 特定のドキュメントに指示します。

次のイメージは、7 つの項目を持つ MongoDB コレクションとプライマリキーとしての `_id` を示しています。

![\[7 つの項目を持つ MongoDB コレクション。\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-docdb-collection.png)


コレクションを の 3 つの特定のセグメントに分割 AWS DMS して並行して移行するには、テーブルマッピングルールを移行タスクに追加できます。これは次の JSON 例で示されます。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

このテーブルマッピング定義は、ソースコレクションを 3 つのセグメントに分割し、並列移行します。以下は、セグメンテーション境界です。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

移行タスクが完了したら、次の例に示すように、テーブルが並列にロードされたことをタスクログから確認できます。ソーステーブルから各セグメントをアンロードするために使用する MongoDB `find` 句 を確認することもできます。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

現在、 はセグメントキー列として次の MongoDB データ型 AWS DMS をサポートしています。
+ Double
+ String
+ ObjectId
+ 32 ビット整数
+ 64 ビット整数

## MongoDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS バージョン 3.4.5 以降では、サポートされているすべての MongoDB バージョンについて、1 つのタスクで複数のデータベースを移行できます。複数のデータベースを移行する場合は、次のステップを実行します：

1. MongoDB ソース エンドポイントを作成するときは、次のいずれかの操作を行います：
   + DMS コンソールの**エンドポイントの作成**ページで、**[Endpoint configuration]** (エンドポイント設定) の下にある**[Database name]** (データベース名) が空であることを確認してください。
   + コマンドを使用して AWS CLI `CreateEndpoint`、空の文字列値を の `DatabaseName`パラメータに割り当てます`MongoDBSettings`。

1. MongoDB ソースから移行するデータベースごとに、タスクのテーブルマッピングにおけるスキーマ名としてのデータベース名を指定します。これを行うには、コンソール内のガイド付き入力を使用するか、JSON で直接入力できます。ガイド付き入力の詳細については、「[コンソールからテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)」をご参照ください。JSON の詳細については、「[選択ルールと選択アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)」をご参照ください。

たとえば、次の JSON を指定して、3 つの MongoDB データベースを移行するとします。

**Example スキーマ内のすべてのテーブルの移行**  
次の JSON は、すべてのテーブルをソースエンドポイントの `Customers`、`Orders`、`Suppliers` データベースからターゲット エンドポイントに移行します。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## のソースとして MongoDB を使用する場合の制限 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

以下は、MongoDB をソースとして使用する場合の制限です AWS DMS。
+ テーブルモードの場合、コレクション内のドキュメントは、同じフィールドの値で使用されるデータ型と一致している必要があります。例えば、コレクション内のドキュメントに `'{ a:{ b:value ... }'` が含まれている場合、`a.b` フィールドの `value` を参照するコレクション内のすべてのドキュメントは、値が登場するコレクションの場所を問わず、`value` で同じデータ型を使用する必要があります。
+ `_id` オプションが別の列として設定されている場合、ID 文字列は 200 文字以下でなければなりません。
+ オブジェクト ID および配列タイプキーは、テーブルモードで `oid` および `array` というプレフィックスが付けられた列に変換されます。

  内部的には、これらの列はプレフィックスが付けられた名前で参照されます。これらの列を参照 AWS DMS する変換ルールを で使用する場合は、必ずプレフィックス付き列を指定してください。たとえば、`${_id}` ではなく `${oid__id}` を指定するか、`${_addresses}` ではなく `${array__addresses}` を指定します。
+  コレクション名とキー名にドル記号 (\$1) を含めることはできません。
+ AWS DMS は、RDBMS ターゲットのテーブルモードで異なる大文字と小文字 (上、下) の同じフィールドを含むコレクションをサポートしていません。たとえば、 AWS DMS は `Field1`と という名前の 2 つのコレクションを持つことをサポートしていません`field1`。
+ 前述のように、テーブルモードとドキュメントモードには制限があります。
+ 自動セグメンテーションを使用して並列移行するには、前述の制限があります。
+ ソースフィルターは、MongoDB ではサポートされていません。
+ AWS DMS は、ネストレベルが 97 より大きいドキュメントをサポートしていません。
+ AWS DMS は、DocumentDB 以外のターゲットに移行するときに UTF-8 でエンコードされたソースデータを必要とします。non-UTF-8文字を含むソースの場合は、移行前に UTF-8 に変換するか、代わりに Amazon DocumentDB に移行します。
+ AWS DMS では、MongoDB バージョン 5.0 の以下の機能はサポートされていません。
  + ライブリシャーディング
  + クライアント側のフィールドレベルの暗号化 (CSFLE)
  + 時系列コレクションの移行
**注記**  
DocumentDB は、時系列コレクションをサポートしていないため、フルロードフェーズで移行された時系列コレクションは Amazon DocumentDB の通常のコレクションに変換されます。

## のソースとして MongoDB を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

MongoDB ソースエンドポイントを設定するときは、 AWS DMS コンソールを使用して複数のエンドポイント設定を指定できます。

次の表は、MongoDB データベースを AWS DMS ソースとして使用する場合に使用できる構成設定を示しています。


| 設定 (属性) | 有効値 | デフォルト値と説明 | 
| --- | --- | --- | 
|  **[Authentication mode]** (認証モード)  |  `"none"` `"password"`  |  値 `"password"` では、ユーザー名とパスワードの入力が求められます。`"none"` を指定した場合、ユーザー名とパスワードのパラメータは使用されません。  | 
|  **[Authentication source]** (認証ソース)  |  有効な MongoDB データベース名を指定してください。  |  認証情報を検証するために使用する MongoDB データベースの名前。デフォルト値は `"admin"` です。  | 
|  **[Authentication mechanism]** (認証メカニズム)  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  認証メカニズム。` "default"` 値は `"scram_sha_1"` です。`authType` が `"no"` に設定されている場合、この設定は使用されません。  | 
|  **[Metadata mode]** (メタデータモード)  |  ドキュメントとテーブル  |  ドキュメントモードまたはテーブルモードを選択します。  | 
|  **スキャンするドキュメントの数** (`docsToInvestigate`)  |  `0` より大きい正の整数。  |  このオプションは、テーブルモードでのみターゲット テーブル定義を定義するために使用します。  | 
|  **[\$1id as a separate column]** (\$1id を個別の列として指定する)  |  チェックボックス  |  このチェックを入れると、プライマリ キーとして機能する `_id` という名前の 2 番目の列が作成されます。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - `NestingLevel` が `"none"` に設定されている場合、この属性を使用します。 [マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを に設定**する必要があります**`true`。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  | 
|  `socketTimeoutMS`  |  0 以上の整数。 追加の接続属性 (ECA) のみ  |  この設定はミリ秒単位で、MongoDB クライアントの接続タイムアウトを設定する。値が 0 以下の場合、MongoDB クライアントのデフォルトが使用される。  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  true の場合、CDC 更新イベント中に、 は更新されたドキュメント全体をターゲット AWS DMS にコピーします。false に設定すると、MongoDB update コマンド AWS DMS を使用して、ターゲットのドキュメント内の変更されたフィールドのみを更新します。  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  true の場合、 はデータをシャードコレクションに AWS DMS レプリケートします。ターゲットエンドポイントが DocumentDB エラスティッククラスターである AWS DMS 場合にのみ、 はこの設定を使用します。 この設定が true の場合、次の点に注意する。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  `false` の場合、変更ストリームと oplog 間の検証を無効にします。  このようなシナリオでは、デフォルトの DMS 動作でタスクが失敗するため、変更ストリームと oplog エントリの間に不一致が発生した場合、オペレーションが実行されない可能性があります。デフォルト: `true`。   | 
|  `useOplog`  |  `true` `false`  |  `true` の場合、DMS タスクは変更ストリームを使用するのではなく、「oplog」から直接読み取ることができます。デフォルト: `false`。  | 

**ドキュメント**を**メタデータモード**として選択した場合、さまざまなオプションを利用できます。

ターゲット エンドポイントが DocumentDB の場合は、**ドキュメントモード**で移行を実行し、また、ソース エンドポイントを変更し、**[\$1id as separate column]** (\$1id を個別の列として) オプションを選択します。ソースの MongoDB ワークロードにトランザクションが含まれる場合、これは必須の前提条件です。

## MongoDB のソースデータ型
<a name="CHAP_Source.MongoDB.DataTypes"></a>

MongoDB を のソースとして使用するデータ移行は、ほとんどの MongoDB データ型 AWS DMS をサポートします。次の表に、 の使用時にサポートされる MongoDB ソースデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示します。MongoDB データ型の詳細については、『MongoDB のドキュメント』の「[BSON 型](https://docs.mongodb.com/manual/reference/bson-types)」をご参照ください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  MongoDB データ型  |  AWS DMS データ型  | 
| --- | --- | 
| ブール値 | Bool | 
| バイナリ | BLOB | 
| 日付 | 日付 | 
| タイムスタンプ | 日付 | 
| Int | INT4 | 
| Long | INT8 | 
| Double | REAL8 | 
| String (UTF-8) | CLOB | 
| 配列 | CLOB | 
| OID | String | 
| REGEX | CLOB | 
| コード | CLOB | 

# のソースとしての Amazon DocumentDB (MongoDB 互換) の使用 AWS DMS
<a name="CHAP_Source.DocumentDB"></a>

 AWS DMS がソースとしてサポートする Amazon DocumentDB (MongoDB 互換) のバージョンについては、「[のソース AWS DMS](CHAP_Introduction.Sources.md)」を参照してください。

 ソースとして Amazon DocumentDB を使用すると、1 つの Amazon DocumentDB クラスターから別のAmazon DocumentDB クラスターにデータを移行できます。Amazon DocumentDB クラスターから、 でサポートされている他のターゲットエンドポイントのいずれかにデータを移行することもできます AWS DMS。

Amazon DocumentDB を初めて使用する場合は、Amazon DocumentDB データベースの以下の重要な概念に注意してください：
+ Amazon DocumentDB のレコードは、フィールドと値のペアで構成されるデータ構造である*ドキュメント*です。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。ドキュメントは、リレーショナルデータベースのテーブルの行とほぼ同等です。
+ Amazon DocumentDB での*コレクション*とは、ドキュメントのグループであり、リレーショナル データベーステーブルとほぼ同等です。
+ Amazon DocumentDB の *データベース*はコレクションのセットであり、リレーショナルデータベース内のスキーマとほぼ同等です。

AWS DMS はAmazon DocumentDB をソースとして使用する場合、ドキュメントモードとテーブルモードの 2 つの移行モードをサポートします。 AWS DMS コンソールで Amazon DocumentDB ソースエンドポイントを作成するときに、**メタデータモードオプションまたは追加の接続属性 を使用して移行モード**を指定します`nestingLevel`。移行モードの選択は、以下に説明するように、ターゲットデータの結果の形式に影響します。

**ドキュメントモード**  
*ドキュメントモードでは、*JSON ドキュメントがそのまま移行されます。つまり、ドキュメントデータは 2 つの項目のいずれかに統合されます。ターゲットとしてリレーショナルデータベースを使用する場合、データはターゲットテーブルで `_doc` という名前の単一の列になります。非リレーショナルデータベースをターゲットとして使用する場合、データは単一の JSON ドキュメントになります。ドキュメントモードは、Amazon DocumentDB ターゲットに移行する際にお勧めするデフォルトモードです。  
`myCollection` という Amazon DocumentDB コレクション内の次のドキュメントを例にとって説明します。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
ドキュメントモードを使用してデータをリレーショナルデータベーステーブルに移行した後、データは以下のように構成されます。ドキュメントのデータフィールドは ` _doc` 列に統合されています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DocumentDB.html)
オプションで、追加の接続属性 `extractDocID` を `true` に設定して、プライマリ キーとして機能する `"_id"` という名前の 2 つ目の列を作成できます。変更データ キャプチャ (CDC) を使用する場合は、ターゲットとして Amazon DocumentDB を使用する場合を除き、このパラメータを `true` に設定します。  
[マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを に設定**する必要があります**`true`。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  
ソースデータベースに新しいコレクションを追加すると、 はコレクションの新しいターゲットテーブル AWS DMS を作成し、ドキュメントをレプリケートします。

**テーブルモード**  
**テーブルモードでは、AWS DMS は Amazon DocumentDB ドキュメントの各最上位フィールドをターゲットテーブルの列に変換します。フィールドがネストされている場合、 はネストされた値を 1 つの列に AWS DMS フラット化します。 AWS DMS は、キーフィールドとデータ型をターゲットテーブルの列セットに追加します。  
Amazon DocumentDB ドキュメントごとに、 は各キーとタイプをターゲットテーブルの列セット AWS DMS に追加します。たとえば、テーブルモードを使用すると、 は前の例を次のテーブル AWS DMS に移行します。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DocumentDB.html)
入れ子の値は、ドット区切りのキー名を含む列にフラット化されます。この列は、ピリオドで区切られた平滑化されたフィールド名の連結を使用して名前が付けられます。たとえば、 は などのネストされた値のフィールドを持つ JSON ドキュメント`{"a" : {"b" : {"c": 1}}}`を という名前の列 AWS DMS に移行します。 `a.b.c.`  
ターゲット列を作成するには、 は指定された数の Amazon DocumentDB ドキュメント AWS DMS をスキャンし、すべてのフィールドとそのタイプのセットを作成します。 AWS DMS 次に、 はこのセットを使用してターゲットテーブルの列を作成します。コンソールを使用して Amazon DocumentDB ソース エンドポイントを作成または変更する場合は、スキャンするドキュメントの数を指定できます。デフォルト値は 1000 ドキュメントです。を使用する場合は AWS CLI、追加の接続属性 を使用できます`docsToInvestigate`。  
テーブルモードでは、 は次のようなドキュメントとコレクション AWS DMS を管理します。  
+ 既存のコレクションにドキュメント (行) を追加する場合は、ドキュメントがレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントを更新すると、更新されたドキュメントはレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントの削除は完全にサポートされています。
+ CDC タスクの実行中に新しいコレクションを追加しても、ターゲット上に新しいテーブルは作成されません。
+ 変更データキャプチャ (CDC) フェーズ AWS DMS では、 はコレクションの名前変更をサポートしていません。

**Topics**
+ [ソースとして Amazon DocumentDB を使用するためのアクセス許可の設定](#CHAP_Source.DocumentDB.Permissions)
+ [Amazon DocumentDB クラスター用 CDC の設定](#CHAP_Source.DocumentDB.ConfigureCDC)
+ [TLS を使用して Amazon DocumentDB に接続する](#CHAP_Source.DocumentDB.TLS)
+ [Amazon DocumentDB ソース エンドポイントの作成](#CHAP_Source.DocumentDB.ConfigureEndpoint)
+ [Amazon DocumentDB コレクションをセグメント化し、並列移行する](#CHAP_Source.DocumentDB.ParallelLoad)
+ [Amazon DocumentDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS](#CHAP_Source.DocumentDB.Multidatabase)
+ [のソースとして Amazon DocumentDB を使用する場合の制限 AWS DMS](#CHAP_Source.DocumentDB.Limitations)
+ [ソースとしての Amazon DocumentDB のエンドポイントの設定](#CHAP_Source.DocumentDB.ECAs)
+ [Amazon DocumentDB のソースデータ型](#CHAP_Source.DocumentDB.DataTypes)

## ソースとして Amazon DocumentDB を使用するためのアクセス許可の設定
<a name="CHAP_Source.DocumentDB.Permissions"></a>

 AWS DMS 移行に Amazon DocumentDB ソースを使用する場合、ルート権限を持つユーザーアカウントを作成できます。または、移行するデータベースに対してのみ許可されたユーザーを作成することもできます。

次のコードは、ルートアカウントとしてのユーザーを作成します。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  })
```

Amazon DocumentDB 3.6 の場合、次のコードは、移行するデータベースに対して最小限の権限を持つユーザーを作成します。

```
use db_name
db.createUser( 
    {
        user: "dms-user",
        pwd: "password",
        roles: [{ role: "read", db: "db_name" }]
    }
)
```

Amazon DocumentDB 4.0 以降では、 はデプロイ全体の変更ストリーム AWS DMS を使用します。この例では、次のコードを使用して最小限の権限を持つユーザーを作成します。

```
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "readAnyDatabase", db: "admin" }] 
})
```

## Amazon DocumentDB クラスター用 CDC の設定
<a name="CHAP_Source.DocumentDB.ConfigureCDC"></a>

Amazon DocumentDB で継続的なレプリケーションまたは CDC を使用するには、Amazon DocumentDB クラスターの変更ストリームへのアクセス AWS DMS が必要です。クラスターのコレクションおよびデータベース内の更新イベントの時系列については、*Amazon DocumentDB デベロッパー\$1ガイド*の「[変更ストリームの使用](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html)」をご参照ください。

MongoDB シェルを使用して Amazon DocumentDB クラスターに関して認証します。次に、以下のコマンドを実行して、変更ストリームを有効にします。

```
db.adminCommand({modifyChangeStreams: 1,
    database: "DB_NAME",
    collection: "", 
    enable: true});
```

この方法により、データベース内ですべてのコレクションの変更ストリームが有効になります。変更ストリームを有効にすると、既存のデータを移行し、同時に進行中の変更をレプリケートする移行タスクを作成できます。 は、バルクデータがロードされた後でも変更をキャプチャして適用し AWS DMS 続けます。最終的にソースデータベースとターゲットデータベースは同期され、移行でのダウンタイムは最小限に抑えられます。

**注記**  
AWS DMS は、オペレーションログ (oplog) を使用して、継続的なレプリケーション中の変更をキャプチャします。がレコード AWS DMS を読み取る前に Amazon DocumentDB が oplog からレコードをフラッシュアウトすると、タスクは失敗します。少なくとも 24 時間は変更が保持されるように oplog のサイジングを行うことをお勧めします。

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

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

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

`rds-combined-ca-bundle.pem` ファイルをダウンロードしたら、ファイルに含まれるパブリックキーをインポートできます AWS DMS。以下のステップでは、その方法について説明します。

**AWS DMS コンソールを使用してパブリックキーをインポートするには**

1. にサインイン AWS マネジメントコンソール して選択します AWS DMS。

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

1. [**証明書のインポート**] を選択します。**[Import certificate]** (新しい CA 証明書のインポート) ページが表示されます。

1. **[Certificate configuration]** (証明書設定) セクションで、次のいずれかの操作を行います：
   + **[Certificate identifier ]** (証明書の識別子) に、`docdb-cert` などの、証明書の一意の名前を入力します。
   + **[Choose file]** (ファイルの選択) を選択し、`rds-combined-ca-bundle.pem` ファイルを保存した場所に移動し、選択します。

1. [**Add new CA certificate (新しい CA 証明書の追加)**] を選択します。

 AWS CLI 次の例では、 AWS DMS `import-certificate` コマンドを使用してパブリックキー`rds-combined-ca-bundle.pem`ファイルをインポートします。

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

## Amazon DocumentDB ソース エンドポイントの作成
<a name="CHAP_Source.DocumentDB.ConfigureEndpoint"></a>

Amazon DocumentDB ソース エンドポイントを作成するには、コンソールまたは AWS CLIを使用します。以下の手順では、コンソールを使用します。

**AWS DMS コンソールを使用して Amazon DocumentDB ソースエンドポイントを設定するには**

1. にサインイン AWS マネジメントコンソール して選択します AWS DMS。

1. ナビゲーションペインで **[Endpoints]** (エンドポイント) を選択し、**[Create Endpoint]** (エンドポイントの作成) を選択します。

1. **[Endpoint identifier]** (エンドポイント識別子) には、`docdb-source` などの簡単に識別できるような名前を入力します。

1. **[Source engine]** (ソースエンジン) には、**Amazon DocumentDB (MongoDB 互換性)** を選択します。

1. を使用する場合**[Server name]** (サーバー名) には、Amazon DocumentDB データベース エンドポイントが常駐するサーバー名を入力します。たとえば、Amazon EC2 インスタンスの公開 DNS 名に `democluster.cluster-cjf6q8nxfefi.us-east-2.docdb.amazonaws.com` などを入力できます。

1. **[Port]** (ポート) に 27017 と入力します。

1. [**SSL mode (SSL モード)**] で [**verify-full**] を選択します。Amazon DocumentDB クラスターで SSL を無効化している場合、このステップは省略できます。

1. **[CA certificate]** (CA 証明書) には、Amazon DocumentDB 証明書として `rds-combined-ca-bundle.pem` を選択します。この証明書の追加手順については、「[TLS を使用して Amazon DocumentDB に接続する](#CHAP_Source.DocumentDB.TLS)」をご参照ください。

1. **[Database name ]** (データベース名) に、移行するデータベースの名前を入力します。

CLI に次の手順を値で使用します。

**を使用して Amazon DocumentDB ソースエンドポイントを設定するには AWS CLI**
+ 次の AWS DMS `create-endpoint`コマンドを実行して Amazon DocumentDB ソースエンドポイントを設定し、プレースホルダーを独自の値に置き換えます。

  ```
  aws dms create-endpoint \
             --endpoint-identifier a_memorable_name \
             --endpoint-type source \
             --engine-name docdb \
             --username value \
             --password value \
             --server-name servername_where_database_endpoint_resides \
             --port 27017 \
             --database-name name_of_endpoint_database
  ```

## Amazon DocumentDB コレクションをセグメント化し、並列移行する
<a name="CHAP_Source.DocumentDB.ParallelLoad"></a>

移行タスクのパフォーマンスを向上させるために、Amazon DocumentDB ソース エンドポイントは、テーブルマッピングの並列全ロード機能の 2 つのオプションをサポートしています。つまり、JSON 設定で並列全ロードに対してテーブルマッピングの自動セグメンテーションまたは範囲セグメンテーションオプションを使用して、コレクションを並列移行できます。自動セグメンテーションオプションを使用すると、 の基準を指定 AWS DMS して、各スレッドで移行するソースを自動的にセグメント化できます。範囲セグメンテーションオプションを使用すると、DMS が各スレッドで移行する各セグメントの特定 AWS DMS の範囲を指定できます。これらの設定の詳細については、「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)」をご参照ください。

### 自動セグメンテーション範囲を使用して Amazon DocumentDB データベースを並列移行する
<a name="CHAP_Source.DocumentDB.ParallelLoad.AutoPartitioned"></a>

スレッドごとにデータ特に、スレッドごとに移行するドキュメントの数を自動的にパーティション (セグメント化) する AWS DMS の基準を指定することで、ドキュメントを並列移行できます。このアプローチを使用して、 AWS DMS は、スレッドあたりのパフォーマンスを最大化するために、セグメント境界を最適化しようとします。

テーブルマッピングで次のテーブル設定オプションを使用して、セグメンテーション基準を指定できます。


|  テーブル設定オプション  |  説明  | 
| --- | --- | 
|  `"type"`  |  (必須) ソースとして Amazon DocumentDB 用の `"partitions-auto"` に設定します。  | 
|  `"number-of-partitions"`  |  (オプション) 移行に使用されるパーティション (セグメント) の総数。デフォルトは 16 です。  | 
|  `"collection-count-from-metadata"`  |  (オプション) に設定すると`true`、パーティションの数を決定するために推定コレクション数 AWS DMS が使用されます。に設定すると`false`、実際のコレクション数 AWS DMS が使用されます。デフォルトは `true` です。  | 
|  `"max-records-skip-per-page"`  |  (オプション) 各パーティションの境界を決定するときに一度にスキップするレコードの数。 は、ページ分割されたスキップアプローチ AWS DMS を使用してパーティションの最小境界を決定します。デフォルトは 10,000 です。比較的大きな値を設定すると、カーソルのタイムアウトやタスク障害の可能性があります。相対的に低い値を設定すると、ページあたりのオペレーションが増え、全ロードが遅くなります。  | 
|  `"batch-size"`  |  (オプション) 1 つのバッチで返されるドキュメントの数を制限します。各バッチには、サーバーへの往復が必要です。バッチサイズがゼロ (0) の場合、カーソルはサーバー定義の最大バッチサイズを使用します。デフォルトは 0 です。  | 

次の例は、自動セグメンテーションのテーブルマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自動セグメンテーションには次の制限があります。各セグメントの移行は、コレクション数とコレクション用の最小値 `_id` を別個にフェッチします。次に、ページ割りされたスキップを使用して、そのセグメントの最小境界を計算します。従って、コレクション内のすべてのセグメント境界が計算されるまで、各コレクションで `_id` の最小値が一定のままであるようにします。セグメント境界の計算中にコレクションの最小 `_id` 値を変更すると、データ損失や重複行のエラーが発生する可能性があります。

### 特定のセグメント範囲を使用して Amazon DocumentDB データベースを並列移行する
<a name="CHAP_Source.DocumentDB.ParallelLoad.Ranges"></a>

次の例は、7 つの項目を持つ Amazon DocumentDB コレクションおよび `_id` をプライマリ キーとして示しています。

![\[7 つの項目を持つ Amazon DocumentDB コレクション。\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-docdb-collection.png)


コレクションを 3 つのセグメントに分割して並列に移行するには、次の JSON の例に示すように、移行タスクにテーブルマッピングルールを追加します。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

このテーブルマッピング定義は、ソースコレクションを 3 つのセグメントに分割し、並列移行します。以下は、セグメンテーション境界です。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 and not in (_id less-than-or-equal-to  "5f805c97873173399a278d79" and num less-than-or-equal-to 2) (3 records)
Data not in (_id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5) (2 records)
```

移行タスクが完了したら、次の例に示すように、テーブルが並列にロードされたことをタスクログから確認できます。ソーステーブルから各セグメントをアンロードするために使用される Amazon DocumentDB `find` 句を確認することもできます。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

現在、 はセグメントキー列として次の Amazon DocumentDB データ型 AWS DMS をサポートしています。
+ Double
+ String
+ ObjectId
+ 32 ビット整数
+ 64 ビット整数

## Amazon DocumentDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS
<a name="CHAP_Source.DocumentDB.Multidatabase"></a>

AWS DMS バージョン 3.4.5 以降では、Amazon DocumentDB バージョン 4.0 以降でのみ、1 つのタスクで複数のデータベースを移行できます。複数のデータベースを移行する場合は、以下を実行します：

1. Amazon DocumentDB ソース エンドポイントを作成すると、次のようになります：
   + for AWS マネジメントコンソール で AWS DMS、エンドポイント**の作成**ページの**エンドポイント設定**で**データベース名**を空のままにします。
   +  AWS Command Line Interface (AWS CLI) で、**CreateEndpoint** アクションに指定した **DocumentDBSettings** の **DatabaseName** パラメータに空の文字列値を割り当てます。

1. この Amazon DocumentDB ソース エンドポイントから移行するデータベースごとに、コンソールでのガイド付き入力を使用するか、JSON で直接使用するタスクのテーブルマッピングで、各データベースの名前をスキーマの名前として指定します。ガイド付き入力の詳細については、「[コンソールからテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)」をご参照ください。。JSON の詳細については、「[選択ルールと選択アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)」をご参照ください。

たとえば、次の JSON を指定して 3 つの Amazon DocumentDB データベースを移行できます。

**Example スキーマ内のすべてのテーブルの移行**  
次の JSON は、ソース エンポイント内の `Customers`、`Orders`、`Suppliers`データベースからすべてのテーブルをターゲット エンドポイントに移行します。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include"
        }
    ]
}
```

## のソースとして Amazon DocumentDB を使用する場合の制限 AWS DMS
<a name="CHAP_Source.DocumentDB.Limitations"></a>

Amazon DocumentDB をソースとして使用する場合の制限は次のとおりです AWS DMS。
+ `_id` オプションが別の列として設定されている場合、ID 文字列は 200 文字以下でなければなりません。
+ オブジェクト ID および配列タイプキーは、テーブルモードで `oid` および `array` というプレフィックスが付けられた列に変換されます。

  内部的には、これらの列はプレフィックスが付けられた名前で参照されます。これらの列を参照 AWS DMS する変換ルールを で使用する場合は、必ずプレフィックス付き列を指定してください。たとえば、`${_id}` ではなく `${oid__id}` を指定するか、`${_addresses}` ではなく `${array__addresses}` を指定します。
+  コレクション名とキー名にドル記号 (\$1) を含めることはできません。
+ 前述のように、テーブルモードとドキュメントモードには制限があります。
+ 自動セグメンテーションを使用して並列移行するには、前述の制限があります。
+ Amazon DocumentDB (MongoDB 互換) ソースは、変更データ キャプチャ (CDC) のスタート位置として特定のタイムスタンプの使用をサポートしていません。進行中のレプリケーション タスクは、タイムスタンプに関係なく変更のキャプチャをスタートします。
+ AWS DMS は、3.5.2 より前の AWS DMS バージョンのネストレベルが 97 より大きいドキュメントをサポートしていません。
+ ソースフィルターは、DocumentDB ではサポートされていません。
+ AWS DMS は、Elastic クラスターモードのソースとしての DocumentDB の CDC (変更データキャプチャ) レプリケーションをサポートしていません。

## ソースとしての Amazon DocumentDB のエンドポイントの設定
<a name="CHAP_Source.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 を使用できるエンドポイント設定を説明しています。


| 属性名 | 有効値 | デフォルト値と説明 | 
| --- | --- | --- | 
|   `NestingLevel`   |  `"none"` `"one"`  |  `"none"` - ドキュメントモードを使用するよう `"none"` を指定します。テーブルモードを使用するよう `"one"` を指定します。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - `NestingLevel` が `"none"` に設定されている場合、この属性を使用します。 [マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを に設定**する必要があります**`true`。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  | 
|   `DocsToInvestigate`   |  `0` より大きい正の整数。  |  `1000` - `NestingLevel` が `"one"` に設定されている場合、この属性を使用します。  | 
|   `ReplicateShardCollections `   |  `true` `false`  |  true の場合、 はデータをシャードコレクションに AWS DMS レプリケートします。ターゲットエンドポイントが DocumentDB エラスティッククラスターである AWS DMS 場合にのみ、 はこの設定を使用します。 この設定が true の場合、次の点に注意する。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DocumentDB.html)  | 

## Amazon DocumentDB のソースデータ型
<a name="CHAP_Source.DocumentDB.DataTypes"></a>

次の表に、 AWS DMSを使用する場合にサポートされる Amazon DocumentDB ソースデータ型を示します。この表では、 AWS DMS データ型からのデフォルトのマッピングを確認することもできます。データ型の詳細については、MongoDB のドキュメントの「[BSON 型](https://docs.mongodb.com/manual/reference/bson-types)」をご参照ください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  Amazon DocumentDB データ型  |  AWS DMS データ型  | 
| --- | --- | 
| ブール値 | Bool | 
| バイナリ | BLOB | 
| 日付 | 日付 | 
| タイムスタンプ | 日付 | 
| Int | INT4 | 
| Long | INT8 | 
| Double | REAL8 | 
| String (UTF-8) | CLOB | 
| 配列 | CLOB | 
| OID | String | 

# のソースとしての Amazon S3 の使用 AWS DMS
<a name="CHAP_Source.S3"></a>

を使用して Amazon S3 バケットからデータを移行できます AWS DMS。これを行うには、1 つ以上のデータファイルを含む Amazon S3 バケットへのアクセスを提供します。その S3 バケットに、データおよびそれらのファイルのデータのデータベーステーブル間のマッピングを記述する JSON ファイルを含めます。

全ロードのスタート前に、ソース データ ファイルが Amazon S3 バケットに存在している必要があります。バケット名は、`bucketName` パラメータを使用して指定します。

ソースデータファイルは、次の形式で表すことができます。
+ カンマ区切り値 (.csv)
+ Parquet (DMS バージョン 3.5.3 以降)。Parquet 形式ファイルの詳細については、「[Amazon S3 の Parquet 形式のファイルを のソースとして使用する AWS DMS](#CHAP_Source.S3.Parquet)」を参照してください。

カンマ区切り値 (.csv) 形式のソースデータファイルには、次の命名規則を使用して名前を付けます。この規則では、*`schemaName`* がソーススキーマで、*`tableName`* がそのスキーマ内のテーブルの名前です。

```
/schemaName/tableName/LOAD001.csv
/schemaName/tableName/LOAD002.csv
/schemaName/tableName/LOAD003.csv
...
```

 たとえば、データファイルが次の Amazon S3 パスの `amzn-s3-demo-bucket` にあるとします。

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

ロード時に、 はソーススキーマ名が で`hr`、ソーステーブル名が である AWS DMS と仮定します`employee`。

`bucketName` (必須) に加えて、オプションで`bucketFolder`パラメータを指定して、 AWS DMS が Amazon S3 バケット内のデータファイルを検索する場所を指定できます。前の例を続けると、 を `bucketFolder`に設定すると`sourcedata`、 は次のパスでデータファイルを AWS DMS 読み取ります。

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

追加の接続属性を使用して、列の区切り文字、行の区切り文字、null 値のインジケータ、およびその他のパラメータを指定できます。詳細については、「[のソースとしての Amazon S3 のエンドポイント設定 AWS DMS](#CHAP_Source.S3.Configuring)」を参照してください。

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

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

**Topics**
+ [Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)
+ [のソースとしての Amazon S3 での CDC の使用 AWS DMS](#CHAP_Source.S3.CDC)
+ [のソースとして Amazon S3 を使用する場合の前提条件 AWS DMS](#CHAP_Source.S3.Prerequisites)
+ [のソースとして Amazon S3 を使用する場合の制限 AWS DMS](#CHAP_Source.S3.Limitations)
+ [のソースとしての Amazon S3 のエンドポイント設定 AWS DMS](#CHAP_Source.S3.Configuring)
+ [Amazon S3 のソースデータ型](#CHAP_Source.S3.DataTypes)
+ [Amazon S3 の Parquet 形式のファイルを のソースとして使用する AWS DMS](#CHAP_Source.S3.Parquet)

## Amazon S3 の外部テーブルを のソースとして定義する AWS DMS
<a name="CHAP_Source.S3.ExternalTableDef"></a>

データファイルに加えて、外部テーブル定義も指定する必要があります。*外部テーブル定義*は、 が Amazon S3 AWS DMS からデータを解釈する方法を説明する JSON ドキュメントです。このドキュメントの最大サイズは 2 MB です。 AWS DMS マネジメントコンソールを使用してソースエンドポイントを作成する場合は、テーブルマッピングボックスに JSON を直接入力できます。 AWS Command Line Interface (AWS CLI) または AWS DMS API を使用して移行を実行する場合は、JSON ファイルを作成して外部テーブル定義を指定できます。

以下のものが含まれるデータファイルがあるとします。

```
101,Smith,Bob,2014-06-04,New York
102,Smith,Bob,2015-10-08,Los Angeles
103,Smith,Bob,2017-03-13,Dallas
104,Smith,Bob,2017-03-13,Dallas
```

このデータ用の外部テーブル定義の例を次に示します。

```
{
    "TableCount": "1",
    "Tables": [
        {
            "TableName": "employee",
            "TablePath": "hr/employee/",
            "TableOwner": "hr",
            "TableColumns": [
                {
                    "ColumnName": "Id",
                    "ColumnType": "INT8",
                    "ColumnNullable": "false",
                    "ColumnIsPk": "true"
                },
                {
                    "ColumnName": "LastName",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                },
                {
                    "ColumnName": "FirstName",
                    "ColumnType": "STRING",
                    "ColumnLength": "30"
                },
                {
                    "ColumnName": "HireDate",
                    "ColumnType": "DATETIME"
                },
                {
                    "ColumnName": "OfficeLocation",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                }
            ],
            "TableColumnsTotal": "5"
        }
    ]
}
```

この JSON ドキュメントの要素は次のとおりです。

`TableCount` - ソーステーブルの数。この例では、テーブルは 1 つしかありません。

`Tables` - ソーステーブルあたり 1 つの JSON マップで構成される配列。この例では、マップは 1 つしかありません。各マップは以下の要素で構成されています。
+ `TableName` - ソーステーブルの名前。
+ `TablePath` - AWS DMS が全データ ロード ファイルを見つけることができる Amazon S3 バケット内のパス。`bucketFolder` の値を指定した場合、この値がパスの先頭に付加されます。
+ `TableOwner` - このテーブルのスキーマ名。
+ `TableColumns` - 1 つ以上のマップの配列、それぞれがソーステーブルの列を記述します：
  + `ColumnName` - ソーステーブルの列の名前。
  + `ColumnType` - 列のデータ型。有効なデータ型については、「[Amazon S3 のソースデータ型](#CHAP_Source.S3.DataTypes)」をご参照ください。
  + `ColumnLength` - この列のバイト数。S3 ソースが完全 LOB モードをサポートしていないため、列の最大長は 2147483647 バイト (2,047 メガバイト) に制限されています。`ColumnLength` は次のデータ型に対して有効です：
    + BYTE
    + STRING
  + `ColumnNullable` - この列に NULL 値を含めることができる場合、`true` であるブール値 (デフォルト = `false`)。
  + `ColumnIsPk` - この列がプライマリ キーの一部である場合、`true` であるブール値 (デフォルト = `false`)。
  + `ColumnDateFormat` – DATE 型、TIME 型、DATETIME 型の列の入力日付形式。データ文字列を日付オブジェクトに解析するために使用される。可能な値は以下のとおりです:

    ```
    - YYYY-MM-dd HH:mm:ss
    - YYYY-MM-dd HH:mm:ss.F
    - YYYY/MM/dd HH:mm:ss
    - YYYY/MM/dd HH:mm:ss.F
    - MM/dd/YYYY HH:mm:ss
    - MM/dd/YYYY HH:mm:ss.F
    - YYYYMMdd HH:mm:ss
    - YYYYMMdd HH:mm:ss.F
    ```
+ `TableColumnsTotal` - 列の総数。この番号は、`TableColumns` 配列内の要素数と一致している必要があります。

特に指定しない場合、 `ColumnLength`は を 0 AWS DMS とします。

**注記**  
サポートされているバージョンの では AWS DMS、S3 ソースデータには、列値の前の最初の列としてオプションのオペレーション`TableName`列を含めることもできます。このオペレーション列は、フルロード時にデータを S3 ターゲットエンドポイントに移行するために使用されるオペレーション (`INSERT`) を識別します。  
存在する場合、この列の値は `INSERT` オペレーションキーワードの最初の文字 (`I`) です。指定されている場合、この列は通常、S3 ソースが以前の移行中に S3 ターゲットとして DMS によって作成されたことを示します。  
3.4.2 以前の DMS バージョンでは、この列は以前の DMS 全ロードから作成された S3 ソースデータにはありませんでした。この列を S3 ターゲットデータに追加すると、S3 ターゲットに書き込まれるすべての行の形式を、全ロード中に書き込まれたか、CDC ロード中に書き込まれたかにかかわらず一貫させることができます。S3 ターゲットデータをフォーマットするオプションの詳細については、「[移行済み S3 データでのソース DB オペレーションの表示](CHAP_Target.S3.md#CHAP_Target.S3.Configuring.InsertOps)」をご参照ください。

NUMERIC 型の列の場合は、精度とスケールを指定します。*精度*は数値の桁の合計数であり、*スケール*は小数点以下の桁数です。次に示すように、これには `ColumnPrecision` および `ColumnScale` 要素を使用します。

```
...
    {
        "ColumnName": "HourlyRate",
        "ColumnType": "NUMERIC",
        "ColumnPrecision": "5"
        "ColumnScale": "2"
    }
...
```

秒の小数部分を含むデータを持つ DATETIME 型の列の場合は、スケールを指定します。*[Scale]* (スケール) は小数秒の桁数で、0 ～ 9 の範囲で指定できます。次に示すように、これには `ColumnScale` 要素を使用します。

```
...
{
      "ColumnName": "HireDate",
      "ColumnType": "DATETIME",
      "ColumnScale": "3"
}
...
```

特に指定しない場合、 `ColumnScale`はゼロ AWS DMS であると仮定し、小数秒を切り捨てます。

## のソースとしての Amazon S3 での CDC の使用 AWS DMS
<a name="CHAP_Source.S3.CDC"></a>

が全データロード AWS DMS を実行すると、オプションでターゲットエンドポイントにデータ変更をレプリケートできます。これを行うには、変更データキャプチャファイル (CDC ファイル) を Amazon S3 バケットにアップロードします。これらの CDC ファイルは、アップロード時に AWS DMS 読み取り、ターゲットエンドポイントに変更を適用します。

CDC ファイルは次のように名前が付けられます。

```
CDC00001.csv
CDC00002.csv
CDC00003.csv
...
```

**注記**  
変更データフォルダ内の CDC ファイルをレプリケートするには、辞書と同じ (順次) 順序で正常にアップロードします。たとえば、ファイル CDC00002.csv はファイル CDC00003.csv より前にアップロードします。そうしないと、CDC00002.csv はスキップされ、CDC00003.csv の後にロードするとレプリケートされません。一方、ファイル CDC00004.csv は、CDC00003.csv の後にロードされた場合に正常にレプリケートされます。

がファイルを見つける AWS DMS 場所を指定するには、 `cdcPath`パラメータを指定します。前の例を続けると、`cdcPath` を `changedata` に設定した場合、 AWS DMS は次のパスで CDC ファイルを読み取ります。

```
s3://amzn-s3-demo-bucket/changedata
```

`cdcPath` を `changedata` に、`bucketFolder` を `myFolder` に設定した場合、 AWS DMS は次のパスで CDC ファイルを読み取ります。

```
s3://amzn-s3-demo-bucket/myFolder/changedata
```

CDC ファイル内のレコードは次のような形式になります。
+ オペレーション - 実行する変更オペレーション: `INSERT` または `I`、`UPDATE` または `U`、`DELETE` または `D`。これらのキーワードと文字値では大文字と小文字は区別されません。
**注記**  
サポートされている AWS DMS バージョンでは、 は各ロードレコードに対して実行するオペレーションを 2 つの方法で識別 AWS DMS できます。 AWS DMS は、レコードのキーワード値 ( など`INSERT`) またはキーワードの先頭文字 ( など) からこれを実行できます`I`。以前のバージョンでは、 は完全なキーワード値からのみロードオペレーション AWS DMS を認識しました。  
以前のバージョンでは AWS DMS、CDC データをログに記録するために完全なキーワード値が書き込まれていました。さらに以前のバージョンでは、キーワード [initial] のみを使用して、S3 ターゲットにオペレーション値を書き込みました。  
両方の形式を認識する AWS DMS と、 は S3 ソースデータを作成するためのオペレーション列の書き込み方法に関係なく、オペレーションを処理できます。このアプローチでは、後の移行のソースとして S3 ターゲットデータを使用できます このアプローチでは、後の S3 ソースのオペレーション列に表示されるキーワードの初期値の形式を変更する必要はありません。
+ テーブル名 - ソーステーブルの名前。
+ スキーマ名 - ソーススキーマの名前。
+ データ - 変更するデータを表す 1 つまたは複数の列。

`employee` という名前のテーブルの CDC ファイルの例を次に示します。

```
INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York
UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles
UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
```

## のソースとして Amazon S3 を使用する場合の前提条件 AWS DMS
<a name="CHAP_Source.S3.Prerequisites"></a>

Amazon S3 を のソースとして使用するには AWS DMS、ソース S3 バケットがデータを移行する DMS レプリケーションインスタンスと同じ AWS リージョンにある必要があります。また、移行に使用する AWS アカウントには、ソースバケットへの読み取りアクセスも必要です。 AWS DMS バージョン 3.4.7 以降では、DMS は VPC エンドポイントまたはパブリックルートを介してソースバケットにアクセスする必要があります。VPC エンドポイントの詳細については、「[の VPC エンドポイントの設定 AWS DMS](CHAP_VPC_Endpoints.md)」を参照してください。

移行タスクの作成に使用されるユーザーアカウントに割り当てられた AWS Identity and Access Management (IAM) ロールには、次のアクセス許可のセットが必要です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

移行タスクの作成に使用されるユーザーアカウントに割り当てられた AWS Identity and Access Management (IAM) ロールには、Amazon S3 バケットでバージョニングが有効になっている場合、次のアクセス許可のセットが必要です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

## のソースとして Amazon S3 を使用する場合の制限 AWS DMS
<a name="CHAP_Source.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 以降でサポートされます。
+ MySQL は `time` データ型を `string` に変換します。MySQL で `time` データ型値を表示するには、ターゲットテーブルの列を `string` として定義し、タスクの**[ターゲットテーブル準備モード]** 設定を **[切り捨て]** に設定します。
+ AWS DMS は、 `BYTE`と `BYTE` データ型の両方のデータに内部的に `BYTES` データ型を使用します。
+ S3 ソースエンドポイントは、DMS テーブルの再ロード機能をサポートしていません。
+ AWS DMS はAmazon S3とするフル LOB モードをサポートしていません。

Amazon S3 で Parquet 形式のファイルをソースとして使用する場合、次の制限が適用されます。
+ `MMYYYYDD` または `DDMMYYYY` 形式の日付は、S3 Parquet ソースの日付パーティション分割機能ではサポートされていません。

## のソースとしての Amazon S3 のエンドポイント設定 AWS DMS
<a name="CHAP_Source.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)、ソースエンドポイントを作成するときに設定を指定します。

**注記**  
AWS DMS は、SSL モードや証明書を指定することなく、Amazon S3 エンドポイントへの安全な接続をデフォルトにします。

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


| **オプション** | **説明** | 
| --- | --- | 
| BucketFolder |  (オプション) S3 バケットのフォルダ名。この属性を指定すると、ソースデータ ファイルおよび CDC ファイルがそれぞれパス `s3://amzn-s3-demo-bucket/bucketFolder/schemaName/tableName/` と `s3://amzn-s3-demo-bucket/bucketFolder/` から読み取られます。この属性が指定されない場合、使用されるパスは `schemaName/tableName/` となります。 `'{"BucketFolder": "sourceData"}'`  | 
| BucketName |  S3 バケットの名前。 `'{"BucketName": "amzn-s3-demo-bucket"}'`  | 
| CdcPath | CDC ファイルの場所。タスクで変更データをキャプチャする場合、この属性が必須です。それ以外の場合はオプションです。が存在する場合、 CdcPathはこのパスから CDC ファイルを AWS DMS 読み取り、データ変更をターゲットエンドポイントにレプリケートします。詳細については、「[のソースとしての Amazon S3 での CDC の使用 AWS DMS](#CHAP_Source.S3.CDC)」を参照してください。`'{"CdcPath": "changeData"}'`  | 
| CsvDelimiter |  ソースファイル内の列を分離するために使用される区切り文字。デフォルトではカンマを使用します。以下に例を示します。 `'{"CsvDelimiter": ","}'`  | 
| CsvNullValue |  ソースから読み取るときに null として AWS DMS 扱うユーザー定義の文字列。デフォルトは空の文字列です。このパラメータを設定しない場合、 は空の文字列を null 値として AWS DMS 扱います。このパラメータを「\$1N」などの文字列に設定すると、 はこの文字列を null 値として AWS DMS 扱い、空の文字列を空の文字列値として扱います。  | 
| CsvRowDelimiter |  ソースファイル内の行を分離するために使用される区切り文字。デフォルトでは、改行 (`\n`) です。 `'{"CsvRowDelimiter": "\n"}'`  | 
| DataFormat |  Parquet 形式のデータを読み取るには、この値を `Parquet` に設定します。 `'{"DataFormat": "Parquet"}'`  | 
| IgnoreHeaderRows |  この値を 1 に設定すると、 は .csv ファイルの最初の行ヘッダー AWS DMS を無視します。値が 1 の場合は機能が有効になり、値が 0 の場合は機能が無効になります。 デフォルトは 0 です。 `'{"IgnoreHeaderRows": 1}'`  | 
| Rfc4180 |  この値を `true` または `y` に設定するときは、先頭の二重引用符にはそれぞれ終了の二重引用符が続く必要があります。このフォーマットは、RFC 4180 に準拠しています。この値を `false` または `n` に設定すると、文字列リテラルはターゲットにそのままコピーされます。この場合、区切り文字 (行または列) はフィールドの末尾を表します。したがって、区切り文字は値の末尾を示すため、これを文字列の一部とすることはできません。 デフォルトは `true` です。 有効な値: `true`、`false`、`y`、`n` `'{"Rfc4180": false}'`  | 

## Amazon S3 のソースデータ型
<a name="CHAP_Source.S3.DataTypes"></a>

のソースとして Amazon S3 を使用するデータ移行では、Amazon S3 から AWS DMS データ型にデータをマッピング AWS DMS する必要があります。詳細については、「[Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)」を参照してください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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

次の AWS DMS データ型はAmazon S3をソースとして使用します。
+ BYTE - `ColumnLength` が必要です。詳細については、「[Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)」を参照してください。
+ DATE
+ TIME
+ DATETIME – 詳細と例については、「[Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)」の DATETIME 型の例を参照。
+ INT1
+ INT2
+ INT4
+ INT8
+ NUMERIC – `ColumnPrecision`と が必要です`ColumnScale`。 は次の最大値 AWS DMS をサポートします。
  + **ColumnPrecision: 38**
  + **ColumnScale: 31**

  詳細と例については、「[Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)」の NUMERIC 型の例を参照。
+ REAL4
+ REAL8
+ STRING - `ColumnLength` が必要です。詳細については、「[Amazon S3 の外部テーブルを のソースとして定義する AWS DMS](#CHAP_Source.S3.ExternalTableDef)」をご参照ください。
+ UINT1
+ UINT2
+ UINT4
+ UINT8
+ BLOB
+ CLOB
+ BOOLEAN

## Amazon S3 の Parquet 形式のファイルを のソースとして使用する AWS DMS
<a name="CHAP_Source.S3.Parquet"></a>

 AWS DMS バージョン 3.5.3 以降では、S3 バケットの Parquet 形式のファイルをフルロードレプリケーションと CDC レプリケーションの両方のソースとして使用できます。

DMS は、データを S3 ターゲットエンドポイントに移行することで DMS が生成するソースとして Parquet 形式のファイルのみをサポートしています。ファイル名はサポートされている形式である必要があります。そうでない場合、DMS は移行に含めません。

Parquet 形式のソースデータファイルは、次のフォルダと命名規則に従っている必要があります。

```
schema/table1/LOAD00001.parquet
schema/table2/LOAD00002.parquet
schema/table2/LOAD00003.parquet
```

Parquet 形式の CDC データのソースデータファイルの場合、次のフォルダと命名規則を使用して、名前を付けて保存します。

```
schema/table/20230405-094615814.parquet
schema/table/20230405-094615853.parquet
schema/table/20230405-094615922.parquet
```

Parquet 形式のファイルにアクセスするには、次のエンドポイント設定を設定します。
+ `DataFormat` を `Parquet` に設定します。
+ `cdcPath` 設定は設定しないでください。指定されたスキーマ / テーブルフォルダで Parquet 形式のファイルを作成してください。

S3 エンドポイント設定の詳細については、「*AWS Database Migration Service API リファレンス*」の「[S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html)」を参照してください。

### Parquet 形式のファイルでサポートされているデータ型
<a name="CHAP_Source.S3.Parquet.Datatypes"></a>

AWS DMS は、Parquet 形式のファイルからデータを移行するときに、次のソースデータ型とターゲットデータ型をサポートします。移行する前に、ターゲットテーブルに正しいデータ型の列があることを確認します。


| ソースデータ型 | ターゲットのデータ型 | 
| --- | --- | 
| BYTE | 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 | UINT | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# IBM Db2 for Linux、Unix、Windows、Amazon RDS データベース (Db2 LUW) を のソースとして使用する AWS DMS
<a name="CHAP_Source.DB2"></a>

 AWS Database Migration Service () を使用して、IBM Db2 for Linux、Unix、Windows、Amazon RDS (Db2 LUW) データベースからサポートされている任意のターゲットデータベースにデータを移行できますAWS DMS。

がソースとして AWS DMS サポートする Linux、Unix、Windows、RDS での Db2 のバージョンについては、「」を参照してください[のソース AWS DMS](CHAP_Introduction.Sources.md)。

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

は、IBM Db2 ソースデータベースからデータ AWS DMS を読み取るときに、Db2 バージョン 9.7 以降のデフォルトの分離レベル CURSOR STABILITY (CS) を使用します。詳細については、「[IBM Db2 for Linux, UNIX and Windows](https://www.ibm.com/docs/en/db2/12.1.0)」のドキュメントを参照してください。

## のソースとして Db2 LUW を使用する場合の前提条件 AWS DMS
<a name="CHAP_Source.DB2.Prerequisites"></a>

Db2 LUW データベースをソースとして使用する前に、次の前提条件が必要です。

変更データキャプチャ (CDC) とも呼ばれる継続的なレプリケーションを有効にするには、次を実行します。
+ データベースを復旧可能に設定すると、 は変更をキャプチャ AWS DMS する必要があります。データベース設定パラメータの `LOGARCHMETH1` と `LOGARCHMETH2` のどちらかまたは両方が `ON` に設定されている場合、データベースは復元可能です。

  データベースが復旧可能な場合、 AWS DMS は`ARCHIVE LOG`必要に応じて Db2 にアクセスできます。
+ DB2 トランザクションログが使用可能であり、処理に十分な保持期間があることを確認します AWS DMS。
+ DB2 ではトランザクションログレコードを抽出するのに `SYSADM` 認証または `DBADM` 認証が必要です。ユーザーアカウントに次のアクセス権限を付与します。
  + `SYSADM`、または `DBADM`
  + `DATAACCESS`
**注記**  
フルロードのみのタスクの場合、DMS ユーザーアカウントには DATAACCESS アクセス権限が必要です。
+ ソースとして IBM DB2 for LUW バージョン 9.7 を使用する場合は、追加接続属性 (ECA) を設定し、以下のように `CurrentLsn` に設定します：

  `CurrentLsn=LSN`、ここに `LSN` は、レプリケーションをスタートするログ シーケンス番号 (LSN) を指定します。または、`CurrentLsn=scan`。
+ Amazon RDS for Db2 LUW をソースとして使用する場合は、アーカイブログが使用可能であることを確認します AWS DMS。マネージド AWS Db2 データベースはアーカイブログをできるだけ早く消去するため、ログが利用可能なままになる時間を増やす必要があります。例えば、ログ保持を 24 時間に伸ばすには、次のコマンドを実行します。

  ```
  db2 "call rdsadmin.set_archive_log_retention( ?, 'TESTDB', '24')"
  ```

  Amazon RDS for Db2 LUW プロシージャの詳細については、「*Amazon Relational Database Service ユーザーガイド*」の「[Amazon RDS for Db2 ストアドプロシージャリファレンス](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-stored-procedures.html)」を参照してください。
+ DB2 固有の移行前評価を使用する場合、次の権限を付与します。

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBM.SYSDUMMY1 TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.ENV_INST_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.SCHEMATA TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.COLUMNS TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.TABLES TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO <DMS_USER>;
  GRANT EXECUTE ON PACKAGE NULLID.SYSSH200 TO USER <DMS_USER>;
  ```

## のソースとして Db2 LUW を使用する場合の制限 AWS DMS
<a name="CHAP_Source.DB2.Limitations"></a>

AWS DMS は、クラスター化されたデータベースをサポートしていません。ただし、クラスターの各エンドポイントに個別の Db2 LUW を定義することができます。例えば、クラスター内のいずれかのノードでフルロードの移行タスクを作成して、各ノードから個別のタスクを作成できます。

AWS DMS は、ソース Db2 LUW データベース`BOOLEAN`のデータ型をサポートしていません。

継続的なレプリケーション (CDC) を使用する場合は、次の制限が適用されます。
+ 複数のパーティションを持つテーブルが切り捨てられると、 AWS DMS コンソールに表示される DDL イベントの数はパーティションの数と等しくなります。これは、Db2 LUW がパーティションごとに個別の DDL を記録するためです。
+ 次の DDL アクションは、分割されたテーブルではサポート外です。
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DETACH PARTITION
  + ALTER TABLE ATTACH PARTITION
+ AWS DMS は、DB2 高可用性ディザスタリカバリ (HADR) スタンバイインスタンスからの継続的なレプリケーション移行をサポートしていません。スタンバイはアクセスできません。
+ DECFLOAT データ型はサポート外です。したがって、DECFLOAT 列への変更は、継続的なレプリケーション中は無視されます。
+ RENAME COLUMN ステートメントはサポート外です。
+ マルチディメンションクラスタリング (MDC) テーブルの更新を実行すると、各更新は INSERT \$1 DELETE として AWS DMS コンソールに表示されます。
+ タスクの設定 [**レプリケーションに LOB 列を含める**] が有効でない場合、LOB 列を持つテーブルは、継続的なレプリケーション中に中断されます。
+ Db2 LUW バージョン 10.5 以上の場合: 行外に格納されたデータを含む可変長文字列は無視されます。この制限は、VARCHAR や VARGRAPHIC などのデータ型を持つ列の拡張行サイズを使用して作成されたテーブルにのみ適用されます。この制限を回避するには、テーブルをページサイズの大きいテーブルスペースに移動します。詳細については、「[What can I do if I want to change the pagesize of DB2 tablespaces]( https://www.ibm.com/support/pages/what-can-i-do-if-i-want-change-pagesize-db2-tablespaces )」を参照してください。
+ 継続的レプリケーションの場合、DMS は DB2 LOAD ユーティリティによってページレベルでロードされたデータの移行をサポートしていません。代わりに、SQL 挿入を使用する IMPORT ユーティリティを使用します。詳細については、「[インポートユーティリティとロードユーティリティの違い]( https://www.ibm.com/docs/en/db2/11.1?topic=utilities-differences-between-import-load-utility)」をご参照ください。
+ レプリケーションタスクの実行中、DMS が CREATE TABLE DDL をキャプチャするのは、テーブルが DATA CAPTURE CHANGE 属性で作成された場合のみです。
+ Db2 データベースパーティション機能 (DPF) を使用する場合、DMS には次の制限があります。
  + DMS は、DPF 環境内の Db2 ノード間でトランザクションを調整できません。これは、IBM DB2READLOG API インターフェイス内の制約によるものです。DPF では、DB2 のデータのパーティション化の方法に応じて、トランザクションが複数の Db2 ノードにまたがる場合があります。その結果、DMS ソリューションは各 Db2 ノードからトランザクションを個別にキャプチャする必要があります。
  + DMS は、複数の DMS ソースエンドポイントで `connectNode` を `1` に設定することで、DPF クラスターの各 Db2 ノードからローカルトランザクションをキャプチャできます。この設定は、DB2 サーバー設定ファイル `db2nodes.cfg` で定義されている論理ノード番号に対応します。
  + 個々の Db2 ノードのローカルトランザクションは、大規模なグローバルトランザクションの一部である場合があります。DMS は、他の Db2 ノードのトランザクションと調整することなく、各ローカルトランザクションを個別にターゲットに適用します。この独立した処理は、特にパーティション間で行を移動する場合に複雑になる可能性があります。
  + DMS が複数の Db2 ノードからレプリケートする場合、DMS は各 Db2 ノードに独立してオペレーションを適用するため、ターゲットにおいて正しいオペレーション順序は保証されません。各 Db2 ノードから独立してローカルトランザクションをキャプチャすることが、特定のユースケースで機能することを確認する必要があります。
  + DPF 環境から移行する場合は、まずキャッシュされたイベントなしでフルロードタスクを実行し、次に CDC のみのタスクを実行することをお勧めします。`StartFromContext` エンドポイントの追加接続属性を使用して設定した全ロード開始タイムスタンプまたは LRI (ログレコード識別子) から、Db2 ノードごとに 1 つのタスクを実行することをお勧めします。レプリケーション開始点の決定については、「*IBM Support documentation*」の「[Finding the LSN or LRI value for replication start](https://www.ibm.com/support/pages/db2-finding-lsn-or-lri-value-replication-start)」を参照してください。
+ 継続的なレプリケーション (CDC) の場合、特定のタイムスタンプからレプリケーションを開始する場合は、`StartFromContext`追加の接続属性を必要なタイムスタンプに設定する必要があります。
+ データベースソリューションのスケーリングに使用できる DB2 LUW の拡張機能である Db2 PureScale 機能は、DMS では現時点ではサポートしていません。
+ `DATA CAPTURE CHANGES` テーブルオプションは、DB2 データレプリケーションプロセスの重要な前提条件です。テーブルの作成時にこのオプションを有効にすると、特に CDC (変更データキャプチャ) のみのレプリケーションタスクでは、データが欠落する可能性があります。 AWS DMS は、CDC または FULL\$1CDC タスクを再起動するときに、デフォルトでこの属性を有効にします。ただし、タスクの再起動前にソースデータベースに加えられた変更は失われる可能性があります。

  ```
  ALTER TABLE TABLE_SCHEMA.TABLE_NAME DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
  ```

## のソースとして Db2 LUW を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.DB2.ConnectionSettings"></a>

 AWS DMS コンソールを使用してソースエンドポイントを作成するとき、または で `create-endpoint` コマンドを使用して[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)、

`--ibm-db2-settings '{"EndpointSetting1": "value1","EndpointSetting2": "value2"}'`

JSON 構文。

次の表は、ソースとして Db2 LUW を使用できるエンドポイント設定を説明しています。


| 名前の設定 | 説明 | 
| --- | --- | 
|  `CurrentLsn`  |  継続的なレプリケーション (CDC) では、`CurrentLsn` を使用してレプリケーションを開始するログシーケンス番号 (LSN) を指定します。  | 
|  `MaxKBytesPerRead`  |  読み取りあたりの最大バイト数。NUMBER 値です。デフォルトは 64 KB です。  | 
|  `SetDataCaptureChanges`  |  継続的なレプリケーション (CDC) を BOOLEAN 値として有効にします。デフォルトは True です。  | 

## のソースとして Db2 LUW を使用する場合の追加の接続属性 (ECAs) AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

追加の接続属性 (ECAs) は、 AWS DMS コンソールを使用してソースエンドポイントを作成するとき、または で `create-endpoint` コマンドを使用して[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)、

`--extra-connection-attributes 'ECAname1=value1;ECAname2=value2;'`

次の表は、Db2 LUW をソースとして使用できる ECAs を示しています。


| 属性名 | 説明 | 
| --- | --- | 
|  `ConnectionTimeout`  |  この ECA を使用して、Db2 LUW エンドポイントのエンドポイント接続タイムアウトを秒単位で設定します。デフォルト値は 10 秒です。 例: `ConnectionTimeout=30;`  | 
|  `executeTimeout`  |  DB2 LUW エンドポイントのステートメント (クエリ) タイムアウトを秒単位で設定する追加の接続属性。デフォルト値は 60 秒です。 例: `executeTimeout=120;`  | 
|  `StartFromContext`  |  継続的レプリケーション (CDC) の場合は、`StartFromContext` を使用して、レプリケーションのスタート位置からログの下限を指定します。`StartFromContext` は異なる形式の値を受け入れます。有効な値を次に示します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.DB2.html) ログファイルの LRI/LSN 範囲を特定するには、次の例に示すように `db2flsn` コマンドを実行します。 <pre>db2flsn -db SAMPLE -lrirange 2</pre> この例の出力は次のようになります。 <pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre> その出力では、ログファイルは S0000002.LOG であり、**StartFromContext** LRI 値は、範囲の末尾にある 34 バイトです。 <pre>0100000000000022CC000000000004FB13</pre>  | 

## IBM Db2 LUW のソースデータ型
<a name="CHAP_Source.DB2.DataTypes"></a>

のソースとして Db2 LUW を使用するデータ移行は、ほとんどの Db2 LUW データ型 AWS DMS をサポートします。次の表は、 の使用時にサポートされる Db2 LUW ソースデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示しています。Db2 LUW データ型の詳細については、「[Db2 LUW のドキュメント](https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008483.html)」をご参照ください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  Db2 LUW データ型  |  AWS DMS データ型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s)  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  精度が 16 の場合は REAL8 で、精度が 34 の場合は STRING  | 
|  GRAPHIC (n)  |  WSTRING、長さが 0 より大きく 127 以下の 2 バイト文字の固定長グラフィック文字列用  | 
|  VARGRAPHIC (n)  |  WSTRING、長さが 0 より大きく 16,352 以下の 2 バイト文字の可変長グラフィック文字列用  | 
|  LONG VARGRAPHIC (n)  |  CLOB、長さが 0 より大きく 16,352 以下の 2 バイト文字の可変長グラフィック文字列用  | 
|  CHARACTER (n)  |  STRING、長さが 0 より大きく 255 以下の 2 バイト文字の固定長文字列用  | 
|  VARCHAR(n)  |  STRING、長さが 0 より大きく 32,704 以下の 2 バイト文字の可変長文字列用  | 
|  LONG VARCHAR (n)  |  CLOB、長さが 0 より大きく 32,704 以下の 2 バイト文字の可変長文字列用  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  タイムスタンプ  |  DATETIME  | 
|  BLOB (n)  |  BLOB 最大長は 2,147,483,647 バイト  | 
|  CLOB (n)  |  CLOB 最大長は 2,147,483,647 バイト  | 
|  DBCLOB (n)  |  CLOB 最大サイズは 1,073,741,824 の 2 バイト文字  | 
|  XML  |  CLOB  | 

# IBM Db2 for z/OS データベースを のソースとして使用する AWS DMS
<a name="CHAP_Source.DB2zOS"></a>

 AWS Database Migration Service (AWS DMS) を使用して、IBM for z/OS データベースから、サポートされているすべてのターゲットデータベースにデータを移行できます。

がソースとして AWS DMS サポートする Db2 for z/OS のバージョンについては、「」を参照してください[のソース AWS DMS](CHAP_Introduction.Sources.md)。

## のソースとして Db2 for z/OS を使用する場合の前提条件 AWS DMS
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

で IBM Db2 for z/OS データベースをソースとして使用するには AWS DMS、ソースエンドポイント接続設定で指定された Db2 for z/OS ユーザーに次の権限を付与します。

```
GRANT SELECT ON SYSIBM.SYSTABLES TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLESPACE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLEPART TO Db2USER;                    
GRANT SELECT ON SYSIBM.SYSCOLUMNS TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDATABASE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDUMMY1 TO Db2USER
```

`user defined` ソーステーブルでの SELECT ON 権限も付与します。

 AWS DMS IBM Db2 for z/OS ソースエンドポイントは、データにアクセスするために ODBC 用の IBM データサーバードライバーに依存しています。DMS がこのエンドポイントに接続するには、データベースサーバーに有効な IBM ODBC Connect ライセンスが必要です。

## のソースとして Db2 for z/OS を使用する場合の制限 AWS DMS
<a name="CHAP_Source.DB2zOS.Limitations"></a>

IBM Db2 for z/OS データベースを AWS DMSのソースとして使用する場合、以下の制限が適用されます。
+ サポートされるのは、フルロードのレプリケーションタスクのみです。変更データキャプチャ (CDC) はサポートされません。
+ 並列ロードはサポートされません。
+ ビューのデータ検証はサポートされません。
+ 列またはテーブルレベルの変換と行レベルの選択フィルターでは、テーブルマッピングでスキーマ、テーブル、列の名前を大文字で指定する必要があります。

## ソースの IBM Db2 for z/OS のデータ型
<a name="CHAP_Source.DB2zOS.DataTypes"></a>

のソースとして Db2 for z/OS を使用するデータ移行は、ほとんどの Db2 for z/OS データ型 AWS DMS をサポートします。次の表は、 の使用時にサポートされる Db2 for z/OS ソースデータ型と AWS DMS、 AWS DMS データ型からのデフォルトのマッピングを示しています。

Db2 for z/OS のデータ型の詳細については、「[IBM Db2 for z/OS のドキュメント](https://www.ibm.com/docs/en/db2-for-zos/12?topic=elements-data-types)」を参照してください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

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


|  Db2 for z/OS のデータ型  |  AWS DMS データ型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s) DB2 の設定で小数点がカンマ (,) に設定されている場合は、DB2 設定をサポートするように Replicate を設定する。  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  精度が 16 の場合は REAL8 で、精度が 34 の場合は STRING  | 
|  GRAPHIC (n)  |  n>=127 の場合は WSTRING、長さが 0 より大きく 127 以下の 2 バイト文字の固定長グラフィック文字列用  | 
|  VARGRAPHIC (n)  |  WSTRING、長さが 0 より大きく 16,352 以下の 2 バイト文字の可変長グラフィック文字列用  | 
|  LONG VARGRAPHIC (n)  |  CLOB、長さが 0 より大きく 16,352 以下の 2 バイト文字の可変長グラフィック文字列用  | 
|  CHARACTER (n)  |  STRING、長さが 0 より大きく 255 以下の 2 バイト文字の固定長文字列用  | 
|  VARCHAR(n)  |  STRING、長さが 0 より大きく 32,704 以下の 2 バイト文字の可変長文字列用  | 
|  LONG VARCHAR (n)  |  CLOB、長さが 0 より大きく 32,704 以下の 2 バイト文字の可変長文字列用  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  タイムスタンプ  |  DATETIME  | 
|  BLOB (n)  |  BLOB 最大長は 2,147,483,647 バイト  | 
|  CLOB (n)  |  CLOB 最大長は 2,147,483,647 バイト  | 
|  DBCLOB (n)  |  CLOB 最大サイズは 1,073,741,824 の 2 バイト文字  | 
|  XML  |  CLOB  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  ROWID  |  BYTES ROWID の使用方法の詳細については、次を参照。  | 
|  TIMESTAMP WITH TIME ZONE  |  サポート外。  | 

タスクのターゲットテーブル準備モードが DROP\$1AND\$1CREATE (デフォルト) に設定されている場合、ROWID 列はデフォルトで移行されます。特定のデータベースやテーブル以外では意味をなさないため、このような列はデータ検証では無視されます。このような列の移行を無効にするには、次のいずれかの準備ステップで実行できます。
+ このような列を含まないターゲットテーブルを事前に作成します。次に、タスクのターゲットテーブル準備モードを DO\$1NOTHING または TRUNCATE\$1BEFORE\$1LOAD のいずれかに設定します。 AWS Schema Conversion Tool (AWS SCT) を使用して、列なしでターゲットテーブルを事前に作成できます。
+ このような列を除外して無視するテーブルマッピングルールをタスクに追加します。詳細については、「[変換ルールおよび変換アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)」を参照してください。

## PostgreSQL for AWS Mainframe Modernization サービスの EBCDIC 照合順序
<a name="CHAP_Source.DB2zOS.EBCDIC"></a>

AWS Mainframe Modernization プログラムは、メインフレームアプリケーションを AWS マネージドランタイム環境にモダナイズするのに役立ちます。このサービスでは、移行とモダナイゼーションの計画と実装に役立つツールとリソースを提供しています。メインフレームのモダナイゼーションと移行の詳細については、[「 Mainframe Modernization with AWS](https://aws.amazon.com/mainframe/)」を参照してください。

IBM Db2 for z/OS のデータセットによっては、Extended Binary Coded Decimal Interchange (EBCDIC) 文字セットでエンコードされています。これは ASCII (米国情報交換標準コード) が一般的に使用されるようになる以前に開発された文字セットです。**コードページを使用して、テキストの各文字を文字セット内の文字にマップします。従来のコードページには、コードポイントと文字 ID の間のマッピング情報が含まれています。**文字 ID は 8 バイトの文字データ文字列です。**コードポイントは文字を表す 8 ビットの 2 進数です。コードポイントは通常、2 進値の 16 進数表現として示されます。

現在 Mainframe Modernization サービスの Micro Focus または BluAge コンポーネントを使用している場合は、特定のコードポイントを*シフト* (翻訳) AWS DMS するように に指示する必要があります。 AWS DMS タスク設定を使用してシフトを実行できます。次の例は、 オペレーションを使用して AWS DMS `CharacterSetSettings` DMS タスク設定のシフトをマッピングする方法を示しています。

```
"CharacterSetSettings": {
        "CharacterSetSupport": null,
        "CharacterReplacements": [
{"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
            }
        ]
    }
```

必要なシフトを認識するためのいくつかの EBCDIC 照合順序が PostgreSQL 向けに既に提供されています。複数の異なるコードページがサポートされています。次のセクションでは、サポートされているすべてのコードページで変更する必要がある点の JSON サンプルを提供しています。DMS タスクに必要となる JSON コードをコピーして貼り付けるだけです。

### Micro Focus 専用 EBCDIC 照合順序
<a name="CHAP_Source.DB2zOS.EBCDIC.MicroFocus"></a>

Micro Focus では、必要に応じて文字のサブセットを次の照合順序にシフトします。

```
 da-DK-cp1142m-x-icu
 de-DE-cp1141m-x-icu
 en-GB-cp1146m-x-icu
 en-US-cp1140m-x-icu
 es-ES-cp1145m-x-icu
 fi-FI-cp1143m-x-icu
 fr-FR-cp1147m-x-icu
 it-IT-cp1144m-x-icu
 nl-BE-cp1148m-x-icu
```

**Example Micro Focus のデータは次のとおり照合ごとにシフトします。**  
**en\$1us\$1cp1140m**  
コードシフト:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1141m**  
コードシフト:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1142m**  
コードシフト:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1143m**  
コードシフト:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1144m**  
コードシフト:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1145m**  
コードシフト:  

```
0000    0180
00A6    0160
00B8    0161
00A8    017D
00BC    017E
00BD    0152
00BE    0153
00B4    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1146m**  
コードシフト:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1147m**  
コードシフト:  

```
0000    0180
00B8    0160
00A8    0161
00BC    017D
00BD    017E
00BE    0152
00B4    0153
00A6    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1148m**  
コードシフト:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```

### BluAge 専用 EBCDIC 照合順序
<a name="CHAP_Source.DB2zOS.EBCDIC.BluAge"></a>

BluAge の場合、必要に応じて**低い値と**高い値をすべてシフトします。この照合順序の使用は、Mainframe Migration の BluAge サービスをサポートする目的に限定されます。

```
da-DK-cp1142b-x-icu
 da-DK-cp277b-x-icu
 de-DE-cp1141b-x-icu
 de-DE-cp273b-x-icu
 en-GB-cp1146b-x-icu
 en-GB-cp285b-x-icu
 en-US-cp037b-x-icu
 en-US-cp1140b-x-icu
 es-ES-cp1145b-x-icu
 es-ES-cp284b-x-icu
 fi-FI-cp1143b-x-icu
 fi-FI-cp278b-x-icu 
 fr-FR-cp1147b-x-icu
 fr-FR-cp297b-x-icu
 it-IT-cp1144b-x-icu
 it-IT-cp280b-x-icu
 nl-BE-cp1148b-x-icu
 nl-BE-cp500b-x-icu
```

**Example BluAge データシフト:**  
**da-DK-cp277b** と **da-DK-cp1142b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**de-DE-273b** と **de-DE-1141b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-GB-285b** と **en-GB-1146b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-us-037b** と **en-us-1140b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**es-ES-284b** と **es-ES-1145b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fi\$1FI-278b** と **fi-FI-1143b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fr-FR-297b** と **fr-FR-1147b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**it-IT-280b** と **it-IT-1144b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**nl-BE-500b** と **nl-BE-1148b**  
コードシフト:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS タスクに対応する入力マッピング:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```

# 「データ移行のターゲット」
<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) です。  | 

# の VPC エンドポイントの設定 AWS DMS
<a name="CHAP_VPC_Endpoints"></a>

AWS DMS は、ソースとターゲットとして Amazon Virtual Private Cloud (VPC) エンドポイントをサポートします。 AWS DMS は、これらの AWS ソースデータベースとターゲットデータベースへの明示的に定義されたルートが VPC で定義されている限り、Amazon VPC エンドポイントを使用して任意のソースデータベースまたはターゲットデータベースに接続できます AWS DMS 。

Amazon VPC エンドポイントをサポートすることで、 AWS DMS はネットワーク設定やセットアップを追加することなく、すべてのレプリケーションタスクのend-to-endのネットワークセキュリティを簡単に維持できます。すべてのソースエンドポイントとターゲットエンドポイントに VPC エンドポイントを使用すると、すべてのトラフィックを確実に VPC 内に維持し、コントロールできます。

プライベートサブネットまたは AWS DMS サーバーレス AWS DMS レプリケーションで作成されたレプリケーションインスタンスを AWS マネージドデータベースに接続するには、Amazon VPC エンドポイントを設定する必要があります。
+ Amazon S3
+ Amazon DynamoDB
+ Amazon Kinesis
+ Amazon Redshift
+ Amazon OpenSearch Service

 AWS Secrets Manager を使用して DMS が使用する接続認証情報を保存する場合は、VPC エンドポイントも設定する必要があります。

 AWS DMS バージョン 3.4.7 以降、プライベートネットワークを使用する場合、DMS レプリケーションインスタンスまたはサーバーレスレプリケーションと上記の Amazon サービス間の接続を確立するには、VPC エンドポイントが必要です。

## 一般的な AWS DMS 前提条件
<a name="CHAP_VPC_Endpoints.prereq"></a>

VPC エンドポイントを設定する前に、次の前提条件を満たす必要があります。
+  AWS DMS レプリケーションインスタンスまたはサーバーレスレプリケーションで使用する VPC を見つけて AWS DMS 作成します。この情報が提供されない場合、DMS はセットアップされているリージョンでデフォルトの VPC の使用を試みます。
+ VPC エンドポイントを作成する IAM アクセス許可があることを確認してください。Amazon S3 および Amazon DynamoDB に接続するには、ゲートウェイ VPC エンドポイントを作成することができます。このエンドポイントは、VPC 用のインターネットゲートウェイや NAT デバイスを設定することなく、信頼性の高い接続を提供します。ゲートウェイエンドポイントは、他のタイプの VPC エンドポイントとは異なり、 AWS PrivateLink を使用しません。詳細については、「*AWS PrivateLink ガイド*」の「[ゲートウェイエンドポイント](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)」を参照してください。
+ IAM アクセス許可を設定して DMS を使用するには:
  + `dms-vpc-role` ロールを設定する。詳細については、「[AWS 管理ポリシー: AmazonDMSVPCManagementRole](https://docs.aws.amazon.com/dms/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonDMSVPCManagementRole)」を参照してください。
  + `dms-cloudwatch-logs-role` ロールを設定する。詳細については、「[AWS 管理ポリシー: AmazonDMSCloudWatchLogsRole](https://docs.aws.amazon.com/dms/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonDMSCloudWatchLogsRole)」を参照してください。
  + AWS DMS Serverless では、サービスにリンクされたロール (SLR) がアカウントに存在する必要があります。 はこのロールの作成と使用 AWS DMS を管理します。必要な SLR があることを確認する方法の詳細については、「[サービスがリンク済みの AWS DMS Serverless 用ロール](https://docs.aws.amazon.com/dms/latest/userguide/slr-services-sl.html)」を参照してください。レプリケーションを作成すると、 AWS DMS Serverless はプログラムで Serverless サービスにリンクされたロールを作成します。このロールは IAM コンソールで確認できます。

## AWS Secrets Manager を使用して Amazon VPC エンドポイントを設定する
<a name="CHAP_VPC_Endpoints.vpcforsecrets"></a>

 AWS Secrets Manager が動作するように Amazon VPC エンドポイントを設定できます AWS DMS。このエンドポイントを作成することで、プライベートサブネットの AWS DMS レプリケーションインスタンスまたはサーバーレスレプリケーション設定を有効にして、パブリックインターネットアクセスを必要とせずに Secrets Manager に保存されているデータベース認証情報に安全にアクセスできます。

**前提条件**

で AWS Secrets Manager を使用して VPC エンドポイントを設定する前に AWS DMS、次の前提条件を満たす必要があります。
+ 必ずすべての [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq) を設定してください。
+ 接続する[ソース](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html)データベースまたは[ターゲット](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)データベースを作成して設定する。
+ ソースデータベースとターゲットデータベースにアクセスするための認証情報を使用して AWS Secrets Manager でシークレットを作成します。シークレットは、 AWS DMS レプリケーションインスタンスまたは AWS DMS サーバーレスレプリケーションと同じリージョンに配置する必要があります。データベースタイプによっては、シークレットのスキーマが異なる場合があります。詳細については、[AWS DMS 「エンドポイントの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)」を参照してください。
**重要**  
AWS DMS レプリケーションインスタンスと AWS DMS サーバーレスレプリケーションは、Amazon RDS によって管理されるシークレットでは機能しません。これらの認証情報には、接続を確立 AWS DMS するために が必要とするホストおよびポート情報は含まれません。
+ 一部のデータベース (Amazon S3、Amazon Kinesis、Amazon DynamoDB、Amazon Redshift、Amazon OpenSearch Service、Amazon Neptune、Amazon Timestream など) では、DMS エンドポイントを管理する IAM アクセス許可が必要です。詳細については、[AWS DMS 「エンドポイントの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)」を参照してください。

**AWS Secrets Manager の VPC エンドポイントを作成する**

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

1. VPC コンソールのメニューバーで、レプリケーションインスタンス AWS リージョン と同じ AWS DMS を選択します。

1. VPC ナビゲーションペインで**[エンドポイント]** を選択します。

1. **[エンドポイント]** を選択して、**[エンドポイントを作成]** をクリックします。

1. VPC エンドポイントを次のように設定します。

   1. **[AWS サービス]** で **[タイプ]** を選択します。

   1. **[サービス名]** テキストボックスで **secretsmanager** を検索して、**[com.amazonaws.[リージョン].secretsmanager]** を選択します。選択したサービスの **[タイプ]** が **[インターフェイス]** であることを確認します。

   1. **[ネットワーク設定]**で、DMS レプリケーションインスタンスと同じリージョンで実行されている VPC か、サーバーレスレプリケーションを作成した VPC を選択します。

   1. **[サブネット]** セクションで、DMS が動作する希望のサブネットを選択します。プライベートサブネットのみを選択してください。プライベートサブネットは、サブネット ID で識別できます。例: `vpc-xxxxxx-subnet-private1-us-west-2a`。

      DMS レプリケーションインスタンスがパブリックアクセスなしで作成されている場合は、レプリケーションインスタンスが存在するプライベートサブネットに関連付けられたルートテーブルを選択する必要があります。
**注記**  
DMS レプリケーションサブネットグループの作成時に指定する必要があるため、必ずプライベートサブネットを書き留めておいてください。VPC エンドポイントを使用して DMS を AWS Secrets Manager に接続するには、VPC エンドポイントに指定されたサブネットが DMS レプリケーションサブネットグループのサブネットと同じである必要があります。

   1. 目的の **[セキュリティグループ]** を選択します。セキュリティグループは、VPC のリソースからエンドポイントネットワークインターフェイスへのトラフィックを制御します。セキュリティグループを指定しない場合、デフォルトのセキュリティグループが選択されます。

1. **[ポリシー]** で **[フルアクセス]** を選択します。カスタムポリシーを使用して独自のアクセスコントロールを指定する場合は、**[カスタム]** を選択します。JSON ポリシードキュメント `dms-vpc-role` に準拠する信頼ポリシーを使用できます。詳細については、「[AWS DMSで使用するIAM ロールの作成](https://docs.aws.amazon.com/dms/latest/userguide/security-iam.html#CHAP_Security.APIRole)」を参照してください。

1. **[エンドポイントの作成]** を選択します。

   ステータスが `Available` になるまで待つ必要があります。VPC エンドポイントの ID が `vpce-xxxx` で開始されるようになりました。

VPC エンドポイントが正常に作成されました。 AWS DMS エンドポイント、DMS サブネットグループを設定する必要があります。選択した移行オプションに応じて、DMS レプリケーションインスタンスまたはサーバーレスレプリケーションを設定します。

## Amazon S3 で Amazon VPC エンドポイントを設定する
<a name="CHAP_VPC_Endpoints.vpcfors3"></a>

Amazon S3 が動作するように Amazon VPC エンドポイントを設定できます AWS DMS。このエンドポイントを作成することで、プライベートサブネットの AWS DMS レプリケーションインスタンスまたはサーバーレスレプリケーション設定を有効にして、パブリックインターネットアクセスを必要とせずに S3 バケットに保存されているデータベース認証情報に安全にアクセスできます。

**前提条件**

で Amazon S3 を使用して VPC エンドポイントを設定する前に AWS DMS、次の前提条件を満たす必要があります。
+ 必ずすべての [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq) を設定してください。
+ [ソース](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html)データベースまたは[ターゲット](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)データベースとして使用する Amazon S3 バケットを作成します AWS DMS。S3 のバージョニングは有効化しないでください。S3 のバージョニングが必要な場合は、ライフサイクルポリシーを使用して古いバージョンを積極的に削除します。削除しない場合、S3 一覧オブジェクトの呼び出しタイムアウトが原因でエンドポイント接続テストが失敗する可能性があります。
+ DMS Amazon S3 エンドポイントを管理する IAM アクセス許可を設定します。 AWS DMS コンソールを使用している場合、IAM ロールを作成するアクセス許可がある場合は、必要なアクセス許可を持つ IAM ロールを作成できます。

**Amazon S3 の VPC エンドポイントを作成する**

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

1. VPC コンソールのメニューバーで、レプリケーションインスタンス AWS リージョン と同じ AWS DMS を選択します。

1. VPC ナビゲーションペインで**[エンドポイント]** を選択します。

1. **[エンドポイント]** を選択して、**[エンドポイントを作成]** をクリックします。

1. VPC エンドポイントを次のように設定します。

   1. **[AWS サービス]** で **[タイプ]** を選択します。

   1. **[サービス名]** テキストボックスで「**s3**」を検索し、**[com.amazonaws.[リージョン].s3]** を選択します。選択したサービスの **[タイプ]** が **[ゲートウェイ]** であることを確認します。Amazon S3 および DynamoDB への接続時に、ゲートウェイ VPC エンドポイントを作成できます。ゲートウェイエンドポイントは、他のタイプの VPC エンドポイントとは異なり、 AWS PrivateLink を使用しません。

   1. **[ネットワーク設定]**で、DMS レプリケーションインスタンスと同じリージョンで実行されている VPC か、サーバーレスレプリケーションを作成した VPC を選択します。

   1. **[サブネット]** セクションで、DMS が動作する希望のサブネットを選択します。プライベートサブネットのみを選択してください。プライベートサブネットは、サブネット ID で識別できます。例: `vpc-xxxxxx-subnet-private1-us-west-2a`。
**注記**  
DMS レプリケーションインスタンスをパブリックアクセスなしで作成した場合は、DMS インスタンスと同じリージョンに存在するプライベートサブネットに関連付けられたルートテーブルを選択する必要があります。DMS レプリケーションサブネットグループの作成時に指定する必要があるため、必ずプライベートサブネットを書き留めておいてください。VPC エンドポイントを使用して DMS を Amazon S3 に接続するには、VPC エンドポイントに指定されたサブネットが DMS レプリケーションサブネットグループのサブネットと同じである必要があります。

1. **[ポリシー]** で **[フルアクセス]** を選択します。カスタムポリシーを使用して独自のアクセスコントロールを指定する場合は、**[カスタム]** を選択します。JSON ポリシードキュメント `dms-vpc-role` に準拠する信頼ポリシーを使用できます。詳細については、「[AWS DMSで使用するIAM ロールの作成](https://docs.aws.amazon.com/dms/latest/userguide/security-iam.html#CHAP_Security.APIRole)」を参照してください。

1. **[エンドポイントの作成]** を選択します。

   ステータスが `Available` になるまで待つ必要があります。VPC エンドポイントの ID が `vpce-xxxx` で開始されるようになりました。

VPC エンドポイントが正常に作成されました。 AWS DMS エンドポイント、DMS サブネットグループを設定する必要があります。選択した移行オプションに応じて、DMS レプリケーションインスタンスまたはサーバーレスレプリケーションを設定します。

## Amazon DynamoDB 向けに Amazon VPC エンドポイントを設定
<a name="CHAP_VPC_Endpoints.vpcfordynamoDB"></a>

プライベートサブネットまたは AWS DMS サーバーレス AWS DMS レプリケーションでレプリケーションインスタンスを使用する場合は、VPC エンドポイントを作成して、Amazon DynamoDB との安全な接続を確立する必要があります。VPC エンドポイント設定がないと、 は接続エラー AWS DMS を表示します。

VPC エンドポイントを作成する場合、DMS コンソールで、**[エンドポイントタイプ]** に **[ゲートウェイ]** または **[インターフェイス]** を選択する必要があります。詳細については、以下を参照してください。
+ [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq)
+ [Amazon DynamoDB のゲートウェイエンドポイント](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-ddb.html)
+ [ゲートウェイ Amazon VPC エンドポイントの接続問題をトラブルシューティングするにはどうすればよいですか?](https://repost.aws/knowledge-center/connect-s3-vpc-endpoint)

## Amazon Kinesis 向けに Amazon VPC エンドポイントを設定
<a name="CHAP_VPC_Endpoints.vpcforkinesis"></a>

プライベートサブネットまたは AWS DMS サーバーレス AWS DMS レプリケーションでレプリケーションインスタンスを使用する場合は、VPC エンドポイントを作成して、Amazon Kinesis との安全な接続を確立する必要があります。VPC エンドポイント設定がないと、 は接続エラー AWS DMS を表示します。詳細については、以下を参照してください。
+ [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq)
+ [のターゲットとしての Amazon Kinesis Data Streams の使用 AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html)

## Amazon Redshift 向けに Amazon VPC エンドポイントを設定
<a name="CHAP_VPC_Endpoints.vpcforredshift"></a>

プライベートサブネットまたは AWS DMS サーバーレス AWS DMS レプリケーションでレプリケーションインスタンスを使用する場合は、VPC エンドポイントを作成して、Amazon Redshift との安全な接続を確立する必要があります。VPC エンドポイント設定がないと、 は接続エラー AWS DMS を表示します。詳細については、以下を参照してください。
+ [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq)
+ [Redshift マネージド VPC エンドポイント](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html)

## Amazon OpenSearch Service 向けに Amazon VPC エンドポイントを設定
<a name="CHAP_VPC_Endpoints.vpcforos"></a>

プライベートサブネットまたは AWS DMS サーバーレス AWS DMS レプリケーションでレプリケーションインスタンスを使用する場合は、VPC エンドポイントを作成して、Amazon OpenSearch Service との安全な接続を確立する必要があります。VPC エンドポイント設定がないと、 は接続エラー AWS DMS を表示します。詳細については、以下を参照してください。
+ [一般的な AWS DMS 前提条件](#CHAP_VPC_Endpoints.prereq)
+ [Amazon OpenSearch Ingestion パイプラインの VPC アクセスの設定](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html)

## レプリケーションインスタンス、DMS サブネットグループ、DMS エンドポイントを設定
<a name="CHAP_VPC_Endpoints.option.123"></a>

VPC エンドポイントの作成後に AWS DMS レプリケーションリソースを設定する必要があります。ネットワーク分離用のレプリケーションサブネットグループ、処理用のレプリケーションインスタンスまたはサーバーレスレプリケーション、ソースデータベースとターゲットデータベースに接続するためのエンドポイントを設定して、VPC 内の安全なデータベース移行を実現できます。

### AWS DMS レプリケーションインスタンスのセットアップ
<a name="CHAP_VPC_Endpoints.option.123.provisioned"></a>

 AWS DMS プロビジョニングされたレプリケーションインスタンスを設定するには、DMS レプリケーションサブネットグループを設定する必要があります。

**DMS レプリケーション サブネットグループの作成**

1. にサインイン AWS マネジメントコンソール し、DMS コンソールを開きます。

1. 左側のナビゲーションペインで、**[サブネットグループ]** を開き、**[サブネットグループの作成]** を選択します。

1. **[名前]** と **[説明]** を入力します。

1. **[VPC]** ドロップダウンメニューから、DMS レプリケーションインスタンスを作成するリージョンと同じリージョンで実行されている VPC を選択します。

1. **[サブネットの追加]** ドロップダウンメニューから、VPC エンドポイントの作成時に指定したプライベートサブネットを追加します。プライベートサブネットは、サブネット ID で識別できます。例: `vpc-xxxxxx-subnet-private1-us-west-2a`。

1. **[サブネットグループの作成]** をクリックします。

**DMS レプリケーションインスタンスを作成する (プロビジョニング済み)**

1. に移動 AWS マネジメントコンソール してレプリケーションインスタンスを作成します。詳細については、「[レプリケーション インスタンスの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)」をご参照ください。レプリケーションインスタンスの選択、サイズ設定、設定の詳細については、「レ[AWS DMS プリケーションインスタンスの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)」を参照してください。

1. **[接続とセキュリティ]** セクションで、**[IPv4 の仮想プライベートクラウド (VPC)]** または **[デュアルスタックモード]** から AWS DMS レプリケーションインスタンスを作成する VPC を選択します。詳細については、「[レプリケーションインスタンスのネットワークを設定する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html)」を参照してください。

1. **[レプリケーションサブネットグループ]** のドロップダウンメニューから、レプリケーションインスタンス用に作成したサブネットグループを選択します。
**注記**  
VPC エンドポイントに指定されたサブネットが、DMS レプリケーションインスタンスサブネットグループのサブネットと同じであることを確認します。VPC エンドポイントに関連付けられていないサブネットをサブネットグループから削除する必要があります。

1. **[パブリックアクセス]** チェックボックスをオフにして、パブリックアクセスを無効にします。

1. **[詳細設定]** セクションで、**[VPC セキュリティグループ]** のドロップダウンメニューから、レプリケーションインスタンスに関連付けられているすべての VPC サブネットグループを選択します。これらのグループには、VPC エンドポイントの作成時に指定したサブネットを含むサブネットグループを含める必要があります。

   サブネットグループを指定しない場合、DMS はデフォルトの **[レプリケーションサブネットグループ]** を選択します (サブネットグループが存在しない場合は作成します)。詳細については、「[AWS DMSのセキュリティグループの設定](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Advanced.Endpoints.securitygroup.html)」を参照してください。

1. レプリケーションインスタンスの設定を完了し、**[レプリケーションインスタンスの作成]** を選択します。

   ステータスが `Available` になるまで待つ必要があります。

**AWS DMS ソースエンドポイントとターゲットエンドポイントを作成する**

1. DMS コンソール にサインインします。

1. **[AWS DMS エンドポイント]** に移動し、**[エンドポイントの作成]** を選択します。

1. [ソース](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)エンドポイントと[ターゲット](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)エンドポイントを作成し、接続をテストします。

1. DMS コンソールでは、既存の IAM ロールを選択するか、新しい IAM ロールを作成して、 AWS Secrets Manager に保存されているデータベース認証情報にアクセスできます。

1. **[テストを実行]** をクリックして、DMS レプリケーションインスタンスのエンドポイント接続をテストします。レプリケーションインスタンスには、テストを実行する `Available` ステータスが必要です。

1. **[エンドポイントの作成]** を選択します。

### AWS DMS サーバーレスレプリケーションのセットアップ
<a name="CHAP_VPC_Endpoints.option.123.serverless"></a>

 AWS DMS サーバーレスレプリケーションを設定するには、DMS レプリケーションサブネットグループを設定する必要があります。

**AWS DMS ソースエンドポイントとターゲットエンドポイントを作成する**

1. DMS コンソール にサインインします。

1. **[AWS DMS エンドポイント]** に移動し、**[エンドポイントの作成]** を選択します。

1. [ソース](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)エンドポイントと[ターゲット](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)エンドポイントを作成し、接続をテストします。

1. DMS コンソールでは、既存の IAM ロールを選択するか、新しい IAM ロールを作成して、 AWS Secrets Manager に保存されているデータベース認証情報にアクセスできます。
**注記**  
 AWS DMS サーバーレスレプリケーションの場合、DMS エンドポイントの接続をテストしたり、 `TestConnection` API を使用したりすることはできません。接続テストは、DMS インスタンスとソースとターゲットデータベース間のサーバーレスレプリケーションの起動中に実行されます。詳細については、「[AWS DMS サーバーレスコンポーネント](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.Components.html)」を参照してください。

1. **[エンドポイントの作成]** を選択します。

**DMS レプリケーション サブネットグループの作成**

1. にサインイン AWS マネジメントコンソール し、DMS コンソールを開きます。

1. 左側のナビゲーションペインで、**[サブネットグループ]** を開き、**[サブネットグループの作成]** を選択します。

1. **[名前]** と **[説明]** を入力します。

1. **[VPC]** ドロップダウンメニューから、DMS サーバーレスインスタンスと同じリージョンで実行されている VPC を選択します。

1. **[サブネットの追加]** ドロップダウンメニューから、VPC エンドポイントの作成時に指定したプライベートサブネットを追加します。プライベートサブネットは、サブネット ID で識別できます。例: `vpc-xxxxxx-subnet-private1-us-west-2a`。

1. **[サブネットグループの作成]** をクリックします。

**DMS サーバーレスレプリケーションの作成**

1. DMS コンソールに移動して、サーバーレスインスタンスを作成します。詳細については、「[サーバーレスレプリケーションの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.create)」を参照してください。サーバーレスインスタンスの選択、サイズ設定、設定の詳細については、[AWS DMS 「サーバーレスの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.html)」を参照してください。

1. **接続とセキュリティ**セクションで、 AWS DMS サーバーレスインスタンス を作成する**仮想プライベートクラウド (VPC)** ドロップダウンメニューから VPC を選択します。詳細については、「[レプリケーションインスタンスのネットワークを設定する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html)」を参照してください。

1. **[サブネットグループ]** ドロップダウンメニューから、サーバーレスインスタンス用に作成したサブネットグループを選択します。
**注記**  
VPC エンドポイントに指定されたサブネットが、DMS サーバーレスインスタンスサブネットグループのサブネットと同じであることを確認します。サーバーレスインスタンスに関連付けられていないサブネットは、サブネットグループから削除する必要があります。

1. **[アベイラビリティーゾーン]** を選択します。

1. **[最大 DMS 容量ユニット (DCU)]** ドロップダウンメニューから、目的の DCU 容量を選択します。

1. **[タスクの作成]** を選択します。この操作で、ステータス `Start required` のタスクリストに表示される DMS サーバーレスレプリケーション設定が作成されます。

1. サーバーレスレプリケーションを開始するには、タスクを選択し、**[アクション]** メニューから **[開始]** を選択します。

## AWS DMS バージョン 3.4.7 以降に移行すると、誰が影響を受けますか?
<a name="CHAP_VPC_Endpoints.Users_Impacted"></a>

上記の単一または複数の AWS DMS エンドポイントを使用しており、エンドポイントがパブリックにルーティング可能ではない場合、または VPC エンドポイントがまだ関連付けられていない場合は影響を受けます。

## AWS DMS バージョン 3.4.7 以降に移行するときに影響を受けないのは誰ですか?
<a name="CHAP_VPC_Endpoints.Users_Not_Impacted"></a>

次の場合は影響を受けません。
+ 以前にリストした AWS DMS エンドポイントを 1 つ以上使用していない。
+ 上記のエンドポイントのいずれかを使用しており、エンドポイントがパブリックにルーティング可能である。
+ 上記のエンドポイントのいずれかを使用しており、VPC エンドポイントに関連付けられている。

## DMS AWS バージョン 3.4.7 以降への移行の準備
<a name="CHAP_VPC_Endpoints.User_Mitigation"></a>

前述のエンドポイントのいずれかを使用しているときに DMS タスクの失敗を防ぐには、 AWS DMS AWS をバージョン 3.4.7 以降にアップグレードする前に、次のいずれかの手順を実行します。
+ 影響を受ける DMS AWS エンドポイントをパブリックにルーティングできるようにします。たとえば、DMS レプリケーションインスタンスで既に使用されている VPC AWS にインターネットゲートウェイ (IGW) ルートを追加して、すべてのソースエンドポイントとターゲットエンドポイントをパブリックにルーティングできるようにします。
+ 次の説明のとおり、 AWS DMS が使用するすべてのソースエンドポイントとターゲットエンドポイントにアクセスする VPC エンドポイントを作成します。

DMS ソースエンドポイントとターゲットエンドポイントに使用する既存の VPC AWS エンドポイントについては、XML ポリシードキュメント に準拠する信頼ポリシーを使用していることを確認してください`dms-vpc-role`。このポリシーの詳細については、「[で使用する IAM ロールの作成 AWS DMS](security-iam.md#CHAP_Security.APIRole)」を参照してください。

上記以外には、レプリケーションインスタンスが配置された VPC に VPC エンドポイントを追加して、レプリケーションインスタンスを VPC エンドポイントとして設定する方法があります。パブリックエンドポイントなしでレプリケーションインスタンスを設定した場合、パブリックにアクセス可能な VPC エンドポイントをレプリケーションインスタンスが配置された VPC に追加すると、パブリックにアクセスできるようになります。レプリケーションインスタンスを VPC エンドポイントと明確に関連付けるための作業は特にありません。

**注記**  
サービスごとに固有の VPC エンドポイント設定がある場合があります。例えば、 AWS Secrets Managerを使用する場合、ルーティングテーブルを調整する必要は通常ありません。各サービスの具体的な要件を必ず確認します。

DMS レプリケーションインスタンスの VPC AWS エンドポイントの設定の詳細については、「」を参照してください[データベース移行のネットワーク設定](CHAP_ReplicationInstance.VPC.md#CHAP_ReplicationInstance.VPC.Configurations)。 AWS サービスにアクセスするためのインターフェイス VPC エンドポイントの作成の詳細については、*AWS 「 PrivateLink ガイド*」の[「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。VPC エンドポイント AWS の DMS リージョンの可用性については、[AWS リージョン表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)を参照してください。

# でサポートされている DDL ステートメント AWS DMS
<a name="CHAP_Introduction.SupportedDDL"></a>

データ移行プロセス中は、ソースデータベース上でデータ定義言語 (DDL) ステートメントを実行できます。これらのステートメントはレプリケーションサーバー上で、ターゲットデータベースにレプリケートされます。

サポートされている DDL ステートメントは以下のとおりです。
+ テーブルの作成
+ Drop table
+ Rename table
+ Truncate table
+ Add column
+ Drop column
+ Rename column
+ Change column data type

DMS は一部のソースエンジンタイプでサポートされている DDL ステートメントをすべてキャプチャするわけではありません。また、DMS は DDL ステートメントを特定のターゲットエンジンに適用するときに DDL ステートメントを異なる方法で処理します。特定のソースでサポートされている DDL ステートメントと、ターゲットに適用する方法の詳細については、ソースエンドポイントとターゲットエンドポイントの特定のドキュメンテーショントピックをご参照ください。

タスク設定を使用して、変更データキャプチャ (CDC) 中に DMS が DDL の動作を処理する方法を設定できます。詳細については、「[変更処理の DDL 処理のタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md)」を参照してください。

## 制約事項と考慮事項
<a name="CHAP_Introduction.SupportedDDL.Limitations"></a>

ソースデータベース内の DDL オペレーション (DDL>DML>DDL など) の高速シーケンスにより AWS DMS 、 がログを誤って解析し、データ損失や予期しない動作が発生する可能性があります。データ整合性を維持するには、 AWS DMS がターゲットに変更を適用するのを待ってから、後続のオペレーションを実行します。

例えば、変更データキャプチャ (CDC) 中に、ソーステーブルに対し、複数のテーブル名変更オペレーションを高速で実行すると、エラーがトリガーされる可能性があります。テーブルの名前を変更し、すぐに元の名前に戻した場合、 AWS DMS はテーブルがターゲットデータベースに既に存在することを報告している可能性があります。

# 高度なエンドポイント設定
<a name="CHAP_Advanced.Endpoints"></a>

 AWS Database Migration Service (AWS DMS) でエンドポイントの詳細設定を行い、移行プロセス中のソースエンドポイントとターゲットエンドポイントの動作の制御を設定できます。高度なセットアップの一環として、 AWS DMS VPC ピアリングを設定してVPCs 間の安全な通信、インバウンドトラフィックとアウトバウンドトラフィックを制御する DMS セキュリティグループ、セキュリティの追加レイヤーとしての Newtwork Access Control List (NACLs)、 AWS Secrets Manager の VPC エンドポイントを有効にできます。

これらの設定は、エンドポイントの作成時に設定することも、後で AWS DMS コンソールまたは API を使用して変更することもできます。これにより、特定のデータベースエンジンの要件とパフォーマンスのニーズに基づいて移行プロセスを微調整できます。

以下で、エンドポイント設定についてご参照ください。

**Topics**
+ [の VPC ピアリング設定 AWS DMS。](CHAP_Advanced.Endpoints.vpc.peering.md)
+ [のセキュリティグループ設定 AWS DMS](CHAP_Advanced.Endpoints.securitygroup.md)
+ [のネットワークアクセスコントロールリスト (NACL) 設定 AWS DMS](CHAP_Advanced.Ednpoints.NACL.md)
+ [AWS DMS シークレットマネージャー VPC エンドポイントの設定](CHAP_Advanced.Endpoints.secretsmanager.md)
+ [その他の考慮事項](#CHAP_secretsmanager.additionalconsiderations)

# の VPC ピアリング設定 AWS DMS。
<a name="CHAP_Advanced.Endpoints.vpc.peering"></a>

VPC ピアリングにより、2 つの VPC 間のプライベートネットワーク接続が可能になり、 AWS DMS レプリケーションインスタンスとデータベースエンドポイントが同じネットワークにあるかのように異なる VPC 間で通信できるようになります。これは、DMS レプリケーションインスタンスが 1 つの VPC に存在し、ソースデータベースまたはターゲットデータベースが別々の VPC に存在する場合に重要です。これにより、パブリックインターネットを経由することなく、直接的で安全なデータ移行が可能になります。

Amazon RDS を使用する場合は、インスタンスが異なる VPC にある場合、DMS と RDS 間の VPC ピアリングを設定する必要があります。

以下のステップを必ず実行します。

**VPC ピアリング接続の作成**

1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動します。

1. ナビゲーションペインの **[仮想プライベートクラウド]** で **[ピアリング接続]** を選択します。

1. **[ピアリング接続の作成]** をクリックします。

1. ピアリング接続を設定します。
   + 名前タグ (オプション): ピアリング接続の名前を入力します (例: `DMS-RDS-Peering`)。

     **[VPC リクエスタ]**: DMS インスタンスが含まれている VPC を選択します。
   + **[VPC アクセプタ]**: RDS インスタンスが含まれている VPC を選択します。
**注記**  
アクセプタ VPC が別の AWS アカウントに関連付けられている場合は、そのアカウントのアカウント ID と VPC ID が必要です。

1. **[ピアリング接続の作成]** をクリックします。

**VPC ピアリング接続を承認する**

1. **[ピアリング接続]** リストで、**[承認待ち]** ステータスの新しいピアリング接続を見つけます。

1. 適切なピアリング接続を選択し、**[アクション]** をクリックして **[リクエストの承諾]** を選択します。

   ピアリング接続のステータスが **[アクティブ]** に変更されます。

**ルートテーブルの更新**

VPC 間のトラフィックを有効にするには、両方の VPC のルートテーブルを更新する必要があります。DMS VPC のルートテーブルを更新するには:

1. RDS VPC の CIDR ブロックを特定します。

   1. VPC に移動し、RDS VPC を選択します。

   1. **[CIDR]** タブで IPv4 CIDR 値をコピーします。

1. リソースマップを使用して、関連する DMS ルートテーブルを特定します。

   1. VPC に移動し、DMS VPC を選択します。

   1. **[リソースマップ]** タブをクリックし、DMS インスタンスが配置されているサブネットに関連付けられたルートテーブルを書き留めます。

1. DMS VPC 内のすべてのルートテーブルを更新します。

   1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) でルートテーブルに移動します。

   1. DMS VPC 用に識別するルートテーブルを選択します。テーブルは VPC の **[リソースマップ]** タブから開くことができます。

   1. **[ルートの編集]** をクリックします。

   1. [ルールの追加] を選択し、次の情報を入力します。
      + **送信先**: RDS VPC の IPv4 CIDR ブロックを入力します (例: `10.1.0.0/16`)。
      + **ターゲット**: ピアリング設定 ID を選択します (例: `pcx-1234567890abcdef`)。

   1. **[ルートの保存]** をクリックします。

      VPC ルートは DMS VPC に保存されます。RDS VPC に対して同じ手順を実行します。

**セキュリティグループの更新**

1. DMS インスタンスのセキュリティグループを検証します。

   1. アウトバウンドルールで RDS インスタンスへのトラフィックが許可されていることを確認する必要があります。
     + **タイプ**: カスタム TCP または特定のデータベースポート (例: 3306 fir MySQL)。
     + **送信先**: RDS VPC の CIDR ブロックまたは RDS インスタンスのセキュリティグループ。

1. RDS インスタンスのセキュリティグループを確認します。

   1. インバウンドルールで DMS インスタンスからのトラフィックが許可されていることを確認する必要があります。
     + **タイプ**: 特定のデータベースポート。
     + ソース: DMS VPC の CIDR ブロック、または RDS インスタンスのセキュリティグループ。

**注記**  
また、以下を実行する必要があります。  
**アクティブピアリング接続**: 続行する前に、VPC ピアリング接続が **[アクティブ]** 状態であることを確認します。
**リソースマップ**: [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) の **[リソースマップ]** タブを使用して、更新が必要なルートテーブルを特定します。
**重複する CIDR ブロックがない**: VPC には重複しない CIDR ブロックが必要です。
**セキュリティのベストプラクティス**: セキュリティグループのルールを必要なポートとソースに保管します。  
詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[VPC ピアリング接続](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)」を参照してください。

# のセキュリティグループ設定 AWS DMS
<a name="CHAP_Advanced.Endpoints.securitygroup"></a>

のセキュリティグループは、適切なデータベースポートでレプリケーションインスタンスのインバウンド接続とアウトバウンド接続を許可 AWS DMS する必要があります。Amazon RDS を使用している場合は、インスタンスの DMS と RDS の間にセキュリティグループを設定する必要があります。

以下のステップを必ず実行します。

**RDS インスタンスのセキュリティグループを設定します。**

1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動します。

1. 左側のナビゲーションペインの **[セキュリティ]** で、**[セキュリティグループ]** を選択します。

1. RDS インスタンスに関連付けられている RDS セキュリティグループを選択します。

1. インバウンドのルールを編集します。

   1. **[アクション]** と **[インバウンドルールを編集]** の順にクリックします。

   1. **[ルールの追加]** をクリックして、新しいルールを作成します。

   1. ルールを次のように設定します。
      + **タイプ**: データベースタイプを選択します (例: ポート 3306 の場合は MySQL/Aurora、ポート 5432 の場合は PostgreSQL)。
      + **プロトコル**: データベースタイプに基づいて自動入力されます。
      + **ポート範囲**: データベースタイプに基づいて自動入力されます。
      + **ソース**: **[カスタム]** を選択し、DMS インスタンスに関連付けられたセキュリティグループ ID を貼り付けます。これにより、そのセキュリティグループ内の任意のリソースからのトラフィックが許可されます。DMS インスタンスの IP 範囲 (CIDR ブロック) を指定することもできます。

   1. **[ルールの保存]** をクリックします。

**DMS レプリケーションインスタンスのセキュリティグループを設定します。**

1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動します。

1. 左側のナビゲーションペインの **[セキュリティ]** で、**[セキュリティグループ]** を選択します。

1. **[セキュリティグループ]** リストで、DMS レプリケーションインスタンスに関連付けられているセキュリティグループを見つけて選択します。

1. アウトバウンドルールを編集します。

   1. **[アクション]** をクリックし、**[アウトバウンドルールの編集]** をクリックします。

   1. **[ルールの追加]** をクリックして、新しいルールを作成します。

   1. ルールを次のように設定します。
      + タイプ: データベースタイプを選択します (例: MySQL/Aurora、PostgreSQL)。
      + プロトコル: データベースタイプに基づいて自動入力されます。
      + ポート範囲: データベースタイプに基づいて自動入力されます。
      + ソース: **[カスタム]** を選択し、RDS インスタンスに関連付けられたセキュリティグループ ID を貼り付けます。これにより、そのセキュリティグループ内の任意のリソースからのトラフィックが許可されます。RDS インスタンスの IP 範囲 (CIDR ブロック) を指定することもできます。

   1. **[ルールの保存]** をクリックします。

## 追加の考慮事項
<a name="CHAP_securitygroup_additional_considerations"></a>

次の追加の設定情報を考慮する必要があります。
+ **セキュリティグループリファレンスを使用する**: ソースインスタンスまたはターゲットインスタンスでセキュリティグループを参照すると、動的管理が可能になり、グループ内のすべてのリソースが自動的に含まれるため、IP アドレスを使用するよりも安全です。
+ **データベースポート**: データベースに対し正しいポートを使用していることを確認します。
+ **セキュリティのベストプラクティス**: セキュリティリスクを最小限に抑えるために必要なポートのみを開きます。また、セキュリティグループのルールを定期的に見直して、セキュリティ標準と要件を満たしていることを確認する必要があります。

# のネットワークアクセスコントロールリスト (NACL) 設定 AWS DMS
<a name="CHAP_Advanced.Ednpoints.NACL"></a>

Amazon RDS をレプリケーションソースとして使用する場合は、DMS および RDS インスタンスのネットワークアクセスコントロールリスト (NACL) を更新する必要があります。NACL が、これらのインスタンスが存在するサブネットに関連付けられていることを確認します。これにより、特定のデータベースポートでのインバウンドトラフィックとアウトバウンドトラフィックが許可されます。

ネットワークアクセスコントロールリストを更新するには、以下のステップを必ず実行します。

**注記**  
DMS インスタンスと RDS インスタンスが同じサブネットにある場合は、そのサブネットの NACL を更新するだけです。

**関連する NACL を識別します**

1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動します。

1. 左側のナビゲーションメニューの **[セキュリティ]** で、**Network ACL** を選択します。

1. DMS インスタンスと RDS インスタンスが存在するサブネットに関連付けられた関連する NACL を選択します。

**DMS インスタンスサブネット用の NACL を更新する**

1. DMS インスタンスのサブネットに関連付けられている NACL を識別します。これを行うには、[[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) でサブネットを参照し、DMS サブネットを見つけて、関連する NACL ID を書き留めます。

1. インバウンドのルールを編集します。

   1. 選択した NACL の **[インバウンドルール]** タブをクリックします。

   1. **[Edit inbound rules]** (インバウンドルールを編集) を選択します。

   1. 新しいルールを追加します。
      + **ルール \$1**: 一意の数値を選択します (例: 100)。
      + **タイプ**: **[カスタム TCP ルール]** を選択します。
      + [**Protocol**]: TCP
      + **ポート範囲**: データベースポートを入力します (例: MySQL の場合は 3306)。
      + **ソース**: RDS サブネットの CIDR ブロックを入力します (例: 10.1.0.0/16)。
      + **許可/拒否**: **[許可]** を選択します。

1. アウトバウンドルールを編集します。

   1. 選択した NACL の **[アウトバウンドルール]** タブをクリックします。

   1. **[アウトバウンドルールの編集]** をクリックします。

   1. 新しいルールを追加します。
      + **ルール \$1**: インバウンドルールで使用されるものと同じ番号を使用します。
      + **タイプ:** すべてのトラフィック。
      + **送信先**: 0.0.0.0/0
      + **許可/拒否**: **[許可]** を選択します。

1. [**Save changes (変更の保存)**] をクリックします。

1. RDS インスタンスのサブネットに関連付けられた NACL を更新するには、同じステップを実行します。

## NACL ルールを検証する
<a name="CHAP_NACL.verify.NACL.Rules"></a>

NACL ルールに関する次の基準を確認する必要があります。
+ **ルールの順序**: NACL は、ルール番号に基づいた昇順でルールを処理します。「**許可**」として設定されたすべてのルールのルール番号が、「**拒否**」として設定されたすべてのルール番号より小さいことを確認してください (トラフィックをブロックする可能性があるため)。
+ **ステートレスな性質**: NACL はステートレスです。インバウンドトラフィックとアウトバウンドトラフィックの両方を明示的に許可する必要があります。
+ **CIDR ブロック**: 使用する CIDR ブロックが DMS インスタンスと RDS インスタンスのサブネットを正確に表していることを確認する必要があります。

# AWS DMS シークレットマネージャー VPC エンドポイントの設定
<a name="CHAP_Advanced.Endpoints.secretsmanager"></a>

プライベートサブネットのレプリケーションインスタンスから AWS Secrets Manager にアクセスするには、VPC エンドポイントを作成する必要があります。これにより、レプリケーションインスタンスはパブリックインターネット経由でトラフィックを送信せずに、プライベートネットワーク経由で Secrets Manager に直接アクセスできます。

設定するには、以下のステップを実行する必要があります。

**VPC エンドポイントのセキュリティグループを作成します。**

1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動します。

1. 左のナビゲーションペインで **[セキュリティグループ]**、**[セキュリティグループの作成]** の順に選択します。

1. セキュリティグループを設定する。
   + **セキュリティグループの名前**: 例: `SecretsManagerEndpointSG`
   + **説明**: 適切な説明を入力します。(例: Secrets Manager VPC エンドポイントのセキュリティグループ）。
   + **VPC**: レプリケーションインスタンスとエンドポイントが存在する VPC を選択します。

1. **[ルールの追加]** をクリックして、インバウンドルールを以下のように設定します。
   + タイプ: HTTPS (シークレットマネージャーはポート 443 で HTTPS を使用するため）。
   + ソース: **[カスタム]** を選択し、レプリケーションインスタンスのセキュリティグループ ID を入力します。これにより、そのセキュリティグループに関連付けられたすべてのインスタンスが VPC エンドポイントにアクセスできるようになります。

1. 変更を確認し、**[セキュリティグループの作成]** をクリックします。

**Secrets Manager の VPC エンドポイントを作成するには**
**注記**  
「*Amazon Virtual Private Cloud ユーザーガイド*」の「[インターフェイスエンドポイントの作成ドキュメント](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」トピックの概要通り、インターフェイス VPC エンドポイントを作成します。この手順を実行するときは、以下を確認してください。  
**[サービスカテゴリ]** で、**[AWS のサービス]** を選択します。
**[サービス名]** で、`seretsmanager` を検索してシークレットマネージャーサービスを選択します。

1. **[VPC とサブネット]** を選択し、以下を設定します。
   + **VPC**: レプリケーションインスタンスと同じ VPC であることを確認します。
   + **サブネット**: レプリケーションインスタンスが存在するサブネットを選択します。

1. **[追加設定]** で、インターフェイスエンドポイントの **[DNS 名の有効化]** が有効 (デフォルト値) になっていることを確認します。

1. **[セキュリティグループ]** で、適切なセキュリティグループ名を選択します。例: `SecretsManagerEndpointSG` (以前に作成済み)。

1. すべての設定を確認し、**[エンドポイントの作成]** をクリックします。

**VPC エンドポイントの DNS 名を取得する**

1. VPC エンドポイントの詳細にアクセスします。

   1. [[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) に移動し、**[エンドポイント]** を選択します。

   1. 作成したエンドポイントを選択します。

1. DNS 名をコピーします。

   1. **[詳細]** タブで、**[DNS 名]** セクションに移動します。

   1. リストされた最初の DNS 名をコピーします。(例: `vpce-0abc123def456789g-secretsmanager.us-east-1.vpce.amazonaws.com`)。これはリージョナル DNS 名です。

**DMS エンドポイントを更新する**

1. [[AWS DMSコンソール]](https://console.aws.amazon.com/dms/v2) に移動します。

1. DMS エンドポイントを変更します。

   1. 左のナビゲーションペインで **[エンドポイント]** を選択します。

   1. 設定したい適度なエンドポイントを選択します。

   1. **[アクション]** をクリックし、**[修正]** を選択します。

1. エンドポイントサービスを設定する

   1. **[エンドポイント設定]** に移動し、**[エンドポイント接続属性を使用する]**チェックボックスを選択します。

   1. **[接続属性]** フィールドに `secretsManagerEndpointOverride=<copied DNS name>` を追加します。
**注記**  
複数の接続属性がある場合は、セミコロン「；」で区切ることができます。例: `datePartitionEnabled=false;secretsManagerEndpointOverride=vpce-0abc123def456789g-secretsmanager.us-east-1.vpce.amazonaws.com`

1. **[エンドポイントの変更]** をクリックして変更を保存します。

## その他の考慮事項
<a name="CHAP_secretsmanager.additionalconsiderations"></a>

次の追加の設定情報を考慮する必要があります。

**レプリケーションインスタンスのセキュリティグループ:**
+ レプリケーションインスタンスに関連付けられたセキュリティグループが、ポート 443 (HTTPS) の VPC エンドポイントへのアウトバウンドトラフィックを許可していることを確認します。

**VPC DNS 設定:**
+ VPC で **[DNS 解決]** と **[DNS ホットネーム]** が有効になっていることを確認します。これにより、インスタンスは VPC エンドポイントの DNS 名を解決できます。[[Amazon VPC コンソール]](https://console.aws.amazon.com/vpc/) で VPC に移動し、VPC を選択して **[DNS 解決]** と **[DNS ホットネーム]** が「**はい**」に設定されていることを確認します。

**接続をテストします。**
+ レプリケーションインスタンスから以下の DNS ルックアップを実行して、VPC エンドポイントを確実に解決できます: `nslookup secretsmanager.<region>amazonaws.com` VPC エンドポイントに関連付けられた IP アドレスを返す必要があります