

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Cibles pour la migration des données
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) peut utiliser la plupart des bases de données les plus populaires comme cible pour la réplication de données. La cible peut se trouver sur une instance Amazon Elastic Compute Cloud (Amazon EC2), une instance Amazon Relational Database Service (Amazon RDS) ou une base de données sur site. 

Pour une liste complète des cibles valides, consultez [Cibles pour AWS DMS](CHAP_Introduction.Targets.md).

**Note**  
AWS DMS ne prend pas en charge la migration entre AWS les régions pour les types de terminaux cibles suivants :  
Amazon DynamoDB
Amazon OpenSearch Service
Amazon Kinesis Data Streams
Amazon Aurora PostgreSQL Limitless est disponible en tant que cible pour (). AWS Database Migration Service AWS DMS Pour plus d'informations, consultez la section [Utilisation d'une base de données PostgreSQL comme cible](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) pour. AWS Database Migration Service

**Topics**
+ [Utilisation d'une base de données Oracle comme cible pour AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Utilisation d'une base de données Microsoft SQL Server comme cible pour AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Utilisation d'une base de données compatible MySQL comme cible pour AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Utilisation d'une base de données Amazon Redshift comme cible pour AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Utilisation d'une base de données SAP ASE comme cible pour AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Utiliser Amazon S3 comme cible pour AWS Database Migration Service](CHAP_Target.S3.md)
+ [Utilisation d'une base de données Amazon DynamoDB comme cible pour AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Utilisation d'Amazon Kinesis Data Streams comme cible pour AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Utiliser Apache Kafka comme cible pour AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Utilisation d'un cluster Amazon OpenSearch Service comme cible pour AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Utilisation d'Amazon DocumentDB comme cible pour le service de migration de AWS base de données](CHAP_Target.DocumentDB.md)
+ [Utiliser Amazon Neptune comme cible pour AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Utilisation de Redis OSS comme cible pour AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Utiliser Babelfish comme cible pour AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Utiliser Amazon Timestream comme cible pour AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Utilisation d'Amazon RDS pour Db2 et d'IBM Db2 LUW comme cible pour AWS DMS](CHAP_Target.DB2.md)

# Utilisation d'une base de données Oracle comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

Vous pouvez migrer des données vers des cibles de base de données Oracle en utilisant soit une autre base de données Oracle AWS DMS, soit l'une des autres bases de données prises en charge. Vous pouvez utiliser SSL (Secure Sockets Layer) pour chiffrer les connexions entre votre point de terminaison Oracle et l'instance de réplication. Pour plus d'informations sur l'utilisation du protocole SSL avec un point de terminaison Oracle, consultez[Utilisation du protocole SSL avec AWS Database Migration Service](CHAP_Security.SSL.md). AWS DMS prend également en charge l'utilisation du chiffrement transparent des données (TDE) Oracle pour chiffrer les données au repos dans la base de données cible, car Oracle TDE n'a pas besoin de clé de chiffrement ni de mot de passe pour écrire dans la base de données.

Pour plus d'informations sur les versions d'Oracle prises AWS DMS en charge en tant que cible, consultez[Objectifs pour AWS DMS](CHAP_Introduction.Targets.md). 

Quand vous utilisez Oracle comme cible, nous supposons que les données doivent être migrées vers le schéma ou l'utilisateur qui est utilisé pour la connexion cible. Si vous voulez migrer des données vers un autre schéma, utilisez une transformation de schéma pour cela. Par exemple, supposons que votre point de terminaison cible se connecte à l'utilisateur `RDSMASTER` et que vous souhaitez migrer de l'utilisateur `PERFDATA1` vers `PERFDATA2`. Dans ce cas, créez une transformation comme suit.

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

Lorsque vous utilisez Oracle comme cible, AWS DMS migre toutes les tables et tous les index vers les tablespaces de table et d'index par défaut de la cible. Si vous souhaitez migrer des tables et des index vers des espaces de table et d’index différents, utilisez une transformation d’espace de table. Par exemple, supposons que vous avez dans le schéma `INVENTORY` un ensemble de tables affectées à certains espaces de table dans la source Oracle. Pour la migration, vous souhaitez affecter toutes ces tables à un espace de tables unique `INVENTORYSPACE` dans la cible. Dans ce cas, créez une transformation comme suit.

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

Pour plus d'informations sur les transformations, consultez [Spécification des règles de sélection de table et de transformation à l’aide de JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Si Oracle est à la fois source et cible, vous pouvez conserver les affectations d'espace de table de table ou d'index existantes en définissant l'attribut de connexion supplémentaire source Oracle, `enableHomogenousTablespace=true`. Pour de plus amples informations, consultez [Paramètres du point de terminaison lors de l'utilisation d'Oracle comme source pour AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib).

Pour plus de détails sur l'utilisation des bases de données Oracle en tant que cible pour AWS DMS, consultez les sections suivantes : 

**Topics**
+ [Limites imposées à Oracle en tant que cible pour AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Privilèges de compte d'utilisateur requis pour utiliser Oracle comme cible](#CHAP_Target.Oracle.Privileges)
+ [Configuration d'une base de données Oracle comme cible pour AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Paramètres du point de terminaison lors de l'utilisation d'Oracle comme cible pour AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Types de données cibles pour Oracle](#CHAP_Target.Oracle.DataTypes)

## Limites imposées à Oracle en tant que cible pour AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Les limitations lors de l'utilisation d'Oracle comme cible pour la migration de données sont les suivantes :
+ AWS DMS ne crée pas de schéma sur la base de données Oracle cible. Vous devez créer les schémas que vous voulez sur la base de données Oracle cible. Le nom du schéma doit déjà exister pour la cible Oracle. Les tables du schéma source sont importées vers l'utilisateur ou le schéma, qui est AWS DMS utilisé pour se connecter à l'instance cible. Vous pouvez créer plusieurs tâches de réplication si vous avez plusieurs schémas à migrer. Vous pouvez également migrer des données vers différents schémas sur une cible. Pour ce faire, vous devez utiliser des règles de transformation de schéma sur les mappages de AWS DMS tables.
+ AWS DMS ne prend pas en charge l'`Use direct path full load`option pour les tables avec INDEXTYPE CONTEXT. Pour contourner ce problème, vous pouvez utiliser le chargement de la grappe. 
+ Avec l'option d’application optimisée par lots, le chargement dans la table de modifications nettes utilise un chemin d'accès direct, qui ne prend pas en charge le type XML. Pour contourner ce problème, vous pouvez utiliser le mode d'application transactionnel.
+ Les chaînes vides migrées à partir de bases de données sources peuvent être traitées différemment par la cible Oracle (converties en chaînes d'un espace, par exemple). Cela peut entraîner le signalement d'une incompatibilité lors de la AWS DMS validation.
+ Vous pouvez exprimer le nombre total de colonnes par table prises en charge dans le mode d’application par lots optimisée, à l’aide de la formule suivante :

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

  Par exemple, si la table d’origine comporte 25 colonnes et que sa clé primaire est composée de 5 colonnes, le nombre total de colonnes est de 55. Si un tableau dépasse le nombre de colonnes autorisé, toutes les modifications sont appliquées en one-by-one mode.
+ AWS DMS ne prend pas en charge la base de données autonome sur Oracle Cloud Infrastructure (OCI).
+ En mode d'application transactionnelle, une cible Oracle peut traiter des instructions DML d'une taille maximale de 32 Ko. Bien que cette limite soit suffisante pour de nombreux cas d'utilisation, les instructions DML supérieures à 32 Ko échoueront avec l'erreur suivante : « ORA-01460 : conversion non implémentée ou déraisonnable demandée ». Pour résoudre ce problème, vous devez activer la fonctionnalité d'application par lots en définissant le paramètre de `BatchApplyEnabled` tâche sur`true`. L'application par lots réduit la taille globale du relevé, ce qui vous permet de contourner la limite de 32 Ko. Pour de plus amples informations, veuillez consulter [Paramètres de métadonnées des tâches cibles](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS Le chargement complet du chemin direct pour les tables LOB peut échouer avec l'erreur ORA-39777 en raison des exigences de traitement particulières pour les données LOB. Cette erreur se produit pendant le processus de chargement direct du chemin et peut perturber les tâches de migration impliquant des colonnes LOB. Pour résoudre le problème, désactivez le `useDirectPathFullLoad` paramètre sur le point de terminaison cible et réessayez l'opération de chargement.

## Privilèges de compte d'utilisateur requis pour utiliser Oracle comme cible
<a name="CHAP_Target.Oracle.Privileges"></a>

Pour utiliser une cible Oracle dans une AWS Database Migration Service tâche, accordez les privilèges suivants dans la base de données Oracle. Vous accordez ces privilèges au compte utilisateur spécifié dans les définitions de la base de données Oracle pour AWS DMS.
+ SELECT ANY TRANSACTION 
+ SELECT on V\$1NLS\$1PARAMETERS 
+ SELECT on V\$1TIMEZONE\$1NAMES 
+ SELECT on ALL\$1INDEXES 
+ SELECT on ALL\$1OBJECTS 
+ SELECT on DBA\$1OBJECTS
+ SELECT on ALL\$1TABLES 
+ SELECT on ALL\$1USERS 
+ SELECT on ALL\$1CATALOG 
+ SELECT on ALL\$1CONSTRAINTS 
+ SELECT on ALL\$1CONS\$1COLUMNS 
+ SELECT on ALL\$1TAB\$1COLS 
+ SELECT on ALL\$1IND\$1COLUMNS 
+ 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 
+ DELETE ANY TABLE

Pour les exigences suivantes, accordez ces privilèges supplémentaires :
+ Pour utiliser une liste de tables spécifique, accordez l'autorisation SELECT sur n'importe quelle table répliquée et ALTER sur n'importe quelle table répliquée.
+ Pour permettre à un utilisateur de créer une table dans un espace de table par défaut, accordez-lui le privilège GRANT UNLIMITED TABLESPACE.
+ Pour l'ouverture de session, accordez le privilège CREATE SESSION.
+ Si vous utilisez un chemin direct (qui est le chemin par défaut pour le chargement complet), `GRANT LOCK ANY TABLE to dms_user;`.
+ Si le schéma est différent lors de l’utilisation du mode de préparation de table « DROP and CREATE », `GRANT CREATE ANY INDEX to dms_user;`.
+ Pour certains scénarios de chargement complet, vous pouvez choisir l'option « SUPPRIMER et CRÉER une table » ou « TRONQUER avant le chargement » où un schéma de table cible est différent de celui de l'utilisateur DMS. Dans ce cas, accordez SUPPRIMER N'IMPORTE QUELLE TABLE.
+ Pour stocker les modifications dans des tables de modification ou une table d'audit où le schéma de table cible est différent de celui de l'utilisateur DMS, accordez CRÉER N'IMPORTE QUELLE TABLE et CRÉER N'IMPORTE QUEL INDEX.
+ Pour valider les colonnes LOB avec la fonctionnalité de validation, accordez le privilège EXECUTE `SYS.DBMS_CRYPTO` à l'utilisateur DMS.

### Privilèges de lecture requis pour AWS Database Migration Service la base de données cible
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

Le compte AWS DMS utilisateur doit disposer d'autorisations de lecture pour les tables DBA suivantes :
+ SELECT on DBA\$1USERS
+ SELECT on DBA\$1TAB\$1PRIVS
+ SELECT on DBA\$1OBJECTS
+ SELECT on DBA\$1SYNONYMS
+ SELECT on DBA\$1SEQUENCES
+ SELECT on DBA\$1TYPES
+ SELECT on DBA\$1INDEXES
+ SELECT on DBA\$1TABLES
+ SELECT on DBA\$1TRIGGERS
+ SELECT on SYS.DBA\$1REGISTRY

Si certains des privilèges requis ne peuvent pas être accordés à V\$1 xxx, accordez-les à V\$1\$1 xxx.

### Évaluations de prémigration
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Pour utiliser les évaluations de prémigration [Évaluations Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) répertoriées dans Oracle as a Target, vous devez ajouter les autorisations suivantes au compte utilisateur spécifié dans le point de terminaison cible de la base de données Oracle :

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

## Configuration d'une base de données Oracle comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Avant d'utiliser une base de données Oracle comme cible de migration de données, vous devez fournir un compte utilisateur Oracle à AWS DMS. Le compte utilisateur doit disposer de read/write privilèges sur la base de données Oracle, comme indiqué dans[Privilèges de compte d'utilisateur requis pour utiliser Oracle comme cible](#CHAP_Target.Oracle.Privileges).

## Paramètres du point de terminaison lors de l'utilisation d'Oracle comme cible pour AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible Oracle comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Oracle en tant que cible sont indiqués dans le tableau suivant.

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

## Types de données cibles pour Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Une base de données Oracle cible utilisée AWS DMS prend en charge la plupart des types de données Oracle. Le tableau suivant indique les types de données cibles Oracle pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données. Pour en savoir plus sur la façon d'afficher le type de données qui est mappé à partir de la source, consultez la section correspondant à la source que vous utilisez.


|  AWS DMS type de données  |  Type de données Oracle  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (length)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (scale)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  CHAÎNE  |  Avec indication date : DATE  Avec indication time : TIMESTAMP  Avec indication timestamp : TIMESTAMP  Avec indication timestamp\$1with\$1timezone : TIMESTAMP WITH TIMEZONE  Avec indication timestamp\$1with\$1local\$1timezone : TIMESTAMP WITH LOCAL TIMEZONE Avec indication interval\$1year\$1to\$1month : INTERVAL YEAR TO MONTH  Avec indication interval\$1day\$1to\$1second : INTERVAL DAY TO SECOND  Si la longueur > 4 000 : CLOB Dans tous les autres cas : VARCHAR2 (longueur)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Si la longueur > 2 000 : NCLOB Dans tous les autres cas : NVARCHAR2 (longueur)  | 
|  BLOB  |  BLOB Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de BLOBs pour une tâche spécifique. Les types de données BLOB sont pris en charge uniquement dans les tables qui contiennent une clé primaire  | 
|  CLOB  |  CLOB Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de CLOBs pour une tâche spécifique. Au cours de la capture des données modifiées (CDC), les types de données CLOB sont pris en charge uniquement dans les tables qui comprennent une clé primaire. CHAÎNE Un type de VARCHAR2 données Oracle sur la source dont la taille déclarée est supérieure à 4 000 octets est mappé via le AWS DMS CLOB vers une CHAÎNE sur la cible Oracle.  | 
|  NCLOB  |  NCLOB Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de NCLOBs pour une tâche spécifique. Au cours de la capture des données modifiées (CDC), les types de données NCLOB sont pris en charge uniquement dans les tables qui contiennent une clé primaire. WSTRING Un type de VARCHAR2 données Oracle sur la source dont la taille déclarée est supérieure à 4 000 octets est mappé via le AWS DMS NCLOB vers une chaîne WSTRING sur la cible Oracle.   | 
| XMLTYPE |  Le type de données cible XMLTYPE n'est pertinent que pour les tâches de Oracle-to-Oracle réplication. Lorsque la base de données source est Oracle, les types de donnée source sont répliqués en l'état dans la cible Oracle. Par exemple, un type de données XMLTYPE dans la source est créé en tant que type de données XMLTYPE dans la cible.  | 

# Utilisation d'une base de données Microsoft SQL Server comme cible pour AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

Vous pouvez migrer des données vers des bases de données Microsoft SQL Server à l'aide de AWS DMS. Avec une base de données SQL Server comme cible, vous pouvez migrer les données à partir d'une autre base de données SQL Server, ou d'une des autres bases de données prises en charge.

Pour plus d'informations sur les versions de SQL Server prises AWS DMS en charge en tant que cible, consultez[Objectifs pour AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS prend en charge les éditions sur site et Amazon RDS d'Enterprise, Standard, Workgroup et Developer.

Pour plus d'informations sur l'utilisation des bases de données cibles SQL Server AWS DMS et de leurs utilisations, consultez ce qui suit.

**Topics**
+ [Limitations relatives à l'utilisation de SQL Server comme cible pour AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Exigences de sécurité lors de l'utilisation de SQL Server comme cible pour AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Paramètres du point de terminaison lors de l'utilisation de SQL Server comme cible pour AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Types de données cibles pour Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Limitations relatives à l'utilisation de SQL Server comme cible pour AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

Les limitations suivantes s'appliquent lors de l'utilisation d'une base de données SQL Server comme cible pour AWS DMS :
+ Lorsque vous créez manuellement une table SQL Server cible avec une colonne calculée, la réplication de chargement complet n'est pas prise en charge lors de l'utilisation de l'utilitaire de copie groupée BCP. Pour utiliser la réplication à chargement complet, désactivez le chargement BCP en définissant l’attribut de connexion supplémentaire (ECA) `'useBCPFullLoad=false'` sur le point de terminaison. Pour plus d'informations sur ECAs le paramétrage des points de terminaison, consultez[Création de points de terminaison source et cible](CHAP_Endpoints.Creating.md). Pour en savoir plus sur l'utilisation avec BCP, consultez la [documentation 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).
+ Lorsque vous répliquez des tables avec des types de données spatiales SQL Server (GEOMETRY et AWS DMS GEOGRAPHY), remplacez tout identifiant de référence spatiale (SRID) que vous pourriez avoir inséré par le SRID par défaut. Le SRID par défaut est 0 pour GEOMETRY et 4326 pour GEOGRAPHY.
+ Les tables temporelles ne sont pas prises en charge. La migration de tables temporelles peut fonctionner avec une tâche de réplication seule en mode d'application transactionnelle si ces tables sont créées manuellement sur la cible.
+ Actuellement, `boolean` les types de données d'une source PostgreSQL sont migrés vers SQLServer une cible en tant que type de données présentant des valeurs `bit` incohérentes. 

  Pour contourner ce problème, procédez comme suit :
  + Précréez la table avec un type de `VARCHAR(1)` données pour la colonne (ou laissez AWS DMS créer la table). Ensuite, faites en sorte que le traitement en aval traite un « F » comme Faux et un « T » comme Vrai.
  + Pour éviter d’avoir à modifier le traitement en aval, ajoutez une règle de transformation à la tâche pour remplacer les valeurs « F » par « 0 » et les valeurs « T » par 1, puis stockez-les en tant que type de données binaire SQL Server.
+ AWS DMS ne prend pas en charge le traitement des modifications pour définir la nullité des colonnes (en utilisant la `ALTER COLUMN [SET|DROP] NOT NULL` clause avec des `ALTER TABLE` instructions).
+ L'authentification Windows n'est pas prise en charge.

## Exigences de sécurité lors de l'utilisation de SQL Server comme cible pour AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

Ce qui suit décrit les exigences de sécurité pour une utilisation AWS DMS avec une cible Microsoft SQL Server :
+ Le compte AWS DMS utilisateur doit avoir au moins le rôle `db_owner` d'utilisateur dans la base de données SQL Server à laquelle vous vous connectez.
+ Un administrateur système SQL Server doit fournir cette autorisation à tous les comptes utilisateur AWS DMS .

## Paramètres du point de terminaison lors de l'utilisation de SQL Server comme cible pour AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible SQL Server comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec SQL Server en tant que cible sont indiqués dans le tableau suivant.

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

## Types de données cibles pour Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

Le tableau suivant indique les types de données cibles Microsoft SQL Server pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données. Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS type de données  |  Type de données SQL Server  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(Length)  | 
|  DATE  |  Pour SQL Server 2008 et versions ultérieures, utilisez DATE. Pour les versions antérieures, si l'échelle est 3 ou inférieure utilisez DATETIME. Dans tous les autres cas, utilisez VARCHAR (37).  | 
|  TIME  |  Pour SQL Server 2008 et versions ultérieures, utilisez DATETIME2 (%d). Pour les versions antérieures, si l'échelle est 3 ou inférieure utilisez DATETIME. Dans tous les autres cas, utilisez VARCHAR (37).  | 
|  DATETIME  |  Pour SQL Server 2008 et versions ultérieures, utilisez DATETIME2 (scale).  Pour les versions antérieures, si l'échelle est 3 ou inférieure utilisez DATETIME. Dans tous les autres cas, utilisez VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  CHAÎNE  |  Si la colonne est une colonne de date ou d'heure, effectuez les opérations suivantes :  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.SQLServer.html) Si la colonne n'est pas une colonne de date ou d'heure, utilisez VARCHAR (length).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (length)  | 
|  BLOB  |  VARBINARY(max) IMAGE Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de BLOBs pour une tâche spécifique. AWS DMS prend en charge les types de données BLOB uniquement dans les tables qui incluent une clé primaire.  | 
|  CLOB  |  VARCHAR(max) Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de CLOBs pour une tâche spécifique. Au cours de la capture des données modifiées (CDC), AWS DMS prend en charge les types de données CLOB uniquement dans les tables qui comprennent une clé primaire.  | 
|  NCLOB  |  NVARCHAR(max) Pour utiliser ce type de données avec AWS DMS, vous devez activer l'utilisation de NCLOBs pour une tâche spécifique. Pendant le CDC, AWS DMS prend en charge les types de données NCLOB uniquement dans les tables qui incluent une clé primaire.  | 

# Utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Vous pouvez migrer des données vers des bases de données PostgreSQL à AWS DMS l'aide d'une autre base de données PostgreSQL ou de l'une des autres bases de données prises en charge. 

Pour plus d'informations sur les versions de PostgreSQL compatibles en tant AWS DMS que cible, consultez. [Objectifs pour AWS DMS](CHAP_Introduction.Targets.md)

**Note**  
Amazon Aurora Serverless est disponible en tant que cible pour Amazon Aurora compatible avec PostgreSQL. Pour plus d'informations sur Amazon Aurora Serverless, consultez la section [Utilisation d'Amazon Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) dans le guide de l'*utilisateur Amazon Aurora*.
Les clusters de bases de données Aurora sans serveur sont uniquement accessibles à partir d’un réseau Amazon VPC et ne peuvent pas utiliser d’[adresse IP publique](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Par conséquent, si vous avez l’intention de disposer d’une instance de réplication dans une région différente de celle d’Aurora PostgreSQL sans serveur, vous devez configurer l’[appairage de VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). Sinon, vérifiez la disponibilité des [régions](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) Aurora PostgreSQL sans serveur et décidez d’utiliser l’une de ces régions à la fois pour Aurora PostgreSQL sans serveur et pour votre instance de réplication.
La fonctionnalité Babelfish est intégrée à Amazon Aurora et n’entraîne aucun coût supplémentaire. Pour plus d’informations, consultez [Utilisation de Babelfish for Aurora PostgreSQL en tant que cible pour AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish).

AWS DMS adopte une table-by-table approche lors de la migration des données de la source vers la cible pendant la phase de chargement complet. L'ordre des tables pendant la phase de chargement complet ne peut pas être garanti. Les tables ne sont pas synchronisées pendant la phase de chargement complet et pendant que les transactions mises en cache pour les tables individuelles sont appliquées. En conséquence, les contraintes actives d'intégrité référentielle peuvent entraîner l'échec d'une tâche pendant la phase de chargement complet.

Dans PostgreSQL, les clés étrangères (contraintes d'intégrité référentielle) sont mises en œuvre à l'aide de déclencheurs. Pendant la phase de chargement complet, AWS DMS charge chaque table une par une. Nous vous recommandons vivement de désactiver les contraintes de clé étrangère pendant un chargement complet, à l'aide de l'une des méthodes suivantes :
+ Désactivez temporairement tous les déclencheurs depuis l'instance, et terminez le chargement complet.
+ Utilisez le paramètre `session_replication_role` dans PostgreSQL.

À un instant donné, un déclencheur peut être dans l'un des états suivants : `origin`, `replica`, `always` ou `disabled`. Lorsque le paramètre `session_replication_role` a la valeur `replica`, seuls les déclencheurs ayant l'état `replica` sont actifs et sont déclenchés lorsqu'ils sont appelés. Sinon, les déclencheurs demeurent inactifs. 

PostgreSQL possède un mécanisme failsafe pour empêcher qu'une table soit tronquée, même lorsque `session_replication_role` est défini. Vous pouvez l'utiliser comme alternative à la désactivation des déclencheurs, afin d'aider le chargement complet à s'exécuter intégralement. Pour ce faire, définissez le mode de préparation des tables cible avec la valeur `DO_NOTHING`. Dans le cas contraire, les opérations DROP et TRUNCATE échouent lorsqu'il existe des contraintes de clé étrangère.

Dans Amazon RDS, vous pouvez définir ce paramètre à l’aide d’un groupe de paramètres. Pour une instance PostgreSQL s’exécutant sur Amazon EC2, vous pouvez définir le paramètre directement.



Pour plus d'informations sur l'utilisation d'une base de données PostgreSQL en tant que cible AWS DMS pour, consultez les sections suivantes : 

**Topics**
+ [Limitations relatives à l'utilisation de PostgreSQL comme cible pour AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Limitations relatives à l'utilisation d'Amazon Aurora PostgreSQL Limitless comme cible pour AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Exigences de sécurité lors de l'utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Paramètres du point de terminaison et attributs de connexion supplémentaires (ECAs) lors de l'utilisation de PostgreSQL comme cible pour AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Types de données cibles pour PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Utilisation de Babelfish pour Aurora PostgreSQL comme cible pour AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Limitations relatives à l'utilisation de PostgreSQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

Les limitations suivantes s'appliquent lors de l'utilisation d'une base de données PostgreSQL comme cible pour AWS DMS :
+ Pour les migrations hétérogènes, le type de données JSON est converti en type de données CLOB natif en interne.
+ Lors d'une migration d'Oracle vers PostgreSQL, si une colonne d'Oracle contient un caractère NULL (valeur hexadécimale U\$10000) AWS DMS , le caractère NULL est converti en espace (valeur hexadécimale U\$10020). Cela est dû à une limitation PostgreSQL.
+ AWS DMS ne prend pas en charge la réplication vers une table avec un index unique créé avec la fonction de coalesce.
+ Si vos tables utilisent des séquences, mettez à jour la valeur de `NEXTVAL` pour chaque séquence dans la base de données cible après avoir arrêté la réplication depuis la base de données source. AWS DMS copie les données de votre base de données source, mais ne migre pas les séquences vers la cible pendant la réplication en cours.

## Limitations relatives à l'utilisation d'Amazon Aurora PostgreSQL Limitless comme cible pour AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Les limitations suivantes s'appliquent lors de l'utilisation d'Amazon Aurora PostgreSQL Limitless comme cible pour : AWS DMS
+ AWS DMS La validation des données ne prend pas en charge Amazon Aurora PostgreSQL Limitless.
+ AWS DMS migre les tables sources en tant que tables standard, qui ne sont pas distribuées. Après la migration, vous pouvez convertir ces tables standard en tables Limitless en suivant le guide de conversion officiel.

## Exigences de sécurité lors de l'utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

À des fins de sécurité, le compte d'utilisateur utilisé pour la migration des données doit être un utilisateur enregistré dans une base de données PostgreSQL que vous utilisez comme cible.

Votre point de terminaison cible PostgreSQL nécessite des autorisations utilisateur minimales pour exécuter AWS DMS une migration, consultez les exemples suivants.

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

Ou

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

## Paramètres du point de terminaison et attributs de connexion supplémentaires (ECAs) lors de l'utilisation de PostgreSQL comme cible pour AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Vous pouvez utiliser les paramètres du point de terminaison et les attributs de connexion supplémentaires (ECAs) pour configurer votre base de données cible PostgreSQL. 

Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Vous spécifiez ECAs à l'aide du `ExtraConnectionAttributes` paramètre de votre point de terminaison.

Les paramètres de point de terminaison que vous pouvez utiliser avec PostgreSQL en tant que cible sont indiqués dans le tableau suivant.

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

## Types de données cibles pour PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

Le point de terminaison de base de données PostgreSQL pour AWS DMS prend en charge la plupart des types de données de base de données PostgreSQL. Le tableau suivant indique les types de données cibles de base de données PostgreSQL pris en charge lors de l' AWS DMS utilisation et le mappage AWS DMS par défaut à partir des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS type de données  |  Type de données PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Si l'échelle s'étend de 0 à 6, utilisez TIMESTAMP. Si l'échelle s'étend de 7 à 9, utilisez VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  CHAÎNE  |  Si la longueur est comprise entre 1 et 21 845, utilisez VARCHAR (longueur en octets).  Si la longueur est comprise entre 21 846 et 2 147 483 647, utilisez VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Si la longueur est comprise entre 1 et 21 845, utilisez VARCHAR (longueur en octets).  Si la longueur est comprise entre 21 846 et 2 147 483 647, utilisez VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**Note**  
Lors de la réplication à partir d'une source PostgreSQL AWS DMS , crée la table cible avec les mêmes types de données pour toutes les colonnes, à l'exception des colonnes avec des types de données définis par l'utilisateur. Dans ces cas, le type de données est créé en tant que « character varying » dans la cible.

## Utilisation de Babelfish pour Aurora PostgreSQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

Vous pouvez migrer les tables sources SQL Server vers une cible Babelfish for Amazon Aurora PostgreSQL à l’aide d’ AWS Database Migration Service. Avec Babelfish, Aurora PostgreSQL comprend T-SQL, le dialecte SQL propriétaire de Microsoft SQL Server, et prend en charge le même protocole de communication. Ainsi, les applications écrites pour SQL Server peuvent désormais fonctionner avec Aurora avec moins de modifications de code. La fonctionnalité Babelfish est intégrée à Amazon Aurora et n’entraîne aucun coût supplémentaire. Vous pouvez activer Babelfish sur votre cluster Amazon Aurora à partir de la console Amazon RDS.

**Lorsque vous créez votre point de terminaison AWS DMS cible à l'aide des commandes de AWS DMS console, d'API ou de CLI, spécifiez le moteur cible comme **Amazon Aurora PostgreSQL** et nommez la base de données babelfish\$1db.** Dans la section **Paramètres de point de terminaison**, ajoutez les paramètres pour définir `DatabaseMode` sur `Babelfish` et `BabelfishDatabaseName` sur le nom de la base de données Babelfish T-SQL cible.

### Ajout de règles de transformation à votre tâche de migration
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Lorsque vous définissez une tâche de migration pour une cible Babelfish, vous devez inclure des règles de transformation garantissant que DMS utilise les tables Babelfish T-SQL pré-créées dans la base de données cible.

Commencez par ajouter une règle de transformation à votre tâche de migration qui convertit tous les noms de table en minuscules. Babelfish stocke en minuscules dans le catalogue `pg_class` PostgreSQL les noms des tables que vous créez à l’aide de T-SQL. Toutefois, lorsque vous avez des tables SQL Server avec des noms en casse mixte, DMS crée les tables en utilisant les types de données natifs PostgreSQL au lieu des types de données compatibles T-SQL. Pour cette raison, veillez à ajouter une règle de transformation qui convertit tous les noms de table en minuscules. Notez que les noms de colonnes ne doivent pas être convertis en minuscules.

Ensuite, si vous avez utilisé le mode de migration à plusieurs bases de données lorsque vous avez défini votre cluster, ajoutez une règle de transformation qui renomme le schéma SQL Server d’origine. Assurez-vous de renommer le nom du schéma SQL Server de sorte à inclure le nom de la base de données T-SQL. Par exemple, si le nom du schéma SQL Server d'origine est dbo et que le nom de votre base de données T-SQL est mydb, renommez le schéma en mydb\$1dbo à l'aide d'une règle de transformation.

**Note**  
Lorsque vous utilisez Babelfish pour Aurora PostgreSQL 16 ou version ultérieure, le mode de migration par défaut est « mutidatabase ». Lorsque vous exécutez des tâches de migration DMS, assurez-vous de revoir le paramètre du mode de migration et de mettre à jour les règles de transformation si nécessaire.

Si vous utilisez le mode à une seule base de données, vous n’avez pas besoin d’une règle de transformation pour renommer les noms de schéma. Les noms de schéma sont one-to-one mappés avec la base de données T-SQL cible dans Babelfish.

L’exemple de règle de transformation suivant convertit tous les noms de table en minuscules et renomme le nom du schéma SQL Server d’origine `dbo` en `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": []
   }
]
}
```

### Limitations de l’utilisation d’un point de terminaison cible PostgreSQL avec des tables Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Les limitations suivantes s’appliquent lors de l’utilisation d’un point de terminaison cible PostgreSQL avec des tables Babelfish :
+ Pour le mode **Préparation de table cible**, utilisez uniquement les modes **Ne rien faire** ou **Tronquer**. N’utilisez pas le mode **Supprimer les tables sur la cible**. Dans ce mode, DMS crée les tables en tant que tables PostgreSQL que T-SQL peut ne pas reconnaître.
+ AWS DMS ne prend pas en charge le type de données sql\$1variant.
+ Babelfish sous le point de terminaison Postgres ne prend pas en charge `HEIRARCHYID` les types de données `GEOMETRY` (avant 3.5.4) et `GEOGRAPHY` (avant 3.5.4). Pour migrer ces types de données, vous pouvez ajouter des règles de transformation afin de convertir le type de données en wstring (250).
+ Babelfish ne prend en charge que la migration des types de données `BINARY`, `VARBINARY` et `IMAGE` avec le type de données `BYTEA`. Pour les versions antérieures d’Aurora PostgreSQL, vous pouvez utiliser DMS pour migrer ces tables vers un [point de terminaison cible Babelfish](CHAP_Target.Babelfish.md). Il n’est pas nécessaire de spécifier une longueur pour le type de données `BYTEA`, comme illustré dans l’exemple suivant.

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

  Remplacez le type de données T-SQL précédent par le type de données `BYTEA` pris en charge par T-SQL.

  ```
  [Picture] BYTEA NULL
  ```
+ Pour les versions antérieures d’Aurora PostgreSQL Babelfish, si vous créez une tâche de migration pour une réplication continue de SQL Server vers Babelfish à l’aide du point de terminaison cible PostgreSQL, vous devez affecter le type de données `SERIAL` à toutes les tables utilisant des colonnes `IDENTITY`. À partir d’Aurora PostgreSQL (versions 15.3/14.8 et ultérieures) et de Babelfish (versions 3.2.0 et ultérieures), la colonne d’identité est prise en charge et il n’est plus nécessaire d’affecter le type de données SERIAL. Pour plus d’informations, consultez [Syntaxe de SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) dans la section Séquences et identité du *Manuel de migration de SQL Server vers Aurora PostgreSQL*. Ensuite, lorsque vous créez la table dans Babelfish, modifiez la définition de colonne comme suit.

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

  Modifiez la ligne précédente comme suit.

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

  Aurora PostgreSQL compatible avec Babelfish crée une séquence en utilisant la configuration par défaut et ajoute une contrainte `NOT NULL` à la colonne. La séquence récemment créée se comporte comme une séquence normale (incrémentée de 1) et ne possède aucune option `SERIAL` composite.
+ Après avoir migré les données avec des tables qui utilisent des colonnes `IDENTITY` ou le type de données `SERIAL`, réinitialisez l’objet de séquence basé sur PostgreSQL en fonction de la valeur maximale de la colonne. Après avoir effectué un chargement complet des tables, utilisez la requête T-SQL suivante pour générer des instructions afin d’amorcer l’objet de séquence associé.

  ```
  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(%';
  ```

  La requête génère une série d’instructions SELECT que vous exécutez afin de mettre à jour les valeurs maximales d’IDENTITY et de SERIAL.
+ Pour les versions de Babelfish antérieures à 3.2, le **Mode LOB complet** peut entraîner une erreur de table. Dans ce cas, créez une tâche distincte pour les tables qui n’ont pas pu être chargées. Utilisez ensuite le **Mode LOB limité** pour spécifier la valeur appropriée pour **Taille de LOB maximale (Ko)**. Sinon, vous pouvez définir le paramètre de l’attribut de connexion du point de terminaison SQL Server`ForceFullLob=True`.
+ Pour les versions de Babelfish antérieures à 3.2, la validation des données avec des tables Babelfish qui n’utilisent pas de clés primaires basées sur des entiers génère un message indiquant qu’aucune clé unique appropriée n’a été trouvée. À partir d’Aurora PostgreSQL (versions 15.3/14.8 et ultérieures) et de Babelfish (versions 3.2.0 et ultérieures), la validation des données pour les clés primaires non entières est prise en charge. 
+ En raison des différences de précision dans le nombre de décimales par seconde, DMS signale des échecs de validation des données pour les tables Babelfish qui utilisent les types de données `DATETIME`. Pour éviter ces échecs, vous pouvez ajouter le type de règle de validation suivant pour les types de données `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"
       }
  ```

# Utilisation d'une base de données compatible MySQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

Vous pouvez migrer des données vers n'importe quelle base de données compatible MySQL à l'aide AWS DMS de n'importe quel moteur de données source compatible. AWS DMS Si vous migrez vers une base de données compatible MySQL sur site, votre moteur source AWS DMS doit résider dans l'écosystème. AWS Le moteur peut se trouver sur un service AWS géré tel qu'Amazon RDS, Amazon Aurora ou Amazon S3. Sinon, le moteur peut se trouver sur une base de données autogérée sur Amazon EC2. 

Vous pouvez utiliser SSL pour chiffrer les connexions entre votre point de terminaison compatible MySQL et l'instance de réplication. Pour plus d'informations sur l'utilisation de SSL avec un point de terminaison compatible MySQL, consultez [Utilisation du protocole SSL avec AWS Database Migration Service](CHAP_Security.SSL.md). 

Pour plus d'informations sur les versions de MySQL AWS DMS prises en charge en tant que cible, consultez[Objectifs pour AWS DMS](CHAP_Introduction.Targets.md).

Vous pouvez utiliser les bases de données compatibles MySQL suivantes comme cibles pour : 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

**Note**  
Quel que soit le moteur de stockage source (MyISAM, MEMORY, etc.), AWS DMS crée une table cible compatible MySQL en tant que table InnoDB par défaut.   
Si vous avez besoin d'une table qui utilise un moteur de stockage autre qu'InnoDB, vous pouvez manuellement créer la table sur la cible compatible avec MySQL et migrer la table à l'aide de l'option **Ne rien faire**. Pour de plus amples informations, veuillez consulter [Paramètres de tâche de chargement complet](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Pour plus de détails sur l'utilisation d'une base de données compatible MySQL comme cible pour AWS DMS, consultez les sections suivantes. 

**Topics**
+ [Utiliser n'importe quelle base de données compatible MySQL comme cible pour AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Limitations relatives à l'utilisation d'une base de données compatible MySQL comme cible pour AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Paramètres du point de terminaison lors de l'utilisation d'une base de données compatible MySQL comme cible pour AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Types de données cibles pour MySQL](#CHAP_Target.MySQL.DataTypes)

## Utiliser n'importe quelle base de données compatible MySQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Avant de commencer à utiliser une base de données compatible avec MySQL comme cible pour AWS DMS, assurez-vous que les conditions préalables suivantes sont remplies :
+ Fournissez un compte utilisateur AWS DMS disposant de read/write privilèges d'accès à la base de données compatible MySQL. Pour créer les privilèges nécessaires, exécutez les commandes suivantes.

  ```
  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>'@'%';
  ```
+ Pendant la phase de migration de chargement complet, vous devez désactiver les clés étrangères sur vos tables cibles. Pour désactiver les vérifications par clé étrangère sur une base de données compatible MySQL pendant un chargement complet, vous pouvez ajouter la commande suivante à la section **Attributs de connexion supplémentaires** de la AWS DMS console pour votre point de terminaison cible.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Définissez le paramètre de base de données `local_infile = 1` pour permettre à AWS DMS de charger les données dans la base de données cible.
+ Accordez les privilèges suivants si vous utilisez des évaluations de prémigration spécifiques à 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
  ```

## Limitations relatives à l'utilisation d'une base de données compatible MySQL comme cible pour AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Lorsque vous utilisez une base de données MySQL comme cible, les AWS DMS fonctionnalités suivantes ne sont pas prises en charge :
+ Les instructions en langage de définition de données (DDL) TRUNCATE PARTITION, DROP TABLE et RENAME TABLE.
+ Utilisation d'une instruction `ALTER TABLE table_name ADD COLUMN column_name` pour ajouter des colonnes au début ou au milieu d'une table.
+ Lorsque vous chargez des données sur une cible compatible MySQL dans le cadre d'une tâche à chargement complet, AWS DMS ne signale pas les erreurs causées par des contraintes dans les journaux des tâches, ce qui peut entraîner des erreurs clés dupliquées ou des incohérences avec le nombre d'enregistrements. Cela est dû à la façon dont MySQL gère les données locales avec la commande `LOAD DATA`. Veillez à effectuer les opérations suivantes pendant la phase de chargement complet : 
  + Désactivez les contraintes.
  + Utilisez AWS DMS la validation pour vous assurer que les données sont cohérentes.
+ Lorsque vous mettez à jour la valeur d'une colonne à sa valeur existante, les bases de données compatibles MySQL renvoient un avertissement `0 rows affected`. Bien que ce comportement ne soit pas techniquement une erreur, il est différent de la façon dont la situation est gérée par d'autres moteurs de base de données. Par exemple, Oracle effectue une mise à jour d'une seule ligne. Pour les bases de données compatibles avec MySQL, AWS DMS génère une entrée dans la table de contrôle awsdms\$1apply\$1exceptions et enregistre l'avertissement suivant.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ Aurora sans serveur est disponible en tant que cible pour Amazon Aurora version 2, compatible avec MySQL version 5.7. (Sélectionnez Aurora MySQL version 2.07.1 pour pouvoir utiliser Aurora sans serveur avec la compatibilité MySQL 5.7.) Pour plus d'informations sur Aurora Serverless, consultez la section [Utilisation d'Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) dans le guide de l'*utilisateur Amazon Aurora*.
+ AWS DMS ne prend pas en charge l'utilisation d'un point de terminaison de lecteur pour Aurora ou Amazon RDS, sauf si les instances sont en mode inscriptible, c'est-à-dire que les `innodb_read_only` paramètres `read_only` et sont définis sur ou. `0` `OFF` Pour plus d’informations sur l’utilisation d’Amazon RDS et Aurora en tant que cibles, consultez les rubriques suivantes :
  +  [Détermination de l’instance de base de données à laquelle vous êtes connecté](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [Mise à jour des réplicas en lecture avec MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Lors de la réplication du type de données TIME, une fraction de la valeur temporelle n'est pas répliquée.
+ Lors de la réplication du type de données TIME avec un attribut de connexion supplémentaire`loadUsingCSV=false`, la valeur temporelle est limitée à une plage. `[00:00:00, 23:59:59]`

## Paramètres du point de terminaison lors de l'utilisation d'une base de données compatible MySQL comme cible pour AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible compatible MySQL comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec MySQL en tant que cible sont indiqués dans le tableau suivant.

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

Vous pouvez également utiliser les attributs de connexion supplémentaires pour configurer la base de données cible compatible MySQL.

Le tableau suivant indique les attributs de connexion supplémentaires que vous pouvez utiliser avec MySQL en tant que cible.

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

Vous pouvez également utiliser le paramètre `AfterConnectScript` de la commande `--my-sql-settings` pour désactiver les contrôles de clés étrangères et spécifier le fuseau horaire de la base de données.

## Types de données cibles pour MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

Le tableau suivant indique les types de données cibles de base de données MySQL pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS types de données  |  Types de données MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  Si la longueur est comprise entre 1 et 65 535, utilisez VARBINARY (length).  Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  « Si l'échelle est => 0 et =< 6, alors : DATETIME (Scale) Si l'échelle est => 7 et =< 9, alors : VARCHAR (37) »  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  CHAÎNE  |  Si la longueur est comprise entre 1 et 21 845, utilisez VARCHAR (length). Si la longueur est comprise entre 21 846 et 2 147 483 647, utilisez LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Si la longueur est comprise entre 1 et 32 767, utilisez VARCHAR (length).  Si la longueur est comprise entre 32 768 et 2 147 483 647, utilisez LONGTEXT.  | 
|  BLOB  |  Si la longueur est comprise entre 1 et 65 535, utilisez BLOB. Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez LONGBLOB. Si la longueur est 0, utilisez LONGBLOB (full LOB support).  | 
|  NCLOB  |  Si la longueur est comprise entre 1 et 65 535, utilisez TEXT. Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez LONGTEXT avec ucs2 pour CHARACTER SET. Si la longueur est 0, utilisez LONGTEXT (full LOB support) avec ucs2 pour CHARACTER SET.  | 
|  CLOB  |  Si la longueur est comprise entre 1 et 65 535, utilisez TEXT. Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez LONGTEXT. Si la longueur est 0, utilisez LONGTEXT (full LOB support).  | 

# Utilisation d'une base de données Amazon Redshift comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Vous pouvez migrer les données vers les bases de données Amazon Redshift à l'aide de. AWS Database Migration Service Amazon Redshift est un service d’entrepôt des données entièrement géré dans le cloud. Avec une base de données Amazon Redshift en tant que cible, vous pouvez migrer les données provenant de tous les autres bases de données sources prises en charge.

Vous pouvez utiliser Amazon Redshift Serverless comme cible pour. AWS DMS Pour plus d'informations, consultez [Utilisation AWS DMS avec Amazon Redshift Serverless comme cibleAmazon Redshift sans serveur](#CHAP_Target.Redshift.RSServerless), ci-après.

 Le cluster Amazon Redshift doit se trouver dans le même AWS compte et dans la même AWS région que l'instance de réplication. 

Lors d'une migration de base de données vers Amazon Redshift, déplacez AWS DMS d'abord les données vers un compartiment Amazon S3. Lorsque les fichiers se trouvent dans un compartiment Amazon S3, AWS DMS ils sont transférés vers les tables appropriées de l'entrepôt de données Amazon Redshift. AWS DMS crée le compartiment S3 dans la même AWS région que la base de données Amazon Redshift. L'instance de AWS DMS réplication doit être située dans cette même AWS région. 

Si vous utilisez l'API AWS CLI ou DMS pour migrer des données vers Amazon Redshift, configurez Gestion des identités et des accès AWS un rôle (IAM) pour autoriser l'accès à S3. Pour plus d'informations sur la création de ce rôle IAM, consultez [Création des rôles IAM à utiliser avec AWS DMS](security-iam.md#CHAP_Security.APIRole).

Le point de terminaison Amazon Redshift automatise complètement les éléments suivants :
+ la génération de schéma et le mappage de type de données ;
+ le chargement complet des tables de base de données source ;
+ le chargement incrémentiel des modifications apportées aux tables source ;
+ l'application des modifications de schéma en langage de définition de données (DDL) apportées aux tables de la source ;
+ la synchronisation entre le chargement complet et les traitements de capture des données modifiées (CDC).

AWS Database Migration Service prend en charge à la fois le chargement complet et les opérations de traitement des modifications. AWS DMS lit les données de la base de données source et crée une série de fichiers de valeurs séparées par des virgules (.csv). Pour les opérations de chargement complet, AWS DMS crée des fichiers pour chaque table. AWS DMS copie ensuite les fichiers de table pour chaque table dans un dossier distinct dans Amazon S3. Lorsque les fichiers sont chargés sur Amazon S3, AWS DMS envoie une commande de copie et les données contenues dans les fichiers sont copiées dans Amazon Redshift. Pour les opérations de traitement des modifications, AWS DMS copie les modifications nettes dans les fichiers .csv. AWS DMS télécharge ensuite les fichiers net change sur Amazon S3 et copie les données sur Amazon Redshift.

Pour plus d'informations sur l'utilisation d'Amazon Redshift comme cible pour AWS DMS, consultez les sections suivantes : 

**Topics**
+ [Conditions préalables à l'utilisation d'une base de données Amazon Redshift comme cible pour AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Privilèges requis pour utiliser Redshift en tant que cible](#CHAP_Target.Redshift.Privileges)
+ [Limitations relatives à l'utilisation d'Amazon Redshift comme cible pour AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Configuration d'une base de données Amazon Redshift en tant que cible pour AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Utilisation d'un routage VPC amélioré avec Amazon Redshift comme cible pour AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Création et utilisation de AWS KMS clés pour chiffrer les données cibles d'Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Paramètres du point de terminaison lors de l'utilisation d'Amazon Redshift comme cible pour AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Utilisation d’une clé de chiffrement des données et d’un compartiment Amazon S3 comme stockage intermédiaire](#CHAP_Target.Redshift.EndpointSettings)
+ [Paramètres de tâche multithread pour Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Types de données cibles pour Amazon Redshift](#CHAP_Target.Redshift.DataTypes)
+ [Utilisation AWS DMS avec Amazon Redshift Serverless comme cible](#CHAP_Target.Redshift.RSServerless)

## Conditions préalables à l'utilisation d'une base de données Amazon Redshift comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

La liste suivante décrit les conditions requises pour l’utilisation d’Amazon Redshift en tant que cible pour la migration des données :
+ Utilisez la console AWS de gestion pour lancer un cluster Amazon Redshift. Notez les informations de base concernant votre AWS compte et votre cluster Amazon Redshift, telles que votre mot de passe, votre nom d'utilisateur et le nom de la base de données. Vous avez besoin de ces valeurs lors de la création du point de terminaison cible Amazon Redshift. 
+ Le cluster Amazon Redshift doit se trouver dans le même AWS compte et dans la même AWS région que l'instance de réplication.
+ L'instance de AWS DMS réplication a besoin d'une connectivité réseau avec le point de terminaison Amazon Redshift (nom d'hôte et port) utilisé par votre cluster.
+ AWS DMS utilise un compartiment Amazon S3 pour transférer des données vers la base de données Amazon Redshift. Pour que AWS DMS crée le compartiment, la console doit utiliser un rôle IAM `dms-access-for-endpoint`. Si vous utilisez l'API AWS CLI ou DMS pour créer une migration de base de données avec Amazon Redshift comme base de données cible, vous devez créer ce rôle IAM. Pour plus d'informations sur la création de ce rôle, consultez la page [Création des rôles IAM à utiliser avec AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS convertit BLOBs CLOBs, et NCLOBs en un VARCHAR sur l'instance Amazon Redshift cible. Amazon Redshift ne prend pas en charge les types de données VARCHAR supérieurs à 64 Ko. Vous ne pouvez donc pas stocker de données traditionnelles sur Amazon LOBs Redshift. 
+ Définissez le paramètre de tâche de métadonnées cible [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)sur `true` for AWS DMS pour gérer les modifications apportées aux tables cibles Amazon Redshift pendant le CDC. Une clé primaire sur la table source et la table cible est requise. Sans clé primaire, les modifications sont appliquées instruction par instruction. Ce qui peut nuire aux performances des tâches pendant la CDC en provoquant une latence cible et en affectant la file d'attente de validation du cluster. 
+ Lorsque la sécurité au niveau des lignes est activée sur les tables de Redshift, vous devez accorder les autorisations appropriées à tous les utilisateurs de votre DMS.

## Privilèges requis pour utiliser Redshift en tant que cible
<a name="CHAP_Target.Redshift.Privileges"></a>

Utilisez la commande GRANT pour définir les privilèges d’accès pour un utilisateur ou un groupe d’utilisateurs. Les privilèges incluent les options d'accès telles que pouvoir lire les données des tables et des vues, écrire des données et créer des tables. Pour plus d’informations sur l’utilisation de GRANT avec Amazon Redshift, consultez [GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) dans le *Guide du développeur de base de données Amazon Redshift*. 

La syntaxe suivante s’applique à accorder des privilèges spécifiques pour une table, une base de données, un schéma, une fonction, une procédure ou des privilèges de niveau langue sur les tables et les vues 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 } [, ...]
```

La syntaxe suivante s'applique aux privilèges de niveau colonne sur les tables et les vues Amazon Redshift. 

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

Voici la syntaxe du privilège ASSUMEROLE accordé aux utilisateurs et aux groupes ayant un rôle spécifié.

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

## Limitations relatives à l'utilisation d'Amazon Redshift comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

Les limitations suivantes s’appliquent lors de l’utilisation d’une base de données Amazon Redshift en tant que cible :
+ N’activez pas la gestion des versions pour le compartiment S3 que vous utilisez comme stockage intermédiaire pour votre cible Amazon Redshift. Si vous avez besoin de la gestion des versions S3, utilisez des politiques de cycle de vie pour supprimer les anciennes versions de manière active. Dans le cas contraire, la connexion de test du point de terminaison risque d’échouer en raison du délai d’attente d’appel `list-object` S3. Pour créer une politique de cycle de vie pour un compartiment S3, consultez [Gestion du cycle de vie de votre stockage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Pour supprimer une version d’un objet S3, consultez [Suppression des versions d’objet d’un compartiment activé pour la gestion des versions](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ La commande DDL suivante n'est pas prise en charge :

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS Impossible de migrer ou de répliquer les modifications apportées à un schéma dont le nom commence par un trait de soulignement (\$1). Si vous avez des schémas dont le nom commence par un trait de soulignement, utilisez les transformations de mappage pour renommer le schéma sur la cible. 
+  Amazon Redshift ne prend pas en charge une VARCHARs taille supérieure à 64 Ko. LOBs provenant de bases de données traditionnelles ne peuvent pas être stockées dans Amazon Redshift.
+  L'application d'une instruction DELETE à une table avec une clé primaire à plusieurs colonnes n'est pas prise en charge lorsque l'un des noms de colonne de clé primaire utilise un mot réservé. Pour obtenir la liste des mots réservés Amazon Redshift, consultez [cette page](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html).
+ Vous pouvez rencontrer des problèmes de performances si votre système source exécute des opérations UPDATE sur la clé primaire d’une table source. Ces problèmes de performances se produisent lors de l’application de modifications à la cible. Cela est dû au fait que les opérations UPDATE (et DELETE) dépendent de la valeur de la clé primaire pour identifier la ligne cible. Si vous mettez à jour la clé primaire d’une table source, votre journal des tâches contiendra des messages tels que les suivants :

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ DMS ne prend pas en charge les noms DNS personnalisés lors de la configuration d'un point de terminaison pour un cluster Redshift, et vous devez utiliser le nom DNS fourni par Amazon. Étant donné que le cluster Amazon Redshift doit se trouver dans le même AWS compte et dans la même région que l'instance de réplication, la validation échoue si vous utilisez un point de terminaison DNS personnalisé.
+ Le délai d’expiration des sessions inactives par défaut d’Amazon Redshift est de 4 heures. Lorsqu’il n’y a aucune activité dans le cadre de la tâche de réplication DMS, Redshift déconnecte la session au bout de 4 heures. Des erreurs peuvent survenir si DMS ne parvient pas à se connecter et doit éventuellement redémarrer. Pour contourner le problème, définissez une limite SESSION TIMEOUT supérieure à 4 heures pour l’utilisateur de réplication DMS. Vous pouvez également consulter la description de [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) dans le *Guide du développeur de base de données Amazon Redshift*.
+ Lors de AWS DMS la réplication des données de la table source sans clé principale ou unique, la latence du CDC peut être élevée, ce qui se traduit par un niveau de performance inacceptable.
+ La troncature des partitions n'est pas prise en charge lors de la réplication CDC d'une source Oracle vers une cible Redshift.
+ Des enregistrements dupliqués peuvent apparaître dans les tables cibles car Amazon Redshift n'applique pas les clés primaires et AWS DMS peut rejouer le CDC lorsqu'une tâche est reprise. Pour éviter les doublons, utilisez le `ApplyErrorInsertPolicy=INSERT_RECORD` paramètre. Pour de plus amples informations, veuillez consulter [Paramètres de traitement des erreurs pour une tâche](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). Vous pouvez également mettre en œuvre des procédures de détection des doublons et de nettoyage après la migration au niveau de l'application.

## Configuration d'une base de données Amazon Redshift en tant que cible pour AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service doit être configuré pour fonctionner avec l'instance Amazon Redshift. Le tableau suivant décrit les propriétés de configuration disponibles pour le point de terminaison Amazon Redshift.


| Propriété | Description | 
| --- | --- | 
| serveur | Nom du cluster Amazon Redshift que vous utilisez. | 
| port | Numéro de port d’Amazon Redshift. La valeur par défaut est 5439. | 
| nom d’utilisateur | Nom d’utilisateur Amazon Redshift d’un utilisateur enregistré. | 
| mot de passe | Mot de passe de l'utilisateur nommé dans la propriété de nom d'utilisateur. | 
| database | Nom de l’entrepôt des données (service) Amazon Redshift que vous utilisez. | 

Si vous souhaitez ajouter des attributs de chaîne de connexion supplémentaires au point de terminaison Amazon Redshift, vous pouvez spécifier les attributs `maxFileSize` et `fileTransferUploadStreams`. Pour plus d'informations sur ces attributs, consultez la page [Paramètres du point de terminaison lors de l'utilisation d'Amazon Redshift comme cible pour AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Utilisation d'un routage VPC amélioré avec Amazon Redshift comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Si vous utilisez le routage VPC amélioré avec votre cible Amazon Redshift, l’ensemble du trafic COPY entre votre cluster Amazon Redshift et vos référentiels de données passe par votre VPC. Étant donné que le routage VPC amélioré affecte la manière dont Amazon Redshift accède aux autres ressources, les commandes COPY risquent d’échouer si vous n’avez pas configuré correctement votre VPC.

AWS DMS peut être affecté par ce comportement car il utilise la commande COPY pour déplacer des données dans S3 vers un cluster Amazon Redshift.

Voici les étapes à suivre AWS DMS pour charger des données dans une cible Amazon Redshift :

1. AWS DMS copie les données de la source vers des fichiers .csv sur le serveur de réplication.

1. AWS DMS utilise le AWS SDK pour copier les fichiers .csv dans un compartiment S3 de votre compte.

1. AWS DMS utilise ensuite la commande COPY dans Amazon Redshift pour copier les données des fichiers .csv dans S3 vers une table appropriée dans Amazon Redshift.

Si le routage VPC amélioré n'est pas activé, Amazon Redshift achemine le trafic via Internet, y compris le trafic vers d'autres services du réseau. AWS Si la fonction n'est pas activée, vous n'avez pas à configurer le chemin d'accès réseau. Si la fonction est activée, vous devez créer spécifiquement un chemin d'accès réseau entre le VPC de votre cluster et vos ressources de données. Pour plus d’informations sur la configuration requise, consultez [Routage VPC amélioré](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) dans la documentation d’Amazon Redshift. 

## Création et utilisation de AWS KMS clés pour chiffrer les données cibles d'Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

Vous pouvez chiffrer vos données cibles transmises à Amazon S3 avant de les copier sur Amazon Redshift. Pour ce faire, vous pouvez créer et utiliser des AWS KMS clés personnalisées. Vous pouvez utiliser la clé que vous avez créée pour chiffrer vos données cibles à l’aide de l’un des mécanismes suivants lorsque vous créez le point de terminaison cible Amazon Redshift :
+ Utilisez l'option suivante lorsque vous exécutez la commande `create-endpoint` à l'aide de l' AWS CLI.

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

  Ici, `your-kms-key-ARN` est l'Amazon Resource Name (ARN) pour votre clé KMS. Pour de plus amples informations, veuillez consulter [Utilisation d’une clé de chiffrement des données et d’un compartiment Amazon S3 comme stockage intermédiaire](#CHAP_Target.Redshift.EndpointSettings).
+ Définissez l'attribut de connexion supplémentaire `encryptionMode` à la valeur `SSE_KMS` et l'attribut de connexion supplémentaire `serverSideEncryptionKmsKeyId` à l'ARN de votre clé KMS. Pour de plus amples informations, veuillez consulter [Paramètres du point de terminaison lors de l'utilisation d'Amazon Redshift comme cible pour AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Pour chiffrer les données cibles Amazon Redshift à l'aide d'une clé KMS, vous avez besoin Gestion des identités et des accès AWS d'un rôle (IAM) autorisé à accéder aux données Amazon Redshift. Ce rôle IAM est ensuite accessible dans une stratégie (stratégie de clé) attachée à la clé de chiffrement que vous créez. Pour ce faire, créez les éléments suivants dans votre console IAM :
+ Un rôle IAM avec une politique AWS gérée.
+ Une clé KMS avec une stratégie de clé qui fait référence à ce rôle.

Les procédures suivantes décrivent la marche à suivre.

**Pour créer un rôle IAM avec la politique gérée requise AWS**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le panneau de navigation, choisissez **Rôles**. La page **Rôles** s'ouvre.

1. Choisissez **Créer un rôle**. La page **Créer un rôle** s'ouvre.

1. Choisissez **Service AWS ** en tant qu’entité de confiance, puis **DMS** en tant que service utilisant le rôle.

1. Choisissez **Suivant : Autorisations**. La page **Attach permissions policies (Attacher des stratégies d'autorisation)** s'affiche.

1. Recherchez et sélectionnez la stratégie `AmazonDMSRedshiftS3Role`.

1. Choisissez **Suivant : Balises**. La page **Ajouter des balises** s’affiche. Ici, vous pouvez ajouter toutes les balises souhaitées.

1. Choisissez **Next: Review (Suivant : Vérification)** et vérifiez vos résultats.

1. Si les paramètres correspondent à vos besoins, saisissez un nom pour le rôle (par exemple, `DMS-Redshift-endpoint-access-role`) et une description supplémentaire si vous le souhaitez, puis choisissez **Créer un rôle**. La page **Rôles** s'ouvre avec un message indiquant que votre rôle a été créé.

Vous avez désormais créé le nouveau rôle pour accéder aux ressources Amazon Redshift en vue du chiffrement avec un nom spécifié, par exemple `DMS-Redshift-endpoint-access-role`.

**Pour créer une clé de AWS KMS chiffrement avec une politique de clé qui fait référence à votre rôle IAM**
**Note**  
Pour plus d'informations sur le AWS DMS fonctionnement des clés de AWS KMS chiffrement, consultez[Configuration d'une clé de chiffrement et spécification AWS KMS des autorisations](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Connectez-vous à la console AWS Key Management Service (AWS KMS) AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/kms.](https://console.aws.amazon.com/kms)

1. Pour modifier le Région AWS, utilisez le sélecteur de région dans le coin supérieur droit de la page.

1. Dans le panneau de navigation, choisissez **Clés gérées par le client**.

1. Choisissez **Create key**. La page **Configurer la clé** s'ouvre.

1. Pour **Type de clé**, choisissez **Symétrique**.
**Note**  
Lorsque vous créez cette clé, vous ne pouvez créer qu'une clé symétrique, car tous les AWS services, tels qu'Amazon Redshift, ne fonctionnent qu'avec des clés de chiffrement symétriques.

1. Choisissez **Options avancées**. Pour **Origine des éléments de clé**, assurez-vous que **KMS** est choisi, puis choisissez **Suivant**. La page **Ajouter des étiquettes** s'ouvre.

1. Dans **Créer un alias et une description**, entrez un alias pour la clé (par exemple, `DMS-Redshift-endpoint-encryption-key`) et toute description supplémentaire.

1. Pour **Balises**, ajoutez les balises que vous souhaitez pour vous aider à identifier la clé et suivre son utilisation, puis choisissez **Suivant**. La page **Définir des autorisations d'administration de clé** s'ouvre et affiche une liste d'utilisateurs et de rôles parmi lesquels vous pouvez choisir.

1. Ajoutez les utilisateurs et les rôles que vous souhaitez voir gérer la clé. Assurez-vous que ces utilisateurs et ces rôles ont les autorisations requises pour gérer la clé. 

1. Pour **Suppression de clé**, choisissez si les administrateurs de clé peuvent supprimer celle-ci, puis choisissez **Suivant**. La page **Définir des autorisations d'utilisation de clé** s'ouvre et affiche une liste supplémentaire d'utilisateurs et de rôles parmi lesquels vous pouvez choisir.

1. Pour **Ce compte**, choisissez les utilisateurs disponibles pour lesquels vous souhaitez effectuer des opérations de chiffrement sur des cibles Amazon Redshift. Choisissez également le rôle que vous avez créé précédemment dans **Rôles** pour activer l’accès au chiffrement des objets cibles Amazon Redshift, par exemple `DMS-Redshift-endpoint-access-role`.

1. Si vous souhaitez ajouter d'autres comptes ne figurant pas dans la liste pour avoir ce même accès, dans **Autres AWS comptes**, choisissez **Ajouter un autre AWS compte**, puis cliquez sur **Suivant**. La page **Réviser et modifier la stratégie de clé** s'ouvre, affichant le JSON de la stratégie de clé que vous pouvez réviser et modifier en saisissant les informations dans le JSON existant. Ici, vous pouvez voir où la stratégie clé fait référence au rôle et aux utilisateurs (par exemple, `Admin` et `User1`) que vous avez choisis à l'étape précédente. Vous pouvez également voir les actions clés autorisées pour les différents mandataires (utilisateurs et rôles), comme illustré dans l'exemple suivant.

------
#### [ 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. Choisissez **Finish** (Terminer). La page **Clés de chiffrement** s'ouvre avec un message indiquant que votre AWS KMS key compte a été créé.

Vous venez de créer une nouvelle clé KMS avec un alias spécifié (par exemple, `DMS-Redshift-endpoint-encryption-key`). Cette clé permet AWS DMS de chiffrer les données cibles Amazon Redshift.

## Paramètres du point de terminaison lors de l'utilisation d'Amazon Redshift comme cible pour AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible Amazon Redshift comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--redshift-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Amazon Redshift en tant que cible sont indiqués dans le tableau suivant.

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

## Utilisation d’une clé de chiffrement des données et d’un compartiment Amazon S3 comme stockage intermédiaire
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

Vous pouvez utiliser les paramètres de point de terminaison cible Amazon Redshift pour configurer les éléments suivants :
+ Une clé de chiffrement de AWS KMS données personnalisée. Vous pouvez ensuite utiliser cette clé pour chiffrer vos données transmises à Amazon S3 avant qu’elles ne soient copiées sur Amazon Redshift.
+ Un compartiment S3 personnalisé en tant que stockage intermédiaire pour les données migrées vers Amazon Redshift.
+ Mappez un booléen en tant que booléen provenant d’une source PostgreSQL. Par défaut, un type BOOLEAN est migré au format varchar(1). Vous pouvez indiquer à `MapBooleanAsBoolean` d’autoriser votre cible Redshift à migrer le type booléen en tant que booléen, comme illustré dans l’exemple suivant.

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

  Notez que vous devez définir ce paramètre à la fois sur les points de terminaison sources et cibles pour qu’il prenne effet.

### Paramètres de clé KMS pour le chiffrement des données
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

Les exemples suivants illustrent la configuration d'une clé KMS personnalisée pour chiffrer vos données transmises à S3. Pour commencer, vous pouvez effectuer l'appel `create-endpoint` suivant à l’aide de l' AWS CLI.

```
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"}'
```

Ici, l'objet JSON spécifié par l'option `--redshift-settings` définit deux paramètres. Le premier est le paramètre `EncryptionMode` avec la valeur `SSE_KMS`. L'autre est le paramètre `ServerSideEncryptionKmsKeyId` avec la valeur `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Cette valeur est un Amazon Resource Name (ARN) pour votre clé KMS personnalisée.

Par défaut, le chiffrement de données S3 a lieu à l’aide du chiffrement côté serveur S3. Pour la cible Amazon Redshift de l’exemple précédent, cela équivaut à spécifier ses paramètres de point de terminaison, comme dans l’exemple suivant.

```
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"}'
```

Pour plus d’informations sur l’utilisation du chiffrement côté serveur S3, consultez [Protection des données à l’aide du chiffrement côté serveur](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

**Note**  
Vous pouvez également utiliser la commande CLI `modify-endpoint` pour modifier la valeur du paramètre `EncryptionMode` d’un point de terminaison existant de `SSE_KMS` à `SSE_S3`. Vous ne pouvez pas modifier la valeur `EncryptionMode` de `SSE_S3` à `SSE_KMS`.

### Paramètres du compartiment Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Lorsque vous migrez des données vers un point de terminaison cible Amazon Redshift, utilisez AWS DMS un compartiment Amazon S3 par défaut comme stockage de tâches intermédiaire avant de copier les données migrées vers Amazon Redshift. Par exemple, les exemples indiqués pour la création d’un point de terminaison cible Amazon Redshift avec une clé de chiffrement des données AWS KMS utilisent ce compartiment S3 par défaut (voir [Paramètres de clé KMS pour le chiffrement des données](#CHAP_Target.Redshift.EndpointSettings.KMSkeys)). 

Vous pouvez plutôt spécifier un compartiment S3 personnalisé pour ce stockage intermédiaire en incluant les paramètres suivants dans la valeur de votre `--redshift-settings` option sur la AWS CLI `create-endpoint` commande :
+ `BucketName` : chaîne que vous spécifiez comme le nom de stockage du compartiment S3. Si votre rôle d’accès au service est basé sur la politique `AmazonDMSRedshiftS3Role`, cette valeur doit avoir le préfixe `dms-`, par exemple, `dms-my-bucket-name`.
+ `BucketFolder` : (Facultatif) chaîne que vous pouvez spécifier comme nom du dossier de stockage dans le compartiment S3 spécifié.
+ `ServiceAccessRoleArn` : ARN d’un rôle IAM qui autorise un accès administratif au compartiment S3. Généralement, vous créez ce rôle en fonction de la stratégie `AmazonDMSRedshiftS3Role`. Pour obtenir un exemple, consultez la procédure permettant de créer un rôle IAM avec la stratégie gérée par AWS requise dans [Création et utilisation de AWS KMS clés pour chiffrer les données cibles d'Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**Note**  
Si vous spécifiez l'ARN d'un autre rôle IAM à l'aide de l'option `--service-access-role-arn` de la commande `create-endpoint`, cette option de rôle IAM est prioritaire.

L’exemple suivant montre comment utiliser ces paramètres pour spécifier un compartiment Amazon S3 personnalisé dans l’appel `create-endpoint` suivant à l’aide d’ AWS CLI. 

```
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"}'
```

## Paramètres de tâche multithread pour Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

Vous pouvez améliorer les performances des tâches de chargement complet et de capture des données de modification (CDC) pour un point de terminaison cible Amazon Redshift en utilisant des paramètres de tâche multithread. Ils vous permettent de spécifier le nombre de threads simultanés et le nombre d’enregistrements à stocker dans un tampon.

### Paramètres de tâche de chargement complet multithread pour Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Pour améliorer les performances de chargement complet, vous pouvez utiliser les paramètres de tâche `ParallelLoad*` suivants :
+ `ParallelLoadThreads` : spécifie le nombre de threads simultanés utilisés par DMS pendant un chargement complet pour transférer des enregistrements de données vers un point de terminaison cible Amazon Redshift. La valeur par défaut est zéro (0) et la valeur maximale est 32. Pour de plus amples informations, veuillez consulter [Paramètres de tâche de chargement complet](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  Définissez l’attribut `enableParallelBatchInMemoryCSVFiles` sur `false` lorsque vous utilisez le paramètre de tâche `ParallelLoadThreads`. L’attribut améliore les performances des tâches de chargement complet multithread de grande taille en permettant à DMS d’écrire sur le disque plutôt que dans la mémoire. La valeur par défaut est `true`.
+ `ParallelLoadBufferSize` : spécifie le nombre maximal de demandes d’enregistrement de données lors de l’utilisation de threads de chargement parallèle avec la cible Redshift. La valeur par défaut est 100 et la valeur maximale est 1 000. Nous vous recommandons d'utiliser cette option lorsque ParallelLoadThreads > 1 (supérieur à un).

**Note**  
Support pour l'utilisation des paramètres des `ParallelLoad*` tâches pendant le chargement complet sur les points de terminaison cibles Amazon Redshift est disponible dans AWS DMS les versions 3.4.5 et supérieures.  
Le paramètre de point de terminaison Redshift `ReplaceInvalidChars` n’est pas pris en charge pour être utilisé lors de la capture des données de modification (CDC) ou lors d’une tâche de migration FULL LOAD compatible avec le chargement parallèle. Il est pris en charge pour la migration FULL LOAD lorsque le chargement parallèle n’est pas activé. Pour plus d'informations, voir le [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)Guide de *référence de l'AWS Database Migration Service API*

### Paramètres de tâche de CDC multithread pour Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Pour améliorer les performances de la CDC, vous pouvez utiliser les paramètres de tâche `ParallelApply*` suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Amazon Redshift. La valeur par défaut est zéro (0) et la valeur maximale est 32. La valeur minimale recommandée est le nombre de tranches présentes dans votre cluster.
+ `ParallelApplyBufferSize` : spécifie le nombre maximal de demandes d’enregistrement de données lors de l’utilisation de threads d’application parallèle avec la cible Redshift. La valeur par défaut est 100 et la valeur maximale est 1 000. Nous recommandons d'utiliser cette option lorsque ParallelApplyThreads > 1 (supérieur à un). 

  Pour tirer le meilleur parti de Redshift en tant que cible, nous recommandons que la valeur de `ParallelApplyBufferSize` soit au moins deux fois supérieure à la valeur de `ParallelApplyThreads`.

**Note**  
Support pour l'utilisation des paramètres des `ParallelApply*` tâches pendant les points de terminaison cibles CDC vers Amazon Redshift est disponible dans AWS DMS les versions 3.4.3 et supérieures.

Le niveau de parallélisme appliqué dépend de la corrélation entre la *taille de lot* totale et la *taille de fichier maximale* utilisées pour transférer les données. Lorsque vous utilisez des paramètres de tâche de CDC multithread avec une cible Redshift, vous tirez le meilleur parti lorsque la taille de lot est supérieure à la taille de fichier maximale. Par exemple, vous pouvez utiliser la combinaison suivante de paramètres de point de terminaison et de tâche pour optimiser les performances. 

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

// Task settings

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

En utilisant les paramètres de l’exemple précédent, un client ayant une charge de travail transactionnelle importante tire le meilleur parti de sa mémoire tampon par lots, qui contient 8 000 enregistrements, est remplie en 1 800 secondes et utilise 32 threads parallèles avec une taille de fichier maximale de 250 Mo.

Pour de plus amples informations, veuillez consulter [Paramètres de réglage du traitement des modifications](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**Note**  
Les requêtes DMS exécutées pendant la réplication continue vers un cluster Redshift peuvent partager la même file d’attente WLM (gestion de la charge de travail) avec les autres requêtes d’application en cours d’exécution. Pensez donc à configurer correctement les propriétés WLM afin d’influencer les performances lors de la réplication continue vers une cible Redshift. Par exemple, si d’autres requêtes ETL parallèles sont en cours d’exécution, DMS s’exécute plus lentement et les gains de performances sont perdus.

## Types de données cibles pour Amazon Redshift
<a name="CHAP_Target.Redshift.DataTypes"></a>

Le point de terminaison Amazon Redshift pour AWS DMS prend en charge la plupart des types de données Amazon Redshift. Le tableau suivant indique les types de données cibles Amazon Redshift pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


| AWS DMS types de données | Types de données Amazon Redshift | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (Length) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Si l’échelle est => 0 et =< 6, selon le type de colonne cible Redshift, alors : TIMESTAMP (s) TIMESTAMPTZ (s) : si l’horodatage source contient un décalage de zone (comme dans SQL Server ou Oracle), il est converti en UTC lors de l’insertion/de la mise à jour. S’il ne contient pas de décalage, l’heure est déjà prise en compte en UTC. Si l'échelle est => 7 et =< 9, alors :  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Si l'échelle est => 0 et =< 37, alors :  NUMERIC (p,s)  Si l'échelle est => 38 et =< 127, alors :  VARCHAR (Length) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| CHAÎNE | Si la longueur est comprise entre 1 et 65 535, utilisez VARCHAR (longueur en octets)  Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez VARCHAR (65535) | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Si la longueur est comprise entre 1 et 65 535, utilisez NVARCHAR (longueur en octets)  Si la longueur est comprise entre 65 536 et 2 147 483 647, utilisez NVARCHAR (65535) | 
| BLOB | VARCHAR (taille de LOB maximale \$12)  La taille de LOB maximale ne peut pas dépasser 31 Ko. Amazon Redshift ne prend pas en charge une VARCHARs taille supérieure à 64 Ko. | 
| NCLOB | NVARCHAR (taille de LOB maximale)  La taille de LOB maximale ne peut pas dépasser 63 Ko. Amazon Redshift ne prend pas en charge une VARCHARs taille supérieure à 64 Ko. | 
| CLOB | VARCHAR (taille de LOB maximale)  La taille de LOB maximale ne peut pas dépasser 63 Ko. Amazon Redshift ne prend pas en charge une VARCHARs taille supérieure à 64 Ko. | 

## Utilisation AWS DMS avec Amazon Redshift Serverless comme cible
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS prend en charge l'utilisation d'Amazon Redshift Serverless comme point de terminaison cible. Pour en savoir plus sur l’utilisation d’Amazon Redshift sans serveur, consultez [Amazon Redshift sans serveur](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html) dans le [Guide de gestion Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html).

Cette rubrique décrit comment utiliser un point de terminaison Amazon Redshift Serverless avec. AWS DMS

**Note**  
Lorsque vous créez un point de terminaison Amazon Redshift sans serveur, pour le **DatabaseName**champ de configuration de votre [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)point de terminaison, utilisez soit le nom de l'entrepôt de données Amazon Redshift, soit le nom du point de terminaison du groupe de travail. Pour le **ServerName**champ, utilisez la valeur du point de terminaison affichée sur la page du **groupe de travail** pour le cluster sans serveur (par exemple,`default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com`). Pour en savoir plus sur la création d’un point de terminaison, consultez [Création de points de terminaison source et cible](CHAP_Endpoints.Creating.md). Pour en savoir plus sur le point de terminaison de groupe de travail, consultez [Connexion à Amazon Redshift sans serveur](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Politique d’approbation avec Amazon Redshift sans serveur en tant que cible
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Lorsque vous utilisez Amazon Redshift sans serveur en tant que point de terminaison cible, vous devez ajouter la section surlignée suivante à votre politique d’approbation. Cette politique d’approbation est liée au rôle `dms-access-for-endpoint`.

Pour plus d'informations sur l'utilisation d'une politique de confiance avec AWS DMS, consultez[Création des rôles IAM à utiliser avec AWS DMS](security-iam.md#CHAP_Security.APIRole).

### Limitations lors de l’utilisation d’Amazon Redshift sans serveur en tant que cible
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

L’utilisation de Redshift sans serveur en tant que cible présente les limitations suivantes :
+ AWS DMS prend uniquement en charge Amazon Redshift Serverless en tant que point de terminaison dans les régions qui prennent en charge Amazon Redshift Serverless. Pour en savoir plus sur les régions qui prennent en charge Amazon Redshift sans serveur, consultez **API Redshift sans serveur** dans la rubrique [Points de terminaison et quotas Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) de la [Référence générale AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html).
+ Lorsque vous utilisez le routage VPC amélioré, assurez-vous de créer un point de terminaison Amazon S3 dans le même VPC que votre cluster Redshift sans serveur ou Redshift provisionné. Pour de plus amples informations, veuillez consulter [Utilisation d'un routage VPC amélioré avec Amazon Redshift comme cible pour AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS ne prend pas en charge le débit amélioré pour Amazon Redshift Serverless en tant que cible. Pour de plus amples informations, veuillez consulter [Débit amélioré pour les migrations à chargement complet d'Oracle vers Amazon Redshift et Amazon S3](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS ne prend pas en charge les connexions à Amazon Redshift Redshift Serverless lorsque le mode SSL est défini sur. `verify-full` Pour les connexions nécessitant une vérification SSL vers des cibles Amazon Redshift Serverless, utilisez d'autres modes SSL tels que ou. `require` `verify-ca`

# Utilisation d'une base de données SAP ASE comme cible pour AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

Vous pouvez migrer des données vers des bases de données SAP Adaptive Server Enterprise (ASE), anciennement connu sous le nom de Sybase AWS DMS, en utilisant l'une des sources de base de données prises en charge.

Pour plus d'informations sur les versions de SAP ASE prises AWS DMS en charge en tant que cible, consultez[Objectifs pour AWS DMS](CHAP_Introduction.Targets.md).

## Conditions préalables à l'utilisation d'une base de données SAP ASE comme cible pour AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Avant de commencer à travailler avec une base de données SAP ASE comme cible AWS DMS, assurez-vous de remplir les conditions préalables suivantes :
+ Fournissez un accès au compte SAP ASE à l' AWS DMS utilisateur. Cet utilisateur doit disposer de read/write privilèges dans la base de données SAP ASE.
+ Dans certains cas, vous pouvez répliquer vers SAP ASE version 15.7 installée sur une instance Amazon EC2 de Microsoft Windows configurée avec des caractères non latins (par exemple, chinois). Dans ce cas, AWS DMS SAP ASE 15.7 doit SP121 être installé sur la machine SAP ASE cible.

## Limitations liées à l'utilisation d'une base de données SAP ASE comme cible pour AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

Les limitations suivantes s’appliquent lors de l’utilisation d’une base de données SAP ASE en tant que cible pour AWS DMS :
+ AWS DMS ne prend pas en charge les tables qui incluent des champs contenant les types de données suivants. Les colonnes répliquées avec ces types de données s'affichent en tant que valeurs NULL. 
  + Type défini par l'utilisateur (UDT)

## Paramètres du point de terminaison lors de l'utilisation de SAP ASE comme cible pour AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible SAP ASE comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec SAP ASE en tant que cible sont indiqués dans le tableau suivant.

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

## Types de données cibles pour SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

Le tableau suivant indique les types de données cibles de base de données SAP ASE pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS types de données  |  Type de données SAP ASE  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (Length) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Si l'échelle est => 0 et =< 6, alors : BIGDATETIME  Si l'échelle est => 7 et =< 9, alors : VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| CHAÎNE | VARCHAR (Length) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (Length) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Utiliser Amazon S3 comme cible pour AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Vous pouvez migrer des données vers Amazon S3 à AWS DMS partir de l'une des sources de base de données prises en charge. Lorsque vous utilisez Amazon S3 comme cible dans une AWS DMS tâche, les données de chargement complet et de capture des données de modification (CDC) sont écrites au format de valeurs séparées par des virgules (.csv) par défaut. Pour plus d'options de stockage compact et de requêtes plus rapides, vous avez également la possibilité d'écrire les données au format Apache Parquet (.parquet). 

AWS DMS nomme les fichiers créés lors d'un chargement complet à l'aide d'un compteur hexadécimal incrémentiel, par exemple LOAD00001 .csv,... LOAD00002 LOAD00009, LOAD0000 A, etc. pour les fichiers .csv. AWS DMS nomme les fichiers CDC à l'aide d'horodatages, par exemple 20141029-1134010000.csv. Pour chaque table source contenant des enregistrements, AWS DMS crée un dossier sous le dossier cible spécifié (si la table source n'est pas vide). AWS DMS écrit tous les fichiers CDC et à chargement complet dans le compartiment Amazon S3 spécifié. Vous pouvez contrôler la taille des fichiers créés à l'aide du paramètre du [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)point de terminaison. AWS DMS 

Le paramètre `bucketFolder` contient l'emplacement où les fichiers .csv ou .parquet sont stockés avant d'être téléchargés vers le compartiment S3. Avec les fichiers .csv, les données de la table sont stockées dans le compartiment S3 au format suivant (l’exemple s’applique à des fichiers de chargement complet).

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

Vous pouvez spécifier le délimiteur de colonne, le délimiteur de ligne et d'autres paramètres à l'aide des attributs de connexion supplémentaires. Pour obtenir plus d'informations sur les attributs de connexion supplémentaires, consultez [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring) à la fin de cette section.

Pour éviter toute usurpation d'identité, AWS DMS valide la propriété du bucket avant d'effectuer des opérations. Par défaut, lorsque le paramètre du point de terminaison `ExpectedBucketOwner` Amazon S3 n'est pas spécifié, il AWS DMS utilise l'ID de AWS compte qui détient le rôle de AWS DMS service en tant que propriétaire attendu du compartiment.

Pour migrer des données vers un compartiment S3 appartenant à un autre AWS compte, vous devez spécifier explicitement le propriétaire réel du compartiment dans le paramètre du point de terminaison `ExpectedBucketOwner` Amazon S3, comme indiqué ci-dessous. Dans le cas contraire, la tâche de réplication entre comptes échouera.

```
--s3-settings '{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

Lorsque vous répliquez les modifications de données AWS DMS à l'aide d'une tâche CDC, la première colonne du fichier de sortie .csv ou .parquet indique comment les données de ligne ont été modifiées, comme indiqué dans le fichier .csv suivant.

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

Pour cet exemple, supposons qu'il existe une `EMPLOYEE` table dans la base de données source. AWS DMS écrit des données dans le fichier .csv ou .parquet, en réponse aux événements suivants :
+ Un nouvel employé (Bob Smith, ID employé 101) est engagé le 4 juin 2014 au bureau de New York. Dans le fichier .csv ou .parquet, la valeur `I` dans la première colonne indique qu'une nouvelle ligne a fait l'objet d'une opération `INSERT` dans la table EMPLOYEE de la base de données source.
+ Le 8 octobre 2015, Bob est transféré au bureau de Los Angeles. Dans le fichier .csv ou .parquet, la valeur `U` indique que la ligne correspondante de la table EMPLOYEE a fait l'objet d'une opération `UPDATE` pour refléter le nouvel emplacement du bureau de Bob. Le reste reflète la ligne de la table EMPLOYEE telle qu'elle apparaît après l'opération `UPDATE`. 
+ Le 13 mars 2017, Bob Dallas est à nouveau transféré au bureau de Dallas. Dans le fichier .csv ou .parquet, la valeur `U` indique que cette ligne a fait de nouveau l'objet d'une opération `UPDATE`. Le reste reflète la ligne de la table EMPLOYEE telle qu'elle apparaît après l'opération `UPDATE`.
+ Après avoir travaillé quelque temps à Dallas, Bob quitte l'entreprise. Dans le fichier .csv ou .parquet, la valeur `D` indique que la ligne a fait l'objet d'une opération `DELETE` dans la table source. Le reste reflète la ligne de la table EMPLOYEE telle qu'elle apparaît avant la suppression.

Notez que par défaut pour CDC, AWS DMS stocke les modifications de ligne pour chaque table de base de données sans tenir compte de l'ordre des transactions. Si vous souhaitez stocker les modifications de ligne dans les fichiers de CDC en fonction de l’ordre des transactions, vous devez utiliser les paramètres de point de terminaison S3 pour le spécifier ainsi que le chemin du dossier dans lequel vous souhaitez que les fichiers de transaction CDC soient stockés sur la cible S3. Pour de plus amples informations, veuillez consulter [Capture des données de modification (CDC) avec l’ordre des transactions sur la cible S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Pour contrôler la fréquence des écritures sur une cible Amazon S3 lors d’une tâche de réplication de données, vous pouvez configurer les attributs de connexion supplémentaires `cdcMaxBatchInterval` et `cdcMinFileSize`. Cela peut améliorer les performances lors de l’analyse des données sans aucune surcharge supplémentaire. Pour de plus amples informations, consultez [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring). 

**Topics**
+ [Prérequis pour l’utilisation d’Amazon S3 en tant que cible](#CHAP_Target.S3.Prerequisites)
+ [Limitations de l’utilisation d’Amazon S3 en tant que cible](#CHAP_Target.S3.Limitations)
+ [Sécurité](#CHAP_Target.S3.Security)
+ [Utilisation d’Apache Parquet pour stocker des objets Amazon S3](#CHAP_Target.S3.Parquet)
+ [Balisage d’objets Amazon S3](#CHAP_Target.S3.Tagging)
+ [Création de AWS KMS clés pour chiffrer les objets cibles d'Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Utilisation du partitionnement de dossiers basé sur la date](#CHAP_Target.S3.DatePartitioning)
+ [Chargement parallèle de sources partitionnées lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring)
+ [Utilisation AWS Glue Data Catalog avec une cible Amazon S3 pour AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Utilisation du chiffrement des données, des fichiers Parquet et de la CDC sur votre cible Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indication des opérations de base de données source dans des données S3 migrées](#CHAP_Target.S3.Configuring.InsertOps)
+ [Types de données cibles pour S3 Parquet](#CHAP_Target.S3.DataTypes)

## Prérequis pour l’utilisation d’Amazon S3 en tant que cible
<a name="CHAP_Target.S3.Prerequisites"></a>

Avant d’utiliser Amazon S3 en tant que cible, vérifiez que les conditions suivantes sont réunies : 
+ Le compartiment S3 que vous utilisez comme cible se trouve dans la même AWS région que l'instance de réplication DMS que vous utilisez pour migrer vos données.
+ Le AWS compte que vous utilisez pour la migration possède un rôle IAM avec accès en écriture et en suppression au compartiment S3 que vous utilisez comme cible.
+ Ce rôle dispose d'un accès de balisage afin que vous pouvez baliser tous les objets S3 écrits sur le compartiment cible.
+ DMS (dms.amazonaws.com) a été ajouté au rôle IAM en tant qu’*entité de confiance*. 
+ Pour les AWS DMS versions 3.4.7 et supérieures, DMS doit accéder au compartiment source via un point de terminaison VPC ou une route publique. Pour plus d'informations sur les points de terminaison VPC, consultez. [Configuration des points de terminaison VPC pour AWS DMS](CHAP_VPC_Endpoints.md)

Pour définir cet accès de compte, assurez-vous que le rôle affecté au compte utilisateur utilisé pour créer la tâche de migration bénéficie de l'ensemble d'autorisations suivant.

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

------

Pour connaître les conditions préalables à l’utilisation de la validation avec S3 en tant que cible, consultez [Conditions préalables à la validation des cibles S3](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Limitations de l’utilisation d’Amazon S3 en tant que cible
<a name="CHAP_Target.S3.Limitations"></a>

Les limitations suivantes s’appliquent lorsque vous utilisez Amazon S3 en tant que cible :
+ N’activez pas la gestion des versions pour S3. Si vous avez besoin de la gestion des versions S3, utilisez des politiques de cycle de vie pour supprimer les anciennes versions de manière active. Dans le cas contraire, la connexion de test du point de terminaison risque d’échouer en raison du délai d’attente d’appel `list-object` S3. Pour créer une politique de cycle de vie pour un compartiment S3, consultez [Gestion du cycle de vie de votre stockage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Pour supprimer une version d’un objet S3, consultez [Suppression des versions d’objet d’un compartiment activé pour la gestion des versions](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Un compartiment S3 compatible VPC (VPC de passerelle) est pris en charge dans les versions 3.4.7 et ultérieures.
+ Les commandes de langage de définition de données (DDL) suivantes sont prises en charge pour la capture des données de modification (CDC) : tronquer une table, supprimer une table, créer une table, renommer une table, ajouter une colonne, supprimer une colonne, renommer une colonne et modifier le type de données de colonne. Notez que lorsqu'une colonne est ajoutée, supprimée ou renommée dans la base de données source, aucune instruction ALTER n'est enregistrée dans le compartiment S3 cible et AWS DMS ne modifie pas les enregistrements créés précédemment pour qu'ils correspondent à la nouvelle structure. Après la modification, AWS DMS crée de nouveaux enregistrements à l'aide de la nouvelle structure de table.
**Note**  
Une opération DDL de troncation supprime tous les fichiers et les dossiers de table correspondants d’un compartiment S3. Vous pouvez utiliser les paramètres de tâche pour désactiver ce comportement et configurer la façon dont DMS gère le comportement DDL lors de la capture des données de modification (CDC). Pour de plus amples informations, veuillez consulter [Paramètres de tâche pour la gestion du DDL de traitement des modifications](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ Le Mode LOB complet n'est pas pris en charge.
+ Les modifications apportées à la structure de la table source lors du chargement complet ne sont pas prises en charge. Les modifications apportées aux données sont prises en charge pendant le chargement complet.
+ Lorsque plusieurs tâches répliquent des données d'une même table source vers le même compartiment de point de terminaison S3 cible, ces tâches écrivent dans le même fichier. Nous vous recommandons de spécifier des points de terminaison (compartiments) cibles différents si votre source de données est de la même table.
+ `BatchApply` n’est pas pris en charge pour un point de terminaison S3. L’utilisation de l’application par lots (par exemple, le paramètre de tâche de métadonnées cible `BatchApplyEnabled`) pour une cible S3 peut entraîner une perte de données.
+ Vous ne pouvez pas utiliser `DatePartitionEnabled` ou `addColumnName` ensemble avec `PreserveTransactions` ou `CdcPath`.
+ AWS DMS ne permet pas de renommer plusieurs tables sources dans le même dossier cible à l'aide de règles de transformation.
+ En cas d’écriture intensive dans la table source pendant la phase de chargement complet, DMS peut écrire des enregistrements dupliqués dans le compartiment S3 ou des modifications mises en cache.
+ Si vous configurez la tâche avec `TargetTablePrepMode` défini sur `DO_NOTHING`, DMS peut écrire des enregistrements dupliqués dans le compartiment S3 si la tâche s’arrête et reprend brusquement pendant la phase de chargement complet.
+ Si vous configurez le point de terminaison cible avec le paramètre `PreserveTransactions` défini sur `true`, le rechargement d’une table n’efface pas les fichiers CDC générés précédemment. Pour de plus amples informations, veuillez consulter [Capture des données de modification (CDC) avec l’ordre des transactions sur la cible S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Pour connaître les limitations de l’utilisation de la validation avec S3 en tant que cible, consultez [Limitations liées à l’utilisation de la validation des cibles S3](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

## Sécurité
<a name="CHAP_Target.S3.Security"></a>

Pour utiliser Amazon S3 en tant que cible, le compte utilisé pour la migration doit bénéficier d’un accès pour l’écriture et la suppression au compartiment Amazon S3 qui est utilisé comme cible. Spécifiez l’Amazon Resource Name (ARN) du rôle IAM qui bénéficie des autorisations requises pour accéder à Amazon S3. 

AWS DMS prend en charge un ensemble d'autorisations prédéfinies pour Amazon S3, appelées listes de contrôle d'accès prédéfinies (ACLs). Chaque liste ACL prédéfinie possède un ensemble de bénéficiaires et d’autorisations que vous pouvez utiliser pour définir les autorisations du compartiment Amazon S3. Vous pouvez spécifier une liste ACL prédéfinie à l'aide de l'attribut `cannedAclForObjects` de la chaîne de connexion de votre point de terminaison cible S3. Pour plus d'informations sur l'utilisation de l'attribut de connexion supplémentaire `cannedAclForObjects`, consultez [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring). Pour plus d'informations sur Amazon S3 scanné ACLs, consultez la section [Caned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl).

Le rôle IAM que vous utilisez pour la migration doit être en mesure d'effectuer l'opération d'API `s3:PutObjectAcl`.

## Utilisation d’Apache Parquet pour stocker des objets Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

Le format .csv (valeurs séparées par des virgules) est le format de stockage par défaut pour les objets cibles Amazon S3. Pour un stockage plus compact et des requêtes plus rapides, vous pouvez utiliser le format de stockage Apache Parquet (.parquet).

Apache Parquet est un format de stockage de fichiers open source, initialement conçu pour Hadoop. Pour plus d'informations sur Apache Parquet, consultez [https://parquet.apache.org/](https://parquet.apache.org/).

Pour définir .parquet comme format de stockage pour vos objets cibles S3 migrés, vous pouvez utiliser les mécanismes suivants :
+ Paramètres de point de terminaison que vous fournissez sous forme de paramètres d'objet JSON lorsque vous créez le point de terminaison à l'aide de l' AWS CLI ou de l'API pour AWS DMS. Pour de plus amples informations, veuillez consulter [Utilisation du chiffrement des données, des fichiers Parquet et de la CDC sur votre cible Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Attributs de connexion supplémentaires que vous fournissez sous forme de liste séparée par des points-virgules lorsque vous créez le point de terminaison. Pour de plus amples informations, veuillez consulter [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring).

## Balisage d’objets Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

Vous pouvez baliser des objets Amazon S3 créés par une instance de réplication en spécifiant les objets JSON appropriés dans le cadre des règles de mappage des tâches aux tables. Pour plus d’informations sur les exigences et les options du balisage d’objets S3, y compris les noms de balise valides, consultez [Balisage d’objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*. Pour plus d'informations sur le mappage de table avec JSON, consultez [Spécification des règles de sélection de table et de transformation à l’aide de JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Vous pouvez baliser des objets S3 créés pour des tables et des schémas spécifiés à l'aide d'un ou plusieurs objets JSON du type de règle `selection`. Vous pouvez faire suivre cet objet (ou ces objets) `selection` d'un ou plusieurs objets JSON du type de règle `post-processing` avec l'action `add-tag`. Ces règles de post-traitement identifient les objets S3 que vous souhaitez baliser et spécifient les noms et les valeurs des balises que vous souhaitez ajouter à ces objets S3.

Vous trouverez les paramètres à spécifier dans les objets JSON du type de règle `post-processing` dans le tableau suivant.

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

Lorsque vous spécifiez plusieurs types de règle `post-processing` pour baliser une sélection d'objets S3, chaque objet S3 est balisé à l'aide d'un seul objet `tag-set` à partir d'une règle de post-traitement. L'ensemble de balises utilisé pour baliser un objet S3 donné est celui issu de la règle de post-traitement dont le localisateur d'objet associé correspond le mieux à l'objet S3. 

Par exemple, supposons que deux règles de post-traitement identifient le même objet S3. Supposons également que le localisateur d'objet d'une règle utilise des caractères génériques et que le localisateur d'objet de l'autre règle utilise une correspondance exacte pour identifier l'objet S3 (sans caractères génériques). Dans ce cas, l'ensemble de balises associé à la règle de post-traitement avec la correspondance exacte est utilisé pour baliser l'objet S3. Si plusieurs règles de post-traitement correspondent de manière identique à un objet S3, l'ensemble de balises associé à la première règle de post-traitement est utilisé pour baliser l'objet.

**Example Ajout de balises statiques à un objet S3 créé pour une table et un schéma unique**  
Les règles de sélection et de post-traitement suivantes ajoutent trois balises (`tag_1`, `tag_2` et `tag_3` avec leurs valeurs statiques correspondantes `value_1`, `value_2` et `value_3`) à un objet S3 créé. Cet objet S3 correspond à une table unique dans la source nommée `STOCK` avec un schéma nommé `aat2`.  

```
{
    "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 Ajout de balises statiques et dynamiques à des objets S3 créés pour plusieurs tables et schémas**  
L'exemple suivant présente une règle de sélection et deux règles de post-traitement, où l'entrée de la source inclut toutes les tables et tous leurs schémas.  

```
{
    "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"
              }           ]
        }
    ]
}
```
La première règle de post-traitement ajoute deux balises (`dw-schema-name` et `dw-schema-table`) avec les valeurs dynamiques correspondantes (`${schema-name}` et `my_prefix_${table-name}`) pour presque tous les objets S3 créés dans la cible. L'exception est l'objet S3 identifié et balisé avec la seconde règle de post-traitement. Par conséquent, chaque objet S3 cible identifié par le localisateur d'objet utilisant des caractères génériques est créé avec des balises qui identifient le schéma et la table auxquels il correspond dans la source.  
La deuxième règle de post-traitement ajoute `tag_1` et `tag_2` avec les valeurs statiques correspondantes `value_1` et `value_2` à un objet S3 qui est identifié par un localisateur d'objet utilisant une correspondance exacte. Cet objet S3 créé correspond donc à la table unique dans la source nommée `ITEM` avec un schéma nommé `aat`. En raison de la correspondance exacte, ces balises remplacent toutes les balises sur cet objet ajouté à partir de la première règle de post-traitement, qui correspond à des objets S3 par caractère générique uniquement.

**Example Ajout de noms et de valeurs de balise dynamique à des objets S3**  
L'exemple suivant comporte deux règles de sélection et une règle de post-traitement. Ici, l'entrée à partir de la source comprend seulement la table `ITEM` dans le schéma `retail` ou `wholesale`.  

```
{
    "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"
              }
            ]
    ]
}
```
L'ensemble de balises pour la règle de post-traitement ajoute deux balises (`dw-schema-name` et `dw-schema-table`) à tous les objets S3 créés pour la table `ITEM` dans la cible. La première balise a la valeur dynamique `"${schema-name}"` et la deuxième balise a une valeur statique, `"my_prefix_ITEM"`. Par conséquent, chaque objet S3 cible est créé avec des balises qui identifient le schéma et la table auxquels il correspond dans la source.   
En outre, l'ensemble de balises ajoute deux balises supplémentaires avec des noms dynamiques (`${schema-name}_ITEM_tag_1` et `"${schema-name}_ITEM_tag_2"`). Ces derniers ont les valeurs statiques correspondantes `value_1` et `value_2`. Ainsi, chacune de ces balises est nommée pour le schéma actuel, `retail` ou `wholesale`. Vous ne pouvez pas créer un nom de balise dynamique dupliqué dans cet objet, car chaque objet est créé pour un nom de schéma unique. Le nom de schéma est utilisé pour créer un autre nom de balise unique.

## Création de AWS KMS clés pour chiffrer les objets cibles d'Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Vous pouvez créer et utiliser des AWS KMS clés personnalisées pour chiffrer vos objets cibles Amazon S3. Après avoir créé une clé KMS, vous pouvez l'utiliser pour chiffrer des objets à l'aide de l'une des approches suivantes lorsque vous créez le point de terminaison cible S3 :
+ Utilisez les options suivantes pour les objets cibles S3 (avec le format de stockage de fichiers .csv par défaut) lorsque vous exécutez la commande `create-endpoint` à l'aide de l' AWS CLI.

  ```
  --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"}'
  ```

  Ici, votre- `your-KMS-key-ARN` est le nom de ressource Amazon (ARN) de votre clé KMS et il est nécessaire que votre rôle IAM dispose d'autorisations d'accès, voir[Utilisation du chiffrement des données, des fichiers Parquet et de la CDC sur votre cible Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Définissez l'attribut de connexion supplémentaire `encryptionMode` à la valeur `SSE_KMS` et l'attribut de connexion supplémentaire `serverSideEncryptionKmsKeyId` à l'ARN de votre clé KMS. Pour de plus amples informations, veuillez consulter [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring).

Pour chiffrer des objets cibles Amazon S3 à l’aide d’une clé KMS, vous avez besoin d’un rôle IAM qui dispose des autorisations d’accès au compartiment Amazon S3. Ce rôle IAM est ensuite accessible dans une stratégie (stratégie de clé) attachée à la clé de chiffrement que vous créez. Pour ce faire, créez les éléments suivants dans votre console IAM :
+ Une stratégie avec les autorisations d’accès au compartiment Amazon S3.
+ Un rôle IAM avec cette stratégie.
+ Une clé de chiffrement de clé KMS avec une stratégie de clé qui fait référence à ce rôle.

Les procédures suivantes décrivent la marche à suivre.

**Pour créer une politique IAM avec les autorisations d’accès au compartiment Amazon S3**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation, choisissez **Stratégies**. La page **Stratégies** s'ouvre.

1. Choisissez **Create Policy** (Créer une politique). La page **Créer une politique** s'ouvre.

1. Choisissez **Service**, puis **S3**. Une liste d'autorisations d'action s'affiche.

1. Choisissez **Développer tout** pour développer la liste et choisissez au moins les autorisations suivantes :
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Choisissez toute autre autorisation dont vous avez besoin, puis sélectionnez **Réduire tout** pour réduire la liste.

1. Choisissez **Ressources** pour spécifier les ressources auxquelles vous souhaitez accéder. Choisissez au moins **Toutes les ressources** pour fournir un accès général aux ressources Amazon S3.

1. Ajoutez toute autre condition ou autorisation dont vous avez besoin, puis choisissez **Examiner une stratégie**. Vérifiez vos résultats sur la page **Examiner une stratégie**.

1. Si les paramètres vous conviennent, entrez un nom pour la stratégie (par exemple, `DMS-S3-endpoint-access`) et une description, puis choisissez **Créer une stratégie**. La page **Stratégies** s'ouvre et affiche un message indiquant que votre stratégie a été créée.

1. Recherchez et choisissez le nom de la stratégie dans la liste **Stratégies**. La page **Récapitulatif** affiche la stratégie au format JSON comme ci-après.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

Vous avez créé une nouvelle stratégie pour accéder à des ressources Amazon S3 en vue du chiffrement avec un nom spécifié, par exemple `DMS-S3-endpoint-access`.

**Pour créer un rôle IAM avec cette stratégie**

1. Dans votre console IAM, choisissez **Rôles** dans le volet de navigation. La page détaillée **Rôles** s'ouvre.

1. Choisissez **Créer un rôle**. La page **Créer un rôle** s'ouvre.

1. Lorsque le AWS service est sélectionné comme entité de confiance, choisissez **DMS** comme service pour utiliser le rôle IAM.

1. Choisissez **Suivant : Autorisations**. La vue **Attacher des stratégies d'autorisation** s'affiche dans la page **Créer un rôle**.

1. Recherchez et sélectionnez la stratégie IAM pour le rôle IAM que vous avez créé dans la procédure précédente (`DMS-S3-endpoint-access`).

1. Choisissez **Suivant : Balises**. La vue **Ajouter des balises** s'affiche dans la page **Créer un rôle**. Ici, vous pouvez ajouter toutes les balises souhaitées.

1. Choisissez **Suivant : Vérification**. La vue **Vérifier** s'affiche dans la page **Créer un rôle**. Ici, vous pouvez vérifier les résultats.

1. Si les paramètres vous conviennent, entrez un nom pour le rôle (par exemple, `DMS-S3-endpoint-access-role`) et une description, puis choisissez **Créer un rôle**. La page détaillée **Rôles** s'ouvre et affiche un message indiquant que votre rôle a été créé.

Vous avez désormais créé le nouveau rôle pour accéder aux ressources Amazon S3 en vue du chiffrement avec un nom spécifié, par exemple `DMS-S3-endpoint-access-role`.

**Pour créer une clé de chiffrement de clé KMS avec une stratégie de clé qui fait référence à votre rôle IAM**
**Note**  
Pour plus d'informations sur le AWS DMS fonctionnement des clés de AWS KMS chiffrement, consultez[Configuration d'une clé de chiffrement et spécification AWS KMS des autorisations](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Connectez-vous à la console AWS Key Management Service (AWS KMS) AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/kms.](https://console.aws.amazon.com/kms)

1. Pour modifier le Région AWS, utilisez le sélecteur de région dans le coin supérieur droit de la page.

1. Dans le panneau de navigation, choisissez **Clés gérées par le client**.

1. Choisissez **Create key**. La page **Configurer la clé** s'ouvre.

1. Pour **Type de clé**, choisissez **Symétrique**.
**Note**  
Lorsque vous créez cette clé, vous ne pouvez créer qu'une clé symétrique, car tous les AWS services, tels qu'Amazon S3, ne fonctionnent qu'avec des clés de chiffrement symétriques.

1. Choisissez **Options avancées**. Pour **Origine des éléments de clé**, assurez-vous que **KMS** est choisi, puis choisissez **Suivant**. La page **Ajouter des étiquettes** s'ouvre.

1. Dans **Créer un alias et une description**, entrez un alias pour la clé (par exemple, `DMS-S3-endpoint-encryption-key`) et toute description supplémentaire.

1. Pour **Balises**, ajoutez les balises que vous souhaitez pour vous aider à identifier la clé et suivre son utilisation, puis choisissez **Suivant**. La page **Définir des autorisations d'administration de clé** s'ouvre et affiche une liste d'utilisateurs et de rôles parmi lesquels vous pouvez choisir.

1. Ajoutez les utilisateurs et les rôles que vous souhaitez voir gérer la clé. Assurez-vous que ces utilisateurs et ces rôles ont les autorisations requises pour gérer la clé. 

1. Pour **Suppression de clé**, choisissez si les administrateurs de clé peuvent supprimer celle-ci, puis choisissez **Suivant**. La page **Définir des autorisations d'utilisation de clé** s'ouvre et affiche une liste supplémentaire d'utilisateurs et de rôles parmi lesquels vous pouvez choisir.

1. Pour **Ce compte**, choisissez les utilisateurs disponibles pour lesquels vous souhaitez effectuer des opérations de chiffrement sur des cibles Amazon S3. Choisissez également le rôle que vous avez créé précédemment dans **Rôles** pour activer l’accès au chiffrement des objets cibles Amazon S3, par exemple `DMS-S3-endpoint-access-role`.

1. Si vous souhaitez ajouter d'autres comptes ne figurant pas dans la liste pour avoir ce même accès, dans **Autres AWS comptes**, choisissez **Ajouter un autre AWS compte**, puis cliquez sur **Suivant**. La page **Réviser et modifier la stratégie de clé** s'ouvre, affichant le JSON de la stratégie de clé que vous pouvez réviser et modifier en saisissant les informations dans le JSON existant. Ici, vous pouvez voir où la stratégie clé fait référence au rôle et aux utilisateurs (par exemple, `Admin` et `User1`) que vous avez choisis à l'étape précédente. Vous pouvez également voir les actions clés autorisées pour les différents mandataires (utilisateurs et rôles), comme illustré dans l'exemple suivant.

------
#### [ 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. Choisissez **Finish** (Terminer). La page **Clés de chiffrement** s’ouvre et affiche un message indiquant que votre clé KMS a été créée.

Vous venez de créer une nouvelle clé KMS avec un alias spécifié (par exemple, `DMS-S3-endpoint-encryption-key`). Cette clé permet AWS DMS de chiffrer les objets cibles d'Amazon S3.

## Utilisation du partitionnement de dossiers basé sur la date
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS prend en charge les partitions de dossiers S3 en fonction de la date de validation de la transaction lorsque vous utilisez Amazon S3 comme point de terminaison cible. Avec le partitionnement de dossiers basé sur la date, vous pouvez écrire des données à partir d’une table source unique dans une structure de dossiers hiérarchisée dans le temps dans un compartiment S3. En partitionnant des dossiers lors de la création d’un point de terminaison cible S3, vous pouvez :
+ Mieux gérer vos objets S3
+ Limiter la taille de chaque dossier S3
+ Optimiser les requêtes du lac de données ou les autres opérations ultérieures

Vous pouvez activer le partitionnement de dossiers basé sur la date lorsque vous créez un point de terminaison cible S3. Vous pouvez l’activer lorsque vous migrez des données existantes et que vous répliquez les modifications continues (chargement complet \$1 CDC) ou lorsque vous répliquez uniquement les modifications de données (CDC uniquement). Lorsque vous migrez des données existantes et que vous répliquez les modifications en cours, seules les modifications en cours seront partitionnées. Utilisez les paramètres de point de terminaison cible suivants :
+ `DatePartitionEnabled` : spécifie le partitionnement en fonction des dates. Définissez cette option booléenne sur `true` pour partitionner les dossiers de compartiment S3 en fonction des dates de validation des transactions. 

  Vous ne pouvez pas utiliser ce paramètre avec `PreserveTransactions` ou `CdcPath`.

  La valeur par défaut est `false`. 
+ `DatePartitionSequence` : identifie la séquence du format de date à utiliser lors du partitionnement des dossiers. Définissez cette option ENUM sur `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` ou `DDMMYYYY`. La valeur par défaut est `YYYYMMDD`. Utilisez ce paramètre lorsque `DatePartitionEnabled` est défini sur `true.`.
+ `DatePartitionDelimiter` : spécifie un délimiteur de date à utiliser lors du partitionnement des dossiers. Définissez cette option ENUM sur `SLASH`, `DASH`, `UNDERSCORE` ou `NONE`. La valeur par défaut est `SLASH`. Utilisez ce paramètre lorsque `DatePartitionEnabled` est défini sur `true`.
+ `DatePartitionTimezone`— Lorsque vous créez un point de terminaison cible S3, configurez-le `DatePartitionTimezone` pour convertir l'heure UTC actuelle dans un fuseau horaire spécifié. La conversion a lieu lorsqu'un dossier de partition de dates est créé et qu'un nom de fichier CDC est généré. Le format du fuseau horaire est Zone/Lieu. Utilisez ce paramètre lorsqu'il `DatePartitionedEnabled` est défini sur`true`, comme indiqué dans l'exemple suivant :

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

L’exemple suivant montre comment activer le partitionnement de dossiers basé sur la date, avec les valeurs par défaut pour la séquence de partition de données et le délimiteur. Il utilise l'`--s3-settings '{json-settings}'`option du AWS CLI. `create-endpoint`commande. 

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

## Chargement parallèle de sources partitionnées lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

Vous pouvez configurer un chargement complet parallèle de sources de données partitionnées sur les cibles Amazon S3. Cette approche améliore les temps de chargement lors de la migration des données partitionnées à partir des moteurs de base de données source pris en charge vers la cible S3. Pour améliorer les temps de chargement des données sources partitionnées, vous créez des sous-dossiers cibles S3 mappés aux partitions de chaque table de la base de données source. Ces sous-dossiers liés à une partition permettent d' AWS DMS exécuter des processus parallèles pour remplir chaque sous-dossier de la cible.

Pour configurer le chargement complet parallèle d’une cible S3, S3 prend en charge trois types de règles `parallel-load` pour la règle `table-settings` de mappage de table :
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Pour plus d’informations sur ces types de règles de chargement parallèle, consultez [Règles des paramètres de table et de collection et opérations](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Pour les types de règles `partitions-auto` et `partitions-list`, AWS DMS utilise le nom de chaque partition depuis le point de terminaison source pour identifier la structure des sous-dossiers cibles, comme suit.

```
bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv
```

Ici, le chemin du sous-dossier où les données sont migrées et stockées sur la cible S3 inclut un sous-dossier `partition_name` supplémentaire qui correspond à une partition source portant le même nom. Ce sous-dossier `partition_name` stocke ensuite un ou plusieurs fichiers `LOADseq_num.csv` contenant des données migrées depuis la partition source spécifiée. Ici, `seq_num` est le suffixe du numéro de séquence sur le nom du fichier .csv, comme `00000001` dans le fichier .csv portant le nom `LOAD00000001.csv`.

Cependant, certains moteurs de base de données, tels que MongoDB et DocumentDB, n’utilisent pas le concept de partitions. Pour ces moteurs de base de données, AWS DMS ajoute l'index du segment source en cours d'exécution en tant que préfixe au nom du fichier .csv cible, comme suit.

```
.../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
```

Ici, les fichiers `SEGMENT1_LOAD00000001.csv` et `SEGMENT1_LOAD00000002.csv` sont nommés avec le même préfixe d’index de segment source en cours d’exécution, `SEGMENT1`. Ils portent ce nom, car les données sources migrées pour ces deux fichiers .csv sont associées au même index de segment source en cours d’exécution. D’autre part, les données migrées stockées dans chacun des fichiers cibles `SEGMENT2_LOAD00000009.csv` et `SEGMENT3_LOAD0000000A.csv` sont associées à différents index de segment source en cours d’exécution. Le nom de chaque fichier est préfixé avec le nom de son index de segment en cours d’exécution, `SEGMENT2` et `SEGMENT3`.

Pour le type de chargement parallèle `ranges`, vous définissez les noms et les valeurs de colonne à l’aide des paramètres `columns` et `boundaries` des règles `table-settings`. Avec ces règles, vous pouvez spécifier des partitions correspondant aux noms de segment, comme suit.

```
"parallel-load": {
    "type": "ranges",
    "columns": [
         "region",
         "sale"
    ],
    "boundaries": [
          [
               "NORTH",
               "1000"
          ],
          [
               "WEST",
               "3000"
          ]
    ],
    "segment-names": [
          "custom_segment1",
          "custom_segment2",
          "custom_segment3"
    ]
}
```

Ici, le paramètre `segment-names` définit les noms de trois partitions pour migrer les données en parallèle sur la cible S3. Les données migrées sont chargées en parallèle et stockées dans des fichiers .csv sous les sous-dossiers de partition, comme suit.

```
.../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
```

Ici, AWS DMS stocke une série de fichiers .csv dans chacun des trois sous-dossiers de partition. La série de fichiers .csv de chaque sous-dossier de partition est nommée de manière incrémentielle à partir de `LOAD00000001.csv` jusqu’à ce que toutes les données soient migrées.

Dans certains cas, il se peut que vous ne nommiez pas explicitement les sous-dossiers de partition pour un type de chargement parallèle `ranges` à l’aide du paramètre `segment-names`. Dans ce cas, AWS DMS applique la valeur par défaut qui consiste à créer chaque série de fichiers .csv dans son `table_name` sous-dossier. Ici, AWS DMS préfixe les noms de fichier de chaque série de fichiers .csv avec le nom de l’index du segment source en cours d’exécution, comme suit.

```
.../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
```

## Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible Amazon S3 comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**Note**  
DMS écrit les modifications dans les fichiers Parquet en fonction de l'ordre de validation de la base de données source, mais lors de la migration de plusieurs tables, l'ordre de transaction d'origine n'est pas conservé en raison du partitionnement au niveau de la table. Pour conserver les informations de séquence de transactions, configurez le paramètre du point de `TimestampColumnName` terminaison pour inclure l'horodatage de validation source pour chaque ligne, que vous pouvez ensuite utiliser lors du traitement en aval pour reconstruire la séquence de transaction d'origine. Contrairement au format CSV, qui propose ce `PreserveTransactions` paramètre, les fichiers Parquet gèrent les transactions différemment en raison de leur structure de stockage en colonnes, mais cette approche permet un suivi précis des temps de validation de la source, prend en charge la reconstruction des ordres de transaction après la migration et permet un traitement efficace des données tout en préservant la cohérence des données.

Les paramètres de point de terminaison que vous pouvez utiliser avec Amazon S3 en tant que cible sont indiqués dans le tableau suivant.


| **Option** | **Description** | 
| --- | --- | 
| CsvNullValue |  Paramètre facultatif qui indique le mode de AWS DMS traitement des valeurs nulles. Lors de la gestion de la valeur null (nulle), vous pouvez utiliser ce paramètre pour transmettre une chaîne définie par l'utilisateur comme nulle lors de l'écriture sur la cible. Par exemple, lorsque les colonnes cibles peuvent être définies comme nulles (nullable), vous pouvez utiliser cette option pour différencier la valeur de chaîne vide de la valeur nulle.  Valeur par défaut : `""` Valeurs valides : toutes les chaînes valides Exemple : `--s3-settings '{"CsvNullValue": "NULL"}'` Si la valeur de la colonne de la base de données source est nulle, dans le fichier CSV S3, la valeur de colonne est `NULL` au lieu de la chaîne « ».  | 
| AddColumnName |  Paramètre facultatif qui lorsqu’il est défini sur `true` ou `y` vous permet d'ajouter les informations de nom de colonne dans le fichier de sortie .csv. Vous ne pouvez pas utiliser ce paramètre avec `PreserveTransactions` ou `CdcPath`. Valeur par défaut : `false` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Utilisez le paramètre de point de terminaison cible S3 `AddTrailingPaddingCharacter` pour ajouter un remplissage aux données de chaîne. La valeur par défaut est `false`. Type : Boolean Exemple : `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Un paramètre facultatif pour définir le nom d'un dossier dans le compartiment S3. S'il est fourni, les objets cibles sont créés en tant que fichiers .csv ou .parquet dans le chemin `BucketFolder/schema_name/table_name/`. Si ce paramètre n'est pas spécifié, le chemin utilisé est `schema_name/table_name/`.  Exemple : `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  Nom du compartiment S3 dans lequel les objets cibles S3 sont créés en tant que fichiers .csv ou .parquet. Exemple : `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Valeur qui permet de AWS DMS spécifier une liste de contrôle d'accès prédéfinie (prédéfinie) pour les objets créés dans le compartiment S3 sous forme de fichiers .csv ou .parquet. Pour plus d'informations sur le scan Amazon S3 ACLs, consultez la section [Caned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) dans le *manuel du développeur Amazon S3.* Valeur par défaut : NONE Les valeurs valides pour cet attribut sont : NONE ; PRIVATE ; PUBLIC\$1READ ; PUBLIC\$1READ\$1WRITE ; AUTHENTICATED\$1READ ; \$1READ ; BUCKET\$1OWNER\$1READ ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Exemple : `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Paramètre facultatif lors d’une capture de données de modification (CDC) pour écrire uniquement des opérations INSERT dans les fichiers de sortie .csv (valeurs séparées par des virgules) ou .parquet (stockage en colonnes). Par défaut (le paramètre `false`), le premier champ d'un enregistrement .csv ou .parquet contient la lettre I (INSERT), U (UPDATE) ou D (DELETE). Cette lettre indique si la ligne a été insérée, mise à jour ou supprimée dans la base de données source pour une charge CDC vers la cible. S'il `cdcInsertsOnly` est défini sur `true` ou`y`, seuls les fichiers .csv ou .parquet sont migrés INSERTs depuis la base de données source. Pour le format .csv uniquement, l’enregistrement de de ces commandes INSERT dépend de la valeur de `IncludeOpForFullLoad`. Si `IncludeOpForFullLoad` est défini sur `true`, le premier champ de chaque enregistrement CDC est défini sur I pour indiquer l'opération INSERT à la source. Si `IncludeOpForFullLoad` est défini sur `false`, chaque enregistrement CDC est écrit sans premier champ pour indiquer l'opération INSERT à la source. Pour plus d'informations sur le fonctionnement de ces paramètres utilisés conjointement, consultez [Indication des opérations de base de données source dans des données S3 migrées](#CHAP_Target.S3.Configuring.InsertOps). Valeur par défaut : `false` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Permet une charge CDC (Change Data Capture) pour écrire des opérations INSERT et UPDATE dans des fichiers de sortie .csv ou .parquet (stockage en colonnes). Le paramètre par défaut est`false`, mais quand `cdcInsertsAndUpdates` est défini sur `true` ou`y`, INSERTs et UPDATEs depuis la base de données source sont migrés vers le fichier .csv ou .parquet.  Pour le format de fichier .csv uniquement, la manière dont UPDATEs ils sont enregistrés dépend de la valeur du `includeOpForFullLoad` paramètre. INSERTs Si la valeur `includeOpForFullLoad` est définie sur `true`, le premier champ de chaque enregistrement CDC est défini sur `I` ou `U` pour indiquer les opérations INSERT et UPDATE à la source. Mais si `includeOpForFullLoad` est défini sur `false`, les enregistrements CDC sont écrits sans indication des opérations INSERT ou UPDATE à la source.   Pour plus d'informations sur le fonctionnement de ces paramètres utilisés conjointement, consultez [Indication des opérations de base de données source dans des données S3 migrées](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` et `cdcInsertsAndUpdates` ne peuvent pas tous les deux être définis sur true pour le même point de terminaison. Définissez `cdcInsertsOnly` ou `cdcInsertsAndUpdates` sur `true` pour le même point de terminaison, mais pas les deux.   Valeur par défaut : `false` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Spécifie le chemin du dossier des fichiers CDC. Pour une source S3, cet attribut est requis si une tâche capture les données modifiées. Dans le cas contraire, il est facultatif. Si `CdcPath` est défini, DMS lit les fichiers CDC à partir de ce chemin et réplique les modifications des données sur le point de terminaison cible. Pour une cible S3, si vous définissez `PreserveTransactions` sur true, DMS vérifie que vous avez défini ce paramètre sur un chemin de dossier de votre cible S3 où DMS peut enregistrer l’ordre des transactions pour le chargement CDC. DMS crée ce chemin de dossier CDC soit dans votre répertoire de travail cible S3, soit dans l’emplacement cible S3 spécifié par `BucketFolder` et `BucketName`. Vous ne pouvez pas utiliser ce paramètre avec `DatePartitionEnabled` ou `AddColumnName`. Type : Chaîne Par exemple, si vous définissez `CdcPath` sur `MyChangedData` et `BucketName` sur `MyTargetBucket`, mais que vous ne spécifiez pas `BucketFolder`, DMS crée le chemin du dossier CDC suivant : `MyTargetBucket/MyChangedData`.  Si vous définissez la même valeur pour `CdcPath` et que vous définissez `BucketName` sur `MyTargetBucket` et `BucketFolder` sur `MyTargetData`, DMS crée le chemin du dossier CDC suivant : `MyTargetBucket/MyTargetData/MyChangedData`. Ce paramètre est pris en charge dans AWS DMS les versions 3.4.2 et supérieures. Lors de la capture des modifications de données dans l'ordre des transactions, DMS enregistre toujours les modifications de ligne dans des fichiers .csv, quelle que soit la valeur du paramètre DataFormat S3 sur la cible.   | 
|  `CdcMaxBatchInterval`  |  Condition de durée maximale de l’intervalle, définie en secondes, à laquelle envoyer un fichier vers Amazon S3. Valeur par défaut : 60 secondes Lorsque `CdcMaxBatchInterval` et `CdcMinFileSize` sont spécifiés, l’écriture du fichier est déclenchée dès que l’une des conditions de paramètre est remplie.  À partir de AWS DMS la version 3.5.3, lorsque vous utilisez PostgreSQL ou Aurora PostgreSQL comme source et Amazon S3 avec Parquet comme cible`confirmed_flush_lsn`, la fréquence des mises à jour dépend de la quantité de données que le point de terminaison cible est configuré pour conserver en mémoire. AWS DMS `confirmed_flush_lsn`renvoie le message à la source uniquement une fois que les données en mémoire ont été écrites sur Amazon S3. Si vous configurez le `CdcMaxBatchInterval` paramètre sur une valeur supérieure, vous pouvez observer une augmentation de l'utilisation des emplacements de réplication dans la base de données source.   | 
|  `CdcMinFileSize`  |  Condition de taille minimale de fichier, définie en kilo-octets, à laquelle envoyer un fichier vers Amazon S3. Valeur par défaut : 32 000 Ko Lorsque `CdcMinFileSize` et `CdcMaxBatchInterval` sont spécifiés, l’écriture du fichier est déclenchée dès que l’une des conditions de paramètre est remplie.  | 
|  `PreserveTransactions`  |  Lorsque la valeur est `true`, DMS enregistre l’ordre des transactions pour une capture des données de modification (CDC) sur la cible Amazon S3 spécifiée par `CdcPath`. Vous ne pouvez pas utiliser ce paramètre avec `DatePartitionEnabled` ou `AddColumnName`. Type : Boolean Lors de la capture des modifications de données dans l'ordre des transactions, DMS enregistre toujours les modifications de ligne dans des fichiers .csv, quelle que soit la valeur du paramètre DataFormat S3 sur la cible. Ce paramètre est pris en charge dans AWS DMS les versions 3.4.2 et supérieures.   | 
| IncludeOpForFullLoad |  Paramètre facultatif lors d’un chargement complet pour écrire les opérations INSERT dans les fichiers de sortie .csv (valeurs séparées par des virgules) uniquement. Pour le chargement complet, les enregistrements peuvent être insérés uniquement. Par défaut (paramètre `false`), avec un chargement complet, aucune information n’est enregistrée dans ces fichiers de sortie pour indiquer que les lignes ont été ajoutées à la base de données source. Si `IncludeOpForFullLoad` est défini sur `true` ou `y`, l’opération INSERT est enregistrée en tant que annotation I dans le premier champ du fichier .csv.  Ce paramètre fonctionne conjointement avec `CdcInsertsOnly` ou `CdcInsertsAndUpdates` pour une sortie dans des fichiers .csv uniquement. Pour plus d'informations sur le fonctionnement de ces paramètres utilisés conjointement, consultez [Indication des opérations de base de données source dans des données S3 migrées](#CHAP_Target.S3.Configuring.InsertOps).  Valeur par défaut : `false` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Paramètre facultatif lorsqu'il est défini sur `GZIP` utilise GZIP pour compresser les fichiers .csv cibles. Lorsque ce paramètre est défini sur la valeur par défaut, les fichiers demeurent non compressés. Valeur par défaut : `NONE` Valeurs valides : `GZIP` ou `NONE` Exemple : `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  Délimiteur utilisé pour séparer les colonnes des fichiers sources .csv. La valeur par défaut est une virgule (,). Exemple : `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  Délimiteur utilisé pour séparer les lignes des fichiers sources .csv. La valeur par défaut est un caractère de saut de ligne (\$1 n). Exemple : `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Une valeur qui spécifie la taille maximale (en Ko) des fichiers .csv à créer lors de la migration vers une cible S3 pendant le chargement complet. Valeur par défaut : 1 048 576 Ko (1 Go) Valeurs valides : 1 à 1 048 576 Exemple : `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Paramètre facultatif utilisé pour définir le comportement afin de se conformer à RFC pour les données migrées vers Amazon S3 à l’aide du format de fichier .csv uniquement. Lorsque cette valeur est définie sur `true` ou `y` en utilisant Amazon S3 comme cible, si les données contiennent des guillemets, des virgules ou des caractères de nouvelle ligne, AWS DMS la colonne entière est entourée d'une paire supplémentaire de guillemets doubles («). Chaque point d'interrogation contenu dans les données est répété deux fois. Ce format est conforme à RFC 4180. Valeur par défaut : `true` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  Mode de chiffrement côté serveur que vous souhaitez utiliser pour chiffrer vos fichiers d'objets .csv ou .parquet copiés dans S3. Les valeurs valides sont `SSE_S3` (chiffrement côté serveur S3) ou `SSE_KMS` (chiffrement de clé KMS). Si vous choisissez `SSE_KMS`, définissez le paramètre `ServerSideEncryptionKmsKeyId` sur l'Amazon Resource Name (ARN) de la clé KMS à utiliser pour le chiffrement.  Vous pouvez également utiliser la commande CLI `modify-endpoint` pour modifier la valeur de l’attribut `EncryptionMode` d’un point de terminaison existant de `SSE_KMS` à `SSE_S3`. Vous ne pouvez pas modifier la valeur `EncryptionMode` de `SSE_S3` à `SSE_KMS`.  Valeur par défaut : `SSE_S3` Valeurs valides : `SSE_S3` ou `SSE_KMS` Exemple : `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Si vous définissez `EncryptionMode` sur `SSE_KMS`, définissez ce paramètre sur l’Amazon Resource Name (ARN) de la clé KMS. Vous pouvez trouver cet ARN en sélectionnant l'alias de clé dans la liste des AWS KMS clés créées pour votre compte. Lorsque vous créez la clé, vous devez associer les stratégies et les rôles spécifiques associés à cette clé KMS. Pour de plus amples informations, veuillez consulter [Création de AWS KMS clés pour chiffrer les objets cibles d'Amazon S3](#CHAP_Target.S3.KMSKeys). Exemple : `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  Format de sortie des fichiers AWS DMS utilisés pour créer des objets S3. Pour les cibles Amazon S3, AWS DMS prend en charge les fichiers .csv ou .parquet. Les fichiers .parquet ont un format de stockage par colonnes binaire avec des options de compression efficaces et des performances de requête plus rapides. Pour plus d'informations sur les fichiers .parquet, consultez [https://parquet.apache.org/](https://parquet.apache.org/). Valeur par défaut : `csv` Valeurs valides : `csv` ou `parquet` Exemple : `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  Type d'encodage Parquet. Parmi les options de type d'encodage, on trouve : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.S3.html) Valeur par défaut : `rle-dictionary` Valeurs valides : `rle-dictionary`, `plain` ou `plain-dictionary` Exemple : `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  Taille maximale autorisée, en octets, pour une page de dictionnaire dans un fichier .parquet. Si une page de dictionnaire dépasse cette valeur, elle utilise l'encodage brut. Valeur par défaut : 1 024 000 (1 Mo) Valeurs valides : Toute valeur entière valide Exemple : `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  Nombre de lignes dans un groupe de lignes d'un fichier .parquet. Valeur par défaut : 10 024 (10 Ko) Valeurs valides : tout entier valide Exemple : `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  Taille maximale autorisée, en octets, pour une page de données dans un fichier .parquet. Valeur par défaut : 1 024 000 (1 Mo) Valeurs valides : tout entier valide Exemple : `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  Version du format de fichier .parquet. Valeur par défaut : `PARQUET_1_0` Valeurs valides : `PARQUET_1_0` ou `PARQUET_2_0` Exemple : `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Définissez ce paramètre sur `true` ou `y` pour activer les statistiques sur les pages et les groupes de lignes des fichiers .parquet. Valeur par défaut : `true` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Paramètre facultatif permettant d’inclure une colonne d'horodatage dans les données de point de terminaison cible S3. AWS DMS inclut une `STRING` colonne supplémentaire dans les fichiers objets .csv ou .parquet de vos données migrées lorsque vous définissez `TimestampColumnName` une valeur non vide. Pour un chargement complet, chaque ligne de cette colonne d'horodatage contient une valeur d’horodatage correspondant au moment où les données ont été transférées de la source vers la cible par DMS.  Pour un chargement CDC, chaque ligne de la colonne d'horodatage contient la valeur d'horodatage correspondant au moment de la validation de cette ligne dans la base de données source. Le format chaîne pour la valeur de cette colonne d'horodatage est `yyyy-MM-dd HH:mm:ss.SSSSSS`. Par défaut, la précision de cette valeur est en microsecondes. Pour un chargement de CDC, l'arrondi de la précision dépend de l’horodatage de validation pris en charge par DMS pour la base de données source. Lorsque le paramètre `AddColumnName` est défini sur `true`, DMS inclut également le nom de la colonne d’horodatage que vous définissez en tant que valeur non vide pour `TimestampColumnName`. Exemple : `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Lorsqu’il est défini sur `true`, ce paramètre utilise l’heure de début de la tâche comme valeur de colonne d’horodatage au lieu de l’heure à laquelle les données sont écrites dans la cible. Pour un chargement complet, lorsque `UseTaskStartTimeForFullLoadTimestamp` est défini sur `true`, chaque ligne de la colonne d'horodatage contient l'heure de début de la tâche. Pour les chargements CDC, chaque ligne de la colonne d'horodatage contient l'heure de validation de la transaction. Lorsque `UseTaskStartTimeForFullLoadTimestamp` est défini sur `false`, l'horodatage de chargement complet dans la colonne d'horodatage augmente avec l'heure à laquelle les données arrivent sur la cible. Valeur par défaut : `false` Valeurs valides : `true`, `false` Exemple : `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` fait en sorte que la colonne `TimestampColumnName` de la cible S3 pour un chargement complet puisse être triée avec `TimestampColumnName` pour un chargement CDC.  | 
| ParquetTimestampInMillisecond |  Paramètre facultatif qui spécifie la précision des valeurs de colonne `TIMESTAMP` écrites dans un fichier d'objet S3 au format .parquet. Lorsque cet attribut est défini sur `true` ou`y`, AWS DMS écrit toutes les `TIMESTAMP` colonnes dans un fichier au format .parquet avec une précision de la milliseconde. Sinon, DMS les écrit avec une précision à la microseconde. Actuellement, Amazon Athena et ne AWS Glue peut gérer que des millisecondes de précision pour les valeurs. `TIMESTAMP` Définissez cet attribut sur true pour les fichiers d’objet de point de terminaison S3 au format .parquet uniquement si vous prévoyez d’interroger ou de traiter les données avec Athena ou AWS Glue.    AWS DMS écrit toutes les valeurs de `TIMESTAMP` colonne écrites dans un fichier S3 au format .csv avec une précision de la microseconde.   La valeur de cet attribut n'a aucun effet sur le format chaîne de la valeur de colonne d'horodatage insérée en définissant l'attribut `TimestampColumnName`.    Valeur par défaut : `false` Valeurs valides : `true`, `false`, `y`, `n` Exemple : `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Pour générer un AWS Glue Data Catalog, définissez ce paramètre de point de terminaison sur`true`. Valeur par défaut : `false` Valeurs valides : `true`, `false` Exemple : `--s3-settings '{"GlueCatalogGeneration": true}'` **Remarque :** n’utilisez pas `GlueCatalogGeneration` avec `PreserveTransactions` et `CdcPath`.  | 

## Utilisation AWS Glue Data Catalog avec une cible Amazon S3 pour AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue est un service qui fournit des méthodes simples pour classer les données et consiste en un référentiel de métadonnées appelé AWS Glue Data Catalog. Vous pouvez intégrer AWS Glue Data Catalog votre point de terminaison cible Amazon S3 et interroger les données Amazon S3 via d'autres AWS services tels qu'Amazon Athena. Amazon Redshift fonctionne avec cette option AWS Glue prédéfinie, mais AWS DMS ne la prend pas en charge. 

Pour générer le catalogue de données, définissez le paramètre du point de `GlueCatalogGeneration` terminaison sur`true`, comme indiqué dans l' AWS CLI exemple suivant.

```
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}'
```

Pour une tâche de réplication à chargement complet incluant le type de données `csv`, définissez `IncludeOpForFullLoad` sur `true`.

N’utilisez pas `GlueCatalogGeneration` avec `PreserveTransactions` et `CdcPath`. Le AWS Glue robot d'exploration ne parvient pas à concilier les différents schémas des fichiers stockés sous le paramètre spécifié. `CdcPath`

Pour qu’Amazon Athena puisse indexer vos données Amazon S3 et pour que vous puissiez interroger vos données à l’aide de requêtes SQL standard via Amazon Athena, le rôle IAM attaché au point de terminaison doit posséder la politique suivante :

------
#### [ 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_*"
        }
    ]
}
```

------

**Références**
+ Pour plus d'informations AWS Glue, consultez la section [Concepts](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) du *guide du AWS Glue développeur*.
+ Pour plus d'informations sur la AWS Glue Data Catalog section [Composants](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) du *Guide du AWS Glue développeur*.

## Utilisation du chiffrement des données, des fichiers Parquet et de la CDC sur votre cible Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

Vous pouvez utiliser les paramètres de point de terminaison cible S3 pour configurer les éléments suivants :
+ Une clé KMS personnalisée pour chiffrer vos objets cibles S3.
+ Des fichiers Parquet comme format de stockage pour les objets cibles S3.
+ La capture des données de modification (CDC) avec l’ordre des transactions sur la cible S3.
+  AWS Glue Data Catalog Intégrez votre point de terminaison cible Amazon S3 et interrogez les données Amazon S3 via d'autres services tels qu'Amazon Athena.

### AWS KMS paramètres clés pour le chiffrement des données
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Les exemples suivants illustrent la configuration d'une clé KMS personnalisée pour chiffrer vos objets cibles S3. Pour commencer, vous pouvez exécuter la commande CLI `create-endpoint` suivante.

```
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"}'
```

Ici, l'objet JSON spécifié par l'option `--s3-settings` définit deux paramètres. Le premier est le paramètre `EncryptionMode` avec la valeur `SSE_KMS`. L'autre est un paramètre `ServerSideEncryptionKmsKeyId` avec la valeur `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Cette valeur est un Amazon Resource Name (ARN) pour votre clé KMS personnalisée. Pour une cible S3, vous spécifiez également des paramètres supplémentaires. Ces paramètres identifient le rôle d'accès au serveur, fournissent des délimiteurs pour le format de stockage d'objet CSV par défaut et attribuent l'emplacement et le nom du compartiment pour stocker les objets cibles S3.

Par défaut, le chiffrement de données S3 a lieu à l’aide du chiffrement côté serveur S3. Pour la cible S3 de l'exemple précédent, cela équivaut à spécifier ses paramètres de point de terminaison, comme dans l'exemple suivant.

```
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"}'
```

Pour de plus amples informations sur l’utilisation du chiffrement côté serveur S3, veuillez consulter [Protection des données à l'aide du chiffrement côté serveur](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**Note**  
Vous pouvez également utiliser la commande CLI `modify-endpoint` pour modifier la valeur du paramètre `EncryptionMode` d’un point de terminaison existant de `SSE_KMS` à `SSE_S3`. Vous ne pouvez pas modifier la valeur `EncryptionMode` de `SSE_S3` à `SSE_KMS`.

### Paramètres pour l'utilisation de fichiers .parquet en vue du stockage d'objets cibles S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

Le format par défaut pour la création d'objets cibles S3 est le fichier .csv. Les exemples suivants illustrent certains paramètres de point de terminaison pour spécifier des fichiers .parquet comme format de création d'objets cibles S3. Vous pouvez spécifier le format des fichiers .parquet avec toutes les valeurs par défaut, comme dans l'exemple suivant.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'
```

Ici, le paramètre `DataFormat` est défini sur `parquet` pour activer le format avec toutes les valeurs par défaut de S3. Ces valeurs par défaut comprennent un encodage par dictionnaire (`"EncodingType: "rle-dictionary"`) qui utilise une combinaison d'encodage par compression de bits et longueur d'exécution pour stocker de manière plus efficace les valeurs répétitives.

Vous pouvez ajouter des paramètres supplémentaires pour les options autres que les valeurs par défaut, comme dans l'exemple suivant.

```
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 }'
```

Ici, en plus des paramètres requis pour plusieurs options de compartiment S3 standard et le paramètre `DataFormat`, les paramètres de fichier .parquet supplémentaires suivants sont définis :
+ `EncodingType` : permet de définir un encodage par dictionnaire (`plain-dictionary`) qui stocke les valeurs rencontrées dans chaque colonne dans un bloc par colonne de la page de dictionnaire.
+ `DictPageSizeLimit` : permet de définir une taille de page de dictionnaire de 3 Mo maximum.
+ `EnableStatistics` : désactive la valeur par défaut qui permet la collecte des statistiques sur les pages et les groupes de lignes du fichier Parquet.

### Capture des données de modification (CDC) avec l’ordre des transactions sur la cible S3
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Par défaut, lors de l' AWS DMS exécution d'une tâche CDC, elle stocke toutes les modifications de ligne enregistrées dans votre base de données source (ou vos bases de données) dans un ou plusieurs fichiers pour chaque table. Chaque ensemble de fichiers contenant des modifications pour la même table réside dans un répertoire cible unique associé à cette table. AWS DMS crée autant de répertoires cibles que de tables de base de données migrées vers le point de terminaison cible Amazon S3. Les fichiers sont stockés sur la cible S3 dans ces répertoires sans tenir compte de l’ordre des transactions. Pour plus d’informations sur les conventions de dénomination des fichiers, le contenu des données et le format, consultez [Utiliser Amazon S3 comme cible pour AWS Database Migration Service](#CHAP_Target.S3).

Pour capturer les modifications de la base de données source d'une manière qui capture également l'ordre des transactions, vous pouvez spécifier des paramètres de point de terminaison S3 qui indiquent AWS DMS de stocker les modifications de ligne pour *toutes les* tables de base de données dans un ou plusieurs fichiers .csv créés en fonction de la taille de la transaction. Ces *fichiers de transaction* .csv contiennent toutes les modifications de ligne répertoriées séquentiellement dans l’ordre des transactions pour toutes les tables impliquées dans chaque transaction. Ces fichiers de transaction résident ensemble dans un *répertoire de transactions* unique que vous spécifiez également sur la cible S3. Dans chaque fichier de transaction, l’opération de transaction et l’identité de la base de données et de la table source pour chaque modification de ligne sont stockées dans le cadre des données de ligne, comme suit. 

```
operation,table_name,database_schema_name,field_value,...
```

Ici, `operation` est l’opération de transaction sur la ligne modifiée, `table_name` est le nom de la table de base de données où la ligne est modifiée, `database_schema_name` est le nom du schéma de base de données dans lequel se trouve la table et `field_value` est la première d’une ou de plusieurs valeurs de champ qui spécifient les données de la ligne.

L’exemple suivant d’un fichier de transaction illustre les lignes modifiées pour une ou plusieurs transactions impliquant deux tables.

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

Ici, l’opération de transaction sur chaque ligne est indiquée par `I` (insérer), `U` (mettre à jour) ou `D` (supprimer) dans la première colonne. Le nom de la table est la valeur de la deuxième colonne (par exemple, `Names_03cdcad11a`). Le nom du schéma de base de données est la valeur de la troisième colonne (par exemple, `rdsTempsdb`). Et les colonnes restantes sont remplies avec vos propres données de ligne (par exemple, `13,Daniel`).

En outre, AWS DMS nomme les fichiers de transaction qu'il crée sur la cible Amazon S3 à l'aide d'un horodatage conformément à la convention de dénomination suivante.

```
CDC_TXN-timestamp.csv
```

Ici, `timestamp` est l’heure à laquelle le fichier de transaction a été créé, comme dans l’exemple suivant. 

```
CDC_TXN-20201117153046033.csv
```

Cet horodatage dans le nom du fichier garantit que les fichiers de transaction sont créés et répertoriés dans l’ordre des transactions lorsque vous les répertoriez dans leur répertoire de transactions.

**Note**  
Lorsque vous capturez des modifications de données dans l'ordre des transactions, les modifications de ligne sont AWS DMS toujours enregistrées dans des fichiers .csv, quelle que soit la valeur du paramètre `DataFormat` S3 sur la cible.

Pour contrôler la fréquence des écritures sur une cible Amazon S3 lors d’une tâche de réplication de données, vous pouvez configurer les paramètres `CdcMaxBatchInterval` et `CdcMinFileSize`. Cela peut améliorer les performances lors de l’analyse des données sans aucune surcharge supplémentaire. Pour de plus amples informations, consultez [Paramètres du point de terminaison lors de l'utilisation d'Amazon S3 comme cible pour AWS DMS](#CHAP_Target.S3.Configuring). 

**Pour indiquer AWS DMS de stocker toutes les modifications de ligne dans l'ordre de transaction**

1. Définissez le paramètre S3 `PreserveTransactions` sur la cible sur `true`.

1. Définissez le paramètre `CdcPath` S3 sur la cible sur un chemin de dossier relatif dans lequel vous AWS DMS souhaitez stocker les fichiers de transaction .csv.

   AWS DMS crée ce chemin soit sous le compartiment cible et le répertoire de travail S3 par défaut, soit sous le compartiment et le dossier de compartiments que vous spécifiez à l'aide des paramètres `BucketName` et `BucketFolder` S3 sur la cible.

## Indication des opérations de base de données source dans des données S3 migrées
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Lors de AWS DMS la migration d'enregistrements vers une cible S3, il est possible de créer un champ supplémentaire dans chaque enregistrement migré. Ce champ supplémentaire indique l'opération appliquée à l'enregistrement au niveau de la base de données source. AWS DMS Le mode de création et de définition de ce premier champ dépend du type de tâche de migration et des paramètres de `includeOpForFullLoad``cdcInsertsOnly`, et`cdcInsertsAndUpdates`.

Pour un chargement complet, lorsque la valeur de `includeOpForFullLoad` est `true`, AWS DMS crée toujours un premier champ supplémentaire dans chaque enregistrement .csv. Ce champ contient la lettre I (INSERT) pour indiquer que la ligne a été insérée au niveau de la base de données source. Pour un chargement CDC, quand `cdcInsertsOnly` est `false` (valeur par défaut), crée AWS DMS également toujours un premier champ supplémentaire dans chaque enregistrement .csv ou .parquet. Ce champ contient la lettre I (INSERT), U (UPDATE) ou D (DELETE) pour indiquer si la ligne a été insérée, mise à jour ou supprimée au niveau de la base de données source.

Dans le tableau suivant, vous pouvez voir comment les paramètres des attributs `includeOpForFullLoad` et `cdcInsertsOnly` fonctionnent ensemble pour modifier la configuration des enregistrements migrés.


| Avec ces valeurs de paramètres | DMS définit les enregistrements cibles comme suit pour la sortie .csv et .parquet  | includeOpForFullLoad | cdcInsertsOnly | Pour un chargement complet | Pour un chargement CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Ajout de la valeur du premier champ définie sur I | Ajout de la valeur du premier champ définie sur I | 
| false | false | Aucun champ ajoutée | Ajout de la valeur du premier champ définie définie sur I, U ou D | 
| false | true | Aucun champ ajoutée | Aucun champ ajoutée | 
| true | false | Ajout de la valeur du premier champ définie sur I | Ajout de la valeur du premier champ définie définie sur I, U ou D | 

Lorsque `includeOpForFullLoad` et `cdcInsertsOnly` sont définis sur la même valeur, les enregistrements cibles sont définis en fonction de l'attribut qui contrôle les paramètres d'enregistrement pour le type de migration actuel. Cet attribut est `includeOpForFullLoad` pour les chargements complets et `cdcInsertsOnly` pour les chargements CDC.

Lorsque `includeOpForFullLoad` et `cdcInsertsOnly` sont définis sur des valeurs différentes, les paramètres AWS DMS d'enregistrement cible sont cohérents à la fois pour le CDC et pour le chargement complet. Pour ce faire, il met en conformité les paramètres d’enregistrement pour un chargement CDC avec ceux du chargement complet précédent spécifié par `includeOpForFullLoad`. 

En d'autres termes, supposons qu'un chargement complet soit défini de façon à ajouter un premier champ pour indiquer un enregistrement inséré. Dans ce cas, un chargement CDC suivant est défini de façon à ajouter un premier champ qui indique un enregistrement inséré, mis à jour ou supprimé (selon l'enregistrement au niveau de la source). En revanche, supposons qu'un chargement complet soit défini de façon à *ne pas* ajouter un premier champ pour indiquer un enregistrement inséré. Dans ce cas, un chargement CDC est également défini de façon à ne pas ajouter un premier champ pour chaque enregistrement, quelle que soit l’opération d’enregistrement correspondante au niveau de la source.

De même, la façon dont DMS crée et définit un premier champ supplémentaire dépend des paramètres de `includeOpForFullLoad` et `cdcInsertsAndUpdates`. Dans le tableau suivant, vous pouvez voir comment les paramètres des attributs `includeOpForFullLoad` et `cdcInsertsAndUpdates` fonctionnent ensemble pour modifier la configuration des enregistrements migrés sous ce format. 


| Avec ces valeurs de paramètres | DMS définit les enregistrements cibles comme suit pour la sortie .csv  | includeOpForFullLoad | cdcInsertsAndmises à jour | Pour un chargement complet | Pour un chargement CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Ajout de la valeur du premier champ définie sur I | Ajout de la valeur du premier champ définie sur I ou U | 
| false | false | Aucun champ ajoutée | Ajout de la valeur du premier champ définie définie sur I, U ou D | 
| false | true | Aucun champ ajoutée | Ajout de la valeur du premier champ définie sur I ou U | 
| true | false | Ajout de la valeur du premier champ définie sur I | Ajout de la valeur du premier champ définie définie sur I, U ou D | 

## Types de données cibles pour S3 Parquet
<a name="CHAP_Target.S3.DataTypes"></a>

Le tableau suivant indique les types de données cibles Parquet pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS type de données  |  fType de données 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 | 

# Utilisation d'une base de données Amazon DynamoDB comme cible pour AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Vous pouvez l'utiliser AWS DMS pour migrer des données vers une table Amazon DynamoDB. Amazon DynamoDB est un service de base de données NoSQL entièrement géré qui fournit des performances rapides et prévisibles avec une évolutivité sans faille. AWS DMS prend en charge l'utilisation d'une base de données relationnelle ou de MongoDB comme source.

Dans DynamoDB, les tables, les éléments et les attributs sont les principaux composants que vous utilisez. Une *table *est une collection d’éléments et chaque *élément *est une collection d’attributs. DynamoDB utilise les clés primaires, appelées clés de partition, afin d'identifier de façon unique chaque élément d'une table. Vous pouvez également utiliser des clés et des index secondaires pour fournir une plus grande flexibilité d'interrogation.

Vous utilisez le mappage d'objet afin de migrer vos données d'une base de données source vers une table DynamoDB cible. Le mappage d'objet vous permet de déterminer l'emplacement des données sources dans la cible. 

Lors de la AWS DMS création de tables sur un point de terminaison cible DynamoDB, il crée autant de tables que dans le point de terminaison de la base de données source. AWS DMS définit également plusieurs valeurs de paramètres DynamoDB. Le coût de création de la table dépend de la quantité de données et du nombre de tables à migrer.

**Note**  
L'option **Mode SSL** de la AWS DMS console ou de l'API ne s'applique pas à certains services de streaming de données et NoSQL tels que Kinesis et DynamoDB. Ils sont sécurisés par défaut, ce qui AWS DMS montre que le paramètre du mode SSL est égal à aucun (**mode SSL = aucun**). Vous n’avez pas besoin de fournir de configuration supplémentaire pour que votre point de terminaison utilise le protocole SSL. Par exemple, lorsque DynamoDB est utilisé comme point de terminaison cible, il est sécurisé par défaut. Tous les appels d'API à DynamoDB utilisent le protocole SSL, il n'est donc pas nécessaire d'ajouter une option SSL supplémentaire dans le point de terminaison. AWS DMS Vous pouvez placer et récupérer des données en toute sécurité via des points de terminaison SSL à l’aide du protocole HTTPS, utilisé par AWS DMS par défaut lors de la connexion à une base de données DynamoDB.

Pour accélérer le transfert, AWS DMS prend en charge le chargement complet multithread vers une instance cible DynamoDB. DMS prend en charge ce traitement multithread avec des paramètres de tâche, notamment les suivants :
+ `MaxFullLoadSubTasks` : utilisez cette option pour indiquer le nombre maximal de tables sources à charger en parallèle. DMS charge chaque table dans sa table cible DynamoDB correspondante à l’aide d’une sous-tâche dédiée. La valeur par défaut est 8. La valeur maximale est 49.
+ `ParallelLoadThreads`— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans sa table cible DynamoDB. La valeur par défaut est 0 (à thread unique). La valeur maximale est 200. Vous pouvez demander une augmentation de cette limite maximale.
**Note**  
DMS attribue chaque segment d'une table à son propre thread pour le chargement. Par conséquent, définissez `ParallelLoadThreads` sur le nombre maximal de segments que vous spécifiez pour une table de la source.
+ `ParallelLoadBufferSize` : utilisez cette option pour spécifier le nombre maximal d’enregistrements à stocker dans la mémoire tampon utilisée par les threads de chargement parallèles pour charger les données dans la cible DynamoDB. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avec `ParallelLoadThreads`. `ParallelLoadBufferSize` est valide uniquement dans le cas de plusieurs threads.
+ Paramètres de mappage de table pour des tables individuelles : utilisez des règles `table-settings` pour identifier les tables individuelles de la source que vous souhaitez charger en parallèle. Utilisez également ces règles pour spécifier comment segmenter les lignes de chaque table pour le chargement multithread. Pour de plus amples informations, veuillez consulter [Règles des paramètres de table et de collection et opérations](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**Note**  
Lorsque AWS DMS les valeurs des paramètres DynamoDB sont définies pour une tâche de migration, la valeur du paramètre Unités de capacité de lecture (RCU) par défaut est définie sur 200.  
La valeur du paramètre WCU (Write Capacity Units) est également définie, mais sa valeur dépend de plusieurs autres paramètres :  
La valeur par défaut du paramètre WCU est 200.
Si le paramètre de tâche `ParallelLoadThreads` est défini sur une valeur supérieure à 1 (0 par défaut), le paramètre WCU est défini à 200 fois la valeur `ParallelLoadThreads`.
Les frais AWS DMS d'utilisation standard s'appliquent aux ressources que vous utilisez.

## Migration à partir d’une base de données relationnelle vers une table DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS prend en charge la migration des données vers les types de données scalaires DynamoDB. Lors d'une migration depuis une base de données relationnelle telle qu'Oracle ou MySQL vers DynamoDB, vous pouvez restructurer la manière dont vous stockez les données.

 AWS DMS Prend actuellement en charge la restructuration d'une table à une autre selon les attributs de type scalaire DynamoDB. Si vous migrez des données vers DynamoDB depuis une table de base de données relationnelle, vous prenez les données d'une table et les reformatez en attributs de types de données scalaires DynamoDB. Ces attributs peuvent accepter des données de plusieurs colonnes et vous pouvez mapper directement une colonne à un attribut.

AWS DMS prend en charge les types de données scalaires DynamoDB suivants :
+ String
+ Number
+ Booléen

**Note**  
Les données NULL provenant de la source sont ignorées dans la cible.

## Conditions préalables à l'utilisation de DynamoDB comme cible pour AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Avant de commencer à utiliser une base de données DynamoDB comme cible, assurez-vous AWS DMS de créer un rôle IAM. Ce rôle IAM doit permettre d'assumer et AWS DMS d'accorder l'accès aux tables DynamoDB vers lesquelles la migration est en cours de migration. L'ensemble d'autorisations d'accès minimum est indiqué dans la stratégie IAM suivante.

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

****  

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

------

Le rôle que vous utilisez pour la migration vers DynamoDB doit bénéficier des autorisations suivantes.

------
#### [ 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": "*"
        }
    ]
}
```

------

## Limitations liées à l'utilisation de DynamoDB comme cible pour AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Les limitations suivantes s’appliquent à l’utilisation de DynamoDB en tant que cible :
+ DynamoDB limite la précision du type de données Number à 38 places. Stockez tous les types de données en tant que chaîne avec une meilleure précision. Vous devez le spécifier explicitement à l'aide de la fonction de mappage d'objet.
+ Étant donné que DynamoDB ne possède pas de type de données Date, les données utilisant le type de données Date sont converties en chaînes.
+ DynamoDB n’autorise pas les mises à jour des attributs de la clé primaire. Cette restriction est importante lors de l'utilisation de la réplication continue avec la capture des données modifiées (CDC), car elle peut entraîner des données non souhaitées dans la cible. En fonction de la façon dont l'objet est mappé, une opération CDC qui met à jour la clé primaire peut réaliser l'une des deux actions suivantes. Elle peut échouer ou insérer un nouvel élément avec la clé primaire mise à jour et des données incomplètes.
+ AWS DMS prend uniquement en charge la réplication de tables avec des clés primaires non composites. Une exception s'applique si vous spécifiez un mappage d'objet pour la table cible avec une clé de partition ou une clé de tri personnalisée, ou les deux.
+ AWS DMS ne prend pas en charge les données LOB sauf s'il s'agit d'un CLOB. AWS DMS convertit les données CLOB en chaîne DynamoDB lors de la migration des données.
+ Lorsque vous utilisez DynamoDB comme cible, seule la table de contrôle Appliquer les exceptions (`dmslogs.awsdms_apply_exceptions`) est prise en charge. Pour plus d'informations sur les tables de contrôle, consultez [Paramètres de tâche de la table de contrôle](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS ne prend pas en charge le paramétrage des tâches `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` pour DynamoDB en tant que cible. 
+ AWS DMS ne prend pas en charge le paramétrage des tâches `TaskRecoveryTableEnabled` pour DynamoDB en tant que cible. 
+ `BatchApply`n'est pas pris en charge pour un point de terminaison DynamoDB.
+ AWS DMS Impossible de migrer les attributs dont les noms correspondent à des mots réservés dans DynamoDB. Pour plus d'informations, consultez la section [Mots réservés dans DynamoDB dans](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) le manuel du développeur Amazon *DynamoDB*.

## Utilisation du mappage d’objet pour migrer les données vers DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS utilise des règles de mappage de tables pour mapper les données de la source à la table DynamoDB cible. Pour mapper des données vers une cible DynamoDB, utilisez un type de règle de mappage de tables dénommé *object-mapping*. Le mappage d'objet vous permet de définir le nom des attributs et les données qui doivent être migrées vers ceux-ci. Des règles de sélection doivent être définies lorsque vous utilisez le mappage d'objet.

DynamoDB ne dispose pas d’une structure prédéfinie autre qu’une clé de partition et une clé de tri facultative. Si vous avez une clé primaire non composite, AWS DMS utilisez-la. Si vous avez une clé primaire composite ou si vous souhaitez utiliser une clé de tri, définissez ces clés et les autres attributs dans votre table DynamoDB cible.

Pour créer une règle de mappage d'objet, vous spécifiez le `rule-type` comme *mappage d'objet*. Cette règle spécifie le type de mappage d'objet que vous souhaitez utiliser. 

La structure de la règle est la suivante :

```
{ "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 prend actuellement en charge `map-record-to-record` et `map-record-to-document` en tant que seules valeurs valides pour le `rule-action` paramètre. Ces valeurs indiquent ce qui est AWS DMS fait par défaut aux enregistrements qui ne sont pas exclus de la liste d'`exclude-columns`attributs. Ces valeurs n'affectent en aucune façon les mappages d'attributs. 
+ Vous pouvez utiliser `map-record-to-record` lors de la migration d’une base de données relationnelle vers DynamoDB. La clé primaire est utilisée depuis la base de données relationnelle comme clé de partition dans DynamoDB et crée un attribut pour chaque colonne dans la base de données source. Lors de l'utilisation`map-record-to-record`, pour toute colonne de la table source non répertoriée dans la liste `exclude-columns` d'attributs, AWS DMS crée un attribut correspondant sur l'instance DynamoDB cible. Cet attribut est créé, que la colonne source soit ou non utilisée dans un mappage d'attribut. 
+ Vous utilisez `map-record-to-document` pour placer des colonnes sources dans un mappage DynamoDB unique et plat sur la cible, avec le nom d’attribut « \$1doc ». Lors de l'utilisation`map-record-to-document`, AWS DMS place les données dans un attribut cartographique DynamoDB unique et plat sur la source. Cet attribut est appelé « \$1doc ». Ce placement s'applique à toute colonne de la table source non listée dans la liste d'attributs `exclude-columns`. 

Une des manières de comprendre la différence entre les paramètres `rule-action` `map-record-to-record` et `map-record-to-document` consiste à voir les deux paramètres en action. Dans cet exemple, imaginons que vous commencez avec une ligne de table d'une base de données relationnelle, présentant la structure et les données suivantes :

![\[Exemple de base de données\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/images/datarep-dynamodb1.png)


Pour migrer ces informations vers DynamoDB, vous créez des règles pour mapper les données dans un élément de la table DynamoDB. Notez les colonnes listées pour le paramètre `exclude-columns`. Ces colonnes ne sont pas directement mappées à la cible. Le mappage d'attributs est plutôt utilisé pour combiner les données dans de nouveaux éléments, tels que where *FirstName*et *LastName*sont regroupés pour figurer *CustomerName*sur la cible DynamoDB. *NickName*et les *revenus* ne sont pas exclus.

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

À l'aide de `rule-action` ce paramètre *map-record-to-record*, les données *NickName*et les *revenus* sont mappés aux éléments du même nom dans la cible DynamoDB. 

![\[Commencez avec AWS DMS\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/images/datarep-dynamodb2.png)


Supposons toutefois que vous utilisiez les mêmes règles mais que vous modifiiez le `rule-action` paramètre en *map-record-to-document*. Dans ce cas, les colonnes non répertoriées dans le `exclude-columns` paramètre, *NickName*et le *revenu*, sont mappées à un élément *\$1doc*.

![\[Commencez avec AWS DMS\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/images/datarep-dynamodb3.png)


### Utilisation d'expressions de condition personnalisées avec le mappage d'objet
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

Vous pouvez utiliser une fonctionnalité de DynamoDB nommée « expressions conditionnelles » pour manipuler les données qui sont écrites dans une table DynamoDB. Pour plus d’informations sur les expressions de condition dans DynamoDB, consultez [Expressions de condition](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Une expression de condition est constituée des éléments suivants : 
+ une expression (obligatoire) 
+ valeurs des attributs d'expression (obligatoire). Spécifie une structure DynamoDB json de la valeur de l'attribut. Cela est utile pour comparer un attribut à une valeur dans DynamoDB que vous ne connaîtrez peut-être pas avant l'exécution. Vous pouvez définir une valeur d'attribut d'expression comme espace réservé pour une valeur réelle.
+ noms d'attributs d'expression (obligatoire). Cela permet d'éviter les conflits potentiels avec les mots réservés DynamoDB, les noms d'attributs contenant des caractères spéciaux, etc.
+ options pour déterminer quand utiliser l'expression de condition (facultatif). La valeur par défaut est apply-during-cdc = false et apply-during-full-load = true

La structure de la règle est la suivante :

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

L'exemple suivant illustre les sections utilisées pour l'expression de condition.

![\[Commencez avec AWS DMS\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### Utilisation du mappage d'attribut avec le mappage d'objet
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

La mappage d'attribut vous permet de spécifier une chaîne modèle, en utilisant les noms de la colonne source pour restructurer les données sur la cible. Aucun formatage n'est effectué, autre que ce qui est spécifié par l'utilisateur dans le modèle.

L'exemple suivant illustre la structure de la base de données source et la structure de cible DynamoDB souhaitée. La structure de la source est illustrée en premier, dans ce cas, une base de données Oracle, puis la structure souhaitée des données dans DynamoDB. L'exemple se termine avec le JSON utilisé pour créer la structure cible souhaitée.

La structure des données Oracle est la suivante :


****  

| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Clé primaire | N/A |  | 
| Randy | Marsh | 5 | 221B Baker Street  | 1234567890 | 31 Spooner Street, Quahog  | 9876543210  | 02/29/1988  | 

La structure des données DynamoDB est la suivante :


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Clé de partition | Clé de tri | N/A | 
| <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> | 

Le JSON suivant illustre le mappage d'objet et le mappage de colonne utilisés pour parvenir à la structure 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}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Une autre façon d'utiliser le mappage de colonne consiste à utiliser le format DynamoDB comme type de document. L'exemple de code suivant utilise *dynamodb-map* comme `attribute-sub-type` pour la mappage d'attribut. 

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

Au lieu de cela`dynamodb-map`, vous pouvez utiliser le mappage d'attributs `dynamodb-list` as attribute-sub-type for, comme indiqué dans l'exemple suivant.

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

### Exemple 1 : utilisation du mappage d'attribut avec le mappage d'objet
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

L'exemple suivant fait migrer les données de deux tables de base de données MySQL, *nfl\$1data et *sport\$1team**, vers deux tables DynamoDB appelées et. *NFLTeams*SportTeams** La structure des tables et le JSON utilisés pour mapper les données depuis les tables de base de données MySQL vers les tables DynamoDB sont les suivants :

La structure de la table de base de données MySQL *nfl\$1data* est indiquée ci-dessous :

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

La structure de la table de base de données MySQL *sport\$1team* est indiquée ci-dessous :

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

Les règles de mappage de table utilisées pour mapper les deux tables vers les deux tables DynamoDB sont indiquées ci-dessous :

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

L'exemple de sortie pour la table *NFLTeams*DynamoDB est illustré ci-dessous :

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

L'exemple de sortie pour la table SportsTeams *DynamoDB* est illustré ci-dessous :

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

## Types de données cibles pour DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

Le point de terminaison DynamoDB pour AWS DMS prend en charge la plupart des types de données DynamoDB. Le tableau suivant indique les types de données AWS DMS cibles Amazon pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Lors de AWS DMS la migration de données à partir de bases de données hétérogènes, nous mappons les types de données de la base de données source à des types de données intermédiaires appelés types de AWS DMS données. Nous mappons ensuite les types de données intermédiaires vers les types de données cibles. Le tableau suivant indique chaque type de AWS DMS données et le type de données auquel il est mappé dans DynamoDB :


| AWS DMS type de données | Type de données DynamoDB | 
| --- | --- | 
|  String  |  Chaîne  | 
|  WString  |  String  | 
|  Booléen  |  Booléen  | 
|  Date  |  String  | 
|  DateTime  |  String  | 
|  INT1  |  Number  | 
|  INT2  |  Number  | 
|  INT4  |  Number  | 
|  INT8  |  Number  | 
|  Numérique  |  Number  | 
|  Real4  |  Number  | 
|  Real8  |  Number  | 
|  UINT1  |  Number  | 
|  UINT2  |  Number  | 
|  UINT4  |  Number  | 
| UINT8 | Number | 
| CLOB | String | 

# Utilisation d'Amazon Kinesis Data Streams comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Vous pouvez l'utiliser AWS DMS pour migrer des données vers un flux de données Amazon Kinesis. Les flux de données Amazon Kinesis font partie du service Amazon Kinesis Data Streams. Vous pouvez utiliser des flux de données Kinesis pour collecter et traiter des flux volumineux d’enregistrements de données en temps réel.

Un flux de données Kinesis se compose de partitions. Les *partitions* sont des séquences d'enregistrements de données identifiées de manière unique dans un flux. Pour plus d’informations sur les partitions dans Amazon Kinesis Data Streams, consultez [Partition](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) dans le *Guide du développeur Amazon Kinesis Data Streams*.

AWS Database Migration Service publie des enregistrements dans un flux de données Kinesis à l'aide de JSON. Au cours de la conversion, AWS DMS sérialise chaque enregistrement de la base de données source dans une paire attribut-valeur au format JSON ou un format de message JSON\$1UNFORMATED. Un format de message JSON\$1UNFORMATED est une chaîne JSON à une seule ligne avec un délimiteur de nouvelle ligne. Il permet à Amazon Data Firehose de fournir des données Kinesis à une destination Amazon S3, puis de les interroger à l'aide de différents moteurs de requête, dont Amazon Athena.

Utilisez le mappage d'objet pour migrer vos données de n'importe quelle source de données prise en charge vers un flux cible. Avec le mappage d'objet, vous déterminez la façon de structurer les enregistrements de données dans le flux. Vous définissez également une clé de partition pour chaque table, que Kinesis Data Streams utilise pour regrouper les données dans ses partitions. 

AWS DMS définit également plusieurs valeurs de paramètres Kinesis Data Streams. Le coût de création de la table dépend de la quantité de données et du nombre de tables à migrer.

**Note**  
L'option **Mode SSL** de la AWS DMS console ou de l'API ne s'applique pas à certains services de streaming de données et NoSQL tels que Kinesis et DynamoDB. Ils sont sécurisés par défaut, ce qui AWS DMS montre que le paramètre du mode SSL est égal à aucun (**mode SSL = aucun**). Vous n’avez pas besoin de fournir de configuration supplémentaire pour que votre point de terminaison utilise le protocole SSL. Par exemple, lorsque Kinesis est utilisé comme point de terminaison cible, il est sécurisé par défaut. Tous les appels d'API adressés à Kinesis utilisent le protocole SSL, il n'est donc pas nécessaire d'ajouter une option SSL supplémentaire sur le AWS DMS terminal. Vous pouvez placer et récupérer des données en toute sécurité via des points de terminaison SSL à l’aide du protocole HTTPS, utilisé par AWS DMS par défaut lors de la connexion à un flux de données Kinesis.

**Paramètres de point de terminaison Kinesis Data Streams**

Lorsque vous utilisez les points de terminaison cibles de Kinesis Data Streams, vous pouvez obtenir les détails des transactions et des contrôles à l'aide de l'option `KinesisSettings` de l'API. AWS DMS 

Vous pouvez définir les paramètres de connexion de l’une des manières suivantes :
+ Dans la AWS DMS console, à l'aide des paramètres du point de terminaison.
+ Dans la CLI, en utilisant l'`kinesis-settings`option de la [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)commande.

Dans l’interface CLI, utilisez les paramètres de demande de l’option `kinesis-settings` suivants :
**Note**  
La prise en charge des paramètres de point de terminaison `IncludeNullAndEmpty` est disponible dans AWS DMS versions 3.4.1 et ultérieures. Mais la prise en charge des autres paramètres de point de terminaison suivants pour les cibles Kinesis Data Streams est disponible dans AWS DMS. 
+ `MessageFormat` : format de sortie pour les enregistrements créés sur le point de terminaison. Le format du message est `JSON` (par défaut) ou `JSON_UNFORMATTED` (une seule ligne sans onglet).
+ `IncludeControlDetails` : affiche des informations de contrôle détaillées pour la définition de table, la définition de colonne et les modifications de table et de colonne dans la sortie du message Kinesis. La valeur par défaut est `false`.
+ `IncludeNullAndEmpty` : inclut les colonnes NULL et vides dans la cible. La valeur par défaut est `false`.
+ `IncludePartitionValue` : affiche la valeur de partition dans la sortie du message Kinesis, sauf si le type de partition est `schema-table-type`. La valeur par défaut est `false`.
+ `IncludeTableAlterOperations` : inclut toutes les opérations DDL (Data Definition Language) qui modifient la table dans les données de contrôle, telles que `rename-table`, `drop-table`, `add-column`, `drop-column` et `rename-column`. La valeur par défaut est `false`.
+ `IncludeTransactionDetails` : fournit des informations détaillées sur les transactions à partir de la base de données source. Ces informations comprennent un horodatage de validation, une position de journal et des valeurs pour `transaction_id`, `previous_transaction_id` et `transaction_record_id `(le décalage d'enregistrement dans une transaction). La valeur par défaut est `false`.
+ `PartitionIncludeSchemaTable` : préfixe les noms de schéma et de table aux valeurs de partition, lorsque le type de partition est `primary-key-type`. Cela augmente la distribution des données entre les fragments Kinesis. Par exemple, supposons qu'un schéma `SysBench` comporte des milliers de tables et que chaque table n'ait qu'une plage limitée pour une clé primaire. Dans ce cas, la même clé primaire est envoyée à partir de milliers de tables vers le même fragment, ce qui provoque une limitation. La valeur par défaut est `false`.
+ `UseLargeIntegerValue`— Utilisez jusqu'à 18 chiffres au lieu de convertir les entiers en doubles, disponible à partir de AWS DMS la version 3.5.4. La valeur par défaut est false.

L’exemple suivant illustre l’option `kinesis-settings` utilisée avec un exemple de commande `create-endpoint` émise à l’aide d’ AWS CLI.

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

**Paramètres de tâche de chargement complet multithread**

Pour accélérer le transfert, AWS DMS prend en charge le chargement complet multithread vers une instance cible Kinesis Data Streams. DMS prend en charge ce traitement multithread avec des paramètres de tâche, notamment les suivants :
+ `MaxFullLoadSubTasks` : utilisez cette option pour indiquer le nombre maximal de tables sources à charger en parallèle. DMS charge chaque table dans sa table cible Kinesis correspondante à l’aide d’une sous-tâche dédiée. La valeur par défaut est 8 ; la valeur maximale 49.
+ `ParallelLoadThreads`— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans sa table cible Kinesis. La valeur maximale pour une cible Kinesis Data Streams est de 32. Vous pouvez demander une augmentation de cette limite maximale.
+ `ParallelLoadBufferSize` : utilisez cette option pour spécifier le nombre maximal d’enregistrements à stocker dans la mémoire tampon utilisée par les threads de chargement parallèles pour charger les données dans la cible Kinesis. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avec `ParallelLoadThreads`. `ParallelLoadBufferSize` est valide uniquement dans le cas de plusieurs threads.
+ `ParallelLoadQueuesPerThread` : utilisez cette option pour spécifier le nombre de files d’attente auxquelles chaque thread simultané accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour la cible. La valeur par défaut est 1. Toutefois, pour les cibles Kinesis de différentes tailles de charge utile, la plage valide est comprise entre 5 et 512 files d’attente par thread.

**Paramètres de tâche de chargement CDC multithread**

Vous pouvez utiliser les paramètres de tâche afin d’améliorer les performances de la capture des données de modification (CDC) pour les points de terminaison cibles de streaming des données en temps réel, comme Kinesis et modifier le comportement de l’appel d’API `PutRecords`. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche `ParallelApply*`. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 128 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon. 

Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Kinesis. La valeur par défaut est zéro (0) et la valeur maximale est 32.
+ `ParallelApplyBufferSize` : spécifie le nombre maximal d’enregistrements à stocker dans chaque file d’attente de mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Kinesis lors d’un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque `ParallelApplyThreads` spécifie plusieurs threads. 
+ `ParallelApplyQueuesPerThread` : spécifie le nombre de files d’attente auxquelles chaque thread accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour un point de terminaison Kinesis pendant la CDC. La valeur par défaut est 1 et la valeur maximale est 512.

Lorsque vous utilisez les paramètres de tâche `ParallelApply*`, la valeur par défaut `partition-key-type` est la valeur `primary-key` de la table, pas `schema-name.table-name`.

## Utilisation d’une image antérieure pour afficher les valeurs d’origine des lignes CDC pour un flux de données Kinesis en tant que cible
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Lorsque vous écrivez des mises à jour de CDC sur une cible de diffusion de données comme Kinesis, vous pouvez afficher les valeurs d’origine d’une ligne de base de données source avant de les modifier par une mise à jour. Pour ce faire, AWS DMS remplit une *image antérieure* des événements de mise à jour en fonction des données fournies par le moteur de base de données source. 

Différents moteurs de base de données source fournissent différentes quantités d'informations pour une image antérieure : 
+ Oracle met uniquement à jour des colonnes si elles changent. 
+ PostgreSQL fournit uniquement des données pour les colonnes qui font partie de la clé primaire (modifiée ou non). Pour fournir des données pour toutes les colonnes (modifiées ou non), vous devez définir `REPLICA_IDENTITY` sur `FULL` au lieu de `DEFAULT`. Notez que vous devez choisir la valeur de `REPLICA_IDENTITY` avec soin pour chaque table. Si vous définissez `REPLICA_IDENTITY` sur `FULL`, toutes les valeurs de colonne sont écrites en continu dans la journalisation WAL. Cela peut entraîner des problèmes de performances ou de ressources avec les tables qui sont fréquemment mises à jour.
+ MySQL fournit généralement des données pour toutes les colonnes, à l’exception des types de données BLOB et CLOB (modifiés ou non).

Pour activer avant l'imagerie pour ajouter des valeurs d'origine de la base de données source à la sortie AWS DMS , utilisez le paramètre de tâche `BeforeImageSettings` ou le paramètre `add-before-image-columns`. Ce paramètre applique une règle de transformation de colonne. 

`BeforeImageSettings` ajoute un nouvel attribut JSON à chaque opération de mise à jour avec des valeurs collectées à partir du système de base de données source, comme indiqué ci-dessous.

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

**Note**  
S'applique uniquement `BeforeImageSettings` aux AWS DMS tâches contenant un composant CDC, telles que les tâches à chargement complet plus CDC (qui migrent les données existantes et répliquent les modifications en cours), ou aux tâches CDC uniquement (qui répliquent uniquement les modifications de données). N’appliquez pas les `BeforeImageSettings` aux tâches à pleine charge uniquement.

Pour les options `BeforeImageSettings`, les conditions suivantes s'appliquent :
+ Définissez l'option `EnableBeforeImage` sur `true` pour activer la génération d’image antérieure. La valeur par défaut est `false`. 
+ Utilisez l'option `FieldName` pour attribuer un nom au nouvel attribut JSON. Quand `EnableBeforeImage` est `true`, `FieldName` est obligatoire et ne peut pas être vide.
+ L'option `ColumnFilter` spécifie une colonne à ajouter en utilisant la génération d’image antérieure. Pour ajouter uniquement des colonnes faisant partie des clés primaires de la table, utilisez la valeur par défaut, `pk-only`. Pour ajouter une colonne ayant une valeur d'image antérieure, utilisez `all`. Notez que l’image antérieure ne contient pas de colonnes avec des types de données LOB, tels que CLOB ou BLOB.

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

**Note**  
Les cibles Amazon S3 ne prennent pas en charge `BeforeImageSettings`. Pour les cibles S3, utilisez uniquement la règle de transformation `add-before-image-columns` à effectuer avant la génération d’images pendant la CDC.

### Utilisation d'une règle de transformation d'image antérieure
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

Au lieu des paramètres de tâche, vous pouvez utiliser le paramètre `add-before-image-columns`, qui applique une règle de transformation de colonne. Avec ce paramètre, vous pouvez activer la génération d’image antérieure pendant la CDC sur des cibles de streaming de données comme Kinesis. 

En utilisant `add-before-image-columns` dans une règle de transformation, vous pouvez exercer un contrôle plus précis sur les résultats de l'image antérieure. Les règles de transformation vous permettent d'utiliser un localisateur d'objets qui vous fournit un contrôle sur les tables sélectionnées pour la règle. En outre, vous pouvez enchaîner les règles de transformation, ce qui permet d'appliquer différentes règles à différentes tables. Vous pouvez ensuite manipuler les colonnes produites à l'aide d'autres règles. 

**Note**  
N'utilisez pas le paramètre `add-before-image-columns` avec le paramètre de tâche `BeforeImageSettings` dans la même tâche. N’utilisez pas les deux, pour une seule tâche.

Un type de règle `transformation` avec le paramètre `add-before-image-columns` d'une colonne doit fournir une section `before-image-def`. Vous en trouverez un exemple ci-dessous.

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

La valeur de `column-prefix` est ajoutée à un nom de colonne et la valeur par défaut de `column-prefix` est `BI_`. La valeur de `column-suffix` est ajoutée au nom de la colonne et la valeur par défaut est vide. Ne définissez pas les deux `column-prefix` et `column-suffix` sur des chaînes vides.

Choisissez une valeur pour `column-filter`. Pour ajouter uniquement les colonnes qui font partie des clés primaires de la table, choisissez `pk-only` . Choisissez `non-lob` d'ajouter uniquement des colonnes qui ne sont pas de type LOB. Ou choisissez `all` d'ajouter une colonne qui a une valeur d’image antérieure.

### Exemple de règle de transformation d'image antérieure
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

La règle de transformation de l'exemple suivant ajoute une nouvelle colonne appelée `BI_emp_no` dans la cible. Ainsi, une instruction comme `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` remplit le champ `BI_emp_no` avec 1. Lorsque vous écrivez des mises à jour de CDC sur des cibles Amazon S3, la colonne `BI_emp_no` permet de savoir quelle ligne d’origine a été mise à jour.

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

Pour plus d'informations sur l'utilisation de l'action de règle `add-before-image-columns`, consultez [Règles et actions de transformation](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Conditions préalables à l'utilisation d'un flux de données Kinesis comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Rôle IAM pour l'utilisation d'un flux de données Kinesis comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Avant de configurer un flux de données Kinesis comme cible AWS DMS, assurez-vous de créer un rôle IAM. Ce rôle doit permettre AWS DMS d'assumer et d'accorder l'accès aux flux de données Kinesis vers lesquels la migration est effectuée. L'ensemble d'autorisations d'accès minimum est indiqué dans la stratégie IAM suivante.

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

****  

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

------

Le rôle que vous utilisez pour la migration vers un flux de données Kinesis doit bénéficier des autorisations suivantes.

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

****  

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

------

### Accès à un flux de données Kinesis en tant que cible pour AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

Dans les AWS DMS versions 3.4.7 et supérieures, pour vous connecter à un point de terminaison Kinesis, vous devez effectuer l'une des opérations suivantes :
+ Configurez DMS pour qu’il utilise les points de terminaison d’un VPC. Pour plus d’informations sur la configuration de DMS pour qu’il utilise les points de terminaison d’un VPC, consultez [Configuration des points de terminaison VPC pour AWS DMS](CHAP_VPC_Endpoints.md).
+ Configurez DMS pour qu’il utilise des routes publiques, c’est-à-dire qu’il rende votre instance de réplication publique. Pour plus d’informations sur les instances de réplication publiques, consultez [Instances de réplication publiques et privées](CHAP_ReplicationInstance.PublicPrivate.md).

## Limitations liées à l'utilisation de Kinesis Data Streams comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Les limitations suivantes s’appliquent lorsque vous utilisez Kinesis Data Streams en tant que cible :
+ AWS DMS publie chaque mise à jour d'un seul enregistrement de la base de données source sous la forme d'un enregistrement de données dans un flux de données Kinesis donné, quelles que soient les transactions. Toutefois, vous pouvez inclure des détails de transaction pour chaque enregistrement de données à l'aide des paramètres pertinents de l'API `KinesisSettings`.
+ Le Mode LOB complet n'est pas pris en charge.
+ La taille LOB maximale prise en charge est de 1 Mo.
+ Kinesis Data Streams ne prend pas en charge la déduplication. Les applications qui consomment des données d'un flux doivent gérer les enregistrements en double. Pour plus d’informations, consultez [Gestion des enregistrements en double](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) dans le *Guide du développeur Amazon Kinesis Data Streams*.
+ AWS DMS prend en charge les quatre formes suivantes pour les clés de partition :
  + `SchemaName.TableName` : une combinaison du nom du schéma et du nom de la table.
  + `${AttributeName}` : la valeur d'un des champs du fichier JSON, ou la clé primaire de la table dans la base de données source.
  + `transaction-id`: ID de transaction CDC. Tous les enregistrements d'une même transaction sont placés sur la même partition.
  + `constant`: valeur littérale fixe pour chaque enregistrement, indépendamment de la table ou des données. Tous les enregistrements sont envoyés à la même valeur de clé de partition « constante », ce qui permet un ordre global strict dans toutes les tables.

  ```
  {
      "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"
      }
  }
  ```
+ Pour en savoir plus sur le chiffrement de vos données au repos dans Kinesis Data Streams, consultez [Protection des données dans Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html) dans le *Guide du développeur AWS Key Management Service *. 
+ Le paramètre du point de `IncludeTransactionDetails` terminaison n'est pris en charge que lorsque le point de terminaison source est Oracle, SQL Server, PostgreSQL ou MySQL. Pour les autres types de point de terminaison source, les détails des transactions ne seront pas inclus.
+ `BatchApply` n’est pas pris en charge pour un point de terminaison Kinesis. L'utilisation de Batch Apply (par exemple, le paramètre de tâche de métadonnées `BatchApplyEnabled` cible) pour une cible Kinesis entraîne l'échec de la tâche et la perte de données. Ne l'activez pas `BatchApply` lorsque vous utilisez Kinesis comme point de terminaison cible.
+ Les cibles Kinesis ne sont prises en charge que pour un flux de données Kinesis dans le même AWS compte et le même Région AWS que l'instance de réplication.
+ Lors de la migration depuis une source MySQL, les BeforeImage données n'incluent pas les types de données CLOB et BLOB. Pour de plus amples informations, veuillez consulter [Utilisation d’une image antérieure pour afficher les valeurs d’origine des lignes CDC pour un flux de données Kinesis en tant que cible](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS ne prend pas en charge la migration de valeurs de type de `BigInt` données comportant plus de 16 chiffres. Pour contourner cette limitation, vous pouvez utiliser la règle de transformation suivante pour convertir la colonne `BigInt` en chaîne. Pour plus d’informations sur les règles de transformation, consultez [Règles et actions de transformation](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
      }
  }
  ```
+ Lorsque plusieurs opérations DML au sein d'une même transaction modifient une colonne LOB (Large Object) de la base de données source, la base de données cible ne conserve que la valeur LOB finale de la dernière opération de cette transaction. Les valeurs LOB intermédiaires définies par les opérations précédentes de la même transaction sont remplacées, ce qui peut entraîner des pertes de données ou des incohérences. Ce comportement est dû à la manière dont les données LOB sont traitées lors de la réplication.
+ AWS DMS ne prend pas en charge les données source contenant des `'\0'` caractères incorporés lors de l'utilisation de Kinesis comme point de terminaison cible. Les données contenant des `'\0'` caractères incorporés seront tronquées au premier `'\0'` caractère.

## Utilisation du mappage d’objet pour migrer les données vers un flux de données Kinesis
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS utilise des règles de mappage de tables pour mapper les données de la source au flux de données Kinesis cible. Pour mapper des données vers un flux cible, vous utilisez un type de règles de mappage de tables qu'on appelle le mappage d'objet. Utilisez le mappage d’objet pour définir la façon dont les enregistrements de données de la source sont mappés aux enregistrements de données publiés dans le flux de données Kinesis. 

Les flux de données Kinesis ne disposent pas d’une structure prédéfinie autre que le fait d’avoir une clé de partition. Dans une règle de mappage d'objets, les valeurs possibles de `partition-key-type` pour un enregistrement de données sont `schema-table`, `transaction-id`, `primary-key`, `constant` et `attribute-name`.

Pour créer une règle de mappage d'objet, spécifiez `rule-type` comme `object-mapping`. Cette règle spécifie le type de mappage d'objet que vous souhaitez utiliser. 

La structure de la règle est la suivante.

```
{
    "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 prend actuellement en charge `map-record-to-record` et `map-record-to-document` en tant que seules valeurs valides pour le `rule-action` paramètre. Ces paramètres affectent les valeurs qui ne sont pas exclues de la liste d’attributs `exclude-columns`. Les `map-record-to-document` valeurs `map-record-to-record` et indiquent comment ces AWS DMS enregistrements sont gérés par défaut. Ces valeurs n'affectent en aucune façon les mappages d'attributs. 

Utilisez `map-record-to-record` lors d’une migration d’une base de données relationnelle vers un flux de données Kinesis. Ce type de règle utilise la valeur `taskResourceId.schemaName.tableName` de la base de données relationnelle comme clé de partition dans le flux de données Kinesis et crée un attribut pour chaque colonne de la base de données source. 

Lorsque vous utilisez `map-record-to-record`, notez ce qui suit :
+ Ce paramètre n’affecte que les colonnes exclues par la liste `exclude-columns`.
+ Pour chacune de ces colonnes, AWS DMS crée un attribut correspondant dans le sujet cible.
+ AWS DMS crée cet attribut correspondant, que la colonne source soit utilisée ou non dans un mappage d'attributs. 

Utilisez `map-record-to-document` pour placer des colonnes sources dans un document unique à plat du flux cible approprié en utilisant le nom d’attribut « \$1doc ». AWS DMS place les données dans un mappage unique à plat sur la source appelée « `_doc` ». Ce placement s'applique à toute colonne de la table source non listée dans la liste d'attributs `exclude-columns`.

Une manière de comprendre `map-record-to-record` est de le voir en action. Dans cet exemple, imaginons que vous commencez avec une ligne de table d'une base de données relationnelle, présentant la structure et les données suivantes :


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

Pour migrer ces informations d’un schéma nommé `Test` vers un flux de données Kinesis, vous créez des règles pour mapper les données au flux cible. La règle suivante illustre ce mappage. 

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

L’exemple qui suit illustre le format d’enregistrement résultant dans le flux de données Kinesis : 
+ StreamName: XXX
+ PartitionKey: Test.Customers //SchmaName.TableName
+ Data : //The following JSON message

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

Supposons toutefois que vous utilisiez les mêmes règles, mais que vous redéfinissiez le paramètre `rule-action` sur `map-record-to-document` et que vous excluiez certaines colonnes. La règle suivante illustre ce mappage.

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

Dans ce cas, les colonnes non répertoriées dans le paramètre `exclude-columns`, `FirstName`, `LastName`, `StoreId` et `DateOfBirth`, sont mappées à `_doc`. L’exemple qui suit illustre le format d’enregistrement résultant. 

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

### Restructuration de données avec le mappage d'attribut
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

Vous pouvez restructurer les données lors de leur migration vers un flux de données Kinesis à l’aide d’un mappage d’attribut. Par exemple, vous pourriez vouloir regrouper plusieurs champs de la source en un seul champ dans la cible. Le mappage d'attribut suivant illustre comment restructurer les données.

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

Pour définir une valeur constante pour`partition-key`, spécifiez`"partition-key-type: "constant"`, cela définit la valeur de partition sur`constant`. Par exemple, vous pouvez le faire pour forcer le stockage de toutes les données dans une seule partition. Le mappage suivant illustre cette approche. 

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

**Note**  
La valeur `partition-key` d'un enregistrement de contrôle correspondant à une table spécifique est `TaskId.SchemaName.TableName`. La valeur `partition-key` d'un enregistrement de contrôle correspondant à une tâche spécifique est le `TaskId` de cet enregistrement. La spécification d'une valeur `partition-key` dans le mappage d'objet n'a aucun impact sur la `partition-key` d'un enregistrement de contrôle.  
 Lorsqu'il `partition-key-type` est défini sur `attribute-name` dans une règle de mappage de table, vous devez spécifier`partition-key-name`, qui doit faire référence soit à une colonne de la table source, soit à une colonne personnalisée définie dans le mappage. En outre, `attribute-mappings` il doit être fourni pour définir la manière dont les colonnes source sont mappées au Kinesis Stream cible.

### Format de message pour Kinesis Data Streams
<a name="CHAP_Target.Kinesis.Messageformat"></a>

La sortie JSON est simplement une liste de paires clé-valeur. Un format de message JSON\$1UNFORMATED est une chaîne JSON à une seule ligne avec un délimiteur de nouvelle ligne.

AWS DMS fournit les champs réservés suivants pour faciliter la consommation des données issues des Kinesis Data Streams : 

**RecordType**  
Les enregistrements peuvent être de type Données ou Contrôle. *Les enregistrements de données* représentent les lignes réelles de la source. *Les enregistrements de contrôle* sont destinés à des événements importants dans le flux, par exemple un redémarrage de la tâche.

**Opération**  
Pour les enregistrements de données, l'opération peut être `load`,`insert`, `update` ou `delete`.  
Pour les enregistrements de contrôle, l’opération peut être `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
Schéma source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.

**TableName**  
Table source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.

**Horodatage**  
Horodatage de la construction du message JSON. Le champ est formaté selon le format ISO 8601.

# Utiliser Apache Kafka comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

Vous pouvez l'utiliser AWS DMS pour migrer des données vers un cluster Apache Kafka. Apache Kafka est une plateforme de streaming distribuée. Apache Kafka vous permet d’ingérer et de traiter des données de streaming en temps réel.

AWS propose également Amazon Managed Streaming pour Apache Kafka (Amazon MSK) à utiliser comme cible. AWS DMS Amazon MSK est un service de streaming Apache Kafka entièrement géré qui simplifie l’implémentation et la gestion des instances Apache Kafka. Il fonctionne avec les versions open source d'Apache Kafka, et vous accédez aux instances Amazon MSK en tant que AWS DMS cibles, exactement comme n'importe quelle instance Apache Kafka. Pour plus d’informations, consultez [Qu’est-ce qu’Amazon MSK ?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) dans le *Guide du développeur Amazon Managed Streaming for Apache Kafka*.

Un cluster Kafka stocke les flux d’enregistrements dans des catégories appelées « rubriques », divisées en partitions. Les *partitions* sont des séquences identifiées de manière unique d’enregistrements de données (messages) dans une rubrique. Les partitions peuvent être réparties entre plusieurs agents dans un cluster pour permettre le traitement parallèle des enregistrements d’une rubrique. Pour de plus amples informations sur les rubriques et les partitions et leur distribution dans Apache Kafka, veuillez consulter [Rubriques et journaux](https://kafka.apache.org/documentation/#intro_topics) et [distribution](https://kafka.apache.org/documentation/#intro_distribution).

Votre cluster Kafka peut être une instance Amazon MSK, un cluster exécuté sur une instance Amazon EC2 ou un cluster sur site. Une instance Amazon MSK ou un cluster sur une instance Amazon EC2 peut se trouver dans le même VPC ou dans un autre VPC. Dans le cas d’un cluster sur site, vous pouvez utiliser votre propre serveur de noms sur site pour votre instance de réplication afin de résoudre le nom d’hôte du cluster. Pour en savoir plus sur la configuration d’un serveur de noms pour votre instance de réplication, consultez [Utilisation de votre propre serveur de noms sur site](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Pour plus d’informations sur la configuration d’un réseau, consultez [Configuration d'un réseau pour une instance de réplication](CHAP_ReplicationInstance.VPC.md).

Lorsque vous utilisez un cluster Amazon MSK, assurez-vous que son groupe de sécurité autorise l’accès à partir de votre instance de réplication. Pour en savoir plus sur la modification du groupe de sécurité d’un cluster Amazon MSK, consultez [Modification du groupe de sécurité d’un cluster Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service publie des enregistrements dans un sujet Kafka à l'aide de JSON. Au cours de la conversion, AWS DMS sérialise chaque enregistrement de la base de données source dans une paire attribut-valeur au format JSON.

Utilisez le mappage d’objet pour migrer vos données de n’importe quelle source de données prise en charge vers un cluster Kafka cible. Avec le mappage d’objet, vous déterminez la façon de structurer les enregistrements de données dans la rubrique cible. Vous définissez également une clé de partition pour chaque table, qu'Apache Kafka utilise pour regrouper les données dans ses partitions. 

Actuellement, ne AWS DMS prend en charge qu'un seul sujet par tâche. Pour une seule tâche comportant plusieurs tables, tous les messages sont placés dans une seule rubrique. Chaque message inclut une section de métadonnées qui identifie le schéma et la table cibles. AWS DMS les versions 3.4.6 et supérieures prennent en charge la réplication multisujet à l'aide du mappage d'objets. Pour de plus amples informations, veuillez consulter [Réplication à plusieurs rubriques à l’aide du mappage d’objet](#CHAP_Target.Kafka.MultiTopic).

**Paramètres du point de terminaison Apache Kafka**

Vous pouvez spécifier les détails de connexion via les paramètres du point de terminaison dans la AWS DMS console ou via l'`--kafka-settings`option de la CLI. Les conditions requises pour chaque paramètre sont les suivantes :
+ `Broker` : spécifiez les emplacements d’un ou de plusieurs agents dans votre cluster Kafka sous la forme d’une liste séparée par des virgules de tous les éléments `broker-hostname:port`. Par exemple : `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Ce paramètre peut spécifier les emplacements d’un ou de tous les agents du cluster. Les agents de cluster communiquent tous pour gérer le partitionnement des enregistrements de données migrés vers la rubrique.
+ `Topic` : (facultatif) spécifiez le nom de rubrique avec une longueur maximale de 255 lettres et symboles. Vous pouvez utiliser le point (.), le trait de soulignement (\$1) et le moins (-). Les noms de rubrique avec un point (.) ou un trait de soulignement (\$1) peuvent entrer en collision dans des structures de données internes. Utilisez l'un ou l'autre de ces symboles, mais pas les deux dans le nom de la rubrique. Si vous ne spécifiez pas de nom de rubrique, AWS DMS `"kafka-default-topic"` utilisez-le comme rubrique de migration.
**Note**  
Pour AWS DMS créer soit un sujet de migration que vous spécifiez, soit le sujet par défaut, défini dans le `auto.create.topics.enable = true` cadre de la configuration de votre cluster Kafka. Pour de plus amples informations, consultez [Limitations liées à l'utilisation d'Apache Kafka comme cible pour AWS Database Migration Service](#CHAP_Target.Kafka.Limitations).
+ `MessageFormat` : format de sortie pour les enregistrements créés sur le point de terminaison. Le format du message est `JSON` (par défaut) ou `JSON_UNFORMATTED` (une seule ligne sans onglet).
+ `MessageMaxBytes` : taille maximale en octets des enregistrements créés sur le point de terminaison. La valeur par défaut est 1 000 000.
**Note**  
Vous ne pouvez utiliser la AWS CLI/SDK que pour passer à une valeur autre que celle par `MessageMaxBytes` défaut. Par exemple, pour modifier votre point de terminaison Kafka existant et redéfinir la valeur de `MessageMaxBytes`, utilisez la commande suivante.  

  ```
  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` : fournit des informations détaillées sur les transactions à partir de la base de données source. Ces informations comprennent un horodatage de validation, une position de journal et des valeurs pour `transaction_id`, `previous_transaction_id` et `transaction_record_id`(le décalage d'enregistrement dans une transaction). La valeur par défaut est `false`.
+ `IncludePartitionValue` : affiche la valeur de partition dans la sortie du message Kafka, sauf si le type de partition est `schema-table-type`. La valeur par défaut est `false`.
+ `PartitionIncludeSchemaTable` : préfixe les noms de schéma et de table aux valeurs de partition, lorsque le type de partition est `primary-key-type`. Cela augmente la distribution des données entre les partitions Kafka. Par exemple, supposons qu'un schéma `SysBench` comporte des milliers de tables et que chaque table n'ait qu'une plage limitée pour une clé primaire. Dans ce cas, la même clé primaire est envoyée à partir de milliers de tables vers la même partition, ce qui provoque une limitation. La valeur par défaut est `false`.
+ `IncludeTableAlterOperations` : inclut toutes les opérations DDL (Data Definition Language) qui modifient la table dans les données de contrôle, telles que `rename-table`, `drop-table`, `add-column`, `drop-column` et `rename-column`. La valeur par défaut est `false`. 
+ `IncludeControlDetails` : affiche les informations de contrôle détaillées pour la définition de table, la définition de colonne et les modifications de table et de colonne dans la sortie du message Kafka. La valeur par défaut est `false`.
+ `IncludeNullAndEmpty` : inclut les colonnes NULL et vides dans la cible. La valeur par défaut est `false`.
+ `SecurityProtocol` : définit une connexion sécurisée à un point de terminaison cible Kafka à l’aide du protocole TLS (Transport Layer Security). Les options sont `ssl-authentication`, `ssl-encryption` et `sasl-ssl`. L’utilisation de `sasl-ssl` requiert `SaslUsername` et `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`— Définit la vérification du nom d'hôte pour le certificat. Ce paramètre est pris en charge dans les AWS DMS versions 3.5.1 et ultérieures. Les options disponibles sont les suivantes : 
  + `NONE`: désactive la vérification du nom d'hôte du broker dans la connexion client.
  + `HTTPS`: Activez la vérification du nom d'hôte du broker dans la connexion client.
+ `useLargeIntegerValue`— Utilisez jusqu'à 18 chiffres au lieu de convertir les entiers en doubles, disponible à partir de AWS DMS la version 3.5.4. La valeur par défaut est false.

Vous pouvez augmenter la vitesse du transfert dans les paramètres. Pour ce faire, AWS DMS prend en charge un chargement complet multithread sur un cluster cible Apache Kafka. AWS DMS prend en charge ce multithreading avec des paramètres de tâche qui incluent les éléments suivants :
+ `MaxFullLoadSubTasks`— Utilisez cette option pour indiquer le nombre maximum de tables sources à charger en parallèle. AWS DMS charge chaque table dans la table cible Kafka correspondante à l'aide d'une sous-tâche dédiée. La valeur par défaut est 8 ; la valeur maximale 49.
+ `ParallelLoadThreads`— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans sa table cible Kafka. La valeur maximale pour une cible Apache Kafka est 32. Vous pouvez demander une augmentation de cette limite maximale.
+ `ParallelLoadBufferSize` : utilisez cette option pour spécifier le nombre maximal d’enregistrements à stocker dans la mémoire tampon utilisée par les threads de chargement parallèles pour charger les données dans la cible Kafka. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avec `ParallelLoadThreads`. `ParallelLoadBufferSize` est valide uniquement dans le cas de plusieurs threads.
+ `ParallelLoadQueuesPerThread` : utilisez cette option pour spécifier le nombre de files d’attente auxquelles chaque thread simultané accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour la cible. La valeur par défaut est 1. La valeur maximale est 512.

Vous pouvez améliorer les performances de capture des données de modification (CDC) pour les points de terminaison Kafka en ajustant les paramètres de tâche des threads parallèles et des opérations en bloc. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche `ParallelApply*`. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 128 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon. 

Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Kafka. La valeur par défaut est zéro (0) et la valeur maximale est 32.
+ `ParallelApplyBufferSize` : spécifie le nombre maximal d’enregistrements à stocker dans chaque file d’attente de mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Kafka lors d’un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque `ParallelApplyThreads` spécifie plusieurs threads. 
+ `ParallelApplyQueuesPerThread` : spécifie le nombre de files d’attente auxquelles chaque thread accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour un point de terminaison Kafka pendant la CDC. La valeur par défaut est 1. La valeur maximale est 512.

Lorsque vous utilisez les paramètres de tâche `ParallelApply*`, la valeur par défaut `partition-key-type` est la valeur `primary-key` de la table, pas `schema-name.table-name`.

## Connexion à Kafka à l’aide du protocole TLS (Transport Layer Security)
<a name="CHAP_Target.Kafka.TLS"></a>

Un cluster Kafka accepte les connexions sécurisées à l’aide du protocole TLS (Transport Layer Security). Avec DMS, vous pouvez utiliser l’une des trois options de protocole de sécurité suivantes pour sécuriser la connexion d’un point de terminaison Kafka.

**Chiffrement SSL (`server-encryption`)**  
Les clients valident l’identité du serveur par le biais du certificat du serveur. Une connexion chiffrée est alors établie entre le serveur et le client.

**Authentification SSL (`mutual-authentication`)**  
Le serveur et le client valident mutuellement leur identité respective via leurs propres certificats. Une connexion chiffrée est alors établie entre le serveur et le client.

**SASL-SSL (`mutual-authentication`)**  
La méthode SASL (Simple Authentication and Security Layer) remplace le certificat du client par un nom d’utilisateur et un mot de passe pour valider l’identité du client. Plus précisément, vous fournissez un nom d’utilisateur et un mot de passe enregistrés par le serveur afin que ce dernier puisse valider l’identité d’un client. Une connexion chiffrée est alors établie entre le serveur et le client.

**Important**  
Apache Kafka et Amazon MSK acceptent les certificats résolus. Il s’agit d’une limitation connue de Kafka et d’Amazon MSK qui doit être corrigée. Pour plus d’informations, consultez [Apache Kafka issues, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Si vous utilisez Amazon MSK, pensez à utiliser des listes de contrôle d'accès (ACLs) pour contourner cette limitation connue. Pour plus d'informations sur son utilisation ACLs, consultez la ACLs section [Apache Kafka](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) du guide du développeur *Amazon Managed Streaming for Apache Kafka*.  
Si vous utilisez un cluster Kafka autogéré, consultez [Comment dated 21/Oct/18](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) pour en savoir plus sur la configuration de votre cluster.

### Utilisation du chiffrement SSL avec Amazon MSK ou un cluster Kafka autogéré
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

Vous pouvez utiliser le chiffrement SSL pour sécuriser la connexion d’un point de terminaison à Amazon MSK ou à un cluster Kafka autogéré. Lorsque vous utilisez la méthode d’authentification par chiffrement SSL, les clients valident l’identité d’un serveur par le biais du certificat du serveur. Une connexion chiffrée est alors établie entre le serveur et le client.

**Pour utiliser le chiffrement SSL pour vous connecter à Amazon MSK**
+ Définissez le paramètre de point de terminaison du protocole de sécurité (`SecurityProtocol`) à l’aide de l’option `ssl-encryption` lorsque vous créez votre point de terminaison Kafka cible. 

  L’exemple de code JSON suivant définit le protocole de sécurité sur le chiffrement SSL.

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

**Pour utiliser le chiffrement SSL pour un cluster Kafka autogéré**

1. Si vous utilisez une autorité de certification (CA) privée dans votre cluster Kafka sur site, chargez votre certificat de CA privée et obtenez un Amazon Resource Name (ARN). 

1. Définissez le paramètre de point de terminaison du protocole de sécurité (`SecurityProtocol`) à l’aide de l’option `ssl-encryption` lorsque vous créez votre point de terminaison Kafka cible. L’exemple de code JSON suivant définit le protocole de sécurité sur `ssl-encryption`.

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

1. Si vous utilisez une CA privée, définissez `SslCaCertificateArn` dans l’ARN obtenu à la première étape ci-dessus.

### Utilisation de l’authentification SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

Vous pouvez utiliser l’authentification SSL pour sécuriser la connexion d’un point de terminaison à Amazon MSK ou à un cluster Kafka autogéré.

Pour activer l’authentification client et le chiffrement à l’aide de l’authentification SSL pour se connecter à Amazon MSK, procédez comme suit :
+ Préparez une clé privée et un certificat public pour Kafka.
+ Chargez les certificats dans le gestionnaire de certificats DMS.
+ Créez un point de terminaison cible Kafka avec le certificat correspondant ARNs spécifié dans les paramètres du point de terminaison Kafka.

**Pour préparer une clé privée et un certificat public pour Amazon MSK**

1. Créez une instance EC2 et configurez un client de sorte qu’il utilise l’authentification, comme décrit dans les étapes 1 à 9 de la section [Authentification TLS mutuelle](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) du *Guide du développeur Amazon Managed Streaming for Apache Kafka*.

   Après avoir effectué ces étapes, vous disposez d’un Certificate-ARN (l’ARN de certificat public enregistré dans ACM) et d’une clé privée contenus dans un fichier `kafka.client.keystore.jks`.

1. Obtenez le certificat public et copiez-le dans le fichier `signed-certificate-from-acm.pem` à l’aide de la commande suivante :

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

   Cette commande renvoie des informations semblables à celles de l’exemple suivant :

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

   Vous copiez ensuite votre équivalent de `"123"` dans le fichier `signed-certificate-from-acm.pem`.

1. Pour obtenir la clé privée, importez la clé `msk-rsa` à partir de `kafka.client.keystore.jks to keystore.p12`, comme illustré dans l’exemple suivant.

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

1. Utilisez la commande suivante pour exporter `keystore.p12` au format `.pem`. 

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

   Le message **Entrer une phrase passe PEM** apparaît et identifie la clé appliquée pour chiffrer le certificat.

1. Supprimez les attributs de conteneur et les attributs de clé du fichier `.pem` pour vous assurer que la première ligne commence par la chaîne suivante.

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

**Pour charger un certificat public et une clé privée dans le gestionnaire de certificats DMS et tester la connexion à Amazon MSK**

1. Chargez dans le gestionnaire de certificats DMS à l’aide de la commande suivante.

   ```
   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. Créez un point de terminaison cible Amazon MSK et testez la connexion pour vous assurer que l’authentification TLS fonctionne.

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

**Important**  
Vous pouvez utiliser l’authentification SSL pour sécuriser une connexion à un cluster Kafka autogéré. Dans certains cas, vous devrez peut-être utiliser une autorité de certification (CA) privée dans votre cluster Kafka sur site. Si tel est le cas, chargez votre chaîne de CA, votre certificat public et votre clé privée dans le gestionnaire de certificats DMS. Utilisez ensuite l’Amazon Resource Name (ARN) correspondant dans vos paramètres de point de terminaison lorsque vous créez votre point de terminaison cible Kafka sur site.

**Pour préparer une clé privée et un certificat signé pour un cluster Kafka autogéré**

1. Générez une paire de clés comme indiqué dans l’exemple suivant.

   ```
   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. Générez une demande de signature de certificat (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. Utilisez la CA du magasin de clés de confiance de votre cluster pour signer la CSR. Si vous n’avez pas de CA, vous pouvez créer votre propre CA privée.

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

1. Importez `ca-cert` dans le magasin de clés de confiance et le magasin de clés du serveur. Si vous n’avez pas de magasin de clés de confiance, utilisez la commande suivante pour le créer et y importer `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. Signez le certificat.

   ```
   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. Importez le certificat signé dans le magasin de clés.

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

1. Utilisez la commande suivante pour importer la clé `on-premise-rsa` de `kafka.server.keystore.jks` dans `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. Utilisez la commande suivante pour exporter `keystore.p12` au format `.pem`.

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

1. Chargez `encrypted-private-server-key.pem`, `signed-certificate.pem` et `ca-cert` dans le gestionnaire de certificats DMS.

1. Créez un point de terminaison en utilisant le renvoyé ARNs.

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

### Utilisation de l’authentification SASL-SSL pour se connecter à Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

La méthode SASL (Simple Authentication and Security Layer) utilise un nom d’utilisateur et un mot de passe pour valider l’identité d’un client et établit une connexion chiffrée entre le serveur et le client.

Pour utiliser SASL, vous devez commencer par créer un nom d’utilisateur et un mot de passe sécurisés lorsque vous configurez votre cluster Amazon MSK. Pour savoir comment configurer un nom d'utilisateur et un mot de passe sécurisés pour un cluster Amazon MSK, consultez la section [Configuration de l' SASL/SCRAM authentification pour un cluster Amazon MSK dans le guide du développeur](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) *Amazon Managed Streaming for Apache Kafka*.

Ensuite, lorsque vous créez votre point de terminaison cible Kafka, définissez le paramètre de point de terminaison du protocole de sécurité (`SecurityProtocol`) à l’aide de l’option `sasl-ssl`. Vous définissez également les options `SaslUsername` et `SaslPassword`. Assurez-vous qu’elles sont cohérentes avec le nom d’utilisateur et le mot de passe sécurisés que vous avez créés lorsque vous avez configuré votre cluster Amazon MSK pour la première fois, comme illustré dans l’exemple JSON suivant.

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

**Note**  
Actuellement, ne AWS DMS prend en charge que le protocole SASL-SSL public soutenu par une autorité de certification. DMS ne prend pas en charge le protocole SASL-SSL pour une utilisation avec Kafka autogéré soutenu par une autorité de certification privée.
Pour l'authentification SASL-SSL, AWS DMS prend en charge le mécanisme SCRAM-SHA-512 par défaut. AWS DMS les versions 3.5.0 et supérieures prennent également en charge le mécanisme Plain. Pour prendre en charge le mécanisme Plain, définissez le paramètre `SaslMechanism` du type de données d’API `KafkaSettings` sur `PLAIN`. Le type de données `PLAIN` est pris en charge par Kafka, mais pas par Amazon Kafka (MSK).

## Utilisation d'une image antérieure pour afficher les valeurs originales des lignes de la CDC pour Apache Kafka comme cible
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Lorsque vous écrivez des mises à jour de CDC sur une cible de diffusion de données comme Kafka, vous pouvez afficher les valeurs d'origine d'une ligne de base de données source avant de les modifier par une mise à jour. Pour ce faire, AWS DMS remplit une *image antérieure* des événements de mise à jour en fonction des données fournies par le moteur de base de données source. 

Différents moteurs de base de données source fournissent différentes quantités d'informations pour une image antérieure : 
+ Oracle met uniquement à jour des colonnes si elles changent. 
+ PostgreSQL fournit uniquement des données pour les colonnes qui font partie de la clé primaire (modifiée ou non). Si la réplication logique est utilisée et que REPLICA IDENTITY FULL est défini pour la table source, vous pouvez obtenir des informations complètes avant et après sur la ligne écrite dans le WALs et disponibles ici.
+ MySQL fournit généralement des données pour toutes les colonnes (modifiées ou non).

Pour activer avant l'imagerie pour ajouter des valeurs d'origine de la base de données source à la sortie AWS DMS , utilisez le paramètre de tâche `BeforeImageSettings` ou le paramètre `add-before-image-columns`. Ce paramètre applique une règle de transformation de colonne. 

`BeforeImageSettings` ajoute un nouvel attribut JSON à chaque opération de mise à jour avec des valeurs collectées à partir du système de base de données source, comme indiqué ci-dessous.

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

**Note**  
Appliquez les `BeforeImageSettings` à la charge complète et aux tâches CDC (qui migrent les données existantes et répliquent les modifications en cours), ou aux tâches CDC uniquement (qui répliquent les modifications de données uniquement). N’appliquez pas les `BeforeImageSettings` aux tâches à pleine charge uniquement.

Pour les options `BeforeImageSettings`, les conditions suivantes s'appliquent :
+ Définissez l'option `EnableBeforeImage` sur `true` pour activer la génération d’image antérieure. La valeur par défaut est `false`. 
+ Utilisez l'option `FieldName` pour attribuer un nom au nouvel attribut JSON. Quand `EnableBeforeImage` est `true`, `FieldName` est obligatoire et ne peut pas être vide.
+ L'option `ColumnFilter` spécifie une colonne à ajouter en utilisant la génération d’image antérieure. Pour ajouter uniquement des colonnes faisant partie des clés primaires de la table, utilisez la valeur par défaut, `pk-only`. Pour ajouter uniquement des colonnes qui ne sont pas de type LOB, utilisez `non-lob`. Pour ajouter une colonne ayant une valeur d'image antérieure, utilisez `all`. 

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

### Utilisation d'une règle de transformation d'image antérieure
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

Au lieu des paramètres de tâche, vous pouvez utiliser le paramètre `add-before-image-columns`, qui applique une règle de transformation de colonne. Avec ce paramètre, vous pouvez activer la génération d’image antérieure pendant la CDC sur des cibles de diffusion de données telles que Kafka.

En utilisant `add-before-image-columns` dans une règle de transformation, vous pouvez exercer un contrôle plus précis sur les résultats de l'image antérieure. Les règles de transformation vous permettent d'utiliser un localisateur d'objets qui vous fournit un contrôle sur les tables sélectionnées pour la règle. En outre, vous pouvez enchaîner les règles de transformation, ce qui permet d'appliquer différentes règles à différentes tables. Vous pouvez ensuite manipuler les colonnes produites à l'aide d'autres règles. 

**Note**  
N'utilisez pas le paramètre `add-before-image-columns` avec le paramètre de tâche `BeforeImageSettings` dans la même tâche. N’utilisez pas les deux, pour une seule tâche.

Un type de règle `transformation` avec le paramètre `add-before-image-columns` d'une colonne doit fournir une section `before-image-def`. Vous en trouverez un exemple ci-dessous.

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

La valeur de `column-prefix` est ajoutée à un nom de colonne et la valeur par défaut de `column-prefix` est `BI_`. La valeur de `column-suffix` est ajoutée au nom de la colonne et la valeur par défaut est vide. Ne définissez pas les deux `column-prefix` et `column-suffix` sur des chaînes vides.

Choisissez une valeur pour `column-filter`. Pour ajouter uniquement les colonnes qui font partie des clés primaires de la table, choisissez `pk-only` . Choisissez `non-lob` d'ajouter uniquement des colonnes qui ne sont pas de type LOB. Ou choisissez `all` d'ajouter une colonne qui a une valeur d’image antérieure.

### Exemple de règle de transformation d'image antérieure
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

La règle de transformation de l'exemple suivant ajoute une nouvelle colonne appelée `BI_emp_no` dans la cible. Ainsi, une instruction comme `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` remplit le champ `BI_emp_no` avec 1. Lorsque vous écrivez des mises à jour de CDC sur des cibles Amazon S3, la colonne `BI_emp_no` permet de savoir quelle ligne d’origine a été mise à jour.

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

Pour plus d'informations sur l'utilisation de l'action de règle `add-before-image-columns`, consultez [Règles et actions de transformation](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Limitations liées à l'utilisation d'Apache Kafka comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Les limitations suivantes s'appliquent lorsque vous utilisez apache Kafka comme cible :
+ AWS DMS Les points de terminaison cibles de Kafka ne prennent pas en charge le contrôle d'accès IAM pour Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ Le Mode LOB complet n'est pas pris en charge.
+ Spécifiez un fichier de configuration Kafka pour votre cluster avec des propriétés permettant AWS DMS de créer automatiquement de nouveaux sujets. Incluez le paramètre, `auto.create.topics.enable = true`. Si vous utilisez Amazon MSK, vous pouvez spécifier la configuration par défaut lorsque vous créez votre cluster Kafka, puis redéfinir le paramètre `auto.create.topics.enable` sur `true`. Pour plus d’informations sur les paramètres de configuration par défaut, consultez [Configuration Amazon MSK par défaut](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) dans le *Guide du développeur Amazon Managed Streaming for Apache Kafka*. Si vous devez modifier un cluster Kafka existant créé à l'aide d'Amazon MSK, exécutez la AWS CLI commande `aws kafka create-configuration` pour mettre à jour votre configuration Kafka, comme dans l'exemple suivant :

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

  Ici, `//~/kafka_configuration` est le fichier de configuration que vous avez créé avec les paramètres de propriété requis.

  Si vous utilisez votre propre instance Kafka installée sur Amazon EC2, modifiez la configuration du cluster Kafka avec `auto.create.topics.enable = true` le paramètre AWS DMS permettant de créer automatiquement de nouveaux sujets, en utilisant les options fournies avec votre instance.
+ AWS DMS publie chaque mise à jour d'un seul enregistrement de la base de données source sous la forme d'un enregistrement de données (message) dans un sujet Kafka donné, quelles que soient les transactions.
+ AWS DMS prend en charge les quatre formes suivantes pour les clés de partition :
  + `SchemaName.TableName` : une combinaison du nom du schéma et du nom de la table.
  + `${AttributeName}` : la valeur d'un des champs du fichier JSON, ou la clé primaire de la table dans la base de données source.
  + `transaction-id`: ID de transaction CDC. Tous les enregistrements d'une même transaction sont placés sur la même partition.
  + `constant`: valeur littérale fixe pour chaque enregistrement, indépendamment de la table ou des données. Tous les enregistrements sont envoyés à la même valeur de clé de partition « constante », ce qui permet un ordre global strict dans toutes les tables.

  ```
  {
      "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"
      }
  }
  ```
+ Le paramètre du point de `IncludeTransactionDetails` terminaison n'est pris en charge que lorsque le point de terminaison source est Oracle, SQL Server, PostgreSQL ou MySQL. Pour les autres types de point de terminaison source, les détails des transactions ne seront pas inclus.
+ `BatchApply` n’est pas pris en charge pour un point de terminaison Kafka. L’utilisation de l’application par lots (par exemple, le paramètre de tâche de métadonnées cible `BatchApplyEnabled`) pour une cible Kafka peut entraîner une perte de données.
+ AWS DMS ne prend pas en charge la migration de valeurs de type de `BigInt` données comportant plus de 16 chiffres. Pour contourner cette limitation, vous pouvez utiliser la règle de transformation suivante pour convertir la colonne `BigInt` en chaîne. Pour plus d’informations sur les règles de transformation, consultez [Règles et actions de transformation](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 Les points de terminaison cibles de Kafka ne sont pas compatibles avec Amazon MSK servless.
+ Lors de la définition des règles de mappage, il n'est pas possible de disposer à la fois d'une règle de mappage d'objets et d'une règle de transformation. Vous ne devez définir qu'une seule règle. 
+ AWS DMS prend en charge l'authentification SASL pour les versions d'Apache Kafka jusqu'à 3.8. Si vous utilisez Kafka 4.0 ou une version ultérieure, vous ne pouvez vous connecter que sans authentification SASL.
+ AWS DMS ne prend pas en charge les données source contenant des `'\0'` caractères incorporés lors de l'utilisation de Kafka comme point de terminaison cible. Les données contenant des `'\0'` caractères incorporés seront tronquées au premier `'\0'` caractère.

## Utilisation du mappage d’objet pour migrer les données vers une rubrique Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS utilise des règles de mappage de tables pour mapper les données de la source au sujet Kafka cible. Pour mapper des données à une rubrique cible, vous utilisez un type de règle de mappage de table appelé « mappage d’objet ». Vous utilisez le mappage d'objet pour définir la façon dont les enregistrements de données de la source sont mappés sur les enregistrements de données publiés dans une rubrique Kafka. 

Les rubriques Kafka ne disposent pas d'une structure prédéfinie autre que le fait d'avoir une clé de partition.

**Note**  
Vous n’avez pas besoin d’utiliser le mappage d’objet. Vous pouvez utiliser un mappage de table standard pour différentes transformations. Cependant, le type de clé de partition suivra les comportements par défaut suivants :   
La clé primaire est utilisée comme clé de partition pour le chargement complet.
Si aucun paramètre de tâche parallel-apply n’est utilisé, `schema.table` est utilisé comme clé de partition pour la CDC.
Si des paramètres de tâche parallel-apply sont utilisés, la clé primaire est utilisée comme clé de partition pour la CDC.

Pour créer une règle de mappage d'objet, spécifiez `rule-type` comme `object-mapping`. Cette règle spécifie le type de mappage d'objet que vous souhaitez utiliser. 

La structure de la règle est la suivante.

```
{
    "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 prend actuellement en charge `map-record-to-record` et `map-record-to-document` en tant que seules valeurs valides pour le `rule-action` paramètre. Ces paramètres affectent les valeurs qui ne sont pas exclues de la liste d’attributs `exclude-columns`. Les `map-record-to-document` valeurs `map-record-to-record` et indiquent comment ces AWS DMS enregistrements sont gérés par défaut. Ces valeurs n'affectent en aucune façon les mappages d'attributs. 

Utilisez `map-record-to-record` lors d'une migration d'une base de données relationnelle vers une rubrique Kafka. Ce type de règle utilise la valeur `taskResourceId.schemaName.tableName` de la base de données relationnelle comme clé de partition dans la rubrique Kafka, et crée un attribut pour chaque colonne dans la base de données source. 

Lorsque vous utilisez `map-record-to-record`, notez ce qui suit :
+ Ce paramètre n’affecte que les colonnes exclues par la liste `exclude-columns`.
+ Pour chacune de ces colonnes, AWS DMS crée un attribut correspondant dans le sujet cible.
+ AWS DMS crée cet attribut correspondant, que la colonne source soit utilisée ou non dans un mappage d'attributs. 

Une manière de comprendre `map-record-to-record` est de le voir en action. Dans cet exemple, imaginons que vous commencez avec une ligne de table d'une base de données relationnelle, présentant la structure et les données suivantes :


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

Pour migrer ces informations à partir d'un schéma nommé `Test` vers une rubrique Kafka, vous créez des règles pour mapper les données sur la rubrique cible. La règle suivante illustre ce mappage. 

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

Compte tenu d’une rubrique Kafka et d’une clé de partition (dans ce cas, `taskResourceId.schemaName.tableName`), l’exemple ci-dessous illustre le format d’enregistrement résultant à l’aide de nos exemples de données dans la rubrique cible 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**
+ [Restructuration de données avec le mappage d'attribut](#CHAP_Target.Kafka.AttributeMapping)
+ [Réplication à plusieurs rubriques à l’aide du mappage d’objet](#CHAP_Target.Kafka.MultiTopic)
+ [Format de message pour Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Restructuration de données avec le mappage d'attribut
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

Vous pouvez restructurer les données lors de leur migration vers une rubrique Kafka à l'aide d'un mappage d'attribut. Par exemple, vous pourriez vouloir regrouper plusieurs champs de la source en un seul champ dans la cible. Le mappage d'attribut suivant illustre comment restructurer les données.

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

Pour définir une valeur constante pour`partition-key`, spécifiez`"partition-key-type: "constant"`, cela définit la valeur de partition sur`constant`. Par exemple, vous pouvez le faire pour forcer le stockage de toutes les données dans une seule partition. Le mappage suivant illustre cette approche. 

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

**Note**  
La valeur `partition-key` d'un enregistrement de contrôle correspondant à une table spécifique est `TaskId.SchemaName.TableName`. La valeur `partition-key` d'un enregistrement de contrôle correspondant à une tâche spécifique est le `TaskId` de cet enregistrement. La spécification d'une valeur `partition-key` dans le mappage d'objet n'a aucun impact sur la `partition-key` d'un enregistrement de contrôle.  
 Lorsqu'il `partition-key-type` est défini sur `attribute-name` dans une règle de mappage de table, vous devez spécifier`partition-key-name`, qui doit faire référence soit à une colonne de la table source, soit à une colonne personnalisée définie dans le mappage. En outre, `attribute-mappings` il doit être fourni pour définir la manière dont les colonnes source sont mappées au sujet Kafka cible.

### Réplication à plusieurs rubriques à l’aide du mappage d’objet
<a name="CHAP_Target.Kafka.MultiTopic"></a>

Par défaut, les AWS DMS tâches migrent toutes les données sources vers l'une des rubriques Kafka suivantes :
+ Comme indiqué dans le champ **Rubrique** du point de terminaison AWS DMS cible.
+ Comme indiqué par `kafka-default-topic` si le champ **Rubrique** du point de terminaison cible n’est pas renseigné et que le paramètre `auto.create.topics.enable` Kafka est défini sur `true`.

Avec les versions 3.4.6 et supérieures AWS DMS du moteur, vous pouvez utiliser l'`kafka-target-topic`attribut pour associer chaque table source migrée à une rubrique distincte. Par exemple, les règles de mappage d’objet suivantes migrent les tables sources `Customer` et `Address` vers les rubriques Kafka `customer_topic` et `address_topic`, respectivement. Dans le même temps, AWS DMS migre toutes les autres tables sources, y compris la `Bills` table du `Test` schéma, vers le sujet spécifié dans le point de terminaison cible.

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

En utilisant la réplication à plusieurs rubriques Kafka, vous pouvez regrouper et migrer les tables sources afin de séparer les rubriques Kafka à l’aide d’une seule tâche de réplication.

### Format de message pour Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

La sortie JSON est simplement une liste de paires clé-valeur. 

**RecordType**  
Les enregistrements peuvent être de type Données ou Contrôle. *Les enregistrements de données* représentent les lignes réelles de la source. *Les enregistrements de contrôle* sont destinés à des événements importants dans le flux, par exemple un redémarrage de la tâche.

**Opération**  
Pour les enregistrements de données, l'opération peut être `load`,`insert`, `update` ou `delete`.  
Pour les enregistrements de contrôle, l’opération peut être `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
Schéma source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.

**TableName**  
Table source de l'enregistrement. Ce champ peut être vide pour un enregistrement de contrôle.

**Horodatage**  
Horodatage de la construction du message JSON. Le champ est formaté selon le format ISO 8601.

L’exemple de message JSON suivant illustre un message de type de données avec toutes les métadonnées supplémentaires.

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

L’exemple de message JSON suivant illustre un message de type contrôle.

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

# Utilisation d'un cluster Amazon OpenSearch Service comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Vous pouvez l'utiliser AWS DMS pour migrer des données vers Amazon OpenSearch Service (OpenSearch Service). OpenSearch Le service est un service géré qui facilite le déploiement, l'exploitation et le dimensionnement d'un cluster OpenSearch de services. 

Dans OpenSearch Service, vous travaillez avec des index et des documents. Un *index* est un ensemble de documents, et un *document* est un objet JSON contenant des valeurs scalaires, des tableaux et d'autres objets. OpenSearch fournit un langage de requête basé sur JSON, afin que vous puissiez interroger des données dans un index et récupérer les documents correspondants.

Lorsqu'il AWS DMS crée des index pour un point de terminaison cible pour OpenSearch Service, il crée un index pour chaque table à partir du point de terminaison source. Le coût de création d'un indice de OpenSearch service dépend de plusieurs facteurs. Il s'agit du nombre d'index créés, de la quantité totale de données contenues dans ces index et de la petite quantité de métadonnées OpenSearch stockées pour chaque document.

Configurez votre cluster de OpenSearch services avec des ressources de calcul et de stockage adaptées à l'étendue de votre migration. Nous vous recommandons de prendre en compte les facteurs suivants, selon la tâche de réplication que vous souhaitez utiliser :
+ Pour un chargement de données complet, tenez compte du volume total de données à migrer ainsi que de la vitesse du transfert.
+ Pour reproduire les modifications en cours, tenez compte de la fréquence des mises à jour et de vos exigences de end-to-end latence.

Configurez également les paramètres d'index sur votre OpenSearch cluster en portant une attention particulière au nombre de documents.

**Paramètres de tâche de chargement complet multithread**

Pour accélérer le transfert, AWS DMS prend en charge le chargement complet multithread vers un cluster cible de OpenSearch services. AWS DMS prend en charge ce multithreading avec des paramètres de tâche tels que les suivants :
+ `MaxFullLoadSubTasks` : utilisez cette option pour indiquer le nombre maximal de tables sources à charger en parallèle. DMS charge chaque table dans son index cible de OpenSearch service correspondant à l'aide d'une sous-tâche dédiée. La valeur par défaut est 8 ; la valeur maximale 49.
+ `ParallelLoadThreads`— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans son index cible de OpenSearch service. La valeur maximale d'un objectif OpenSearch de service est de 32. Vous pouvez demander une augmentation de cette limite maximale.
**Note**  
Si vous ne modifiez pas la valeur par défaut de `ParallelLoadThreads` (0), AWS DMS transfère un seul enregistrement à la fois. Cette approche impose une charge excessive à votre cluster OpenSearch de services. Veillez à définir cette option sur 1 ou plus.
+ `ParallelLoadBufferSize`— Utilisez cette option pour spécifier le nombre maximum d'enregistrements à stocker dans la mémoire tampon que les threads de chargement parallèle utilisent pour charger les données vers la cible du OpenSearch service. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avec `ParallelLoadThreads`. `ParallelLoadBufferSize` est valide uniquement dans le cas de plusieurs threads.

Pour plus d'informations sur la manière dont DMS charge un cluster de OpenSearch services à l'aide du multithreading, consultez le AWS billet de blog Scale [Amazon OpenSearch Service](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) for migrations. AWS Database Migration Service 

**Paramètres de tâche de chargement CDC multithread**

Vous pouvez améliorer les performances de capture des données de modification (CDC) pour un cluster cible de OpenSearch service en utilisant les paramètres des tâches pour modifier le comportement de l'appel d'`PutRecords`API. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche `ParallelApply*`. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 32 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon. 
**Note**  
Support pour l'utilisation des paramètres des `ParallelApply*` tâches pendant les points de terminaison cibles du CDC vers Amazon OpenSearch Service est disponible dans AWS DMS les versions 3.4.0 et supérieures.

Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible du OpenSearch service. La valeur par défaut est zéro (0) et la valeur maximale est 32.
+ `ParallelApplyBufferSize`— Spécifie le nombre maximum d'enregistrements à stocker dans chaque file d'attente tampon pour les threads simultanés à envoyer vers un point de terminaison cible du OpenSearch service lors d'un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque `ParallelApplyThreads` spécifie plusieurs threads. 
+ `ParallelApplyQueuesPerThread`— Spécifie le nombre de files d'attente auxquelles chaque thread accède pour extraire des enregistrements de données des files d'attente et générer un chargement par lots pour un point de terminaison de OpenSearch service pendant le CDC.

Lorsque vous utilisez les paramètres de tâche `ParallelApply*`, la valeur par défaut `partition-key-type` est la valeur `primary-key` de la table, pas `schema-name.table-name`.

## Migration d'une table de base de données relationnelle vers un index de service OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS prend en charge la migration des données vers les OpenSearch types de données scalaires du Service. Lorsque vous migrez d'une base de données relationnelle telle qu'Oracle ou MySQL vers OpenSearch Service, vous souhaiterez peut-être restructurer la façon dont vous stockez ces données.

AWS DMS prend en charge les types de données scalaires de OpenSearch service suivants : 
+ Booléen 
+ Date
+ Float
+ Int
+ String

AWS DMS convertit les données de type Date en type String. Vous pouvez spécifier des mappages personnalisés pour interpréter ces dates.

AWS DMS ne prend pas en charge la migration des types de données LOB.

## Conditions préalables à l'utilisation d'Amazon OpenSearch Service comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Avant de commencer à utiliser une base de données de OpenSearch service comme cible AWS DMS, assurez-vous de créer un rôle Gestion des identités et des accès AWS (IAM). Ce rôle doit permettre AWS DMS d'accéder aux index de OpenSearch service sur le point de terminaison cible. L'ensemble d'autorisations d'accès minimum est indiqué dans la stratégie IAM suivante.

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

****  

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

------

Le rôle que vous utilisez pour la migration vers le OpenSearch service doit disposer des autorisations suivantes.

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

****  

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

------

Dans l'exemple précédent, remplacez-le `region` par l'identifiant de AWS région, *`account-id`* par l'identifiant de votre AWS compte et `domain-name` par le nom de votre domaine Amazon OpenSearch Service. Voici un exemple : `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`.

## Paramètres du point de terminaison lors OpenSearch de l'utilisation du service comme cible pour AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Vous pouvez utiliser les paramètres du point de terminaison pour configurer la base de données cible de votre OpenSearch service de la même manière que vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

Le tableau suivant indique les paramètres de point de terminaison que vous pouvez utiliser avec OpenSearch Service en tant que cible.


| Nom d’attribut | Valeurs valides | Valeur par défaut et description | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Un nombre entier positif supérieur à 0, mais ne dépassant pas 100.  |  10 - Pour une tâche de chargement complet, cet attribut détermine le seuil d'erreurs autorisées avant que la tâche échoue. Par exemple, supposons qu'il y a 1 500 lignes au point de terminaison source et que ce paramètre est défini sur 10. La tâche échoue alors si elle AWS DMS rencontre plus de 150 erreurs (10 % du nombre de lignes) lors de l'écriture sur le point de terminaison cible.  | 
|   `ErrorRetryDuration`   |  Un nombre entier positif supérieur à 0.  |  300 — Si une erreur se produit sur le point de terminaison cible, AWS DMS réessayez pendant autant de secondes. Sinon, la tâche échoue.  | 
|  `UseNewMappingType`  | true ou false |  `false`, mais pour fonctionner avec opensearch v2.x, il doit être défini sur. `true`  | 

## Limitations liées à l'utilisation d'Amazon OpenSearch Service comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

Les limites suivantes s'appliquent lors de l'utilisation d'Amazon OpenSearch Service comme cible :
+ OpenSearch Le service utilise le mappage dynamique (estimation automatique) pour déterminer les types de données à utiliser pour les données migrées.
+ OpenSearch Le service enregistre chaque document avec un identifiant unique. Voici un exemple d'ID. 

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

  Chaque ID de document compte 64 octets. Tenez-en compte dans les exigences de stockage. Par exemple, si vous migrez 100 000 lignes depuis une AWS DMS source, l'index de OpenSearch service obtenu nécessite un stockage de 6 400 000 octets supplémentaires.
+ Avec OpenSearch Service, vous ne pouvez pas mettre à jour les attributs de la clé primaire. Cette restriction est importante lors de l'utilisation de la réplication continue avec la capture des données modifiées (CDC), car elle peut entraîner des données non souhaitées dans la cible. En mode CDC, les clés primaires sont mappées à SHA256 des valeurs de 32 octets. Elles sont converties en chaînes de 64 octets lisibles par l'homme et sont utilisées comme document de OpenSearch service. IDs
+ Si AWS DMS des éléments ne peuvent pas être migrés, il écrit des messages d'erreur dans Amazon CloudWatch Logs. Ce comportement est différent de celui des autres points de terminaison AWS DMS cibles, qui écrivent des erreurs dans une table d'exceptions.
+ AWS DMS ne prend pas en charge la connexion à un cluster Amazon ES sur lequel le contrôle d'accès détaillé est activé avec un utilisateur principal et un mot de passe.
+ AWS DMS ne prend pas en charge OpenSearch le service sans serveur.
+ OpenSearch Le service ne prend pas en charge l'écriture de données dans des index préexistants.
+ Le paramètre de tâche de réplication n'`TargetTablePrepMode:TRUNCATE_BEFORE_LOAD`est pas pris en charge pour une utilisation avec un point de terminaison OpenSearch cible.
+ Lorsque vous migrez des données vers Amazon Elasticsearch à l'aide de AWS DMS, les données source doivent comporter une clé primaire ou une colonne d'identifiant unique. Si les données source ne possèdent pas de clé primaire ou d'identifiant unique, vous devez en définir un à l'aide de la règle de define-primary-key transformation.

## Types de données cibles pour Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Lors de AWS DMS la migration de données à partir de bases de données hétérogènes, le service fait correspondre les types de données de la base de données source à des types de données intermédiaires appelés types de AWS DMS données. Le service mappe ensuite les types de données intermédiaires vers les types de données cibles. Le tableau suivant indique chaque type de AWS DMS données et le type de données auquel il correspond dans OpenSearch Service.


| AWS DMS type de données | OpenSearch Type de données de service | 
| --- | --- | 
|  Booléen  |  boolean  | 
|  Date  |  chaîne  | 
|  Heure  |  date  | 
|  Horodatage  |  date  | 
|  INT4  |  entier  | 
|  Real4  |  float  | 
|  UINT4  |  entier  | 

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Utilisation d'Amazon DocumentDB comme cible pour le service de migration de AWS base de données
<a name="CHAP_Target.DocumentDB"></a>

 Pour plus d'informations sur les versions d'Amazon DocumentDB (compatibles avec MongoDB) prises en charge, consultez. AWS DMS [Objectifs pour AWS DMS](CHAP_Introduction.Targets.md) Vous pouvez utiliser AWS DMS pour migrer des données vers Amazon DocumentDB (compatible avec MongoDB) à partir de tout moteur de données source pris en charge par AWS DMS . Le moteur source peut se trouver sur un service AWS géré tel qu'Amazon RDS, Aurora ou Amazon S3. Le moteur peut également se trouver sur une base de données autogérée, telle que MongoDB, qui s’exécute sur Amazon EC2 ou sur site.

Vous pouvez l'utiliser AWS DMS pour répliquer les données sources vers des bases de données, des collections ou des documents Amazon DocumentDB. 

**Note**  
Si votre point de terminaison source est MongoDB ou Amazon DocumentDB, exécutez la migration en **mode document**.

MongoDB stocke les données au format binaire JSON (BSON). AWS DMS prend en charge tous les types de données BSON pris en charge par Amazon DocumentDB. Pour obtenir la liste de ces types de données, consultez la section [MongoDB APIs, opérations et types de données pris en charge](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) dans *le manuel Amazon DocumentDB Developer Guide*.

Si le point de terminaison source est une base de données relationnelle, AWS DMS mappe les objets de base de données vers Amazon DocumentDB comme suit :
+ Une base de données relationnelle, ou schéma de base de données, est mappée à une *base de données* Amazon DocumentDB. 
+ Les tables situées dans une base de données relationnelle sont mappées à des *collections* dans Amazon DocumentDB.
+ Les enregistrements situés dans une table relationnelle sont mappés à des *documents* dans Amazon DocumentDB. Chaque document est construit à partir de données de l'enregistrement source.

Si le point de terminaison source est Amazon S3, les objets Amazon DocumentDB résultants correspondent aux règles de mappage AWS DMS pour Amazon S3. Prenons l'exemple de l'URI suivant :

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

Dans ce cas, AWS DMS mappe les objets dans `amzn-s3-demo-bucket` Amazon DocumentDB comme suit :
+ La partie supérieure de l’URI (`hr`) est mappée à une base de données Amazon DocumentDB. 
+ La partie suivante de l’URI (`employee`) est mappée à une collection Amazon DocumentDB.
+ Chaque objet de `employee` est mappé à un document dans Amazon DocumentDB.

Pour plus d’informations sur les règles de mappage pour Amazon S3, consultez [Utilisation d'Amazon S3 comme source pour AWS DMS](CHAP_Source.S3.md).

**Paramètres de point de terminaison Amazon DocumentDB**

Dans AWS DMS les versions 3.5.0 et supérieures, vous pouvez améliorer les performances de capture des données de modification (CDC) pour les points de terminaison Amazon DocumentDB en ajustant les paramètres des tâches pour les threads parallèles et les opérations en masse. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche `ParallelApply*`. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 128 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon. 

Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Amazon DocumentDB. La valeur par défaut est zéro (0) et la valeur maximale est 32.
+ `ParallelApplyBufferSize` : spécifie le nombre maximal d’enregistrements à stocker dans chaque file d’attente de mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Amazon DocumentDB lors d’un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque `ParallelApplyThreads` spécifie plusieurs threads. 
+ `ParallelApplyQueuesPerThread` : spécifie le nombre de files d’attente auxquelles chaque thread accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour un point de terminaison Amazon DocumentDB pendant la CDC. La valeur par défaut est 1. La valeur maximale est 512.

**Note**  
 Pour les cibles Amazon DocumentDB, l'application CDC parallèle peut provoquer des erreurs clés dupliquées ou bloquer l'application CDC pour les charges de travail qui utilisent des index uniques secondaires ou nécessitent un ordre strict des modifications. Utilisez la configuration d'application CDC à thread unique par défaut pour ces charges de travail. 

Pour plus d'informations sur l'utilisation d'Amazon DocumentDB comme cible pour AWS DMS, consultez les sections suivantes :

**Topics**
+ [Mappage de données d’une source vers une cible Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Connexion aux clusters Elastic Amazon DocumentDB en tant que cible](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Réplication continue avec Amazon DocumentDB en tant que cible](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Limitations de l’utilisation d’Amazon DocumentDB en tant que cible](#CHAP_Target.DocumentDB.limitations)
+ [Utilisation des paramètres de point de terminaison avec Amazon DocumentDB en tant que cible](#CHAP_Target.DocumentDB.ECAs)
+ [Types de données cibles pour Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**Note**  
Pour une step-by-step présentation détaillée du processus de migration, consultez la section [Migration de MongoDB vers Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html) dans le guide de migration. AWS Database Migration Service Step-by-Step 

## Mappage de données d’une source vers une cible Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS lit les enregistrements depuis le point de terminaison source et construit des documents JSON en fonction des données qu'il lit. Pour chaque document JSON, vous AWS DMS devez déterminer un `_id` champ qui servira d'identifiant unique. Il écrit ensuite le document JSON dans une collection Amazon DocumentDB en utilisant le champ `_id` comme clé primaire.

### Données source se composant d'une colonne unique
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Si les données source se composent d'une seule colonne, elles doivent être de type string (chaîne). (Selon le moteur source, le type de données réel peut être VARCHAR, NVARCHAR, TEXT, LOB, CLOB ou similaire.) AWS DMS suppose que les données sont un document JSON valide et les réplique telles quelles vers Amazon DocumentDB.

Si le document JSON résultant contient un champ nommé `_id`, ce dernier est utilisé comme `_id` unique dans Amazon DocumentDB.

Si le document JSON ne contient pas de champ `_id`, Amazon DocumentDB génère une valeur `_id` automatiquement.

### Données source se composant de plusieurs colonnes
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Si les données source se composent de plusieurs colonnes, crée AWS DMS un document JSON à partir de toutes ces colonnes. Pour déterminer le `_id` champ du document, AWS DMS procédez comme suit :
+ Si l'une des colonnes est nommée `_id`, les données de cette colonne sont utilisées comme `_id` cible.
+ S'il n'y a pas de `_id` colonne, mais que les données source possèdent une clé primaire ou un index unique, AWS DMS utilise cette clé ou cette valeur d'index comme `_id` valeur. Les données de la clé primaire ou de l'index unique apparaissent également sous forme de champs explicites dans le document JSON.
+ S’il n’y a pas de colonne `_id` et aucune clé primaire ni aucun index unique, Amazon DocumentDB génère une valeur `_id` automatiquement.

### Imposition d'un type de données au niveau du point de terminaison cible
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS peut modifier les structures de données lorsqu'il écrit sur un point de terminaison cible Amazon DocumentDB. Vous pouvez demander ces modifications en renommant des colonnes et des tables au niveau du point de terminaison source ou en fournissant des règles de transformation qui sont appliquées lorsqu'une tâche est en cours d'exécution.

#### Utilisation d'un document JSON imbriqué (préfixe json\$1)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Pour imposer un type de données, vous pouvez préfixer le nom de colonne source avec `json_` (c'est-à-dire, `json_columnName`), manuellement ou à l'aide d'une transformation. Dans ce cas, la colonne est créée sous la forme d'un document JSON imbriqué dans le document cible, plutôt que sous la forme d'un champ de chaîne.

Par exemple, supposons que vous souhaitiez migrer le document suivant à partir d'un point de terminaison source MongoDB.

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

Si vous n'imposez aucun des types de données source, le document `ContactDetails` imbriqué est migré sous la forme d'une chaîne.

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

Toutefois, vous pouvez ajouter une règle de transformation pour contraindre l'insertion de `ContactDetails` dans un objet JSON. Par exemple, supposons que le nom de la colonne source d'origine est `ContactDetails`. Pour forcer le type de données en tant que JSON imbriqué, la colonne du point de terminaison de la source doit être renommée « json\$1 ContactDetails » soit en ajoutant le préfixe « \$1json\$1\$1 » sur la source manuellement, soit par le biais de règles de transformation. Par exemple, vous pouvez utiliser la règle de transformation ci-dessous :

```
{
    "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 réplique le ContactDetails champ en tant que JSON imbriqué, comme suit. 

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

#### Utilisation d'un tableau JSON (préfixe array\$1)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Pour imposer un type de données, vous pouvez préfixer un nom de colonne avec `array_` (c'est-à-dire, `array_columnName`), manuellement ou à l'aide d'une transformation. Dans ce cas, AWS DMS considère la colonne comme un tableau JSON et la crée comme telle dans le document cible.

Supposons que vous souhaitiez migrer le document suivant à partir d'un point de terminaison source MongoDB.

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

Si vous n'imposez aucun des types de données source, le document `ContactDetails` imbriqué est migré sous la forme d'une chaîne.

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

 Toutefois, vous pouvez ajouter des règles de transformation pour forcer l'insertion de `ContactAddress` et de `ContactPhoneNumbers` dans des tableaux JSON, comme illustré dans le tableau suivant.


****  

| Nom de la colonne source d'origine | Colonne source renommée | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS se reproduit `ContactAddress` et `ContactPhoneNumbers` comme suit.

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

### Connexion à Amazon DocumentDB à l’aide du protocole TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

Par défaut, un cluster Amazon DocumentDB récemment créé n’accepte que les connexions sécurisées qui utilisent le protocole TLS (Transport Layer Security). Lorsque le protocole TLS est activé, chaque connexion à Amazon DocumentDB nécessite une clé publique.

Vous pouvez récupérer la clé publique d'Amazon DocumentDB en téléchargeant le fichier depuis un compartiment Amazon S3 AWS hébergé. `rds-combined-ca-bundle.pem` Pour plus d’informations sur le téléchargement de ce fichier, consultez [Chiffrement des connexions à l’aide de TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) dans le *Guide du développeur Amazon DocumentDB*.

Après avoir téléchargé ce fichier .pem, vous pouvez importer la clé publique qu'il contient AWS DMS comme décrit ci-dessous.

#### AWS Management Console
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Pour importer le fichier de clé publique (.pem)**

1. Ouvrez la AWS DMS console à l'adresse [https://console.aws.amazon.com/dms](https://console.aws.amazon.com/dms).

1. Dans le volet de navigation, choisissez **Certificates**.

1. Choisissez l'onglet **Import certificate (Importer le certificat)** et effectuez les opérations suivantes :
   + Pour **Certificate identifier (Identifiant de certificat)**, entrez un nom unique pour le certificat, par exemple, `docdb-cert`.
   + Pour **Import file (Importer un fichier)**, accédez à l'emplacement où vous avez enregistré le fichier .pem.

   Lorsque les paramètres vous conviennent, choisissez **Add new CA certificate (Ajouter un nouveau certificat CA)**.

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

Utilisez la commande `aws dms import-certificate`, comme illustré dans l’exemple suivant.

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

Lorsque vous créez un point de terminaison AWS DMS cible, fournissez l'identifiant du certificat (par exemple,`docdb-cert`). Définissez aussi le paramètre de mode SSL sur `verify-full`.

## Connexion aux clusters Elastic Amazon DocumentDB en tant que cible
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

Dans AWS DMS les versions 3.4.7 et supérieures, vous pouvez créer un point de terminaison cible Amazon DocumentDB en tant que cluster élastique. Si vous créez votre point de terminaison cible en tant que cluster Elastic, vous devez attacher un nouveau certificat SSL au point de terminaison de votre cluster Elastic Amazon DocumentDB, car votre certificat SSL existant ne fonctionnera pas.

**Pour attacher un nouveau certificat SSL au point de terminaison de votre cluster Elastic Amazon DocumentDB**

1. Dans un navigateur, ouvrez [ https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) et enregistrez le contenu dans un `.pem` fichier portant un nom de fichier unique, par exemple. `SFSRootCAG2.pem` Il s’agit du fichier de certificat que vous devrez importer lors des étapes suivantes.

1. Créez le point de terminaison de cluster Elastic et définissez les options suivantes :

   1. Sous **Configuration du point de terminaison**, choisissez **Ajouter un certificat CA**.

   1. Pour **Identifiant de certificat**, entrez **SFSRootCAG2.pem**.

   1. Pour **Importer un fichier de certificat**, choisissez **Choisir un fichier** et accédez au fichier `SFSRootCAG2.pem` que vous avez téléchargé précédemment.

   1. Sélectionnez et ouvrez le fichier `SFSRootCAG2.pem` téléchargé.

   1. Sélectionnez **Importer un certificat**.

   1. Dans le menu déroulant **Choisir un certificat**, sélectionnez **SFSRootCAG2.pem.**

Le nouveau certificat SSL issu du fichier `SFSRootCAG2.pem` téléchargé est désormais attaché au point de terminaison de votre cluster Elastic Amazon DocumentDB.

## Réplication continue avec Amazon DocumentDB en tant que cible
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Si la réplication continue (capture des données de modification, CDC) est activée pour Amazon DocumentDB en tant que cible, AWS DMS versions 3.5.0 et ultérieures fournit une amélioration des performances vingt fois supérieure à celle des versions précédentes. Dans les versions précédentes, AWS DMS qui géraient jusqu'à 250 enregistrements par seconde, AWS DMS traitaient désormais efficacement plus de 5 000 enregistrements par seconde. AWS DMS garantit également que les documents d'Amazon DocumentDB restent synchronisés avec la source. Lorsqu'un enregistrement source est créé ou mis à jour, vous AWS DMS devez d'abord déterminer quel enregistrement Amazon DocumentDB est concerné en procédant comme suit :
+ Si l’enregistrement source comporte une colonne nommée `_id`, la valeur de cette colonne détermine la valeur `_id` correspondante dans la collection Amazon DocumentDB.
+ S'il n'y a pas de `_id` colonne, mais que les données source possèdent une clé primaire ou un index unique, elles AWS DMS utilisent cette clé ou cette valeur d'index `_id` pour la collection Amazon DocumentDB.
+ Si l'enregistrement source ne contient pas de `_id` colonne, de clé primaire ou d'index unique, toutes les colonnes source AWS DMS correspondent aux champs correspondants de la collection Amazon DocumentDB.

Lorsqu'un nouvel enregistrement source est créé, AWS DMS écrit un document correspondant dans Amazon DocumentDB. Si un enregistrement source existant est mis à jour, AWS DMS met à jour les champs correspondants dans le document cible dans Amazon DocumentDB. Tous les champs qui existent dans le document cible, mais pas dans l'enregistrement source, restent intacts.

Lorsqu'un enregistrement source est supprimé, le document correspondant AWS DMS est supprimé d'Amazon DocumentDB.

### Modifications structurelles (DDL) à la source
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Avec la réplication continue, les modifications des structures de données source (telles que les tables, colonnes, etc.) sont propagées à leurs homologues dans Amazon DocumentDB. Dans les bases de données relationnelles, ces modifications sont lancées à l'aide d'instructions DDL (Data Definition Language). Vous pouvez voir comment ces modifications sont AWS DMS répercutées sur Amazon DocumentDB dans le tableau suivant.


****  

| DDL à la source | Effet sur la cible Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Crée une collection vide. | 
| Déclaration qui renomme une table (RENAME TABLE, ALTER TABLE...RENAME, etc.) | Renomme la collection. | 
| TRUNCATE TABLE | Supprime tous les documents de la collection, mais uniquement si HandleSourceTableTruncated a pour valeur true. Pour de plus amples informations, veuillez consulter [Paramètres de tâche pour la gestion du DDL de traitement des modifications](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Supprime la collection, mais uniquement si HandleSourceTableDropped a pour valeur true. Pour de plus amples informations, veuillez consulter [Paramètres de tâche pour la gestion du DDL de traitement des modifications](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Instruction qui ajoute une colonne à une table (ALTER TABLE...ADD, etc.) | L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source, le nouveau champ est ajouté au document cible. | 
| ALTER TABLE...RENAME COLUMN | L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source, le nouveau champ est ajouté au document cible. | 
| ALTER TABLE...DROP COLUMN | L'instruction DDL est ignorée et un avertissement est émis. | 
| Déclaration qui modifie le type de données de la colonne (ALTER COLUMN...MODIFY, etc.) | L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source avec le nouveau type de données, le document cible est créé avec un champ ayant ce nouveau type de données. | 

## Limitations de l’utilisation d’Amazon DocumentDB en tant que cible
<a name="CHAP_Target.DocumentDB.limitations"></a>

Les limites suivantes s'appliquent lors de l'utilisation d'Amazon DocumentDB comme cible pour : AWS DMS
+ Dans Amazon DocumentDB, les noms de collection ne peuvent pas contenir le symbole du dollar (\$1). En outre, les noms de base de données ne peuvent pas contenir de caractères Unicode.
+ AWS DMS ne prend pas en charge la fusion de plusieurs tables sources dans une seule collection Amazon DocumentDB.
+ Lorsque AWS DMS des processus sont modifiés à partir d'une table source dépourvue de clé primaire, toutes les colonnes LOB de cette table sont ignorées.
+ Si l'option **Change table (Modifier la table)** est activée et que AWS DMS rencontre une colonne source nommée « *\$1id* », cette colonne apparaît sous la forme « *\$1\$1id* » (deux traits de soulignement) dans la table modifiée.
+ Si vous choisissez Oracle comme point de terminaison source, une journalisation supplémentaire complète doit être activée sur la source Oracle. Dans le cas contraire, s’il existe des colonnes à la source qui n’ont pas été modifiées, les données seront chargées dans Amazon DocumentDB tant que valeurs nulles.
+ Le paramètre de tâche de réplication `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` n’est pas pris en charge pour une utilisation avec un point de terminaison cible DocumentDB. 
+ Les collections plafonnées MongoDB ne sont pas prises en charge dans Amazon DocumentDB. Cependant, migre AWS DMS automatiquement les objets tels que les collections non plafonnées sur la DocumentDB cible.
+ L'application parallèle du CDC aux cibles Amazon DocumentDB peut provoquer des erreurs clés dupliquées ou bloquer l'application CDC pour les charges de travail qui utilisent des index uniques secondaires ou nécessitent un ordre strict des modifications. Pour de telles charges de travail, utilisez la configuration d'application CDC à thread unique par défaut.

## Utilisation des paramètres de point de terminaison avec Amazon DocumentDB en tant que cible
<a name="CHAP_Target.DocumentDB.ECAs"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible Amazon DocumentDB comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Amazon DocumentDB en tant que cible sont indiqués dans le tableau suivant.


| Nom d’attribut | Valeurs valides | Valeur par défaut et description | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  boolean `true` `false`  |  Lorsque ce paramètre de point de terminaison est défini sur `true`, il a les effets suivants et impose les limitations suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Types de données cibles pour Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

Dans le tableau suivant, vous trouverez les types de données cibles Amazon DocumentDB pris en charge lors de l'utilisation de AWS DMS, ainsi que le mappage par défaut à partir des types de données AWS DMS. Pour plus d'informations sur les types de données AWS DMS, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS Type de données DMS  |  Type de données Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Booléen  | 
|  BYTES  |  Données binaires  | 
|  DATE  | Date | 
|  TIME  | Chaîne (UTF8) | 
|  DATETIME  | Date | 
|  INT1  | Entier 32 bits | 
|  INT2  |  Entier 32 bits  | 
|  INT4  | Entier 32 bits | 
|  INT8  |  Entier 64 bits  | 
|  NUMERIC  | Chaîne (UTF8) | 
|  REAL4  |  Double  | 
|  REAL8  | Double | 
|  CHAÎNE  |  Si les données sont reconnues en tant que JSON, elles sont AWS DMS migrées vers Amazon DocumentDB sous forme de document. Sinon, les données sont mappées à String (UTF8).  | 
|  UINT1  | Entier 32 bits | 
|  UINT2  | Entier 32 bits | 
|  UINT4  | Entier 64 bits | 
|  UINT8  |  Chaîne (UTF8)  | 
|  WSTRING  | Si les données sont reconnues en tant que JSON, elles sont AWS DMS migrées vers Amazon DocumentDB sous forme de document. Sinon, les données sont mappées à String (UTF8). | 
|  BLOB  | Binaire | 
|  CLOB  | Si les données sont reconnues en tant que JSON, elles sont AWS DMS migrées vers Amazon DocumentDB sous forme de document. Sinon, les données sont mappées à String (UTF8). | 
|  NCLOB  | Si les données sont reconnues en tant que JSON, elles sont AWS DMS migrées vers Amazon DocumentDB sous forme de document. Sinon, les données sont mappées à String (UTF8). | 

# Utiliser Amazon Neptune comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

Amazon Neptune est un service de base de données orientée graphe entièrement géré et fiable, qui facilite la création et l'exécution d'applications fonctionnant avec des jeux de données hautement connectés. Le cœur de Neptune est un moteur de base de données orientée graphe spécialisé et hautes performances. Ce moteur est optimisé pour le stockage de milliards de relations et l’interrogation du graphe avec une latence de l’ordre de quelques millisecondes. Neptune prend en charge les langages de requête graphique populaires Apache TinkerPop Gremlin et le SPARQL du W3C. Pour plus d’informations sur Amazon Neptune, consultez [Qu’est-ce qu’Amazon Neptune ?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) dans le *Guide de l’utilisateur Amazon Neptune*. 

Sans une base de données orientée graphe telle que Neptune, vous modélisez probablement des données hautement connectées dans une base de données relationnelle. Étant donné que les données ont des connexions potentiellement dynamiques, les applications qui utilisent de telles sources de données doivent modéliser les requêtes de données connectées dans SQL. Cette approche nécessite que vous écriviez une couche supplémentaire pour convertir les requêtes de graphe en SQL. En outre, les bases de données relationnelles sont dotées d'une rigidité de schéma. Toute modification du schéma pour modéliser les connexions changeantes nécessite des temps d'arrêt et une maintenance supplémentaire de la conversion de requête pour prendre en charge le nouveau schéma. Les performances des requêtes sont également une autre contrainte importante à prendre en compte lors de la conception de vos applications.

Les bases de données graphiques peuvent grandement simplifier de telles situations. Libre d'un schéma, une couche de requête graphique enrichie (Gremlin ou SPARQL) et des index optimisés pour les requêtes graphiques augmentent la flexibilité et les performances. La base de données orientée graphe Amazon Neptune comporte également des fonctionnalités d’entreprise telles que le chiffrement au repos, une couche d’autorisation sécurisée, les sauvegardes par défaut, la prise en charge de Multi-AZ, la prise en charge de réplicas en lecture, etc.

Vous pouvez AWS DMS ainsi migrer des données relationnelles modélisant un graphe hautement connecté vers un point de terminaison cible Neptune à partir d'un point de terminaison source DMS pour n'importe quelle base de données SQL prise en charge.

Pour plus de détails, consultez les sections suivantes.

**Topics**
+ [Vue d’ensemble de la migration vers Amazon Neptune en tant que cible](#CHAP_Target.Neptune.MigrationOverview)
+ [Spécification des paramètres de point de terminaison pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.EndpointSettings)
+ [Création d’une fonction de service IAM pour l’accès à Amazon Neptune en tant que cible](#CHAP_Target.Neptune.ServiceRole)
+ [Spécification de règles de mappage de graphe à l’aide de Gremlin et de R2RML pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.GraphMapping)
+ [Types de données pour la migration Gremlin et R2RML vers Amazon Neptune en tant que cible](#CHAP_Target.Neptune.DataTypes)
+ [Limitations de l’utilisation d’Amazon Neptune en tant que cible](#CHAP_Target.Neptune.Limitations)

## Vue d’ensemble de la migration vers Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Avant de commencer une migration vers une cible Neptune, créez les ressources suivantes dans votre AWS compte :
+ Un cluster Neptune pour le point de terminaison cible. 
+ Une base de données relationnelle SQL prise en charge par le point AWS DMS de terminaison source. 
+ Un compartiment Amazon S3 pour le point de terminaison cible. Créez ce compartiment S3 dans la même AWS région que votre cluster Neptune. AWS DMS utilise ce compartiment S3 comme stockage de fichiers intermédiaire pour les données cibles qu'il charge en masse dans la base de données Neptune. Pour plus d’informations sur la création d’un compartiment S3, consultez [Créer un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.
+ Un point de terminaison de cloud privé virtuel (VPC) pour S3 dans le même VPC que le cluster Neptune. 
+ Rôle Gestion des identités et des accès AWS (IAM) qui inclut une politique IAM. Cette stratégie doit spécifier les autorisations `GetObject`, `PutObject`, `DeleteObject` et `ListObject` pour le compartiment S3 pour votre point de terminaison cible. Ce rôle est assumé à la fois par Neptune AWS DMS et par Neptune avec un accès IAM au compartiment S3 cible et à la base de données Neptune. Pour de plus amples informations, veuillez consulter [Création d’une fonction de service IAM pour l’accès à Amazon Neptune en tant que cible](#CHAP_Target.Neptune.ServiceRole).

Une fois ces ressources disponibles, la configuration et le démarrage d’une migration vers une cible Neptune sont similaires à toute migration de chargement complet à l’aide de la console ou de l’API DMS. Toutefois, une migration vers une cible Neptune nécessite des étapes uniques.

**Pour migrer une base de données AWS DMS relationnelle vers Neptune**

1. Créez une instance de réplication comme décrit dans [Création d'une instance de réplication](CHAP_ReplicationInstance.Creating.md).

1. Créez et testez une base de données relationnelle SQL prise en charge par le point AWS DMS de terminaison source.

1. Créez et testez le point de terminaison cible pour la base de données Neptune. 

   Pour connecter le point de terminaison cible à la base de données Neptune, spécifiez le nom du serveur pour le point de terminaison du cluster Neptune ou le point de terminaison de l’instance d’écriture Neptune. Spécifiez également le dossier du compartiment S3 AWS DMS pour stocker ses fichiers intermédiaires à charger en bloc dans la base de données Neptune. 

   Pendant la migration, AWS DMS stocke toutes les données cibles migrées dans ce dossier de compartiment S3 jusqu'à la taille de fichier maximale que vous spécifiez. Lorsque ce stockage de fichiers atteint cette taille maximale, charge AWS DMS en bloc les données S3 stockées dans la base de données cible. Il efface le dossier pour permettre le stockage de toutes les données cibles supplémentaires pour le chargement ultérieur dans la base de données cible. Pour de plus amples informations sur la spécification de ces paramètres, veuillez consulter [Spécification des paramètres de point de terminaison pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.EndpointSettings).

1. Créez une tâche de réplication à chargement complet avec les ressources créées aux étapes 1 à 3 et procédez comme suit : 

   1. Utilisez le mappage de tables de tâches comme d'habitude pour identifier des schémas, tables et vues sources spécifiques à migrer depuis votre base de données relationnelle à l'aide de règles de sélection et de transformation appropriées. Pour de plus amples informations, veuillez consulter [Utilisation du mappage de table pour spécifier des paramètres de tâche](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Spécifiez les mappages de cible en choisissant l’une des options suivantes pour spécifier les règles de mappage à partir de tables et de vues sources vers votre graphe de base de données cible Neptune :
      + Gremlin JSON : pour en savoir plus sur l’utilisation de Gremlin JSON pour charger une base de données Neptune, consultez [Format des données de chargement Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) dans le *Guide de l’utilisateur Amazon Neptune*.
      + SPARQL RDB to Resource Description Framework Mapping Language (R2RML) : pour en savoir plus sur l’utilisation de SPARQL R2RML, consultez la spécification W3C [R2RML: RDB to RDF mapping language](https://www.w3.org/TR/r2rml/).

   1. Effectuez l’une des actions suivantes :
      + À l'aide de la AWS DMS console, spécifiez les options de mappage de graphes à l'aide des **règles de mappage de graphes** sur la page **Créer une tâche de migration de base de données**. 
      + À l'aide de l' AWS DMS API, spécifiez ces options à l'aide du paramètre de `TaskData` requête de l'appel d'`CreateReplicationTask`API. 

      Pour de plus amples informations et consulter des exemples utilisant Gremlin JSON et SPARQL R2RML afin de spécifier des règles de mappage graphique, veuillez consulter [Spécification de règles de mappage de graphe à l’aide de Gremlin et de R2RML pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.GraphMapping).

1. Démarrez la réplication de votre tâche de migration.

## Spécification des paramètres de point de terminaison pour Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Pour créer ou modifier un point de terminaison cible, vous pouvez utiliser la console, `CreateEndpoint` ou les opérations d'API `ModifyEndpoint`. 

**Pour une cible Neptune dans la AWS DMS console, spécifiez les **paramètres spécifiques au point de terminaison sur la page Créer un point** **de terminaison ou Modifier un point de terminaison**.** Pour `CreateEndpoint` et `ModifyEndpoint`, spécifiez les paramètres de demande pour l'option `NeptuneSettings`. L’exemple suivant montre comment procéder à l’aide de l’interface de ligne de commande. 

```
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}‘
```

Ici, l’option `--server-name` de l’interface CLI spécifie le nom du serveur pour le point de terminaison d’écriture de cluster Neptune. Vous pouvez également spécifier le nom du serveur pour un point de terminaison d’instance d’écriture Neptune. 

Les paramètres de demande d'option `--neptune-settings` sont les suivants :
+ `ServiceAccessRoleArn` : (Obligatoire) Amazon Resource Name (ARN) de la fonction de service que vous avez créée pour le point de terminaison cible Neptune. Pour de plus amples informations, veuillez consulter [Création d’une fonction de service IAM pour l’accès à Amazon Neptune en tant que cible](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName` : (Obligatoire) nom du compartiment S3 dans lequel DMS peut stocker temporairement des données de graphe migrées dans des fichiers .csv avant de les charger en bloc dans la base de données cible Neptune. DMS mappe les données source SQL aux données de graphique avant de les stocker dans ces fichiers .csv.
+ `S3BucketFolder` : (Obligatoire) chemin d’accès au dossier dans lequel vous souhaitez que DMS stocke les données de graphe migrées dans le compartiment S3 spécifié par `S3BucketName`.
+ `ErrorRetryDuration` : (Facultatif) nombre de millisecondes pendant lesquelles DMS doit attendre pour réessayer une charge groupée de données de graphe migrées vers la base de données cible Neptune avant de déclencher une erreur. La valeur par défaut est 250.
+ `MaxFileSize` : (Facultatif) taille maximale en Ko de données de graphe migrées stockées dans un fichier .csv avant que DMS charge en bloc les données dans la base de données cible Neptune. La valeur par défaut est de 1 048 576 Ko (1 Go). En cas de succès, DMS efface le compartiment, prêt à stocker le prochain lot de données de graphique migrées.
+ `MaxRetryCount` : (Facultatif) nombre de fois où DMS peut réessayer une charge en bloc de données de graphe migrées vers la base de données cible Neptune avant de déclencher une erreur. La valeur par défaut est 5.
+ `IAMAuthEnabled` : (Facultatif) si vous souhaitez que l’autorisation IAM soit activée pour ce point de terminaison, définissez ce paramètre sur `true` et attachez le document de politique IAM approprié à votre fonction de service spécifié par `ServiceAccessRoleArn`. La valeur par défaut est `false`.

## Création d’une fonction de service IAM pour l’accès à Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Pour accéder à Neptune en tant que cible, créez un rôle de service à l'aide d'IAM. Selon la configuration du point de terminaison Neptune, attachez à ce rôle une partie ou la totalité des documents de politique IAM et d’approbation suivants. Lorsque vous créez le point de terminaison Neptune, vous fournissez l’ARN de cette fonction de service. Cela permet à Amazon Neptune AWS DMS d'obtenir les autorisations nécessaires pour accéder à la fois à Neptune et à son compartiment Amazon S3 associé.

Si vous définissez le paramètre `IAMAuthEnabled` dans `NeptuneSettings` sur `true` dans votre configuration de point de terminaison Neptune, attachez une politique IAM telle que la suivante à votre fonction de service. Si vous définissez `IAMAuthEnabled` sur `false`, vous pouvez ignorer cette stratégie.

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

La politique IAM précédente permet un accès complet au cluster cible Neptune spécifié par `Resource`.

Joignez une stratégie IAM telle que la suivante à votre rôle de service. Cette stratégie permet à DMS de stocker temporairement des données de graphe migrées dans le compartiment S3 que vous avez créé pour le chargement en bloc dans la base de données cible Neptune.

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

La politique IAM précédente permet à votre compte d’interroger le contenu du compartiment S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) créé pour votre cible Neptune. Elle permet également à votre compte de fonctionner pleinement sur le contenu de tous les fichiers et dossiers de compartiment (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Modifiez la relation de confiance et associez le rôle IAM suivant à votre rôle de service pour permettre à la fois au service de base de données Amazon Neptune AWS DMS et Amazon Neptune d'assumer ce rôle.

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

------

Pour en savoir plus sur la spécification de cette fonction de service pour votre point de terminaison cible Neptune, consultez [Spécification des paramètres de point de terminaison pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.EndpointSettings).

## Spécification de règles de mappage de graphe à l’aide de Gremlin et de R2RML pour Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.GraphMapping"></a>

Les règles de mappage de graphe que vous créez spécifient comment les données extraites d’une source de base de données relationnelle SQL sont chargées dans une cible de cluster de base de données Neptune. Le format de ces règles de mappage varie selon qu'elles concernent le chargement de données de graphes de propriétés à l'aide d'Apache TinkerPop Gremlin ou de données du Resource Description Framework (RDF) à l'aide de R2RML. Vous trouverez ci-dessous des informations sur ces formats et sur les autres ressources disponibles.

Vous pouvez spécifier ces règles de mappage lorsque vous créez la tâche de migration à l'aide de la console ou de l'API DMS. 

À l'aide de la console, spécifiez ces règles de mappage à l'aide des **règles de mappage de graphique** sur la page **Créer une tâche de migration de base de données**. Dans **Règles de mappage de graphique**, vous pouvez entrer et modifier les règles de mappage directement à l'aide de l'éditeur fourni. Vous pouvez également rechercher un fichier contenant les règles de mappage dans le format de mappage de graphique approprié. 

À l'aide de l'API, spécifiez ces options à l'aide du paramètre de demande `TaskData` de l'appel d'API `CreateReplicationTask`. Définissez `TaskData` sur le chemin d'accès d'un fichier contenant les règles de mappage dans le format de mappage de graphique approprié.

### Règles de mappage de graphique pour générer des données de graphique de propriétés à l'aide de Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

À l'aide de Gremlin pour générer les données du graphique de propriétés, spécifiez un objet JSON avec une règle de mappage pour chaque entité de graphique à générer à partir des données source. Le format de ce code JSON est défini spécifiquement pour charger Amazon Neptune en bloc. Le modèle suivant montre à quoi ressemble chaque règle de cet objet.

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

La présence d'une étiquette de sommet implique que le sommet est créé ici. Son absence implique que le sommet est créé par une source différente, et cette définition n'ajoute que des propriétés de sommet. Spécifiez autant de définitions de sommets et de tronçons que nécessaire pour spécifier les mappages pour l'ensemble de la source de base de données relationnelle.

Voici un exemple de règle pour une table `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"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Ici, les définitions de sommets et de tronçons mappent une relation de reporting à partir d'un nœud `employee` avec l'ID d'employé (`EmpID`) et d'un nœud `employee` avec un ID de responsable (`managerId`).

Pour plus d’informations sur la création de règles de mappage de graphe à l’aide de Gremlin JSON, consultez [Format des données de chargement Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) dans le *Guide de l’utilisateur Amazon Neptune*.

### Règles de mappage graphique pour générer des données RDF/SPARQL
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Si vous chargez des données RDF à interroger à l'aide de SPARQL, écrivez les règles de mappage de graphique dans R2RML. R2RML est un langage W3C standard pour mapper des données relationnelles vers RDF. Dans un fichier R2RML, un *mappage de triples* (par exemple, `<#TriplesMap1>` suivant) spécifie une règle pour convertir chaque ligne d'une table logique en zéro ou plusieurs triples RDF. Un *mappage de sujet* (par exemple, tout élément `rr:subjectMap` suivant) spécifie une règle pour générer les sujets des triples RDF générés par un mappage de triples. Un *mappage prédicat-objet* (par exemple, tout élément `rr:predicateObjectMap` suivant) est une fonction qui crée une ou plusieurs paires prédicat-objet pour chaque ligne de table logique d'une table logique.

Voici un exemple simple de table `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" ];
    ]
```

Dans l'exemple précédent, le mappage définit des nœuds de graphique mappés à partir d'une table d'employés.

Voici un autre exemple simple de table `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" ]
    ].
```

Dans l'exemple précédent, le mappage définit les nœuds du graphe mappant friend-of-a-friend les relations entre les personnes d'une `Student` table.

Pour de plus amples informations sur la création de règles de mappage de graphique à l'aide de SPARQL R2RML, veuillez consulter la spécification W3C [R2RML : RDB to RDF Mapping Language](https://www.w3.org/TR/r2rml/).

## Types de données pour la migration Gremlin et R2RML vers Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS effectue le mappage des types de données entre votre point de terminaison source SQL et votre cible Neptune de deux manières. La solution choisie dépend du format de mappage de graphe que vous utilisez pour charger la base de données Neptune : 
+ Apache TinkerPop Gremlin, à l'aide d'une représentation JSON des données de migration.
+ SPARQL du W3C, en utilisant une représentation R2RML des données de migration. 

Pour de plus amples informations sur ces deux formats de mappage de graphique, veuillez consulter [Spécification de règles de mappage de graphe à l’aide de Gremlin et de R2RML pour Amazon Neptune en tant que cible](#CHAP_Target.Neptune.GraphMapping).

Vous trouverez ci-dessous des descriptions des mappages de types de données pour chaque format.

### Mappages de type de données cible source SQL vers Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

Le tableau suivant présente les mappages de type de données d'une source SQL vers une cible formatée Gremlin. 

AWS DMS mappe n'importe quel type de données source SQL non répertorié à un `String` Gremlin.



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

Pour plus d’informations sur les types de données Gremlin pour le chargement de Neptune, consultez [Types de données Gremlin](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) dans le *Guide de l’utilisateur Neptune*.

### Mappages de type de données cible Source SQL vers R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

Le tableau suivant présente les mappages de types de données d'une source SQL vers une cible formatée R2RML.

Tous les types de données RDF répertoriés distinguent les majuscules et minuscules, à l'exception du format RDF littéral. AWS DMS mappe tout type de données source SQL non répertorié à un littéral RDF. 

Un *littéral RDF* est l'une des diverses formes lexicales littérales et l'un des différents types de données. Pour de plus amples informations, veuillez consulter [Littéraux RDF](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) dans la spécification W3C *Resource Description Framework (RDF) : Concepts and Abstract Syntax*.

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

Pour plus d’informations sur les types de données RDF pour charger Neptune et leurs mappages aux types de données sources SQL, consultez [Datatype conversions](https://www.w3.org/TR/r2rml/#datatype-conversions) dans la spécification W3C *R2RML: RDB to RDF Mapping Language*.

## Limitations de l’utilisation d’Amazon Neptune en tant que cible
<a name="CHAP_Target.Neptune.Limitations"></a>

Les limitations suivantes s’appliquent lorsque vous utilisez Neptune en tant que cible :
+ AWS DMS prend actuellement en charge les tâches de chargement complet uniquement pour la migration vers une cible Neptune. La migration CDC (capture des données de modification) vers une cible Neptune n’est pas prise en charge.
+ Assurez-vous d’effacer manuellement toutes les données de la base de données Neptune cible avant de commencer la tâche de migration, comme dans les exemples suivants.

  Pour supprimer toutes les données (sommets et arêtes) dans le graphe, exécutez la commande Gremlin suivante.

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

  Pour supprimer les sommets portant l’étiquette `'customer'`, exécutez la commande Gremlin suivante.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**Note**  
La suppression d'un jeu de données volumineux peut prendre un certain temps. Vous pouvez vouloir itérer `drop()` avec une limite, par exemple `limit(1000)`.

  Pour supprimer les arêtes portant l’étiquette `'rated'`, exécutez la commande Gremlin suivante.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**Note**  
La suppression d'un jeu de données volumineux peut prendre un certain temps. Vous pouvez vouloir itérer `drop()` avec une limite, par exemple `limit(1000)`.
+ L’opération d’API DMS `DescribeTableStatistics` peut renvoyer des résultats inexacts sur une table donnée en raison de la nature des structures de données de graphe Neptune.

  Pendant la migration, AWS DMS analyse chaque table source et utilise le mappage de graphes pour convertir les données sources en un graphe Neptune. Les données converties sont d'abord stockées dans le dossier de compartiment S3 spécifié pour le point de terminaison cible. Si la source est analysée et que ces données S3 intermédiaires sont générées avec succès, `DescribeTableStatistics` suppose que les données ont été chargées avec succès dans la base de données cible Neptune. Mais ce n'est pas toujours vrai. Pour vérifier que les données ont été chargées correctement pour une table donnée, comparez les valeurs `count()` renvoyées aux deux extrémités de la migration pour cette table. 

  Dans l'exemple suivant, AWS DMS a chargé une `customer` table à partir de la base de données source, à laquelle l'étiquette est attribuée `'customer'` dans le graphe de la base de données Neptune cible. Vous pouvez vous assurer que cette étiquette est écrite dans la base de données cible. Pour ce faire, comparez le nombre de lignes `customer` disponibles à partir de la base de données source avec le nombre de lignes étiquetées `'customer'` chargées dans la base de données cible Neptune une fois la tâche terminée.

  Pour obtenir le nombre de lignes client disponibles à partir de la base de données source à l'aide de SQL, exécutez la procédure suivante.

  ```
  select count(*) from customer;
  ```

  Pour obtenir le nombre de lignes étiquetées `'customer'` chargées dans le graphique de base de données cible à l'aide de Gremlin, exécutez la procédure suivante.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Actuellement, si une seule table n'est pas chargée, c'est toute la tâche qui échoue. Contrairement à une cible de base de données relationnelle, les données dans Neptune sont hautement connectées, ce qui rend impossible dans de nombreux cas la reprise d’une tâche. Si une tâche ne peut pas être reprise correctement en raison de ce type d'échec de chargement des données, créez une nouvelle tâche pour charger la table qui n'a pas pu être chargée. Avant d’exécuter cette nouvelle tâche, effacez manuellement la table partiellement chargée de la cible Neptune.
**Note**  
Vous pouvez reprendre une tâche dont la migration vers une cible Neptune a échoué si l’échec est récupérable (par exemple, une erreur de transit réseau).
+ AWS DMS prend en charge la plupart des normes pour R2RML. Cependant, il AWS DMS ne prend pas en charge certaines normes R2RML, notamment les expressions inverses, les jointures et les vues. Une solution de contournement pour une vue R2RML consiste à créer une vue SQL personnalisée correspondante dans la base de données source. Dans la tâche de migration, utilisez le mappage de table pour choisir la vue en tant qu'entrée. Mappez ensuite la vue à une table qui est ensuite consommée par R2RML pour générer des données de graphique.
+ Lorsque vous migrez des données sources avec des types de données SQL non pris en charge, les données cibles résultantes peuvent avoir une perte de précision. Pour de plus amples informations, veuillez consulter [Types de données pour la migration Gremlin et R2RML vers Amazon Neptune en tant que cible](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS ne prend pas en charge la migration de données LOB vers une cible Neptune.

# Utilisation de Redis OSS comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

Redis OSS est un magasin de structure de données en mémoire open source utilisé comme base de données, cache et courtier de messages. La gestion des données en mémoire peut entraîner des opérations de lecture ou d’écriture de moins d’une milliseconde et des centaines de millions d’opérations par seconde. En tant que magasin de données en mémoire, Redis OSS alimente les applications les plus exigeantes nécessitant des temps de réponse inférieurs à la milliseconde.

Vous pouvez AWS DMS ainsi migrer les données de n'importe quelle base de données source prise en charge vers un magasin de données Redis OSS cible avec un temps d'arrêt minimal. Pour plus d'informations sur Redis OSS, consultez la documentation [Redis OSS](https://redis.io/documentation).

Outre Redis OSS sur site, AWS Database Migration Service prend en charge les éléments suivants :
+ [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/) en tant que magasin de données cible. ElastiCache (Redis OSS) fonctionne avec vos clients Redis OSS et utilise le format de données ouvert Redis OSS pour stocker vos données.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) en tant que magasin de données cible. MemoryDB est compatible avec Redis OSS et vous permet de créer des applications en utilisant toutes les structures de données et commandes Redis OSS APIs utilisées aujourd'hui.

Pour plus d'informations sur l'utilisation de Redis OSS comme cible pour AWS DMS, consultez les sections suivantes : 

**Topics**
+ [Conditions préalables à l'utilisation d'un cluster Redis OSS comme cible pour AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Limitations liées à l'utilisation de Redis comme cible pour AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migration de données d'une base de données relationnelle ou non relationnelle vers une cible Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Spécification des paramètres de point de terminaison pour Redis OSS en tant que cible](#CHAP_Target.Redis.EndpointSettings)

## Conditions préalables à l'utilisation d'un cluster Redis OSS comme cible pour AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

*DMS prend en charge une cible Redis OSS sur site dans une configuration autonome ou en tant que cluster Redis OSS dans lequel les données sont automatiquement réparties sur plusieurs nœuds.* Le partitionnement est le processus qui consiste à séparer les données en petits fragments appelés « partitions », répartis sur plusieurs serveurs ou nœuds. Une partition contient un sous-ensemble de l’ensemble de données total qui couvre une partie de la charge de travail globale.

**Redis OSS étant un magasin de données NoSQL à valeur clé, la convention de dénomination des clés Redis OSS à utiliser lorsque votre source est une base de données relationnelle est schema-name.table-name.primary-key.** Dans Redis OSS, la clé et la valeur ne doivent pas contenir le caractère spécial %. Dans le cas contraire, DMS ignore l’enregistrement. 

**Note**  
Si vous utilisez ElastiCache (Redis OSS) comme cible, DMS prend uniquement en charge les configurations *activées en mode cluster*. Pour plus d'informations sur l'utilisation de ElastiCache (Redis OSS) version 6.x ou ultérieure pour créer un magasin de données cible compatible avec le mode cluster, consultez [Getting started](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) dans le guide de l'utilisateur *Amazon ElastiCache (Redis OSS)*. 

Avant de commencer une migration de base de données, lancez votre cluster Redis OSS selon les critères suivants.
+ Votre cluster possède une ou plusieurs partitions.
+ Si vous utilisez une cible ElastiCache (Redis OSS), assurez-vous que votre cluster n'utilise pas le contrôle d'accès basé sur les rôles IAM. Utilisez plutôt Redis OSS Auth pour authentifier les utilisateurs.
+ Activez Multi-AZ (zones de disponibilité).
+ Assurez-vous que le cluster dispose de suffisamment de mémoire pour accueillir les données à migrer depuis la base de données. 
+ Assurez-vous que votre cluster Redis OSS cible est exempt de toutes les données avant de commencer la tâche de migration initiale.

Vous devez déterminer vos exigences de sécurité pour la migration des données avant de créer la configuration de votre cluster. DMS prend en charge la migration vers les groupes de réplication cibles, quelle que soit leur configuration de chiffrement. Mais vous ne pouvez activer ou désactiver le chiffrement que lorsque vous créez la configuration de votre cluster.

## Limitations liées à l'utilisation de Redis comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Les limites suivantes s'appliquent lors de l'utilisation de Redis OSS comme cible :
+ Redis OSS étant un magasin de données no-sql à valeur clé, la convention de dénomination des clés Redis OSS à utiliser lorsque votre source est une base de données relationnelle est la suivante. `schema-name.table-name.primary-key` 
+ Dans Redis OSS, la valeur clé ne peut pas contenir le caractère spécial. `%` Dans le cas contraire, DMS ignore l’enregistrement.
+ DMS ne migrera pas les lignes contenant le `%` caractère.
+ DMS ne migrera pas les champs dont le nom contient le `%` caractère.
+ Le Mode LOB complet n'est pas pris en charge.
+  Une autorité de certification (CA) privée n'est pas prise en charge lors de l'utilisation de ElastiCache (Redis OSS) comme cible.
+ AWS DMS ne prend pas en charge les données source contenant des `'\0'` caractères incorporés lors de l'utilisation de Redis comme point de terminaison cible. Les données contenant des `'\0'` caractères incorporés seront tronquées au premier `'\0'` caractère.

## Migration de données d'une base de données relationnelle ou non relationnelle vers une cible Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

Vous pouvez migrer les données de n'importe quel magasin de données SQL ou NoSQL source directement vers une cible Redis OSS. La configuration et le démarrage d'une migration vers une cible Redis OSS sont similaires à toute migration de chargement complet et de capture de données à l'aide de la console ou de l'API DMS. Pour effectuer une migration de base de données vers une cible Redis OSS, procédez comme suit.
+ Créez une instance de réplication pour effectuer tous les processus de la migration. Pour de plus amples informations, veuillez consulter [Création d'une instance de réplication](CHAP_ReplicationInstance.Creating.md).
+ Spécifiez un point de terminaison source. Pour de plus amples informations, veuillez consulter [Création de points de terminaison source et cible](CHAP_Endpoints.Creating.md).
+ Trouvez le numéro de port et le nom DNS de votre cluster.
+ Téléchargez un ensemble de certificats que vous pouvez utiliser pour vérifier les connexions SSL.
+ Spécifiez un point de terminaison cible, comme décrit ci-dessous.
+ Créez une tâche ou un ensemble de tâches pour définir les tables et processus de réplication à utiliser. Pour de plus amples informations, veuillez consulter [Création d’une tâche](CHAP_Tasks.Creating.md).
+ Migrez les données de la base de données source vers votre cluster cible.

Commencez une migration de base de données de l’une des deux manières suivantes :

1. Vous pouvez choisir la AWS DMS console et y effectuer chaque étape.

1. Vous pouvez utiliser le AWS Command Line Interface (AWS CLI). Pour plus d'informations sur l'utilisation de la CLI avec AWS DMS, consultez [AWS CLI pour AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html).

**Pour trouver le numéro de port et le nom DNS de votre cluster**
+ Utilisez la AWS CLI commande suivante pour `replication-group-id` fournir le nom de votre groupe de réplication.

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Ici, la sortie indique le nom DNS dans l’attribut `Address` et le numéro de port dans l’attribut `Port` du nœud primaire du cluster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Si vous utilisez MemoryDB comme cible, utilisez la AWS CLI commande suivante pour fournir une adresse de point de terminaison à votre cluster Redis OSS. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Téléchargez un ensemble de certificats à utiliser pour vérifier les connexions SSL.**
+ Entrez la commande `wget` suivante sur la ligne de commande. Wget est un utilitaire de ligne de commande GNU gratuit qui permet de télécharger des fichiers à partir d’Internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Ici, `aws-api-domain` complète le domaine Amazon S3 de votre AWS région requis pour accéder au compartiment S3 spécifié et au rds-combined-ca-bundle fichier .pem qu'il fournit.

**Pour créer un point de terminaison cible à l'aide de la AWS DMS console**

Ce point de terminaison est destiné à votre cible Redis OSS déjà en cours d'exécution. 
+ Dans la console, choisissez **Points de terminaison** dans le volet de navigation, puis **Créer un point de terminaison**. Le tableau suivant décrit les paramètres.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.Redis.html)

Lorsque vous avez terminé de fournir toutes les informations pour votre point de terminaison, AWS DMS crée votre point de terminaison cible Redis OSS à utiliser lors de la migration de la base de données.

Pour en savoir plus sur la création d’une tâche de migration et le démarrage de la migration de la base de données, consultez [Création d’une tâche](CHAP_Tasks.Creating.md).

## Spécification des paramètres de point de terminaison pour Redis OSS en tant que cible
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Pour créer ou modifier un point de terminaison cible, vous pouvez utiliser la console, `CreateEndpoint` ou les opérations d'API `ModifyEndpoint`. 

Pour une cible Redis OSS dans la AWS DMS console, spécifiez les **paramètres spécifiques au point de terminaison sur la page Créer un point** **de terminaison ou **Modifier** la console de point de terminaison**.

Lorsque vous utilisez les opérations d’API `CreateEndpoint` et `ModifyEndpoint`, spécifiez les paramètres de demande pour l’option `RedisSettings`. L’exemple suivant montre comment procéder à l’aide d’ 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"
        }
    }
}
```

Les paramètres `--redis-settings` sont les suivants :
+ `ServerName`— (Obligatoire) De type`string`, spécifie le cluster Redis OSS vers lequel les données seront migrées et qui se trouve dans votre même VPC.
+ `Port` : (Obligatoire) pour le type `number`, valeur du port utilisé pour accéder au point de terminaison.
+ `SslSecurityProtocol` : (Facultatif) les valeurs valides incluent `plaintext` et `ssl-encryption`. La valeur par défaut est `ssl-encryption`. 

  L'option `plaintext` ne fournit pas le chiffrement du protocole TLS (Transport Layer Security) pour le trafic entre le point de terminaison et la base de données. 

  Utilisez `ssl-encryption` pour établir une connexion chiffrée. `ssl-encryption` ne requiert pas d’ARN d’autorité de certification (CA) SSL pour vérifier le certificat d’un serveur, mais il est possible d’en identifier un à l’aide du paramètre `SslCaCertificateArn`. Si aucun ARN de CA n’est fourni, DMS utilise la CA racine Amazon.

  Lorsque vous utilisez une cible Redis OSS sur site, vous pouvez l'utiliser `SslCaCertificateArn` pour importer une autorité de certification (CA) publique ou privée dans DMS et fournir cet ARN pour l'authentification du serveur. Une autorité de certification privée n'est pas prise en charge lors de l'utilisation de ElastiCache (Redis OSS) comme cible.
+ `AuthType`— (Obligatoire) Indique le type d'authentification à effectuer lors de la connexion à Redis OSS. Les valeurs valides sont `none`, `auth-token` et `auth-role`.

  L'`auth-token`option nécessite que les caractères *AuthPassword* « » soient fournis, tandis que l'`auth-role`option nécessite que *AuthUserName* « » et « *AuthPassword* » soient fournis.

# Utiliser Babelfish comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

Vous pouvez migrer les données d'une base de données source Microsoft SQL Server vers une cible Babelfish à l'aide de. AWS Database Migration Service

Babelfish pour Aurora PostgreSQL étend l’Édition compatible avec PostgreSQL de votre base de données Amazon Aurora et permet d’accepter les connexions de base de données à partir de clients Microsoft SQL Server. Les applications initialement conçues pour SQL Server peuvent ainsi être utilisées avec Aurora PostgreSQL, sans apporter de changements significatifs au code par rapport à une migration traditionnelle et sans modifier les pilotes de base de données. 

Pour plus d'informations sur les versions de Babelfish compatibles AWS DMS en tant que cible, consultez. [Objectifs pour AWS DMS](CHAP_Introduction.Targets.md) Les versions antérieures de Babelfish sur Aurora PostgreSQL nécessitent une mise à niveau avant d’utiliser le point de terminaison Babelfish.

**Note**  
Le point de terminaison cible Aurora PostgreSQL est la méthode privilégiée pour migrer des données vers Babelfish. Pour de plus amples informations, veuillez consulter [Utilisation de Babelfish for Aurora PostgreSQL en tant que cible](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

Pour en savoir plus sur l’utilisation de Babelfish comme point de terminaison de base de données, consultez [Babelfish for Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) dans le *Guide de l’utilisateur Amazon Aurora pour Aurora*. 

## Prérequis pour utiliser Babelfish comme cible pour AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

Vous devez créer vos tables avant de migrer les données afin de vous assurer que celles-ci AWS DMS utilisent les types de données et les métadonnées de table appropriés. Si vous ne créez pas vos tables sur la cible avant d'exécuter la migration, vous AWS DMS risquez de créer les tables avec des types de données et des autorisations incorrects. Par exemple, AWS DMS crée une colonne d'horodatage au format binaire (8) à la place et ne fournit pas les fonctionnalités attendues timestamp/rowversion .

**Pour préparer et créer vos tables avant la migration**

1. Exécutez vos instructions DDL de création de table qui incluent des contraintes uniques, des clés primaires ou des contraintes par défaut. 

   N’incluez pas de contraintes de clé étrangère ni d’instructions DDL pour des objets tels que des vues, des procédures stockées, des fonctions ou des déclencheurs. Vous pouvez les appliquer après avoir migré la base de données source.

1. Identifiez les colonnes d’identité, les colonnes calculées ou les colonnes contenant des types de données rowversion ou timestamp pour vos tables. Créez ensuite les règles de transformation nécessaires pour gérer les problèmes connus lors de l’exécution de la tâche de migration. Pour plus d'informations, voir,[Règles et actions de transformation](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifiez les colonnes contenant des types de données que Babelfish ne prend pas en charge. Modifiez ensuite les colonnes concernées dans la table cible pour utiliser les types de données pris en charge, ou créez une règle de transformation qui les supprime lors de la tâche de migration. Pour plus d'informations, voir,[Règles et actions de transformation](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   Le tableau suivant répertorie les types de données source non pris en charge par Babelfish, ainsi que le type de données cible recommandé correspondant à utiliser.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Pour définir le niveau des unités de capacité Aurora (ACUs) pour votre base de données source Aurora PostgreSQL Serverless V2**

Vous pouvez améliorer les performances de votre tâche de AWS DMS migration avant de l'exécuter en définissant la valeur ACU minimale.
+ Dans la fenêtre des **paramètres de capacité de Severless v2**, définissez un niveau **minimum ACUs** de **2** ou un niveau raisonnable pour votre cluster de base de données Aurora.

  Pour plus d’informations sur la définition des unités de capacité Aurora, consultez [Choix de la plage de capacité Aurora sans serveur v2 pour un cluster Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html) dans le *Guide de l’utilisateur Amazon Aurora*. 

Après avoir exécuté votre tâche de AWS DMS migration, vous pouvez rétablir la valeur minimale de votre base ACUs de données source Aurora PostgreSQL Serverless V2 à un niveau raisonnable.

## Exigences de sécurité lors de l'utilisation de Babelfish comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

Ce qui suit décrit les exigences de sécurité pour une utilisation AWS DMS avec une cible Babelfish :
+ Le nom d’utilisateur de l’administrateur (utilisateur Admin) utilisé pour créer la base de données.
+ L’identifiant de connexion PSQL et l’utilisateur disposant des autorisations SELECT, INSERT, UPDATE, DELETE et REFERENCES suffisantes.

## Autorisations utilisateur pour utiliser Babelfish comme cible pour AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**Important**  
À des fins de sécurité, le compte d’utilisateur utilisé pour la migration des données doit être un utilisateur enregistré dans une base de données Babelfish que vous utilisez en tant que cible.

Votre point de terminaison cible Babelfish nécessite des autorisations utilisateur minimales pour exécuter une migration AWS DMS .

**Pour créer un identifiant de connexion et un utilisateur Transact-SQL (T-SQL) à faible privilège**

1. Créez un identifiant de connexion et un mot de passe à utiliser lors de la connexion au serveur.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Créez la base de données virtuelle pour votre cluster Babelfish.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Créez l’utilisateur T-SQL pour la base de données cible.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Pour chaque table de la base de données Babelfish, accordez (GRANT) des autorisations aux tables.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Limitations relatives à l'utilisation de Babelfish comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

Les limitations suivantes s’appliquent lors de l’utilisation d’une base de données Babelfish en tant que cible pour AWS DMS :
+ Seul le mode de préparation de table « **Ne rien faire** » est pris en charge.
+ Le type de données ROWVERSION nécessite une règle de mappage de table qui supprime le nom de colonne de la table pendant la tâche de migration.
+ Le type de données sql\$1variant n’est pas pris en charge.
+ Le mode LOB complet est pris en charge. L'utilisation de SQL Server comme point de terminaison source nécessite que le paramètre `ForceFullLob=True` d'attribut de connexion du point de terminaison SQL Server soit défini afin de LOBs pouvoir être migré vers le point de terminaison cible.
+ Les paramètres de la tâche de réplication présentent les limitations suivantes :

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Les types de données TIME DATETIME2 (7), (7) et DATETIMEOFFSET (7) dans Babelfish limitent la valeur de précision pour la partie secondes du temps à 6 chiffres. Envisagez d’utiliser une valeur de précision de 6 pour votre table cible lorsque vous utilisez ces types de données. Pour les versions 2.2.0 et supérieures de Babelfish, lorsque vous utilisez TIME (7) et DATETIME2 (7), le septième chiffre de précision est toujours zéro.
+ En mode DO\$1NOTHING, DMS vérifie si la table existe déjà. Si la table n’existe pas dans le schéma cible, DMS crée la table en fonction de la définition de table source et mappe tous les types de données définis par l’utilisateur à leur type de données de base.
+ Une tâche de AWS DMS migration vers une cible Babelfish ne prend pas en charge les tables dont les colonnes utilisent les types de données ROWVERSION ou TIMESTAMP. Vous pouvez utiliser une règle de mappage de table qui supprime le nom de colonne de la table pendant le processus de transfert. Dans l’exemple de règle de transformation suivant, une table nommée `Actor` dans votre source est transformée pour supprimer toutes les colonnes commençant par les caractères `col` de la table `Actor` dans votre cible.

  ```
  {
   	"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%"
  		}
  	}]
   }
  ```
+ Pour les tables comportant des colonnes d’identité ou calculées, où les tables cibles utilisent des noms en casse mixte tels que Catégories, vous devez créer une action de règle de transformation qui convertit les noms des table en minuscules pour votre tâche DMS. L'exemple suivant montre comment créer l'action de règle de transformation **Make lowercase** à l'aide de la AWS DMS console. Pour de plus amples informations, veuillez consulter [Règles et actions de transformation](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Règle de transformation Babelfish\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Avant Babelfish version 2.2.0, DMS limitait le nombre de colonnes que vous pouviez répliquer vers un point de terminaison cible Babelfish à vingt (20) colonnes. Avec Babelfish 2.2.0, la limite est passée à 100 colonnes. Mais avec Babelfish versions 2.4.0 et ultérieures, le nombre de colonnes que vous pouvez répliquer augmente à nouveau. Vous pouvez exécuter l’exemple de code suivant sur la base de données SQL Server pour déterminer quelles tables sont trop longues.

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

## Types de données cibles pour Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

Le tableau suivant indique les types de données cibles de Babelfish pris en charge lors de l'utilisation AWS DMS et le mappage par défaut à partir AWS DMS des types de données.

Pour plus d'informations sur AWS DMS les types de données, consultez[Types de données pour AWS Database Migration Service](CHAP_Reference.DataTypes.md). 


|  AWS DMS type de données  |  Type de données Babelfish   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(Length)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  CHAÎNE  |  Si la colonne est une colonne de date ou d'heure, effectuez les opérations suivantes :  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/dms/latest/userguide/CHAP_Target.Babelfish.html) Si la colonne n'est pas une colonne de date ou d'heure, utilisez VARCHAR (length).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(length)  | 
|  BLOB  |  VARBINARY(max) Pour utiliser ce type de données avec DMS, vous devez activer l'utilisation de BLOBs pour une tâche spécifique. DMS prend en charge les types de données BLOB uniquement dans les tables qui contiennent une clé primaire.  | 
|  CLOB  |  VARCHAR(max) Pour utiliser ce type de données avec DMS, vous devez activer l'utilisation de CLOBs pour une tâche spécifique.  | 
|  NCLOB  |  NVARCHAR(max) Pour utiliser ce type de données avec DMS, vous devez activer l'utilisation de NCLOBs pour une tâche spécifique. Au cours de la CDC, DMS prend en charge les types de données NCLOB uniquement dans les tables qui contiennent une clé primaire.  | 

# Utiliser Amazon Timestream comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Vous pouvez l'utiliser AWS Database Migration Service pour migrer les données de votre base de données source vers un point de terminaison cible Amazon Timestream, en prenant en charge les migrations de données Full Load et CDC.

Amazon Timestream est un service de base de données de séries temporelles rapide, évolutif et sans serveur, conçu pour l’ingestion de grands volumes de données. Les données de séries temporelles sont une séquence de points de données collectés pendant un intervalle de temps et utilisés pour mesurer des événements qui évoluent au fil du temps. Il est utilisé pour collecter, stocker et analyser les métriques des applications IoT, des DevOps applications et des applications d'analyse. Une fois que vous avez enregistré vos données dans Timestream, vous pouvez visualiser et identifier des tendances et des modèles dans vos données en temps quasi réel. Pour plus d’informations sur Amazon Timestream, consultez [Qu’est-ce qu’Amazon Timestream ?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) dans le *Guide du développeur Amazon Timestream*.

**Topics**
+ [Conditions préalables à l'utilisation d'Amazon Timestream comme cible pour AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Paramètres de tâche de chargement complet multithread](#CHAP_Target.Timestream.FLTaskSettings)
+ [Paramètres de tâche de chargement CDC multithread](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Paramètres du point de terminaison lors de l'utilisation de Timestream comme cible pour AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Création et modification d’un point de terminaison Amazon Timestream cible](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Utilisation du mappage d’objet pour migrer des données vers une rubrique Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Limitations liées à l'utilisation d'Amazon Timestream comme cible pour AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Conditions préalables à l'utilisation d'Amazon Timestream comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Avant de configurer Amazon Timestream comme cible AWS DMS pour, assurez-vous de créer un rôle IAM. Ce rôle doit permettre AWS DMS d'accéder aux données en cours de migration vers Amazon Timestream. L’ensemble d’autorisations d’accès minimum pour le rôle que vous utilisez pour migrer vers Timestream figure dans la politique IAM suivante.

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

------

Si vous avez l'intention de migrer toutes les tables, utilisez `*` for *TABLE\$1NAME* dans l'exemple ci-dessus.

Notez ce qui suit à propos de l’utilisation de Timestream comme cible :
+ Si vous avez l’intention d’ingérer des données historiques dont l’horodatage remonte à plus d’un an, nous vous recommandons d’utiliser AWS DMS pour écrire les données dans Amazon S3 au format CSV (valeurs séparées par des virgules). Utilisez ensuite le chargement par lots de Timestream pour ingérer les données. Pour plus d’informations, consultez [Utilisation du chargement par lots dans Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) dans le [Guide du développeur Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Pour les migrations de données à chargement complet datant de moins d’un an, nous recommandons de définir une période de conservation de la mémoire de la table Timestream supérieure ou égale à l’horodatage le plus ancien. Ensuite, une fois la migration terminée, modifiez la période de conservation de la mémoire de la table à la valeur souhaitée. Par exemple, pour migrer des données dont l’horodatage le plus ancien date de 2 mois, procédez comme suit :
  + Définissez la période de conservation de la mémoire de la table cible Timestream sur 2 mois.
  + Démarrez la migration des données à l'aide de AWS DMS.
  + Une fois la migration des données terminée, modifiez la période de conservation de la table Timestream cible à la valeur souhaitée. 

   Nous vous recommandons d’estimer le coût de stockage de la mémoire avant la migration en utilisant les informations des pages suivantes :
  + [Tarification d’Amazon Timestream](https://aws.amazon.com/timestream/pricing)
  + [AWS calculateur de prix](https://calculator.aws/#/addService) 
+ Pour les migrations de données CDC, nous recommandons de définir la période de conservation de la mémoire de la table cible de manière à ce que les données ingérées se situent dans les limites de cette période. Pour plus d’informations, consultez [Bonnes pratiques en matière d’écriture](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) dans le [Guide du développeur Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Paramètres de tâche de chargement complet multithread
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Pour accélérer le transfert de données, AWS DMS prend en charge une tâche de migration multithread à chargement complet vers un point de terminaison cible Timestream avec les paramètres de tâche suivants :
+ `MaxFullLoadSubTasks` : utilisez cette option pour indiquer le nombre maximal de tables sources à charger en parallèle. DMS charge chaque table dans sa table Amazon Timestream cible correspondante à l’aide d’une sous-tâche dédiée. La valeur par défaut est 8 ; la valeur maximale 49.
+ `ParallelLoadThreads`— Utilisez cette option pour spécifier le nombre de threads AWS DMS utilisés pour charger chaque table dans sa table cible Amazon Timestream. La valeur maximale pour une cible Timestream est 32. Vous pouvez demander une augmentation de cette limite maximale.
+ `ParallelLoadBufferSize` : utilisez cette option pour spécifier le nombre maximal d’enregistrements à stocker dans la mémoire tampon utilisée par les threads de chargement parallèles pour charger les données dans la cible Amazon Timestream. La valeur par défaut est 50. La valeur maximale est 1 000. Utilisez ce paramètre avec `ParallelLoadThreads`. `ParallelLoadBufferSize` est valide uniquement dans le cas de plusieurs threads.
+ `ParallelLoadQueuesPerThread` : utilisez cette option pour spécifier le nombre de files d’attente auxquelles chaque thread simultané accède pour extraire les enregistrements de données des files d’attente et générer un chargement par lots pour la cible. La valeur par défaut est 1. Toutefois, pour les cibles Amazon Timestream de différentes tailles de charge utile, la plage valide est comprise entre 5 et 512 files d’attente par thread.

## Paramètres de tâche de chargement CDC multithread
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Pour améliorer les performances du CDC, AWS DMS prend en charge les paramètres de tâche suivants :
+ `ParallelApplyThreads`— Spécifie le nombre de threads simultanés AWS DMS utilisés lors d'un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Timestream. La valeur par défaut est 0 et la valeur maximale est 32.
+ `ParallelApplyBufferSize` : spécifie le nombre maximal d’enregistrements à stocker dans chaque file d’attente de la mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Timestream lors d’un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque `ParallelApplyThreads` spécifie plusieurs threads. 
+ `ParallelApplyQueuesPerThread` : spécifie le nombre de files d’attente auxquelles chaque thread accède pour extraire les enregistrements de données et générer un chargement par lots pour un point de terminaison Timestream lors d’un chargement CDC. La valeur par défaut est 1 et la valeur maximale est 512.

## Paramètres du point de terminaison lors de l'utilisation de Timestream comme cible pour AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer votre base de données Timestream cible comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Timestream comme cible sont indiqués dans le tableau suivant.

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

## Création et modification d’un point de terminaison Amazon Timestream cible
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Une fois que vous avez créé un rôle IAM et défini l'ensemble minimal d'autorisations d'accès, vous pouvez créer un point de terminaison cible Amazon Timestream à l'aide de la console ou à l' AWS DMS aide de la commande contenue [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)dans le, `create-endpoint` avec la syntaxe JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

Les exemples suivants montrent comment créer et modifier un point de terminaison Timestream cible à l’aide de l’ AWS CLI.

**Commande de création d’un point de terminaison Timestream cible**

```
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,
}
```

**Commande de modification d’un point de terminaison Timestream cible**

```
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,
}
```

## Utilisation du mappage d’objet pour migrer des données vers une rubrique Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS utilise des règles de mappage de tables pour mapper les données de la source à la rubrique Timestream cible. Pour mapper des données à une rubrique cible, vous utilisez un type de règle de mappage de table appelé « mappage d’objet ». Vous utilisez le mappage d’objet pour définir la façon dont les enregistrements de données de la source sont mappés aux enregistrements de données publiés dans une rubrique Timestream. 

Les rubriques Timestream ne disposent pas d’une structure prédéfinie autre que le fait d’avoir une clé de partition.

**Note**  
Vous n’avez pas besoin d’utiliser le mappage d’objet. Vous pouvez utiliser un mappage de table standard pour différentes transformations. Cependant, le type de clé de partition suivra les comportements par défaut suivants :   
La clé primaire est utilisée comme clé de partition pour le chargement complet.
Si aucun paramètre de tâche parallel-apply n’est utilisé, `schema.table` est utilisé comme clé de partition pour la CDC.
Si des paramètres de tâche parallel-apply sont utilisés, la clé primaire est utilisée comme clé de partition pour la CDC.

Pour créer une règle de mappage d'objet, spécifiez `rule-type` comme `object-mapping`. Cette règle spécifie le type de mappage d'objet que vous souhaitez utiliser. La structure de la règle est la suivante.

```
{
    "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 prend actuellement en charge `map-record-to-record` et `map-record-to-document` en tant que seules valeurs valides pour le `rule-action` paramètre. Les `map-record-to-document` valeurs `map-record-to-record` et spécifient ce qui est AWS DMS fait par défaut aux enregistrements qui ne sont pas exclus de la liste d'`exclude-columns`attributs. Ces valeurs n'affectent en aucune façon les mappages d'attributs. 

Utilisez `map-record-to-record` lorsque vous migrez une base de données relationnelle vers une rubrique Timestream. Ce type de règle utilise la valeur `taskResourceId.schemaName.tableName` de la base de données relationnelle comme clé de partition dans la rubrique Timestream, et crée un attribut pour chaque colonne de la base de données source. Lors de l'utilisation`map-record-to-record`, pour toute colonne de la table source non répertoriée dans la liste d'`exclude-columns`attributs, AWS DMS crée un attribut correspondant dans le sujet cible. Cet attribut correspondant est créé que la colonne source soit ou non utilisée dans un mappage d'attribut. 

Une manière de comprendre `map-record-to-record` est de le voir en action. Dans cet exemple, imaginons que vous commencez avec une ligne de table d'une base de données relationnelle, présentant la structure et les données suivantes :


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

Pour migrer ces informations à partir d’un schéma nommé `Test` vers une rubrique Timestream, vous créez des règles pour mapper les données à la rubrique cible. La règle suivante illustre ce mappage. 

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

L’exemple ci-dessous illustre le format d’enregistrement obtenu avec une rubrique Timestream et une clé de partition (en l’occurrence, `taskResourceId.schemaName.tableName`) à l’aide de notre exemple de données dans la rubrique Timestream cible : 

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

## Limitations liées à l'utilisation d'Amazon Timestream comme cible pour AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

Les limites suivantes s’appliquent lorsque vous utilisez Amazon Timestream comme cible :
+ **Dimensions et horodatages :** Timestream utilise les dimensions et les horodatages des données sources comme clé primaire composite, et ne vous autorise pas à mettre à jour ces valeurs. Cela signifie que si vous modifiez l’horodatage ou les dimensions d’un enregistrement dans la base de données source, la base de données Timestream essaiera de créer un nouvel enregistrement. Il est donc possible que si vous modifiez la dimension ou l'horodatage d'un enregistrement afin qu'ils correspondent à ceux d'un autre enregistrement existant, vous mettiez AWS DMS à jour les valeurs de l'autre enregistrement au lieu de créer un nouvel enregistrement ou de mettre à jour l'enregistrement correspondant précédent.
+ **Commandes DDL :** La version actuelle AWS DMS ne prend en charge que `CREATE TABLE` les commandes `DROP TABLE` DDL.
+ **Limites des enregistrements :** Timestream impose des limites pour les enregistrements (taille des enregistrements et des mesures, par exemple). Pour plus d’informations, consultez [Quotas](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) dans le [Guide du développeur Amazon Timestream](https://docs.aws.amazon.com/).
+ **Suppression des enregistrements et valeurs nulles :** Timestream ne prend pas en charge la suppression des enregistrements. Pour faciliter la migration des enregistrements supprimés de la source, AWS DMS efface les champs correspondants dans les enregistrements de la base de données cible Timestream. AWS DMS modifie les valeurs des champs de l'enregistrement cible correspondant avec **0** pour les champs numériques, **null** pour les champs de texte et **faux** pour les champs booléens.
+ Timestream en tant que cible ne prend pas en charge les sources qui ne sont pas des bases de données relationnelles (SGBDR).
+ AWS DMS ne prend en charge Timestream en tant que cible que dans les régions suivantes :
  + USA Est (Virginie du Nord)
  + USA Est (Ohio)
  + USA Ouest (Oregon)
  + Europe (Irlande)
  + Europe (Francfort)
  + Asie-Pacifique (Sydney)
  + Asia Pacific (Tokyo)
+ Timestream en tant que cible ne prend pas en charge la valeur `TRUNCATE_BEFORE_LOAD` pour le paramètre `TargetTablePrepMode`. Nous vous recommandons d’utiliser `DROP_AND_CREATE` pour ce paramètre.

# Utilisation d'Amazon RDS pour Db2 et d'IBM Db2 LUW comme cible pour AWS DMS
<a name="CHAP_Target.DB2"></a>

Vous pouvez migrer des données vers une base de données Amazon RDS pour DB2 ou une base de données DB2 locale à partir d'une base de données DB2 LUW en utilisant (). AWS Database Migration Service AWS DMS

Pour plus d'informations sur les versions de DB2 LUW prises AWS DMS en charge en tant que cible, consultez. [Objectifs pour AWS DMS](CHAP_Introduction.Targets.md)

Vous pouvez utiliser le protocole SSL pour chiffrer les connexions entre votre point de terminaison Db2 LUW et l'instance de réplication. Pour plus d’informations sur l’utilisation de SSL avec un point de terminaison Db2 LUW, consultez [Utilisation du protocole SSL avec AWS Database Migration Service](CHAP_Security.SSL.md).

## Limitations liées à l'utilisation de Db2 LUW comme cible pour AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

Les limitations suivantes s'appliquent lors de l'utilisation de la base de données DB2 LUW comme cible pour. AWS DMS Pour connaître les limites d’utilisation de Db2 LUW en tant que source, consultez [Limitations liées à l'utilisation de DB2 LUW comme source pour AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations).
+ AWS DMS prend uniquement en charge Db2 LUW en tant que cible lorsque la source est Db2 LUW ou Db2 for z/OS.
+ L’utilisation de Db2 LUW en tant que cible ne prend pas en charge les réplications en mode LOB complet.
+ L’utilisation de DB2 LUW en tant que cible ne prend pas en charge le type de données XML pendant la phase de chargement complet. Il s’agit d’une limite de l’utilitaire IBM dbload. Pour plus d’informations, consultez [Utilitaire dbload](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) dans la documentation *Serveurs IBM Informix*.
+ AWS DMS tronque les champs BLOB avec des valeurs correspondant au guillemet double («). Il s’agit d’une limite de l’utilitaire IBM dbload. 
+ AWS DMS ne prend pas en charge l'option de chargement complet en parallèle lors de la migration vers une cible DB2 LUW dans la version 3.5.3 de DMS. Cette option est disponible à partir de la version 3.5.4 ou ultérieure de DMS.

## Paramètres du point de terminaison lors de l'utilisation de DB2 LUW comme cible pour AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

Vous pouvez utiliser des paramètres de point de terminaison pour configurer votre base de données Db2 LUW cible comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la AWS DMS console ou à l'aide de la `create-endpoint` commande dans le [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), avec la syntaxe `--ibm-db2-settings '{"EndpointSetting": "value", ...}'` JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Db2 LUW en tant que cible sont indiqués dans le tableau suivant.


| Nom | Description | 
| --- | --- | 
|  `KeepCsvFiles`  |  Si c'est vrai, AWS DMS enregistre tous les fichiers .csv sur la cible DB2 LUW qui ont été utilisés pour répliquer les données. DMS utilise ces fichiers à des fins d’analyse et de résolution des problèmes.  | 
|  `LoadTimeout`  |  Durée (en millisecondes) avant l'expiration des opérations effectuées AWS DMS par DMS sur la cible Db2. La valeur par défaut est de 1 200 (20 minutes).  | 
|  `MaxFileSize`  |  Spécifie la taille maximale (en Ko) des fichiers .csv utilisés pour transférer des données vers Db2 LUW.  | 
|  `WriteBufferSize`  |  Taille (en Ko) du tampon d’écriture de fichier en mémoire utilisé lors de la génération des fichiers .csv sur le disque local au niveau de l’instance de réplication DMS. La valeur par défaut est 1 024 (1 Mo).  | 