

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Destinos para la migración de datos
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) puede utilizar muchas de las bases de datos más populares como destino para la replicación de datos. El destino puede estar en una instancia de Amazon Elastic Compute Cloud (Amazon EC2), una instancia de Amazon Relational Database Service (Amazon RDS) o una base de datos local. 

Para obtener una lista completa de los destinos válidos, consulte [Destinos para AWS DMS](CHAP_Introduction.Targets.md).

**nota**  
AWS DMS no admite la migración entre AWS regiones para los siguientes tipos de puntos finales de destino:  
Amazon DynamoDB
 OpenSearch Servicio Amazon
Amazon Kinesis Data Streams
Amazon Aurora PostgreSQL Limitless está disponible como destino para (). AWS Database Migration Service AWS DMS Para obtener más información, consulte [Uso de una base de datos PostgreSQL como destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) para. AWS Database Migration Service

**Topics**
+ [Uso de una base de datos Oracle como destino para AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Uso de una base de datos de Microsoft SQL Server como destino para AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Uso de una base de datos PostgreSQL como destino para AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Usar una base de datos compatible con MySQL como destino para AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Uso de una base de datos de Amazon Redshift como destino para AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Uso de una base de datos SAP ASE como objetivo para AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Uso de Amazon S3 como objetivo para AWS Database Migration Service](CHAP_Target.S3.md)
+ [Uso de una base de datos de Amazon DynamoDB como destino para AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Uso de Amazon Kinesis Data Streams como objetivo para AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Uso de Apache Kafka como objetivo para AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Utilizar un clúster OpenSearch de Amazon Service como objetivo para AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Uso de Amazon DocumentDB como destino para AWS Database Migration Service](CHAP_Target.DocumentDB.md)
+ [Uso de Amazon Neptune como objetivo para AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Uso de Redis OSS como objetivo para AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Uso de Babelfish como objetivo para AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Uso de Amazon Timestream como objetivo para AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Uso de Amazon RDS para Db2 e IBM Db2 LUW como destino para AWS DMS](CHAP_Target.DB2.md)

# Uso de una base de datos Oracle como destino para AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

Puede migrar los datos a los destinos de las bases de AWS DMS datos Oracle desde otra base de datos Oracle o desde una de las otras bases de datos compatibles. Puede utilizar la Capa de conexión segura (SSL) para cifrar las conexiones entre el punto de enlace de Oracle y la instancia de replicación. Para obtener más información sobre el uso de SSL con un punto final de Oracle, consulte[Uso de SSL con AWS Database Migration Service](CHAP_Security.SSL.md). AWS DMS también admite el uso del cifrado transparente de datos (TDE) de Oracle para cifrar los datos en reposo en la base de datos de destino, ya que el TDE de Oracle no requiere una clave de cifrado ni una contraseña para escribir en la base de datos.

Para obtener información sobre las versiones de Oracle AWS DMS compatibles como destino, consulte. [Objetivos para AWS DMS](CHAP_Introduction.Targets.md) 

Al utilizar Oracle como destino, suponemos que los datos deberían migrarse al esquema o usuario que se utiliza para la conexión de destino. Si desea migrar datos a otro esquema, utilice la transformación de esquemas. Por ejemplo, suponga que su punto de enlace de destino se conecta con el usuario `RDSMASTER` y desea migrar desde el usuario `PERFDATA1` a `PERFDATA2`. En este caso, cree una transformación tal y como la siguiente.

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

Al utilizar Oracle como destino, AWS DMS migra todas las tablas e índices a los espacios de tablas e índices predeterminados del destino. Si desea migrar tablas e índices a distintos espacios de tablas de tablas e índices, utilice una transformación de espacio de tabla para hacerlo. Por ejemplo, supongamos que tiene un conjunto de tablas en el esquema `INVENTORY` asignado a algunos espacios de tabla en el origen de Oracle. Para la migración, desea asignar todas estas tablas a un único espacio de tabla `INVENTORYSPACE` en el destino. En este caso, cree una transformación tal y como la siguiente.

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

Para obtener más información sobre transformaciones, consulte [Especificación de reglas de selección de tablas y transformaciones mediante JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Si Oracle es origen y destino, puede conservar las asignaciones de espacio de tabla de índice o de tabla existentes configurando el atributo de conexión adicional de origen de Oracle, `enableHomogenousTablespace=true`. Para obtener más información, consulte [Configuración del punto final cuando se utiliza Oracle como fuente de AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)

Para obtener más información sobre cómo trabajar con bases de datos Oracle como destino AWS DMS, consulte las siguientes secciones: 

**Topics**
+ [Limitaciones de Oracle como objetivo para AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Privilegios de la cuenta de usuario necesarios para utilizar Oracle como destino](#CHAP_Target.Oracle.Privileges)
+ [Configurar una base de datos Oracle como destino para AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Configuración del punto final cuando se utiliza Oracle como destino para AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Tipos de datos de destino para Oracle](#CHAP_Target.Oracle.DataTypes)

## Limitaciones de Oracle como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Las restricciones al utilizar Oracle como destino para la migración de datos son las siguientes:
+ AWS DMS no crea un esquema en la base de datos Oracle de destino. Usted tiene que crear los esquemas que desee en la base de datos de Oracle de destino. El nombre de esquema ya tiene que existir para el destino de Oracle. Las tablas del esquema de origen se importan al usuario o esquema, que se AWS DMS utiliza para conectarse a la instancia de destino. Para migrar varios esquemas, puede crear varias tareas de replicación. También puede migrar los datos a diferentes esquemas de un destino. Para ello, debe utilizar las reglas de transformación del esquema en las asignaciones de AWS DMS tablas.
+ AWS DMS no admite la `Use direct path full load` opción para tablas con INDEXTYPE CONTEXT. Como alternativa, puede utilizar la carga de matriz. 
+ Con la opción de aplicación optimizada por lotes, la carga en la tabla de cambios netos utiliza una ruta directa, que no admite el tipo XML. Como alternativa, puede utilizar el modo de aplicación transaccional.
+ Las cadenas vacías migradas desde bases de datos de origen pueden ser tratadas de manera diferente por el destino de Oracle (convertidas en cadenas de espacio, por ejemplo). Esto puede provocar que la AWS DMS validación notifique una discrepancia.
+ Puede expresar el número total de columnas por tabla admitidas en el modo de aplicación optimizada por lotes mediante la siguiente fórmula:

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

  Por ejemplo, si la tabla original tiene 25 columnas y su clave principal consta de 5 columnas, el número total de columnas es 55. Si una tabla supera el número de columnas admitido, todos los cambios se aplican en el one-by-one modo.
+ AWS DMS no es compatible con Autonomous DB en Oracle Cloud Infrastructure (OCI).
+ En el modo de aplicación transaccional, un destino de Oracle puede procesar instrucciones DML de hasta 32 KB de tamaño. Si bien este límite es suficiente para muchos casos de uso, las instrucciones DML que superen los 32 KB fallarán y mostrarán el error: “ORA-01460: unimplemented or unreasonable conversion requested”. Para resolver este problema, debe activar la característica de aplicación por lotes mediante la configuración de la tarea `BatchApplyEnabled` en `true`. La aplicación por lotes reduce el tamaño total de la instrucción, lo que le permite superar el límite de 32 KB. Para obtener más información, consulte [Configuración de las tareas de los metadatos de destino](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS La carga completa de la ruta directa para las tablas de LOB puede fallar con el error ORA-39777 debido a los requisitos especiales de manejo de los datos de LOB. Este error se produce durante el proceso de carga de la ruta directa y puede interrumpir las tareas de migración que afectan a las columnas LOB. Para resolverlo, desactive la configuración de `useDirectPathFullLoad` en el punto de conexión de destino y vuelva a intentar la operación de carga.

## Privilegios de la cuenta de usuario necesarios para utilizar Oracle como destino
<a name="CHAP_Target.Oracle.Privileges"></a>

Para utilizar un destino de Oracle en una AWS Database Migration Service tarea, conceda los siguientes privilegios en la base de datos de Oracle. Puede concederlos a la cuenta de usuario especificada en las definiciones de la base de datos Oracle para 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 
+ ELIMINAR CUALQUIER TABLA

Para los requisitos siguientes, conceda estos privilegios adicionales:
+ Para utilizar una lista de tablas específica, otorgue SELECT y ALTER en cualquier tabla replicada.
+ Para permitir a un usuario crear una tabla en un espacio de tabla predeterminado, conceda el privilegio GRANT UNLIMITED TABLESPACE.
+ Para el inicio de sesión, conceda el privilegio CREATE SESSION.
+ Si utiliza una ruta directa (que es la predeterminada para carga completa), `GRANT LOCK ANY TABLE to dms_user;`.
+ Si el esquema es diferente al utilizar el modo de preparación de tablas “DROP and CREATE”, `GRANT CREATE ANY INDEX to dms_user;`.
+ En algunos escenarios de carga completa, puede elegir la opción “DROP and CREATE table” o “TRUNCATE before loading”, donde un esquema de tabla de destino es distinto al del usuario DMS. En este caso, conceda el privilegio DROP ANY TABLE.
+ Para almacenar los cambios en tablas de cambios o en una tabla de auditoría donde el esquema de la tabla de destino sea diferente al del usuario DMS, conceda los privilegios CREATE ANY TABLE y CREATE ANY INDEX.
+ Para validar las columnas de LOB con la característica de validación, conceda el privilegio de EXECUTE `SYS.DBMS_CRYPTO` al usuario de DMS.

### Los privilegios de lectura necesarios para la AWS Database Migration Service base de datos de destino
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

La cuenta AWS DMS de usuario debe tener permisos de lectura para las siguientes tablas de DBA:
+ 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 en DBA\$1TRIGGERS
+ SELECT on SYS.DBA\$1REGISTRY

Si alguno de los privilegios necesarios no se puede conceder a V\$1xxx, concédalos a V\$1\$1xxx.

### Evaluaciones previas a la migración
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Para usar las evaluaciones previas a la migración incluidas en [Evaluaciones de Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) con Oracle como destino, debe agregar los siguientes permisos a la cuenta del usuario especificado en el punto de conexión de destino de la base de datos de Oracle:

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

## Configurar una base de datos Oracle como destino para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Antes de utilizar una base de datos Oracle como destino de migración de datos, debe proporcionar una cuenta de usuario de Oracle a AWS DMS. La cuenta de usuario debe tener read/write privilegios en la base de datos Oracle, tal y como se especifica en[Privilegios de la cuenta de usuario necesarios para utilizar Oracle como destino](#CHAP_Target.Oracle.Privileges).

## Configuración del punto final cuando se utiliza Oracle como destino para AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Oracle de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)comando de la sintaxis `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Oracle como destino.

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

## Tipos de datos de destino para Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Una base de datos Oracle de destino con la que se utiliza AWS DMS es compatible con la mayoría de los tipos de datos de Oracle. La siguiente tabla muestra los tipos de datos de destino de Oracle que se admiten cuando se utilizan AWS DMS y el mapeo predeterminado a partir de AWS DMS los tipos de datos. Para obtener más información sobre cómo ver el tipo de datos que se asigna desde el origen, consulte la sección para el origen que esté utilizando.


|  AWS DMS tipo de datos  |  Tipos de datos de Oracle  | 
| --- | --- | 
|  BOOLEANO  |  NUMBER (1)  | 
|  BYTES  |  RAW (longitud)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (escala)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  Con indicación de fecha: DATE  Con indicación de tiempo: TIMESTAMP  Con indicación de marca de tiempo: TIMESTAMP  Con indicación de timestamp\$1with\$1timezone: TIMESTAMP WITH TIMEZONE  Con indicación de timestamp\$1with\$1local\$1timezone: TIMESTAMP WITH LOCAL TIMEZONE Con indicación de interval\$1year\$1to\$1month: INTERVAL YEAR TO MONTH  Con indicación de interval\$1day\$1to\$1second: INTERVAL DAY TO SECOND  Si longitud > 4000: CLOB En todos los demás casos: VARCHAR2 (longitud)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Si longitud > 2000: NCLOB En todos los demás casos: NVARCHAR2 (longitud)  | 
|  BLOB  |  BLOB Para usar este tipo de datos con AWS DMS, debe habilitar el uso de BLOBs para una tarea específica. Los tipos de datos BLOB se admiten únicamente en las tablas que incluyen una clave principal  | 
|  CLOB  |  CLOB Para usar este tipo de datos con AWS DMS, debe habilitar el uso de CLOBs para una tarea específica. En la captura de datos de cambios (CDC), los tipos de datos CLOB solo se admiten en tablas que incluyen una clave principal. STRING Un tipo de VARCHAR2 datos de Oracle de la fuente con un tamaño declarado superior a 4000 bytes se asigna a través del AWS DMS CLOB a una cadena del destino de Oracle.  | 
|  NCLOB  |  NCLOB Para usar este tipo de datos con AWS DMS, debe habilitar el uso de NCLOBs para una tarea específica. En la CDC, los tipos de datos NCLOB se admiten únicamente en las tablas que incluyen una clave principal. WSTRING Un tipo de VARCHAR2 datos de Oracle en el origen con un tamaño declarado superior a 4000 bytes se asigna a través del AWS DMS NCLOB a un WSTRING del destino de Oracle.   | 
| XMLTYPE |  El tipo de datos de destino XMLTYPE solo es relevante en las tareas de replicación. Oracle-to-Oracle Cuando la base de datos de origen sea Oracle, los tipos de datos de origen se replican tal cual en el destino de Oracle. Por ejemplo, un tipo de datos XMLTYPE en el origen se crea como un tipo de datos XMLTYPE en el destino.  | 

# Uso de una base de datos de Microsoft SQL Server como destino para AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

Puede migrar datos a bases de datos de Microsoft SQL Server mediante AWS DMS. Con una base de datos de SQL Server como destino, podrá migrar datos desde otra base de datos de SQL Server o desde una de las bases de datos compatibles.

Para obtener información sobre las versiones de SQL Server AWS DMS compatibles como destino, consulte[Objetivos para AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS es compatible con las ediciones locales y Amazon RDS de Enterprise, Standard, Workgroup y Developer.

Para obtener información adicional sobre cómo trabajar con bases de datos de destino de SQL Server AWS DMS y las bases de datos de destino, consulte lo siguiente.

**Topics**
+ [Limitaciones del uso de SQL Server como destino para AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Requisitos de seguridad cuando se utiliza SQL Server como objetivo para AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Configuración del punto final cuando se utiliza SQL Server como destino para AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Tipos de datos de destino para Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Limitaciones del uso de SQL Server como destino para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

Cuando se utiliza una base de datos de SQL Server como destino para AWS DMS, se aplican las siguientes restricciones:
+ Al crear manualmente una tabla de destino de SQL Server con una columna calculada, no se admite la replicación de carga completa al utilizar la utilidad de copia en masa de BCP. Para utilizar la replicación de carga completa, desactive la carga de BCP configurando el atributo de conexión adicional (ECA) `'useBCPFullLoad=false'` en el punto de conexión. Para obtener información sobre ECAs la configuración de los puntos finales, consulte[Creación de puntos de enlace de origen y destino](CHAP_Endpoints.Creating.md). Para obtener más información sobre cómo trabajar con BCP, consulte la [documentación de 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).
+ Al replicar tablas con tipos de datos espaciales de SQL Server (GEOMETRÍA y GEOGRAFÍA), AWS DMS reemplaza cualquier identificador de referencia espacial (SRID) que haya insertado por el SRID predeterminado. El SRID predeterminado es 0 para GEOMETRY y 4326 para GEOGRAPHY.
+ No se permite usar tablas temporales. La migración de tablas temporales podría funcionar con una tarea de solo replicación en modo de aplicación transaccional si dichas tablas se crean manualmente en el destino.
+ Actualmente, `boolean` los tipos de datos de una fuente de PostgreSQL se migran a SQLServer un destino como `bit` el tipo de datos con valores incoherentes. 

  Para resolver este problema, haga lo siguiente:
  + Cree previamente la tabla con un tipo de `VARCHAR(1)` datos para la columna (o deje que AWS DMS cree la tabla). A continuación, haga que el procesamiento descendente trate la "F" como falso y la "T" como verdadero.
  + Para evitar tener que cambiar el procesamiento posterior, agregue una regla de transformación a la tarea para cambiar los valores “F” a “0” y los valores “T” a 1 y guárdelos como el tipo de datos de bits del servidor SQL.
+ AWS DMS no admite el procesamiento de cambios para establecer la nulabilidad de las columnas (se usa la `ALTER COLUMN [SET|DROP] NOT NULL` cláusula con `ALTER TABLE` declaraciones).
+ No se admite la autenticación de Windows.

## Requisitos de seguridad cuando se utiliza SQL Server como objetivo para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

A continuación se describen los requisitos de seguridad para su uso AWS DMS con un destino de Microsoft SQL Server:
+ La cuenta AWS DMS de usuario debe tener al menos el rol de `db_owner` usuario en la base de datos de SQL Server a la que se está conectando.
+ Un administrador del sistema de SQL Server deberá proporcionar este permiso a todas las cuentas de usuario de AWS DMS .

## Configuración del punto final cuando se utiliza SQL Server como destino para AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de SQL Server de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintaxis `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con SQL Server como destino.

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

## Tipos de datos de destino para Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

En la siguiente tabla se muestran los tipos de datos de destino de Microsoft SQL Server que se admiten cuando se utilizan AWS DMS y la asignación predeterminada a partir de AWS DMS los tipos de datos. Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de datos  |  Tipos de datos de SQL Server  | 
| --- | --- | 
|  BOOLEANO  |  TINYINT  | 
|  BYTES  |  VARBINARY (longitud)  | 
|  DATE  |  Para SQL Server 2008 y versiones superiores, utilice DATE. Para versiones anteriores, si la escala es 3 o inferior, utilice DATETIME. En el resto de casos, utilice VARCHAR (37).  | 
|  TIME  |  Para SQL Server 2008 y versiones posteriores, utilice DATETIME2 (%d). Para versiones anteriores, si la escala es 3 o inferior, utilice DATETIME. En el resto de casos, utilice VARCHAR (37).  | 
|  DATETIME  |  Para SQL Server 2008 y versiones posteriores, utilice DATETIME2 (escalar).  Para versiones anteriores, si la escala es 3 o inferior, utilice DATETIME. En el resto de casos, utilice VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  Si la columna es una columna de fecha u hora, haga lo siguiente:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.SQLServer.html) Si la columna no es una columna de fecha o de hora, utilice VARCHAR (longitud).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (longitud)  | 
|  BLOB  |  VARBINARY (máx.) IMAGE Para usar este tipo de datos con AWS DMS, debe habilitar el uso de BLOBs para una tarea específica. AWS DMS solo admite los tipos de datos BLOB en las tablas que incluyen una clave principal.  | 
|  CLOB  |  VARCHAR (máx.) Para usar este tipo de datos con AWS DMS, debe habilitar el uso de CLOBs para una tarea específica. En la captura de datos de cambios (CDC), AWS DMS admite tipos de datos CLOB solo en tablas que incluyan una clave principal.  | 
|  NCLOB  |  NVARCHAR (máx.) Para usar este tipo de datos con AWS DMS, debe habilitar el uso de NCLOBs para una tarea específica. Durante los CDC, solo AWS DMS admite los tipos de datos del NCLOB en las tablas que incluyen una clave principal.  | 

# Uso de una base de datos PostgreSQL como destino para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Puede migrar datos a bases AWS DMS de datos PostgreSQL desde otra base de datos PostgreSQL o desde una de las otras bases de datos compatibles. 

Para obtener información sobre las versiones de PostgreSQL AWS DMS compatibles como destino, consulte. [Objetivos para AWS DMS](CHAP_Introduction.Targets.md)

**nota**  
Amazon Aurora sin servidor está disponible como destino para Amazon Aurora con compatibilidad de PostgreSQL. Para obtener más información sobre Amazon Aurora sin servidor, consulte [Uso de Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) en la *Guía del usuario de Amazon Aurora*.
Los clústeres de base de datos de Aurora sin servidor solo son accesibles desde una Amazon VPC y no pueden usar una [dirección IP pública](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Por lo tanto, si pretende tener una instancia de replicación en una región diferente a la de Aurora PostgreSQL sin servidor, debe configurar la [interconexión con VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). De lo contrario, compruebe la disponibilidad de las [regiones](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) de Aurora PostgreSQL sin servidor y decida usar una de esas regiones para Aurora PostgreSQL sin servidor y para la instancia de replicación.
La capacidad de Babelfish está integrada en Amazon Aurora y no tiene costo adicional. Para obtener más información, consulte [Uso de Babelfish para Aurora PostgreSQL como destino para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish).

AWS DMS adopta un table-by-table enfoque al migrar los datos del origen al destino en la fase de carga completa. No es posible garantizar el orden de la tabla durante la fase de carga completa. Las tablas no estarán sincronizadas durante la fase de carga completa y mientras se estén aplicando transacciones almacenadas en la caché para tablas individuales. Como resultado, las limitaciones de integridad referencial activas puede derivar en errores de tareas durante la fase de carga completa.

En PostgreSQL, se implementan claves externas (límites de integridad referencial) mediante disparadores. Durante la fase de carga completa, AWS DMS carga cada tabla de una en una. Recomendamos encarecidamente que deshabilite las restricciones de clave externa durante una carga completa, utilizando uno de los siguientes métodos:
+ Deshabilite temporalmente todos los disparadores de la instancia y finalice la carga completa.
+ Utilice el parámetro `session_replication_role` en PostgreSQL.

En cualquier momento, un disparador puede estar en uno de los siguientes estados: `origin`, `replica`, `always` o bien `disabled`. Cuando se establece el parámetro `session_replication_role` en `replica`, solo los disparadores con el estado `replica` estarán activos y se disparan cuando se llaman. De lo contrario, los disparadores permanecen inactivos. 

PostgreSQL tiene un mecanismo a prueba de errores para evitar que se trunque una tabla, incluso cuando se ha establecido `session_replication_role`. Puede utilizar esto como una alternativa a la inhabilitación de disparadores para ayudar a que la carga completa se ejecute hasta su finalización. Para ello, establezca el modo de preparación de la tabla de destino en `DO_NOTHING`. De lo contrario, las operaciones DROP y TRUNCATE fallan cuando hay limitaciones de clave externa.

En Amazon RDS, puede establecer este parámetro mediante un grupo de parámetros. Para una instancia PostgreSQL que se ejecute en Amazon EC2, puede establecer el parámetro directamente.



Para obtener información adicional sobre cómo trabajar con una base de datos PostgreSQL como destino, consulte AWS DMS las siguientes secciones: 

**Topics**
+ [Limitaciones en el uso de PostgreSQL como objetivo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Limitaciones del uso de Amazon Aurora PostgreSQL Limitless como objetivo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Requisitos de seguridad al utilizar una base de datos PostgreSQL como destino para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Configuración de punto final y atributos de conexión adicionales (ECAs) cuando se utiliza PostgreSQL como destino para AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipos de datos de destino para PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Uso de Babelfish para Aurora PostgreSQL como objetivo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Limitaciones en el uso de PostgreSQL como objetivo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

Cuando se utiliza una base de datos de PostgreSQL como destino para AWS DMS, se aplican las siguientes restricciones:
+ Para las migraciones heterogéneas, el tipo de datos JSON se convierte internamente al tipo de datos Native CLOB.
+ En una migración de Oracle a PostgreSQL, si una columna de Oracle contiene un carácter NULO (valor hexadecimal U\$10000) AWS DMS , convierte el carácter NULL en un espacio (valor hexadecimal U\$10020). Esto se debe a una restricción de PostgreSQL.
+ AWS DMS no admite la replicación en una tabla con un índice único creado con la función de coalesce.
+ Si las tablas utilizan secuencias, actualice el valor de cada secuencia `NEXTVAL` de la base de datos de destino después de detener la replicación desde la base de datos de origen. AWS DMS copia los datos de la base de datos de origen, pero no migra las secuencias al destino durante la replicación en curso.

## Limitaciones del uso de Amazon Aurora PostgreSQL Limitless como objetivo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

Se aplican las siguientes limitaciones cuando se utiliza Amazon Aurora PostgreSQL Limitless como destino para: AWS DMS
+ AWS DMS La validación de datos no es compatible con Amazon Aurora PostgreSQL Limitless.
+ AWS DMS migra las tablas de origen como tablas estándar, que no están distribuidas. Tras la migración, puede convertir estas tablas estándar en tablas sin límites siguiendo la guía de conversión oficial.

## Requisitos de seguridad al utilizar una base de datos PostgreSQL como destino para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Por motivos de seguridad, la cuenta de usuario utilizada para la migración de datos debe ser un usuario registrado en cualquier base de datos de PostgreSQL que utilice como destino.

Su terminal de destino de PostgreSQL requiere permisos de usuario mínimos para ejecutar AWS DMS una migración; consulte los siguientes ejemplos.

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

O bien

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

## Configuración de punto final y atributos de conexión adicionales (ECAs) cuando se utiliza PostgreSQL como destino para AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Puede utilizar la configuración del punto final y los atributos de conexión adicionales (ECAs) para configurar la base de datos de destino de PostgreSQL. 

Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintaxis `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Se especifica ECAs mediante el `ExtraConnectionAttributes` parámetro de su punto final.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con PostgreSQL como destino.

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

## Tipos de datos de destino para PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

El punto final de la base de datos PostgreSQL AWS DMS es compatible con la mayoría de los tipos de datos de bases de datos PostgreSQL. La siguiente tabla muestra los tipos de datos de destino de las bases de datos PostgreSQL que se admiten cuando se AWS DMS utilizan y el mapeo AWS DMS predeterminado a partir de los tipos de datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte. [Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS DMS tipo de datos  |  Tipos de datos de PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEANO  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Si la escala es de 0 a 6, utilice TIMESTAMP. Si la escala es de 7 a 9, utilice VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Si la longitud es de 1 a 21 845, utilice VARCHAR (longitud en bytes).  Si la longitud es de 21 846 a 2 147 483 647, utilice VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Si la longitud es de 1 a 21 845, utilice VARCHAR (longitud en bytes).  Si la longitud es de 21 846 a 2 147 483 647, utilice VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**nota**  
Al replicar desde una fuente de PostgreSQL AWS DMS , crea la tabla de destino con los mismos tipos de datos para todas las columnas, excepto las columnas con tipos de datos definidos por el usuario. En estos casos, el tipo de datos se crea como de "caracteres variables" en el destino.

## Uso de Babelfish para Aurora PostgreSQL como objetivo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

Puede migrar las tablas de origen de SQL Server a un destino de Babelfish para Amazon Aurora PostgreSQL mediante AWS Database Migration Service. Con Babelfish, Aurora PostgreSQL entiende T-SQL, el dialecto SQL patentado por Microsoft SQL Server y admite el mismo protocolo de comunicaciones. Por lo tanto, las aplicaciones escritas para SQL Server ahora pueden funcionar con Aurora con menos cambios de código. La capacidad de Babelfish está integrada en Amazon Aurora y no tiene costo adicional. Puede activar Babelfish en el clúster de Amazon Aurora desde la consola de Amazon RDS.

**Al crear el punto final de AWS DMS destino mediante los comandos de AWS DMS consola, API o CLI, especifique el motor de destino como **Amazon Aurora PostgreSQL** y asigne a la base de datos el nombre babelfish\$1db.** En la sección **Configuración de punto de conexión**, agregue ajustes para establecer `DatabaseMode` en `Babelfish` y `BabelfishDatabaseName` en el nombre de la base de datos de Babelfish T-SQL de destino.

### Agregar reglas de transformación a la tarea de migración
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Al definir una tarea de migración para un destino de Babelfish, debe incluir reglas de transformación que garanticen que DMS utilice las tablas Babelfish de T-SQL creadas previamente en la base de datos de destino.

En primer lugar, agregue una regla de transformación a la tarea de migración que ponga todos los nombres de las tablas en minúsculas. Babelfish guarda en minúsculas en el catálogo `pg_class` de PostgreSQL los nombres de las tablas que se crean con T-SQL. Sin embargo, cuando tiene tablas de SQL Server con nombres en mayúsculas y minúsculas, DMS crea las tablas con los tipos de datos nativos de PostgreSQL en lugar de los tipos de datos compatibles con T-SQL. Por ese motivo, asegúrese de agregar una regla de transformación que ponga todos los nombres de las tablas en minúsculas. Tenga en cuenta que los nombres de las columnas no deben transformarse a minúsculas.

A continuación, si utilizó el modo de migración de bases de datos múltiples al definir el clúster, agregue una regla de transformación que cambie el nombre del esquema original de SQL Server. Asegúrese de cambiar el nombre del esquema de SQL Server para incluir el nombre de la base de datos T-SQL. Por ejemplo, si el nombre del esquema de SQL Server original es dbo y el nombre de la base de datos de T-SQL es mydb, cambie el nombre del esquema a mydb\$1dbo mediante una regla de transformación.

**nota**  
Cuando se utiliza Babelfish para Aurora PostgreSQL 16 o posterior, el modo de migración predeterminado es “mutidatabase”. Al ejecutar tareas de migración de DMS, asegúrese de revisar el parámetro del modo de migración y actualizar las reglas de transformación si es necesario.

Si utiliza el modo de base de datos única, no necesita una regla de transformación para cambiar el nombre de los esquemas. Los nombres de los esquemas tienen un one-to-one mapeo con la base de datos T-SQL de destino en Babelfish.

El siguiente ejemplo de regla de transformación pone todos los nombres de las tablas en minúsculas y cambia el nombre del esquema original de SQL Server de `dbo` a `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": []
   }
]
}
```

### Restricciones al uso de un punto de conexión de destino de PostgreSQL con tablas de Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

Las siguientes restricciones se aplican al usar un punto de conexión de destino de PostgreSQL con tablas de Babelfish:
+ Para el modo de **Preparación de tablas de destino**, utilice solo los modos **No hacer nada** o **Truncar**. No utilice el modo **Borrar tablas en el destino**. En ese modo, DMS crea las tablas como tablas de PostgreSQL que es posible que T-SQL no reconozca.
+ AWS DMS no admite el tipo de datos sql\$1variant.
+ Babelfish en el punto de conexión de Postgres no admite los tipos de datos `HEIRARCHYID`, `GEOMETRY` (anterior a 3.5.4) y `GEOGRAPHY` (anterior a 3.5.4). Para migrar estos tipos de datos, puede agregar reglas de transformación para convertir el tipo de datos a wstring(250).
+ Babelfish solo admite la migración de los tipos de datos `BINARY`, `VARBINARY` e `IMAGE` con el tipo de datos `BYTEA`. Para las versiones anteriores de Aurora PostgreSQL, puede usar DMS para migrar estas tablas a un [punto de conexión de destino de Babelfish](CHAP_Target.Babelfish.md). No es necesario especificar una longitud para el tipo de datos `BYTEA`, como se muestra en el ejemplo siguiente.

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

  Cambie el tipo de datos T-SQL anterior por el tipo de datos `BYTEA` compatible con T-SQL.

  ```
  [Picture] BYTEA NULL
  ```
+ Para las versiones anteriores de Aurora PostgreSQL Babelfish, si crea una tarea de migración para la replicación continua de SQL Server a Babelfish mediante el punto de conexión de destino de PostgreSQL, debe asignar el tipo de datos `SERIAL` a cualquier tabla que utilice columnas `IDENTITY`. A partir de Aurora PostgreSQL (versión 15.3/14.8 y superiores) y Babelfish (versión 3.2.0 y más recientes), se admite la columna de identidad y ya no es necesaria para asignar el tipo de datos SERIAL. Para obtener más información, consulte [Uso de SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) en la sección Secuencias e identidad del *Manual de migración de SQL Server a Aurora PostgreSQL*. A continuación, cuando cree la tabla en Babelfish, cambie la definición de la columna de la siguiente manera.

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

  Cambia lo anterior por lo siguiente.

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

  Aurora PostgreSQL compatible con Babelfish crea una secuencia con la configuración predeterminada y agrega una restricción `NOT NULL` a la columna. La secuencia recién creada se comporta como una secuencia normal (incrementada en 1) y no tiene ninguna opción `SERIAL` compuesta.
+ Después de migrar los datos con tablas que utilizan columnas `IDENTITY` o el tipo de datos `SERIAL`, restablezca el objeto de secuencia basado en PostgreSQL en función del valor máximo de la columna. Después de realizar una carga completa de las tablas, utilice la siguiente consulta T-SQL para generar instrucciones que inicien el objeto de secuencia asociado.

  ```
  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 consulta genera una serie de instrucciones SELECT que se ejecutan para actualizar los valores máximos de IDENTITY y SERIAL.
+ Para las versiones de Babelfish anteriores a la 3.2, es posible que el **modo de LOB completo** provoque un error de la tabla. Si eso ocurre, cree una tarea independiente para las tablas que no se pudieron cargar. A continuación, utilice el **Modo de LOB limitado** para especificar el valor adecuado para el **Tamaño máximo de LOB (KB)**. Otra opción es establecer la configuración del atributo de conexión del punto de conexión de SQL Server `ForceFullLob=True`.
+ En las versiones de Babelfish anteriores a la 3.2, al realizar la validación de datos con tablas de Babelfish que no utilizan claves principales basadas en números enteros, se genera un mensaje de que no se puede encontrar una clave única adecuada. A partir de Aurora PostgreSQL (versión 15.3/14.8 y superiores) y Babelfish (versión 3.2.0 y superiores), se admite la validación de datos para claves principales que no sean números enteros. 
+ Debido a las diferencias de precisión en el número de decimales por segundo, DMS informa de errores de validación de datos en las tablas de Babelfish que utilizan tipos de datos `DATETIME`. Para suprimir esos errores, puede agregar el siguiente tipo de regla de validación para los tipos de datos `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"
       }
  ```

# Usar una base de datos compatible con MySQL como destino para AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

Puede migrar datos a cualquier base de datos compatible con MySQL utilizando AWS DMS cualquiera de los motores de datos de origen compatibles. AWS DMS Si va a migrar a una base de datos local compatible con MySQL, es AWS DMS necesario que el motor de origen resida en el ecosistema. AWS El motor puede estar en un servicio AWS gestionado, como Amazon RDS, Amazon Aurora o Amazon S3. O el motor puede estar en una base de datos autoadministrada en Amazon EC2. 

Puede utilizar SSL para cifrar las conexiones entre su punto de enlace compatible con MySQL y la instancia de replicación. Para obtener más información acerca de cómo utilizar SSL con un punto de enlace compatible con MySQL, consulte [Uso de SSL con AWS Database Migration Service](CHAP_Security.SSL.md). 

Para obtener información sobre las versiones de MySQL AWS DMS compatibles como destino, consulte[Objetivos para AWS DMS](CHAP_Introduction.Targets.md).

Puede utilizar las siguientes bases de datos compatibles con MySQL como destinos para: AWS DMS
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ Column Store de MariaDB
+ Amazon Aurora MySQL

**nota**  
Independientemente del motor de almacenamiento del origen (MyISAM, MEMORY, etc.), AWS DMS crea una tabla de destino compatible con MySQL como la tabla InnoDB de forma predeterminada.   
Si necesita una tabla con un motor de almacenamiento que no sea InnoDB, puede crear manualmente la tabla en el destino compatible con MySQL y migrar la tabla con la opción **Do nothing (No hacer nada)**. Para obtener más información, consulte [Configuración de tareas de carga completa](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Para obtener más información sobre cómo trabajar con las bases de datos compatibles con MySQL como destino para AWS DMS, consulte las secciones siguientes. 

**Topics**
+ [Usar cualquier base de datos compatible con MySQL como destino para AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Limitaciones en el uso de una base de datos compatible con MySQL como destino para AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Configuración de punto final cuando se utiliza una base de datos compatible con MySQL como destino para AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Tipos de datos de destino para MySQL](#CHAP_Target.MySQL.DataTypes)

## Usar cualquier base de datos compatible con MySQL como destino para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Antes de empezar a trabajar con una base de datos compatible MySQL como destino para AWS DMS, asegúrese de que cumple los siguientes requisitos previos:
+ Proporcione una cuenta de usuario AWS DMS que tenga read/write privilegios en la base de datos compatible con MySQL. Para crear los privilegios necesarios, ejecute los siguientes comandos.

  ```
  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>'@'%';
  ```
+ Durante la fase de migración de carga completa, debe desactivar las claves externas en las tablas de destino. Para deshabilitar las comprobaciones de claves externas en una base de datos compatible con MySQL durante una carga completa, puede añadir el siguiente comando a la sección de **atributos de conexión adicionales** de la AWS DMS consola de su punto final de destino.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Establezca el parámetro de base de datos `local_infile = 1` para permitir que AWS DMS cargue datos en la base de datos de destino.
+ Conceda los siguientes privilegios si utiliza las evaluaciones previas a la migración específicas de 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
  ```

## Limitaciones en el uso de una base de datos compatible con MySQL como destino para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Cuando se utiliza una base de datos MySQL como destino, AWS DMS no admite lo siguiente:
+ Las instrucciones del lenguaje de definición de datos (DDL): TRUNCATE PARTITION, DROP TABLE y RENAME TABLE.
+ Utilizar una instrucción `ALTER TABLE table_name ADD COLUMN column_name` para añadir columnas al inicio o en la mitad de una tabla.
+ Al cargar datos en un destino compatible con MySQL en una tarea de carga completa, AWS DMS no informa de los errores causados por restricciones en los registros de tareas, que pueden provocar errores clave duplicados o discrepancias con el número de registros. Esto se debe a la forma en que MySQL maneja los datos locales con el comando `LOAD DATA`. Asegúrese de hacer lo siguiente durante la fase de carga completa: 
  + Desactivar restricciones
  + Usa la AWS DMS validación para asegurarte de que los datos son coherentes.
+ Al actualizar el valor de una columna con el valor existente, las bases de datos compatibles con MySQL devuelven una advertencia `0 rows affected`. Aunque este comportamiento no es un error desde el punto de vista técnico, es diferente de la forma en que abordan la situación otros motores de base de datos. Por ejemplo, Oracle realiza una actualización de una fila. Para las bases de datos compatibles con MySQL, AWS DMS genera una entrada en la tabla de control awsdms\$1apply\$1exceptions y registra la siguiente advertencia.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ Aurora sin servidor está disponible como destino para Amazon Aurora versión 2, compatible con MySQL versión 5.7. (Seleccione la versión 2.07.1 de Aurora MySQL para poder usar Aurora sin servidor con la compatibilidad de MySQL 5.7). Para obtener más información sobre Aurora sin servidor, consulte [Uso de Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) en la *Guía del usuario de Amazon Aurora*.
+ AWS DMS no admite el uso de un punto final de lectura para Aurora o Amazon RDS, a menos que las instancias estén en modo grabable, es decir, que `innodb_read_only` los parámetros `read_only` y estén configurados en o. `0` `OFF` Para obtener más información acerca del uso de Amazon RDS y Aurora como objetivos, consulte lo siguiente:
  +  [Determinar a qué instancia de base de datos se ha conectado](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [Actualización de réplicas de lectura con MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Al replicar un tipo de datos TIME, una fracción del valor temporal no se replica.
+ Al replicar el tipo de datos TIME con un atributo de conexión adicional `loadUsingCSV=false`, el valor de tiempo se limita al rango `[00:00:00, 23:59:59]`.

## Configuración de punto final cuando se utiliza una base de datos compatible con MySQL como destino para AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino compatible con MySQL de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la `--my-sql-settings '{"EndpointSetting": "value", ...}'` sintaxis JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con MySQL como destino.

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

Puede utilizar atributos de conexión adicionales para configurar la base de datos de destino compatible con MySQL.

En la tabla siguiente se muestran los atributos de conexión adicionales que puede utilizar con MySQL como destino.

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

Como alternativa, puede usar el parámetro `AfterConnectScript` del comando `--my-sql-settings` para desactivar las comprobaciones de claves foráneas y especificar la zona horaria de la base de datos.

## Tipos de datos de destino para MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

La siguiente tabla muestra los tipos de datos de destino de la base de datos MySQL que se admiten cuando se utilizan AWS DMS y el mapeo predeterminado a partir de AWS DMS los tipos de datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de datos  |  Tipos de datos de MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEANO  | 
|  BYTES  |  Si la longitud es de 1 a 65 535, utilice VARBINARY (longitud).  Si la longitud es de 65 536 a 2 147 483 647, utilice LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  "Si la escala es => 0 y =< 6, utilice DATETIME (escala) Si la escala es => 7 y =< 9, utilice: VARCHAR (37)  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  Si la longitud es de 1 a 21 845, utilice VARCHAR (longitud). Si la longitud es de 21 846 a 2 147 483 647, utilice LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Si la longitud es de 1 a 32 767, utilice VARCHAR (longitud).  Si la longitud es de 32 768 a 2 147 483 647, utilice LONGTEXT.  | 
|  BLOB  |  Si la longitud es de 1 a 65 535, utilice BLOB. Si la longitud es de 65 536 a 2 147 483 647, utilice LONGBLOB. Si la longitud es 0, utilice LONGBLOB (compatibilidad completa con LOB).  | 
|  NCLOB  |  Si la longitud es de 1 a 65 535, utilice TEXT. Si la longitud es de 65 536 a 2 147 483 647, utilice LONGTEXT con ucs2 para CHARACTER SET. Si la longitud es 0, utilice LONGTEXT (compatibilidad completa con LOB) con ucs2 para CHARACTER SET.  | 
|  CLOB  |  Si la longitud es de 1 a 65 535, utilice TEXT. Si la longitud es de 65 536 a 2 147 483 647, utilice LONGTEXT. Si la longitud es 0, utilice LONGTEXT (compatibilidad completa con LOB).  | 

# Uso de una base de datos de Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Puede migrar datos a bases de datos de Amazon Redshift mediante. AWS Database Migration Service Amazon Redshift es un servicio de almacenamiento de datos administrado a escala de petabytes en la nube . Con una base de datos de Amazon Redshift como destino, puede migrar datos desde todas las demás bases de datos de origen compatibles.

Puede utilizar Amazon Redshift Serverless como destino para. AWS DMS Para obtener más información, consulte [Uso AWS DMS con Amazon Redshift Serverless como objetivoAmazon Redshift sin servidor](#CHAP_Target.Redshift.RSServerless) a continuación.

 El clúster de Amazon Redshift debe estar en la misma AWS cuenta y AWS región que la instancia de replicación. 

Durante la migración de una base de datos a Amazon Redshift, AWS DMS primero mueve los datos a un bucket de Amazon S3. Cuando los archivos se encuentran en un bucket de Amazon S3, los AWS DMS transfiere a las tablas correspondientes del almacén de datos de Amazon Redshift. AWS DMS crea el bucket de S3 en la misma AWS región que la base de datos de Amazon Redshift. La instancia de AWS DMS replicación debe estar ubicada en esa misma AWS región. 

Si utiliza la API AWS CLI o DMS para migrar datos a Amazon Redshift, configure AWS Identity and Access Management un rol (IAM) para permitir el acceso a S3. Para obtener más información sobre la creación de este rol de IAM, consulte [Crear los roles de IAM para usarlos con AWS DMS](security-iam.md#CHAP_Security.APIRole).

El punto de conexión de Amazon Redshift ofrece la total automatización de lo siguiente:
+ Generación de esquemas y mapeo de tipos de datos
+ Carga completa de las tablas de la base de datos de origen
+ Carga gradual de los cambios realizados en las tablas de origen
+ Aplicación de los cambios de esquema en lenguaje de definición de datos (DDL) realizados en la tablas de origen
+ Sincronización entre los procesos de carga completa y captura de datos de cambios (CDC)

AWS Database Migration Service admite operaciones de carga completa y de procesamiento de cambios. AWS DMS lee los datos de la base de datos de origen y crea una serie de archivos de valores separados por comas (.csv). Para operaciones de carga completa, AWS DMS crea archivos para cada tabla. AWS DMS a continuación, copia los archivos de tabla de cada tabla en una carpeta independiente de Amazon S3. Cuando los archivos se cargan en Amazon S3, AWS DMS envía un comando de copia y los datos de los archivos se copian en Amazon Redshift. Para las operaciones de procesamiento de cambios, AWS DMS copia los cambios netos en los archivos.csv. AWS DMS a continuación, carga los archivos de cambios netos en Amazon S3 y copia los datos en Amazon Redshift.

Para obtener más información sobre cómo trabajar con Amazon Redshift como objetivo AWS DMS, consulte las siguientes secciones: 

**Topics**
+ [Requisitos previos para usar una base de datos de Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Privilegios necesarios para usar Redshift como destino](#CHAP_Target.Redshift.Privileges)
+ [Limitaciones del uso de Amazon Redshift como objetivo para AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Configuración de una base de datos de Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Uso del enrutamiento de VPC mejorado con Amazon Redshift como objetivo para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Creación y uso de AWS KMS claves para cifrar los datos de destino de Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Configuración de punto final cuando se utiliza Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Uso de una clave de cifrado de datos y un bucket de Amazon S3 como almacenamiento intermedio](#CHAP_Target.Redshift.EndpointSettings)
+ [Configuración de tareas de subprocesos múltiples para Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Tipos de datos de destino para Amazon Redshift](#CHAP_Target.Redshift.DataTypes)
+ [Uso AWS DMS con Amazon Redshift Serverless como objetivo](#CHAP_Target.Redshift.RSServerless)

## Requisitos previos para usar una base de datos de Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

En la siguiente lista se describen los requisitos previos necesarios para trabajar con Amazon Redshift como destino de la migración de datos:
+ Utilice la consola AWS de administración para lanzar un clúster de Amazon Redshift. Anote la información básica sobre su AWS cuenta y su clúster de Amazon Redshift, como la contraseña, el nombre de usuario y el nombre de la base de datos. Necesita estos valores al crear el punto de conexión de destino de Amazon Redshift. 
+ El clúster de Amazon Redshift debe estar en la misma AWS cuenta y AWS región que la instancia de replicación.
+ La instancia de AWS DMS replicación necesita conectividad de red con el punto final de Amazon Redshift (nombre de host y puerto) que utiliza el clúster.
+ AWS DMS utiliza un bucket de Amazon S3 para transferir datos a la base de datos de Amazon Redshift. Para que AWS DMS cree el bucket, la consola utiliza un rol de IAM, `dms-access-for-endpoint`. Si utiliza la API AWS CLI o DMS para crear una migración de base de datos con Amazon Redshift como base de datos de destino, debe crear este rol de IAM. Para obtener más información sobre la creación de este rol, consulte [Crear los roles de IAM para usarlos con AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS convierte BLOBs CLOBs, y NCLOBs en un VARCHAR en la instancia de Amazon Redshift de destino. Amazon Redshift no admite tipos de datos VARCHAR de más de 64 KB, por lo que no puede almacenar datos tradicionales en Amazon LOBs Redshift. 
+ Establezca la configuración de tareas de metadatos de destino en [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)`true` AWS DMS para gestionar los cambios en las tablas de destino de Amazon Redshift durante los CDC. Se requiere una clave principal tanto en la tabla de origen como en la tabla de destino. Sin una clave principal, los cambios se aplican instrucción por instrucción. Y eso puede afectar negativamente el rendimiento de la tarea durante CDC al causar latencia en el destino e impactar la cola de confirmación del clúster. 
+ Si activa la seguridad a nivel de fila en las tablas de Redshift, debe conceder los permisos adecuados a todos los usuarios de DMS.

## Privilegios necesarios para usar Redshift como destino
<a name="CHAP_Target.Redshift.Privileges"></a>

Utilice el comando GRANT para definir privilegios de acceso para un usuario o grupo de usuarios. Los privilegios incluyen opciones de acceso como, por ejemplo, poder leer datos en tablas y vistas, escribir datos y crear tablas. Para obtener más información sobre el uso de CONCEDER con Amazon Redshift, consulte [CONCEDER](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) en la *Guía para desarrolladores de base de datos de Amazon Redshift*. 

A continuación, se muestra la sintaxis para otorgar privilegios específicos para una tabla, una base de datos, un esquema, una función, un procedimiento o privilegios en el nivel de lenguaje en tablas o vistas de 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 } [, ...]
```

A continuación, se muestra la sintaxis de los privilegios del nivel de columna en tablas y vistas de Amazon Redshift. 

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

A continuación, se muestra la sintaxis del privilegio ASSUMEROLE concedido a usuarios y grupos con un rol especificado.

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

## Limitaciones del uso de Amazon Redshift como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

Las siguientes restricciones se aplican al utilizar una base de datos de Amazon Redshift como destino:
+ No habilite el control de versiones para el bucket de S3 que utiliza como almacenamiento intermedio para el destino de Amazon Redshift. Si necesita el control de versiones de S3, utilice las políticas de ciclo de vida para eliminar activamente las versiones antiguas. De lo contrario, es posible que se produzcan errores en la conexión de las pruebas de punto de conexión debido al tiempo de espera de una llamada a `list-object` de S3. Para crear una política de ciclo de vida para un bucket de S3, consulte [Administración del ciclo de vida del almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para eliminar una versión de un objeto de S3, consulte [Eliminación de versiones de objetos de un bucket con control de versiones habilitado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ El siguiente DLL no se admite:

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS no puede migrar ni replicar los cambios en un esquema cuyo nombre comience por subrayado (\$1). Si tiene esquemas que tienen un nombre que comienza por un carácter de subrayado, utilice transformaciones de asignación para cambiar el nombre del esquema en el destino. 
+  Amazon Redshift no admite VARCHARs más de 64 KB. LOBs de las bases de datos tradicionales no se pueden almacenar en Amazon Redshift.
+  No se puede aplicar una instrucción DELETE a una tabla con una clave principal de varias columnas si alguno de los nombres de columna de la clave principal utiliza una palabra reservada. Vaya [aquí](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html) para ver una lista con las palabras reservadas de Amazon Redshift.
+ Es posible que se produzcan problemas de rendimiento si el sistema de origen realiza operaciones UPDATE en la clave principal de una tabla de origen. Estos problemas de rendimiento se producen al aplicar cambios al destino. Esto se debe a que las operaciones UPDATE (y DELETE) dependen del valor de la clave principal para identificar la fila de destino. Si actualiza la clave principal de una tabla de origen, el registro de tareas contendrá mensajes como los siguientes:

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ DMS no admite nombres de DNS personalizados al configurar un punto de conexión para un clúster de Redshift; se debe utilizar el nombre de DNS proporcionado por Amazon. Como el clúster de Amazon Redshift debe estar en la misma AWS cuenta y región que la instancia de replicación, se produce un error en la validación si se utiliza un punto de enlace de DNS personalizado.
+ Amazon Redshift tiene un tiempo de espera predeterminado de 4 horas para las sesiones inactivas. Cuando no hay ninguna actividad en la tarea de replicación de DMS, Redshift desconecta la sesión después de 4 horas. Se pueden producir errores si el DMS no puede conectarse y es posible que necesite reiniciarse. Como solución alternativa, establezca un límite de TIEMPO DE ESPERA DE SESIÓN superior a 4 horas para el usuario de replicación de DMS. O bien, consulte la descripción de [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) en la *Guía para desarrolladores de bases de datos de Amazon Redshift*.
+ Cuando AWS DMS replica los datos de la tabla de origen sin una clave principal o única, la latencia de la CDC puede ser alta, lo que resulta en un nivel de rendimiento inaceptable.
+ No se admite el truncamiento de particiones durante la replicación de CDC desde el origen de Oracle al destino de Redshift.
+ Es posible que aparezcan registros duplicados en las tablas de destino porque Amazon Redshift no exige las claves principales y AWS DMS puede reproducir la CDC cuando se reanuda una tarea. Para evitar los duplicados, utilice la configuración. `ApplyErrorInsertPolicy=INSERT_RECORD` Para obtener más información, consulte [Configuración de las tareas de administración de errores](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). Como alternativa, puede implementar procedimientos de detección de duplicados y limpieza posterior a la migración a nivel de aplicación.

## Configuración de una base de datos de Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service debe estar configurado para funcionar con la instancia de Amazon Redshift. En la siguiente tabla se describen las propiedades de configuración disponibles para el punto de conexión de Amazon Redshift.


| Propiedad | Description (Descripción) | 
| --- | --- | 
| server | El nombre del clúster de Amazon Redshift que está utilizando. | 
| puerto | El número de puerto de Amazon Redshift. El valor predeterminado es 5439. | 
| nombre de usuario | Un nombre de usuario de Amazon Redshift para un usuario registrado. | 
| contraseña | La contraseña del usuario citado en la propiedad del nombre de usuario. | 
| database | El nombre del almacenamiento de datos de Amazon Redshift (servicio) con le que trabaja. | 

Si desea agregar atributos adicionales de la cadena de conexión al punto de conexión de Amazon Redshift, puede especificar los atributos `maxFileSize` y `fileTransferUploadStreams`. Para obtener más información sobre estos atributos, consulte [Configuración de punto final cuando se utiliza Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Uso del enrutamiento de VPC mejorado con Amazon Redshift como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Cuando utiliza enrutamiento de VPC mejorado con el destino de Amazon Redshift, todo el tráfico COPY entre el clúster de Amazon Redshift y los repositorios de datos pasa a través de la VPC. Puesto que Enhanced VPC Routing afecta a la forma en la que Amazon Redshift accede a otros recursos, los comandos COPY podrían fallar si no ha configurado su VPC correctamente.

AWS DMS puede verse afectado por este comportamiento porque utiliza el comando COPY para mover datos de S3 a un clúster de Amazon Redshift.

Los siguientes son los pasos AWS DMS necesarios para cargar datos en un destino de Amazon Redshift:

1. AWS DMS copia los datos de la fuente a archivos.csv del servidor de replicación.

1. AWS DMS usa el AWS SDK para copiar los archivos.csv en un bucket de S3 de su cuenta.

1. AWS DMS a continuación, utiliza el comando COPY de Amazon Redshift para copiar los datos de los archivos.csv de S3 a una tabla adecuada de Amazon Redshift.

Si el enrutamiento de VPC mejorado no está habilitado, Amazon Redshift dirige el tráfico a través de Internet, incluido el tráfico a otros servicios de la red. AWS Si la función no está activada, no tendrá que configurar la ruta de acceso a la red. Si la función está activada, deberá crear una ruta de acceso a la red específica entre la VPC de su clúster y sus recursos de datos. Para obtener más información sobre la configuración necesaria, consulte [Enrutamiento de la VPC mejorado](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) en la documentación de Amazon Redshift. 

## Creación y uso de AWS KMS claves para cifrar los datos de destino de Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

Puede cifrar los datos de destino enviados a Amazon S3 antes de que se copien en Amazon Redshift. Para ello, puede crear y usar claves personalizadas AWS KMS . Puede utilizar la clave que ha creado para cifrar los datos de destino mediante uno de los siguientes mecanismos al crear el punto de conexión de destino de Amazon Redshift:
+ Utilice la opción siguiente al ejecutar el comando de `create-endpoint` utilizando la AWS CLI.

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

  Aquí, `your-kms-key-ARN` está el nombre de recurso de Amazon (ARN) para su clave de KMS. Para obtener más información, consulte [Uso de una clave de cifrado de datos y un bucket de Amazon S3 como almacenamiento intermedio](#CHAP_Target.Redshift.EndpointSettings).
+ Establezca el atributo de conexión adicional `encryptionMode` al valor `SSE_KMS` y el atributo de conexión adicional `serverSideEncryptionKmsKeyId` al ARN de su clave de KMS. Para obtener más información, consulte [Configuración de punto final cuando se utiliza Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Para cifrar los datos de destino de Amazon Redshift mediante una clave de KMS, necesita AWS Identity and Access Management un rol (IAM) que tenga permisos para acceder a los datos de Amazon Redshift. A continuación, se accede a este rol de IAM en una política (una política de claves) asociada a la clave de cifrado que cree. Puede hacer esto en su propia consola de IAM mediante la creación de lo siguiente:
+ Un rol de IAM con una política administrada. AWS
+ Una clave de KMS con una política de claves que hace referencia a este rol.

En los procedimientos siguientes se describe cómo hacerlo.

**Para crear un rol de IAM con la política gestionada requerida AWS**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación. Se abre la página **Roles**.

1. Elija **Crear rol**. Se abre la página **Create role (Crear rol)**.

1. Con el **servicio de AWS ** elegido como entidad de confianza, elija **DMS** como servicio para usar el rol.

1. Elija **Siguiente: permisos**. Aparece la página **Attach permissions policies (Asociar políticas de permisos)**.

1. Busque y seleccione la política `AmazonDMSRedshiftS3Role`.

1. Elija **Siguiente: etiquetas**. Aparece la página **Add tags (Agregar etiquetas)**. A continuación, puede añadir las etiquetas que desee.

1. Elija **Next: Review (Siguiente: Revisar)** y revise los resultados.

1. Si la configuración es la que necesita, introduzca un nombre para el rol (por ejemplo, `DMS-Redshift-endpoint-access-role`) y cualquier descripción adicional, a continuación, elija **Create role (Crear rol)**. Se abre la página **Roles** con un mensaje que indica que el rol se ha creado.

Ya ha creado el nuevo rol para acceder a recursos de Amazon Redshift para cifrado con un nombre especificado, por ejemplo, `DMS-Redshift-endpoint-access-role`.

**Para crear una clave de AWS KMS cifrado con una política de claves que haga referencia a su función de IAM**
**nota**  
Para obtener más información sobre cómo AWS DMS funciona con las claves de AWS KMS cifrado, consulte[Establecer una clave de cifrado y especificar AWS KMS los permisos](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Inicie sesión en la consola AWS Key Management Service (AWS KMS) Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para cambiarla Región de AWS, usa el selector de regiones en la esquina superior derecha de la página.

1. En el panel de navegación, elija **Claves administradas por el cliente**.

1. Elija **Crear clave**. Se abrirá la página **Configure key (Configurar clave)**.

1. En **Key type (Tipo de clave)**, elija **Symmetric (Simétrica)**.
**nota**  
Al crear esta clave, solo puede crear una clave simétrica, ya que todos los AWS servicios, como Amazon Redshift, solo funcionan con claves de cifrado simétricas.

1. Elija **Advanced Options**. En **Key material origin (Origen del material de la clave)**, asegúrese de elegir **KMS** y, a continuación, seleccione **Next (Siguiente)**. Se abrirá la página **Add labels (Agregar etiquetas)**.

1. En **Create alias and description (Crear alias y descripción)**, escriba un alias para la clave (por ejemplo, `DMS-Redshift-endpoint-encryption-key`) y una descripción adicional.

1. En **Tags (Etiquetas)**, agregue las etiquetas que desee para ayudar a identificar la clave y realizar el seguimiento de su uso y, a continuación, seleccione **Next (Siguiente)**. Se abre la página **Define key administrative permissions (Definir permisos administrativos clave)**, que muestra una lista de usuarios y roles entre los que puede elegir.

1. Añada los usuarios y roles que desee para administrar la clave. Asegúrese de que estos usuarios y roles tengan los permisos necesarios para administrar la clave. 

1. En **Key deletion (Eliminación de clave)**, elija si los administradores de claves pueden eliminar la clave; a continuación, seleccione **Next (Siguiente)**. Se abre la página **Define key usage permissions (Definir permisos de uso de claves)** que muestra una lista adicional de usuarios y roles entre los que puede elegir.

1. En **Esta cuenta**, elija los usuarios disponibles que deberán poder realizar operaciones criptográficas en los objetivos de Amazon Redshift. Además, elija el rol que creó previamente en **Roles** para habilitar el acceso con el fin de cifrar los objetos de destino de Amazon Redshift, por ejemplo `DMS-Redshift-endpoint-access-role`.

1. **Si desea añadir otras cuentas que no figuran en la lista para que tengan el mismo acceso, en **Otras AWS cuentas**, seleccione **Añadir otra AWS cuenta** y, a continuación, seleccione Siguiente.** Se abre la página **Review and edit key policy (Revisar y editar la política de claves)** que muestra el JSON de la política de claves que puede revisar y editar escribiendo en el JSON existente. Aquí puede ver en qué puntos de la política de claves se hace referencia al rol y a los usuarios (por ejemplo, `Admin` y `User1`) que eligió en el paso anterior. También puede ver las distintas acciones de claves permitidas para las distintas entidades principales (usuarios y roles), tal y como se muestra en el siguiente ejemplo.

------
#### [ 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. Seleccione **Finalizar**. La página de **claves de cifrado** se abre con un mensaje que indica que la tuya AWS KMS key ha sido creada.

Ahora ha creado una nueva clave de KMS con un alias especificado (por ejemplo, `DMS-Redshift-endpoint-encryption-key`). Esta clave permite cifrar AWS DMS los datos de destino de Amazon Redshift.

## Configuración de punto final cuando se utiliza Amazon Redshift como destino para AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Amazon Redshift de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando de la [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)sintaxis `--redshift-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Amazon Redshift como destino.

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

## Uso de una clave de cifrado de datos y un bucket de Amazon S3 como almacenamiento intermedio
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

Puede utilizar la configuración de puntos de conexión de destino de Amazon Redshift para configurar lo siguiente:
+ Una clave de cifrado AWS KMS de datos personalizada. A continuación, puede utilizar esta clave para cifrar los datos enviados a Amazon S3 antes de que se copien en Amazon Redshift.
+ Un bucket de S3 personalizado como almacenamiento intermedio para datos migrados a Amazon Redshift.
+ Asigne un booleano como booleano de un origen de PostgreSQL. De forma predeterminada, un tipo BOOLEANO se migra como varchar(1). Puede especificar `MapBooleanAsBoolean` para permitir que el destino de Redshift migre el tipo booleano como booleano, como se muestra en el siguiente ejemplo.

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

  Tenga en cuenta que debe establecer esta configuración en los puntos de conexión de origen y destino para que surta efecto.

### Configuración de clave de KMS para cifrado de datos
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

Los siguientes ejemplos muestran cómo configurar una clave de KMS personalizada para cifrar los datos que se envíen a S3. Para comenzar, podría realizar la siguiente llamada a `create-endpoint` en la 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"}'
```

Aquí, el objeto JSON especificado por la opción `--redshift-settings` define dos parámetros. Uno es un parámetro `EncryptionMode` con el valor `SSE_KMS`. El otro es un parámetro `ServerSideEncryptionKmsKeyId` con el valor `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Este valor es un nombre de recurso de Amazon (ARN) para su clave de KMS personalizada.

De forma predeterminada, el cifrado de datos de S3 se realiza utilizando el cifrado del lado del servidor de S3. Para el destino de Amazon Redshift del ejemplo anterior, esto es también equivalente a especificar la configuración del punto de conexión, como se indica en el siguiente ejemplo.

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

Para obtener más información sobre cómo trabajar con el cifrado en el lado del servidor de S3, consulte [Protección de datos con el cifrado del lado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) en la *Guía del usuario de Amazon Simple Storage Service*.

**nota**  
También puede usar el comando `modify-endpoint` de la CLI para cambiar el valor del parámetro de `EncryptionMode` para un punto de conexión existente de `SSE_KMS` a `SSE_S3`. Sin embargo, no se puede cambiar el valor `EncryptionMode` de `SSE_S3` a `SSE_KMS`.

### Configuración del bucket de Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Al migrar datos a un punto final de destino de Amazon Redshift, AWS DMS utiliza un bucket de Amazon S3 predeterminado como almacenamiento de tareas intermedio antes de copiar los datos migrados a Amazon Redshift. Por ejemplo, los ejemplos que se muestran para crear un punto de conexión de destino de Amazon Redshift con una clave de cifrado de datos de AWS KMS utilizan este bucket de S3 predeterminado (consulte [Configuración de clave de KMS para cifrado de datos](#CHAP_Target.Redshift.EndpointSettings.KMSkeys)). 

En su lugar, puede especificar un bucket de S3 personalizado para este almacenamiento intermedio incluyendo los siguientes parámetros en el valor de su `--redshift-settings` opción en el AWS CLI `create-endpoint` comando:
+ `BucketName`: una cadena que especifica como el nombre del almacenamiento de bucket de S3. Si el puesto de acceso al servicio se basa en la política `AmazonDMSRedshiftS3Role`, este valor debe tener un prefijo de `dms-`, por ejemplo, `dms-my-bucket-name`.
+ `BucketFolder`: (opcional) una cadena que puede especificar como nombre de la carpeta de almacenamiento en el bucket de S3 especificado.
+ `ServiceAccessRoleArn`: el ARN de un rol de IAM que permite acceso administrativo al bucket de S3. Normalmente, crea este rol en función de la política `AmazonDMSRedshiftS3Role`. Para ver un ejemplo, consulte el procedimiento para crear un rol de IAM con la política administrada por AWS requerida en [Creación y uso de AWS KMS claves para cifrar los datos de destino de Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**nota**  
Si especifica el ARN de un rol de IAM distinto utilizando la opción `--service-access-role-arn` del comando `create-endpoint`, esta opción de rol de IAM tiene prioridad.

El ejemplo siguiente muestra cómo podría utilizar estos parámetros para especificar un bucket de Amazon S3 personalizado en la siguiente llamada `create-endpoint` mediante la 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"}'
```

## Configuración de tareas de subprocesos múltiples para Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

Puede mejorar el rendimiento de las tareas de captura de datos de carga completa y de cambios (CDC) para un punto de conexión de destino de Amazon Redshift mediante la configuración de tareas de subprocesos múltiples. Le habilitan para especificar el número de subprocesos simultáneos y el número de registros que se van a almacenar en un búfer.

### Configuración de tareas de carga completa de subprocesos múltiples para Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Para mejorar el rendimiento a plena carga, puede utilizar la siguiente configuración de tareas `ParallelLoad*`:
+ `ParallelLoadThreads`: especifica el número de subprocesos simultáneos que utiliza DMS durante una carga completa para insertar registros de datos en un punto de conexión de destino de Amazon Redshift. El valor predeterminado es cero (0) y el valor máximo es 32. Para obtener más información, consulte [Configuración de tareas de carga completa](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  Puede establecer el atributo `enableParallelBatchInMemoryCSVFiles` en `false` al usar la configuración de tareas `ParallelLoadThreads`. El atributo mejora el rendimiento de las tareas más grandes con varios subprocesos de plena carga al permitir que DMS escriba en el disco en lugar de en la memoria. El valor predeterminado es `true`.
+ `ParallelLoadBufferSize`: especifica el número máximo de solicitudes de registro de datos cuando se utilizan subprocesos de carga paralelos con destino de Redshift. El valor predeterminado es 100 y el máximo es 1000. Le recomendamos que utilice esta opción cuando sea ParallelLoadThreads > 1 (mayor que uno).

**nota**  
La compatibilidad con el uso de la configuración de `ParallelLoad*` tareas durante la carga completa en los puntos de enlace de destino de Amazon Redshift está disponible en AWS DMS las versiones 3.4.5 y posteriores.  
No se admite el uso de la configuración de punto de conexión de `ReplaceInvalidChars` Redshift durante la captura de datos de cambios (CDC) o durante una tarea de migración de CARGA COMPLETA con carga paralela. Se admite la migración de CARGA COMPLETA cuando la carga paralela no está habilitada. *Para obtener más información, consulte la referencia de [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)la API AWS Database Migration Service *

### Configuración de tareas de CDC con varios subprocesos para Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Para mejorar el rendimiento de CDC, puede utilizar la siguiente configuración de tareas `ParallelApply*`:
+ `ParallelApplyThreads`— Especifica el número de subprocesos simultáneos que se AWS DMS utilizan durante una carga de CDC para enviar registros de datos a un punto final de destino de Amazon Redshift. El valor predeterminado es cero (0) y el valor máximo es 32. El valor mínimo recomendado es igual al número de secciones en el clúster.
+ `ParallelApplyBufferSize`: especifica el número máximo de solicitudes de registro de datos cuando se utilizan subprocesos de aplicación paralelos con destino de Redshift. El valor predeterminado es 100 y el máximo es 1000. Se recomienda utilizar esta opción cuando sea ParallelApplyThreads > 1 (mayor que uno). 

  Para obtener el máximo beneficio de Redshift como objetivo, recomendamos que el valor de `ParallelApplyBufferSize` sea al menos dos veces (el doble o más) el número de `ParallelApplyThreads`.

**nota**  
El soporte para el uso de la configuración de `ParallelApply*` tareas durante los CDC en los puntos finales de destino de Amazon Redshift está disponible en AWS DMS las versiones 3.4.3 y posteriores.

El nivel de paralelismo aplicado depende de la correlación entre el *tamaño total del lote* y el *tamaño máximo del archivo* utilizado para transferir los datos. Cuando se utilizan configuraciones de tareas de CDC con varios subprocesos con un objetivo de Redshift, se obtienen beneficios cuando el tamaño del lote es grande en relación con el tamaño máximo del archivo. Por ejemplo, puede utilizar la siguiente combinación de ajustes de punto de conexión y tarea para ajustar el rendimiento y lograr un rendimiento óptimo. 

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

// Task settings

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

Con la configuración del ejemplo anterior, un cliente con una gran carga de trabajo transaccional se beneficia de que el búfer de lotes, que contiene 8000 registros, se rellena en 1800 segundos y utiliza 32 subprocesos paralelos con un tamaño de archivo máximo de 250 MB.

Para obtener más información, consulte [Configuración de ajuste del procesamiento de cambios](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**nota**  
Las consultas de DMS que se ejecutan durante la replicación en curso en un clúster de Redshift pueden compartir la misma cola de WLM (administración de carga de trabajo) con otras consultas de aplicaciones que se estén ejecutando. Por lo tanto, considere la posibilidad de configurar correctamente las propiedades del WLM para influir en el rendimiento durante la replicación en curso en un objetivo de Redshift. Por ejemplo, si se están ejecutando otras consultas de ETL paralelas, DMS se ejecuta más lentamente y se pierden las ganancias de rendimiento.

## Tipos de datos de destino para Amazon Redshift
<a name="CHAP_Target.Redshift.DataTypes"></a>

El punto de conexión de Amazon Redshift AWS DMS admite la mayoría de los tipos de datos de Amazon Redshift. En la siguiente tabla se muestran los tipos de datos de destino de Amazon Redshift que se admiten cuando se utiliza AWS DMS y el mapeo predeterminado a partir de los tipos de AWS DMS datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).


| AWS DMS tipos de datos | Tipos de datos de Amazon Redshift | 
| --- | --- | 
| BOOLEANO | BOOL | 
| BYTES | VARCHAR (longitud) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Si la escala es => 0 y =< 6, según el tipo de columna de destino de Redshift, una de las siguientes opciones: TIMESTAMP (s) TIMESTAMPTZ: si la marca temporal de origen contiene un desfase de zona (como en SQL Server u Oracle), se convierte a UTC al insertarlo o actualizarlo. Si no contiene ningún desfase, la hora ya se considera en UTC. Si la escala es => 7 y =< 9, utilice:  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Si la escala es => 0 y =< 37, utilice:  NUMERIC (p,s)  Si la escala es => 38 y =< 127, utilice:  VARCHAR (longitud) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | Si la longitud es de 1-65 535, utilice VARCHAR (longitud en bytes)  Si la longitud es 65,536–2,147,483,647, utilice VARCHAR (65535) | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Si la longitud es de 1-65 535, utilice NVARCHAR (longitud en bytes)  Si la longitud es 65,536–2,147,483,647, utilice NVARCHAR (65535) | 
| BLOB | VARCHAR (longitud máxima del LOB \$12)  La longitud máxima del LOB no puede superar 31 KB. Amazon Redshift no admite VARCHARs más de 64 KB. | 
| NCLOB | NVARCHAR (longitud máxima del LOB)  La longitud máxima del LOB no puede superar 63 KB. Amazon Redshift no admite VARCHARs más de 64 KB. | 
| CLOB | VARCHAR (longitud máxima del LOB)  La longitud máxima del LOB no puede superar 63 KB. Amazon Redshift no admite VARCHARs más de 64 KB. | 

## Uso AWS DMS con Amazon Redshift Serverless como objetivo
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS admite el uso de Amazon Redshift Serverless como punto final de destino. Para obtener información sobre el uso de Amazon Redshift sin servidor, consulte [Amazon Redshift sin servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html) en la [Guía de administración de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html).

En este tema se describe cómo utilizar un punto de conexión Amazon Redshift Serverless con. AWS DMS

**nota**  
Al crear un punto final Amazon Redshift Serverless, en el **DatabaseName**campo de la configuración del [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)punto de conexión, utilice el nombre del almacén de datos de Amazon Redshift o el nombre del punto final del grupo de trabajo. Para el **ServerName**campo, utilice el valor del punto de conexión que aparece en la página del **grupo de trabajo** del clúster sin servidor (por ejemplo,). `default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` Para obtener información acerca de cómo crear un punto de conexión, consulte [Creación de puntos de enlace de origen y destino](CHAP_Endpoints.Creating.md). Para obtener información sobre el punto de conexión del grupo de trabajo, consulte [Conexión a Amazon Redshift sin servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Política de confianza con Amazon Redshift sin servidor como objetivo
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Si utiliza Amazon Redshift sin servidor como punto de conexión de destino, debe agregar la siguiente sección resaltada a la política de confianza. Esta política de confianza está asociada al puesto `dms-access-for-endpoint`.

Para obtener más información sobre el uso de una política de confianza con AWS DMS, consulte. [Crear los roles de IAM para usarlos con AWS DMS](security-iam.md#CHAP_Security.APIRole)

### Limitaciones al usar Amazon Redshift sin servidor como destino
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

El uso de Redshift sin servidor como objetivo tiene las siguientes limitaciones:
+ AWS DMS solo es compatible con Amazon Redshift Serverless como punto final en las regiones que admiten Amazon Redshift Serverless. Para obtener información sobre las regiones compatibles con Amazon Redshift sin servidor, consulte la **API de Redshift sin servidor** en el tema [Puntos de conexión y cuotas de Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) de la [Referencia general de AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html).
+ Cuando utilice el enrutamiento de VPC mejorado, asegúrese de crear un punto de conexión de Amazon S3 en la misma VPC que el clúster de Redshift sin servidor o aprovisionado de Redshift. Para obtener más información, consulte [Uso del enrutamiento de VPC mejorado con Amazon Redshift como objetivo para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS no admite el rendimiento mejorado para Amazon Redshift Serverless como objetivo. Para obtener más información, consulte [Rendimiento mejorado para migraciones de Oracle a Amazon Redshift y Amazon S3 de carga completa](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS no admite conexiones a Amazon Redshift Redshift Serverless cuando el modo SSL está configurado en. `verify-full` Para las conexiones que requieren verificación SSL a destinos sin servidor de Amazon Redshift, utilice modos SSL alternativos, como o. `require` `verify-ca`

# Uso de una base de datos SAP ASE como objetivo para AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

Puede migrar datos a bases de datos de SAP Adaptive Server Enterprise (ASE), anteriormente conocidas como Sybase AWS DMS, utilizando cualquiera de las fuentes de bases de datos compatibles.

Para obtener información sobre las versiones de SAP ASE que son AWS DMS compatibles como destino, consulte. [Objetivos para AWS DMS](CHAP_Introduction.Targets.md)

## Requisitos previos para utilizar una base de datos SAP ASE como destino para AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Antes de empezar a trabajar con una base de datos SAP ASE como destino AWS DMS, asegúrese de cumplir los siguientes requisitos previos:
+ Proporcione al AWS DMS usuario acceso a la cuenta SAP ASE. Este usuario debe tener read/write privilegios en la base de datos de SAP ASE.
+ En algunos casos, es posible que replique a la versión 15.7 de SAP ASE en una instancia Amazon EC2 en Microsoft Windows que esté configurada para caracteres no latinos (por ejemplo, chino). En tales casos, AWS DMS requiere que SAP ASE 15.7 SP121 esté instalado en la máquina SAP ASE de destino.

## Limitaciones al utilizar una base de datos SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

Al utilizar una base de datos de SAP ASE como destino para AWS DMS se aplican las siguientes restricciones:
+ AWS DMS no admite tablas que incluyan campos con los siguientes tipos de datos. Las columnas que se repliquen con estos tipos de datos aparecen con valor NULL. 
  + Tipos definidos por el usuario (UDT)

## Configuración de punto final cuando se utiliza SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de SAP ASE de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)comando de la sintaxis `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con SAP ASE como destino.

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

## Tipos de datos de destino para SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

La siguiente tabla muestra los tipos de datos de destino de la base de datos SAP ASE que se admiten cuando se utilizan AWS DMS y el mapeo predeterminado a partir de AWS DMS los tipos de datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de datos  |  Tipos de datos de SAP ASE  | 
| --- | --- | 
| BOOLEANO | BIT | 
| BYTES | VARBINARY (longitud) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Si la escala es => 0 y =< 6, utilice BIGDATETIME  Si la escala es => 7 y =< 9, utilice: VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (longitud) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (longitud) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Uso de Amazon S3 como objetivo para AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Puede migrar datos a Amazon S3 AWS DMS desde cualquiera de las fuentes de bases de datos compatibles. Cuando se utiliza Amazon S3 como destino en una AWS DMS tarea, tanto los datos de carga completa como los de captura de datos de cambios (CDC) se escriben de forma predeterminada en un formato de valores separados por comas (.csv). Para opciones de almacenamiento más compacto y consulta más rápida, también tiene la opción de escribir los datos en formato Apache Parquet (.parquet). 

AWS DMS nombra los archivos creados durante una carga completa mediante un contador hexadecimal incremental, por ejemplo .csv,... LOAD00001 LOAD00002 , LOAD00009, LOAD0000 A, etc. para los archivos.csv. AWS DMS nombra los archivos CDC mediante marcas de tiempo, por ejemplo, 20141029-1134010000.csv. Para cada tabla de origen que contenga registros, AWS DMS crea una carpeta en la carpeta de destino especificada (si la tabla de origen no está vacía). AWS DMS escribe todos los archivos CDC y de carga completa en el bucket de Amazon S3 especificado. Puede controlar el tamaño de los archivos que se AWS DMS crean mediante la configuración del [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)punto final. 

El parámetro `bucketFolder` contiene la ubicación en la que se almacenan los archivos .csv o .parquet antes de que se carguen en el bucket de S3. Con archivos .csv, los datos de la tabla se almacenan en el siguiente formato en el bucket de S3, mostrado con archivos de carga completa.

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

Puede especificar el delimitador de columnas, el delimitador de filas y otros parámetros mediante los atributos de conexión adicionales. Para obtener más información acerca de los atributos de conexión adicionales, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring) al final de esta sección.

Para evitar la suplantación de identidad, AWS DMS valida la propiedad del bucket antes de realizar las operaciones. De forma predeterminada, cuando no se especifica la configuración del punto de conexión de `ExpectedBucketOwner` Amazon S3, AWS DMS utiliza el ID de AWS cuenta propietario del rol de AWS DMS servicio como propietario esperado del bucket.

Para migrar datos a un bucket de S3 propiedad de otra AWS cuenta, debe especificar de forma explícita el propietario real del bucket en la configuración del punto de conexión de `ExpectedBucketOwner` Amazon S3, como se muestra a continuación. De lo contrario, la tarea de replicación entre cuentas fallará.

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

Cuando se replican AWS DMS los cambios de datos mediante una tarea de CDC, la primera columna del archivo de salida .csv o .parquet indica cómo se han modificado los datos de la fila, como se muestra en el siguiente archivo.csv.

```
I,101,Smith,Bob,4-Jun-14,New York
U,101,Smith,Bob,8-Oct-15,Los Angeles
U,101,Smith,Bob,13-Mar-17,Dallas
D,101,Smith,Bob,13-Mar-17,Dallas
```

Para este ejemplo, supongamos que hay una `EMPLOYEE` tabla en la base de datos de origen. AWS DMS escribe datos en el archivo.csv o .parquet, en respuesta a los siguientes eventos:
+ Un nuevo empleado (Bob Smith, ID de 101) es contratado el 4 de junio de 2014 en la oficina de Nueva York. En el archivo .csv o .parquet, la `I` de la primera columna indica que se ha insertado (`INSERT`) en la tabla del EMPLEADO en la base de datos de origen.
+ El 8 de octubre de 15, se transfiere a Bob a la oficina de Los Ángeles. En el archivo .csv o .parquet, la `U` indica que la fila correspondiente de la tabla del EMPLEADO se ha actualizado (`UPDATE`) para reflejar la nueva ubicación de la oficina de Bob. El resto de la línea refleja la fila en la tabla del EMPLEADO tal y como aparece después de la actualización (`UPDATE`). 
+ El 13 de marzo de 2017, vuelven a transferir a Bob a la oficina de Dallas. En el archivo .csv o .parquet, la `U` indica que esta fila se ha actualizado de nuevo (con `UPDATE`). El resto de la línea refleja la fila en la tabla del EMPLEADO tal y como aparece después de la actualización (`UPDATE`).
+ Después de trabajar en Dallas durante un tiempo, Bob se marcha de la empresa. En el archivo .csv o .parquet, la `D` indica que la fila se eliminó (con `DELETE`) en la tabla de origen. El resto de la línea refleja cómo aparecía la fila en la tabla del EMPLEADO antes de eliminarla.

Tenga en cuenta que, de forma predeterminada, en el caso de CDC, AWS DMS almacena los cambios de fila de cada tabla de la base de datos sin tener en cuenta el orden de las transacciones. Si desea almacenar los cambios de fila en los archivos CDC según el orden de las transacciones, debe utilizar la configuración del punto de conexión de S3 para especificarlo y la ruta de la carpeta en la que desea que se almacenen los archivos de transacciones CDC en el destino de S3. Para obtener más información, consulte [Captura de datos de cambios (CDC) incluida la orden de transacción en el destino de S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para controlar la frecuencia de las escrituras en un destino de Amazon S3 durante una tarea de replicación de datos, puede configurar los atributos de conexión `cdcMaxBatchInterval` y `cdcMinFileSize` adicionales. Esto puede traducirse en un mejor rendimiento al analizar los datos sin necesidad de realizar operaciones adicionales que supongan una sobrecarga. Para obtener más información, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring) 

**Topics**
+ [Requisitos previos para utilizar Amazon S3 como un destino](#CHAP_Target.S3.Prerequisites)
+ [Restricciones al uso de Amazon S3 como destino](#CHAP_Target.S3.Limitations)
+ [Seguridad](#CHAP_Target.S3.Security)
+ [Uso de Apache Parquet para almacenar objetos de Amazon S3](#CHAP_Target.S3.Parquet)
+ [Etiquetado de objetos de Amazon S3](#CHAP_Target.S3.Tagging)
+ [Creación de AWS KMS claves para cifrar los objetos de destino de Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Uso de la partición de carpetas basada en fechas](#CHAP_Target.S3.DatePartitioning)
+ [Carga paralela de fuentes particionadas cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring)
+ [AWS Glue Data Catalog Utilización con un objetivo de Amazon S3 para AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Uso del cifrado de datos, archivos Parquet y CDC en el destino de Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indicar operaciones de base de datos de origen en datos de S3 migrados](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipos de datos de destino para Parquet de S3](#CHAP_Target.S3.DataTypes)

## Requisitos previos para utilizar Amazon S3 como un destino
<a name="CHAP_Target.S3.Prerequisites"></a>

Antes de utilizar Amazon S3 como destino, compruebe que se cumplen las siguientes condiciones: 
+ El depósito de S3 que utiliza como destino se encuentra en la misma AWS región que la instancia de replicación de DMS que utiliza para migrar los datos.
+ La AWS cuenta que utilice para la migración tiene una función de IAM con acceso de escritura y eliminación al bucket de S3 que utilice como destino.
+ Este rol tiene acceso de etiquetado por lo que puede etiquetar cualquier objeto de S3 escrito en el bucket de destino.
+ Al rol de IAM se le ha agregado DMS (dms.amazonaws.com) como *entidad de confianza*. 
+ Para la AWS DMS versión 3.4.7 y versiones posteriores, el DMS debe acceder al bucket de origen a través de un punto final de VPC o una ruta pública. Para obtener información sobre los puntos de conexión de VPC, consulte [Configuración de puntos finales de VPC para AWS DMS](CHAP_VPC_Endpoints.md).

Para configurar el acceso de esta cuenta, asegúrese de que el rol asignado a la cuenta de usuario utilizada para crear la tarea de migración tenga el siguiente conjunto de permisos.

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

------

Para conocer los requisitos previos para utilizar la validación con S3 como objetivo, consulte [Requisitos previos de validación de destino de S3](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Restricciones al uso de Amazon S3 como destino
<a name="CHAP_Target.S3.Limitations"></a>

Al utilizar Amazon S3 como destino se aplican las siguientes restricciones:
+ No habilite el control de versiones para S3. Si necesita el control de versiones de S3, utilice las políticas de ciclo de vida para eliminar activamente las versiones antiguas. De lo contrario, es posible que se produzcan errores en la conexión de las pruebas de punto de conexión debido al tiempo de espera de una llamada a `list-object` de S3. Para crear una política de ciclo de vida para un bucket de S3, consulte [Administración del ciclo de vida del almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para eliminar una versión de un objeto de S3, consulte [Eliminación de versiones de objetos de un bucket con control de versiones habilitado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ En las versiones 3.4.7 y superiores se admite un bucket S3 habilitado para VPC (VPC de puerta de enlace).
+ Se admiten los siguientes comandos del lenguaje de definición de datos (DDL) para la captura de datos de cambios (CDC): truncar tabla, eliminar tabla, crear tabla, cambiar el nombre de la tabla, agregar columna, eliminar columna, cambiar nombre de columna y cambiar tipo de datos de columna. Tenga en cuenta que cuando se agrega, elimina o cambia el nombre de una columna en la base de datos de origen, no se registra ninguna sentencia ALTER en el bucket S3 de destino y AWS DMS no altera los registros creados anteriormente para que coincidan con la nueva estructura. Tras el cambio, AWS DMS crea todos los registros nuevos utilizando la nueva estructura de tablas.
**nota**  
Una operación DDL de truncamiento elimina todos los archivos y carpetas de tabla correspondientes de un bucket de S3. Puede usar la configuración de las tareas para desactivar ese comportamiento y configurar la forma en que DMS gestiona el comportamiento de DDL durante la captura de datos de cambios (CDC). Para obtener más información, consulte [Configuración de tareas para la administración de DDL del procesamiento de cambios](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ No se admite el modo LOB completo.
+ No se admiten cambios en la estructura de la tabla de origen durante la carga completa. Los cambios en los datos se admiten durante la carga completa.
+ Varias tareas que replican los datos de la misma tabla de origen al mismo bucket de punto de enlace de S3 de destino tiene como consecuencia que esas tareas escriban en el mismo archivo. Le recomendamos que especifique diferentes puntos de enlace de destino (buckets) si el origen de datos es de la misma tabla.
+ `BatchApply` no es compatible con un punto de conexión de S3. Es posible que el uso de la aplicación por lotes (por ejemplo, la configuración de tareas de metadatos de destino `BatchApplyEnabled`) para un objetivo de S3 provoque la pérdida de datos.
+ No puede utilizar `DatePartitionEnabled` ni `addColumnName` junto con `PreserveTransactions` o `CdcPath`.
+ AWS DMS no admite el cambio de nombre de varias tablas de origen a la misma carpeta de destino mediante reglas de transformación.
+ Si hay una escritura intensiva en la tabla de origen durante la fase de carga completa, DMS puede escribir registros duplicados en el bucket de S3 o cambios en caché.
+ Si configura la tarea con una `TargetTablePrepMode` de `DO_NOTHING`, DMS puede escribir registros duplicados en el bucket de S3 si la tarea se detiene y se reanuda bruscamente durante la fase de carga completa.
+ Si configura el punto de conexión de destino con una configuración `PreserveTransactions` de `true`, al volver a cargar una tabla no se borran los archivos CDC generados anteriormente. Para obtener más información, consulte [Captura de datos de cambios (CDC) incluida la orden de transacción en el destino de S3](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para conocer las limitaciones para utilizar la validación con S3 como destino, consulte [Limitaciones para utilizar la validación de destinos de S3](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

## Seguridad
<a name="CHAP_Target.S3.Security"></a>

Para utilizar Amazon S3 como destino, la cuenta utilizada para la migración debe tener acceso de escritura y de eliminación al bucket de Amazon S3 que se utiliza como destino. Especifique el nombre de recurso de Amazon (ARN) de un rol de IAM que tenga los permisos necesarios para acceder a Amazon S3. 

AWS DMS admite un conjunto de concesiones predefinidas para Amazon S3, conocidas como listas de control de acceso predefinidas (ACLs). Cada ACL predefinida tiene un conjunto de beneficiarios y permisos que puede utilizar para configurar permisos para el bucket de Amazon S3. Puede especificar una ACL predefinida utilizando `cannedAclForObjects` en el atributo de la cadena de conexión para el punto de enlace de destino de S3. Para obtener más información acerca del atributo de conexión adicional `cannedAclForObjects`, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). Para obtener más información sobre Amazon S3 enlatada ACLs, consulte [ACL enlatada](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl).

El rol de IAM que utilice para la migración tiene que ser capaz de realizar la operación de la API `s3:PutObjectAcl`.

## Uso de Apache Parquet para almacenar objetos de Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

El formato de valores separados por comas (.csv) es el formato de almacenamiento predeterminado para los objetos de destino de Amazon S3. Para un almacenamiento más compacto y consultas más rápidas, puede utilizar en su lugar Apache Parquet (.parquet) como formato de almacenamiento.

Apache Parquet es un formato de almacenamiento de archivos de código abierto diseñado originalmente para Hadoop. Para obtener más información en Apache Parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/).

Para definir .parquet como formato de almacenamiento para los objetos de destino de S3, puede utilizar los siguientes mecanismos:
+ La configuración de punto de enlace que proporcione como parámetros de un objeto JSON al crear el punto de enlace mediante la AWS CLI o la API para AWS DMS. Para obtener más información, consulte [Uso del cifrado de datos, archivos Parquet y CDC en el destino de Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Atributos de conexión adicionales que proporciona como una lista separada por puntos y coma al crear el punto de enlace. Para obtener más información, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

## Etiquetado de objetos de Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

Puede etiquetar objetos de Amazon S3 que una instancia de replicación crea especificando objetos JSON adecuados como parte de las reglas de asignación de tabla de tareas. Para obtener más información sobre requisitos y opciones para etiquetado de objetos de S3, incluidos nombre de etiqueta válidos, consulte [Etiquetado de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) en la *Guía del usuario de Amazon Simple Storage Service*. Para obtener más información sobre el mapeo de tablas utilizando JSON, consulte [Especificación de reglas de selección de tablas y transformaciones mediante JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Etiquete los objetos de S3 creados para tablas y esquemas especificados mediante uno o varios objetos JSON del tipo de regla `selection`. A continuación, siga este objeto (u objetos) `selection` mediante uno o varios objetos JSON del tipo de regla `post-processing` con acción `add-tag`. Estas reglas de post-procesamiento identifican los objetos de S3 que desea etiquetar y especifican los nombres y los valores de las etiquetas que desea añadir a estos objetos de S3.

Puede encontrar los parámetros para especificar en objetos JSON del tipo de regla `post-processing` en la siguiente tabla.

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

Al especificar varios tipos de reglas `post-processing` para etiquetar una selección de objetos de S3, cada objeto de S3 se etiqueta utilizando solo un objeto `tag-set` de una regla de posprocesamiento. El conjunto particular de etiquetas usado para etiquetar un determinado objeto de S3 es el de la regla de posprocesamiento cuyo localizador de objeto asociado coincide mejor con dicho objeto de S3. 

Por ejemplo, supongamos que dos reglas de posprocesamiento identifican el mismo objeto de S3. Supongamos también que el localizador de objeto de una regla utiliza comodines y el localizador de objeto de la otra regla utiliza una coincidencia exacta para identificar el objeto de S3 (sin comodines). En este caso, se utiliza el conjunto de etiquetas asociado a la regla de posprocesamiento con la coincidencia exacta para etiquetar el objeto de S3. Si varias reglas de posprocesamiento coinciden con un objeto de S3 dado igual de bien, se utiliza para etiquetar el conjunto de etiquetas asociado con la primera regla de posprocesamiento.

**Example Agregar etiquetas estáticas a un objeto de S3 creado para una única tabla y esquema**  
La siguiente selección y reglas de posprocesamiento añaden tres etiquetas (`tag_1`, `tag_2` y `tag_3` con los valores estáticos correspondientes `value_1`, `value_2` y `value_3`) a un objeto de S3 creado. Este objeto de S3 corresponde a única tabla en el origen denominada `STOCK` con un esquema denominado `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 Agregar etiquetas estáticas y dinámicas a objetos de S3 creados para varias tablas y esquemas**  
El siguiente ejemplo tiene una selección y dos reglas de posprocesamiento, donde la entrada del origen incluye todas las tablas y todos sus esquemas.  

```
{
    "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 primera regla de posprocesamiento añade dos etiquetas (`dw-schema-name` y `dw-schema-table`) con valores dinámicos correspondientes (`${schema-name}` y `my_prefix_${table-name}`) para casi todos los objetos de S3 creados en el destino. La excepción es el objeto de S3 identificado y etiquetado con la segunda regla de posprocesamiento. De este modo, cada objeto de S3 de destino identificado por el localizador de objeto comodín se crea con etiquetas que identifican el esquema y la tabla a la que corresponde en el origen.  
La segunda regla de posprocesamiento añade `tag_1` y `tag_2` con los valores estáticos correspondientes `value_1` y `value_2` a un objeto de S3 creado que se identifica mediante un localizador de objeto de coincidencia exacta. Este objeto de S3 creado corresponde por tanto a la única tabla en el origen denominada `ITEM` con un esquema denominado `aat`. Debido a la coincidencia exacta, estas etiquetas reemplazan a cualquier etiquetas de este objeto añadida a partir de la primera regla de posprocesamiento, que coincide con objetos de S3 solo por el comodín.

**Example Agregar nombres y valores de etiqueta dinámicos a objetos de S3**  
El siguiente ejemplo tiene dos reglas de selección y una regla de posprocesamiento. Aquí, la entrada del origen incluye solo la tabla `ITEM` en el esquema `retail` o `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"
              }
            ]
    ]
}
```
La etiqueta definida para la regla de posprocesamiento añade dos etiquetas (`dw-schema-name` y `dw-schema-table`) a todos los objetos de S3 creados para la tabla `ITEM` en el destino. La primera etiqueta tiene el valor dinámico `"${schema-name}"` y la segunda etiqueta tiene un valor estático `"my_prefix_ITEM"`. De este modo, cada objeto de S3 de destino se crea con etiquetas que identifican el esquema y la tabla a la que corresponde en el origen.   
Además, el conjunto de etiquetas añade dos etiquetas adicionales con nombres dinámicos (`${schema-name}_ITEM_tag_1` y `"${schema-name}_ITEM_tag_2"`). Estos tienen los valores estáticos correspondientes `value_1` y `value_2`. Por lo tanto, cada una de estas etiquetas se denomina según el esquema actual, `retail` o `wholesale`. No se puede crear un nombre de etiqueta dinámico duplicado en este objeto, ya que cada objeto se crea para un solo nombre de esquema único. El nombre de esquema se utiliza para crear un nombre de etiqueta único por lo demás.

## Creación de AWS KMS claves para cifrar los objetos de destino de Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Puede crear y usar AWS KMS claves personalizadas para cifrar los objetos de destino de Amazon S3. Después de crear una clave KMS, puede utilizarla para cifrar objetos mediante uno de los métodos siguientes al crear el punto de enlace de destino S3:
+ Utilice las siguientes opciones para objetos de destino de S3 (con el formato de almacenamiento de archivos .csv predeterminado) al ejecutar el comando `create-endpoint` mediante la 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"}'
  ```

  Aquí, su `your-KMS-key-ARN` es el Nombre de recurso de Amazon (ARN) de la clave de KMS y es obligatorio que su rol de IAM tenga permisos de acceso. Para ello, consulte [Uso del cifrado de datos, archivos Parquet y CDC en el destino de Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Establezca el atributo de conexión adicional `encryptionMode` al valor `SSE_KMS` y el atributo de conexión adicional `serverSideEncryptionKmsKeyId` al ARN de su clave de KMS. Para obtener más información, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

Para cifrar objetos de destino de Amazon S3 con una clave de KMS, necesita un rol de IAM que tenga permisos para acceder al bucket de Amazon S3. A continuación, se accede a este rol de IAM en una política (una política de claves) asociada a la clave de cifrado que cree. Puede hacer esto en su propia consola de IAM mediante la creación de lo siguiente:
+ Una política con permisos para acceder al bucket de Amazon S3.
+ Un rol de IAM con esta política.
+ Una clave de cifrado de claves de KMS con una política de claves que hace referencia a este rol.

En los procedimientos siguientes se describe cómo hacerlo.

**Creación de una política de IAM con permisos para acceder al bucket de Amazon S3**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **Policies (Políticas)**. Se abre la página **Policies (Políticas)**.

1. Elija **Crear política**. Se abre la página **Crear política**.

1. Elija **Service (Servicio)** y, a continuación, **S3**. Aparece una lista de permisos de acción.

1. Elija **Expand all (Ampliar todo)** para ampliar la lista y elegir los siguientes permisos como mínimo:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Elija cualquier otro permiso que necesite y, a continuación, elija **Collapse all (Contraer todo)** para contraer la lista.

1. Elija **Resources (Recursos)** para especificar los recursos a los que desea acceder. Como mínimo, elija **Todos los recursos** para proporcionar acceso general a recursos de Amazon S3.

1. Añada cualquier otra condición o permiso que necesite, a continuación, elija **Review policy (Revisar política)**. Compruebe los resultados en la página **Review policy (Revisar política)**.

1. Si la configuración es la que necesita, introduzca un nombre para la política (por ejemplo, `DMS-S3-endpoint-access`) y cualquier descripción, a continuación, elija **Create policy (Crear política)**. Se abre la página **Policies (Políticas)** con un mensaje que indica que se ha creado la política.

1. Busque y seleccione el nombre de la política en la lista **Policies (Políticas)**. Aparece la página **Summary (Resumen)** que muestra JSON para la política similar al siguiente.

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

****  

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

------

Ya ha creado la nueva política para acceder a recursos de Amazon S3 para cifrado con un nombre especificado, por ejemplo, `DMS-S3-endpoint-access`.

**Creación de un rol de IAM con esta política**

1. En la consola de IAM, elija **Roles** en el panel de navegación. Se abre la página de detalle **Roles**.

1. Elija **Crear rol**. Se abre la página **Create role (Crear rol)**.

1. Con el AWS servicio seleccionado como entidad de confianza, elija **DMS** como servicio para usar la función de IAM.

1. Elija **Siguiente: permisos**. La vista **Attach permissions policies (Asociar políticas de permisos)** aparece en la página **Create role (Crear rol)**.

1. Busque y seleccione la política de IAM para el rol de IAM que creó en el procedimiento anterior (`DMS-S3-endpoint-access`).

1. Elija **Siguiente: etiquetas**. Aparece la vista **Add tags (Añadir etiquetas)** en la página **Create role (Crear rol)**. A continuación, puede añadir las etiquetas que desee.

1. Elija **Siguiente: Revisar**. Aparece la vista **Review (Revisar)** en la página **Create role (Crear rol)**. Aquí, puede verificar los resultados.

1. Si la configuración es la que necesita, introduzca un nombre para el rol (requerido, por ejemplo, `DMS-S3-endpoint-access-role`) y cualquier descripción adicional, a continuación, elija **Create role (Crear rol)**. Se abre la página de detalle **Roles** con un mensaje que indica que el rol se ha creado.

Ya ha creado el nuevo rol para acceder a recursos de Amazon S3 para cifrado con un nombre especificado, por ejemplo, `DMS-S3-endpoint-access-role`.

**Creación de una clave de cifrado de claves de KMS con una política de claves que hace referencia al rol de IAM**
**nota**  
Para obtener más información sobre cómo AWS DMS funciona con las claves de AWS KMS cifrado, consulte. [Establecer una clave de cifrado y especificar AWS KMS los permisos](CHAP_Security.md#CHAP_Security.EncryptionKey)

1. Inicie sesión en la consola AWS Key Management Service (AWS KMS) Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para cambiarla Región de AWS, usa el selector de regiones en la esquina superior derecha de la página.

1. En el panel de navegación, elija **Claves administradas por el cliente**.

1. Elija **Crear clave**. Se abrirá la página **Configure key (Configurar clave)**.

1. En **Key type (Tipo de clave)**, elija **Symmetric (Simétrica)**.
**nota**  
Al crear esta clave, solo puede crear una clave simétrica, ya que todos los AWS servicios, como Amazon S3, solo funcionan con claves de cifrado simétricas.

1. Elija **Advanced Options**. En **Key material origin (Origen del material de la clave)**, asegúrese de elegir **KMS** y, a continuación, seleccione **Next (Siguiente)**. Se abrirá la página **Add labels (Agregar etiquetas)**.

1. En **Create alias and description (Crear alias y descripción)**, escriba un alias para la clave (por ejemplo, `DMS-S3-endpoint-encryption-key`) y una descripción adicional.

1. En **Tags (Etiquetas)**, agregue las etiquetas que desee para ayudar a identificar la clave y realizar el seguimiento de su uso y, a continuación, seleccione **Next (Siguiente)**. Se abre la página **Define key administrative permissions (Definir permisos administrativos clave)**, que muestra una lista de usuarios y roles entre los que puede elegir.

1. Añada los usuarios y roles que desee para administrar la clave. Asegúrese de que estos usuarios y roles tengan los permisos necesarios para administrar la clave. 

1. En **Key deletion (Eliminación de clave)**, elija si los administradores de claves pueden eliminar la clave; a continuación, seleccione **Next (Siguiente)**. Se abre la página **Define key usage permissions (Definir permisos de uso de claves)** que muestra una lista adicional de usuarios y roles entre los que puede elegir.

1. En **Esta cuenta**, elija los usuarios disponibles que deberán poder realizar operaciones criptográficas en los objetivos de Amazon S3. Además, elija el rol que creó anteriormente en **Roles** para habilitar el acceso con el fin de cifrar los objetos de destino de Amazon S3, por ejemplo `DMS-S3-endpoint-access-role`.

1. **Si desea añadir otras cuentas que no figuran en la lista para que tengan el mismo acceso, en **Otras AWS cuentas**, seleccione **Añadir otra AWS cuenta** y, a continuación, seleccione Siguiente.** Se abre la página **Review and edit key policy (Revisar y editar la política de claves)** que muestra el JSON de la política de claves que puede revisar y editar escribiendo en el JSON existente. Aquí puede ver en qué puntos de la política de claves se hace referencia al rol y a los usuarios (por ejemplo, `Admin` y `User1`) que eligió en el paso anterior. También puede ver las distintas acciones de claves permitidas para las distintas entidades principales (usuarios y roles), tal y como se muestra en el siguiente ejemplo.

------
#### [ 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. Seleccione **Finalizar**. Se abre la página de **claves de cifrado** con un mensaje que indica que se ha creado la clave de KMS.

Ahora ha creado una nueva clave de KMS con un alias especificado (por ejemplo, `DMS-S3-endpoint-encryption-key`). Esta clave permite cifrar AWS DMS los objetos de destino de Amazon S3.

## Uso de la partición de carpetas basada en fechas
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS admite particiones de carpetas S3 en función de la fecha de confirmación de la transacción cuando utiliza Amazon S3 como punto de enlace de destino. Al utilizar la partición de carpetas basada en fechas, puede escribir datos de una sola tabla de origen en una estructura de carpetas jerárquica temporal en un bucket de S3. Al particionar carpetas al crear un punto de conexión de destino de S3, puede hacer lo siguiente:
+ Administrar mejor los objetos de S3
+ Limitar el tamaño de cada carpeta de S3
+ Optimizar las consultas de lago de datos u otras operaciones posteriores

Puede habilitar la partición de carpetas basada en fechas al crear un punto de conexión de destino de S3. Puede activarlo al migrar los datos existentes y replicar los cambios en curso (carga completa \$1 CDC) o al replicar solo los cambios de datos (solo CDC). Al migrar los datos existentes y replicar los cambios en curso, solo se particionarán los cambios en curso. Use la configuración de punto de conexión de destino siguiente:
+ `DatePartitionEnabled`: especifica la partición en función de las fechas. Establezca esta opción booleana en `true` para dividir las carpetas del bucket de S3 en función de las fechas de confirmación de transacciones. 

  No puede usar esta configuración con `PreserveTransactions` ni `CdcPath`.

  El valor predeterminado es `false`. 
+ `DatePartitionSequence`: identifica la secuencia del formato de fecha que se va a utilizar durante la partición de carpetas. Establezca esta opción ENUM en `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` o `DDMMYYYY`. El valor predeterminado es `YYYYMMDD`. Utilice esta configuración cuando `DatePartitionEnabled` esté establecido en `true.`
+ `DatePartitionDelimiter`: especifica un delimitador de separación de fechas para utilizar durante la creación de particiones de carpetas. Establezca esta opción ENUM en `SLASH`, `DASH`, `UNDERSCORE` o `NONE`. El valor predeterminado es `SLASH`. Utilice esta configuración cuando `DatePartitionEnabled` esté establecido en `true`.
+ `DatePartitionTimezone`: al crear un punto de conexión de destino de S3, defina `DatePartitionTimezone` para convertir la hora UTC actual en una zona horaria específica. La conversión se produce cuando se crea una carpeta de partición de fecha y se genera un nombre de archivo de CDC. El formato de la zona horaria es área o ubicación. Utilice este parámetro cuando `DatePartitionedEnabled` se establece en `true`, tal como se muestra en el ejemplo siguiente:

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

El siguiente ejemplo muestra cómo habilitar la partición de carpetas basada en fechas, con los valores predeterminados para la secuencia de partición de datos y el delimitador. Utiliza la `--s3-settings '{json-settings}'` opción de AWS CLI. `create-endpoint`comando. 

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

## Carga paralela de fuentes particionadas cuando se utiliza Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

Puede configurar una carga completa paralela de orígenes de datos particionados para los destinos de Amazon S3. Este enfoque mejora los tiempos de carga para migrar datos particionados desde los motores de bases de datos de origen compatibles al origen de S3. Para mejorar los tiempos de carga de los datos de origen particionados, debe crear subcarpetas de destino de S3 asignadas a las particiones de todas las tablas de la base de datos de origen. Estas subcarpetas enlazadas a particiones permiten AWS DMS ejecutar procesos paralelos para llenar cada subcarpeta del destino.

Para configurar una carga completa paralela de un objetivo de S3, S3 admite tres tipos de reglas `parallel-load` para la regla `table-settings` de asignación de tablas:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Para obtener más información sobre estos tipos de regla de carga paralela, consulte [Reglas y operaciones de configuración de tablas y recopilaciones](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Para los tipos de reglas `partitions-auto` y `partitions-list`, AWS DMS utiliza el nombre de cada partición del punto de conexión de origen para identificar la estructura de subcarpetas de destino, de la siguiente manera.

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

En este caso, la ruta de la subcarpeta donde se migran y almacenan los datos en el destino de S3 incluye una subcarpeta `partition_name` adicional que corresponde a una partición de origen con el mismo nombre. A continuación, esta subcarpeta `partition_name` almacena uno o más archivos `LOADseq_num.csv` que contienen datos migrados desde la partición de origen especificada. Aquí, `seq_num` es el sufijo del número de secuencia en el nombre del archivo .csv, por ejemplo, `00000001` en el archivo .csv con el nombre, `LOAD00000001.csv`.

Sin embargo, algunos motores de bases de datos, como MongoDB y DocumentDB, no tienen el concepto de particiones. Para estos motores de bases de datos, AWS DMS agrega el índice de segmentos de origen en ejecución como prefijo al nombre del archivo.csv de destino, de la siguiente manera.

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

En este caso, los archivos `SEGMENT1_LOAD00000001.csv` y `SEGMENT1_LOAD00000002.csv` se denominan con el mismo prefijo de índice del segmento de origen en ejecución, `SEGMENT1`. Se denominan así porque los datos de origen migrados para estos dos archivos .csv están asociados al mismo índice de segmentos de origen en ejecución. Por otro lado, los datos migrados almacenados en cada uno de los archivos `SEGMENT2_LOAD00000009.csv` y `SEGMENT3_LOAD0000000A.csv` de destino están asociados a diferentes índices de segmentos de origen en ejecución. Cada archivo tiene su nombre de archivo prefijado con el nombre de su índice de segmentos en ejecución, `SEGMENT2` y `SEGMENT3`.

Para el tipo de carga paralela `ranges`, los nombres y los valores de las columnas se definen mediante la configuración de `columns` y `boundaries` de las reglas de `table-settings`. Con estas reglas, puede especificar las particiones correspondientes a los nombres de los segmentos, de la siguiente manera.

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

Aquí, la configuración de `segment-names` define los nombres de tres particiones para migrar datos en paralelo en el destino de S3. Los datos migrados se cargan en paralelo y se almacenan en archivos .csv en las subcarpetas de particiones en el orden siguiente.

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

Aquí, AWS DMS almacena una serie de archivos.csv en cada una de las tres subcarpetas de particiones. La serie de archivos .csv de cada subcarpeta de partición se nombra de forma incremental, empezando por `LOAD00000001.csv` hasta que se migren todos los datos.

En algunos casos, es posible que no asigne un nombre explícito a las subcarpetas de partición para un tipo de carga paralela de `ranges` mediante la configuración de `segment-names`. En este caso, AWS DMS aplica la opción predeterminada de crear cada serie de archivos.csv en su subcarpeta. `table_name` Aquí, AWS DMS antepone los nombres de archivo de cada serie de archivos .csv con el nombre del índice del segmento de origen en ejecución, de la siguiente manera.

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

## Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Amazon S3 de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando incluido [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)en la sintaxis `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**nota**  
DMS escribe los cambios en los archivos de Parquet en función del orden de confirmación de la base de datos de origen, pero al migrar varias tablas, el orden original de las transacciones no se conserva debido a la partición en la tabla. Para conservar la información de la secuencia de transacciones, configure el punto de conexión `TimestampColumnName` de manera que incluya la marca de tiempo de confirmación de origen para cada fila, que luego podrá utilizar en el procesamiento posterior para reconstruir la secuencia de transacciones original. A diferencia del formato CSV, que ofrece la configuración `PreserveTransactions`, los archivos de Parquet gestionan las transacciones de forma diferente debido a su estructura de almacenamiento en columnas. Sin embargo, este enfoque permite hacer un seguimiento preciso de los tiempos de confirmación del origen, permite reconstruir las órdenes de transacción después de la migración y permite procesar los datos de forma eficiente, manteniendo la coherencia de datos.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Amazon S3 como destino.


| **Opción** | **Descripción** | 
| --- | --- | 
| CsvNullValue |  Un parámetro opcional que especifica cómo se AWS DMS tratan los valores nulos. Mientras se maneja el valor null (nulo), se puede usar este parámetro para pasar una cadena definida por el usuario como nula al escribir en el destino. Por ejemplo, cuando las columnas de destino son anulables, puede usar esta opción para diferenciar entre el valor de cadena vacía y el valor nulo.  Valor predeterminado: `""` Valores válidos: cualquier cadena válida Ejemplo: `--s3-settings '{"CsvNullValue": "NULL"}'` Si el valor de la columna de la base de datos de origen es null, en el archivo CSV de S3, el valor de la columna es `NULL` en lugar de la cadena “”.  | 
| AddColumnName |  Un parámetro opcional al establecer en `true` o `y` que puede usar para añadir información del nombre de la columna al archivo de salida .csv. No puede utilizar este parámetro con `PreserveTransactions` ni `CdcPath`. Valor predeterminado: `false` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Utilice la configuración del punto de conexión de destino de S3 `AddTrailingPaddingCharacter` para agregar relleno a los datos de la cadena. El valor predeterminado es `false`. Tipo: Booleano Ejemplo: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Parámetro opcional para definir un nombre de carpeta en el bucket de S3. Si se facilitan, los objetos de destino se crean como archivos .parquet o .csv en la ruta `BucketFolder/schema_name/table_name/`. Si no se especifica este parámetro, la ruta utilizada es `schema_name/table_name/`.  Ejemplo: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  El nombre del bucket de S3 donde los objetos de destino S3 se crean como archivos .csv o.parquet. Ejemplo: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Un valor que AWS DMS permite especificar una lista de control de acceso predefinida (predefinida) para los objetos creados en el bucket de S3 como archivos.csv o.parquet. Para obtener más información sobre Amazon S3 enlatada ACLs, consulte [ACL enlatada](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) en la *Guía para desarrolladores de Amazon S3.* Valor predeterminado: NINGUNO Los valores válidos para este atributo son: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Ejemplo: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Un parámetro opcional durante una carga de captura de datos de cambios (CDC) para escribir solo operaciones INSERT en archivos de salida de valores separados por comas (.csv) o almacenamiento en columnas (.parquet). Por defecto (el ajuste `false`), el primer campo en un registro .csv o .parquet contiene la letra I (INSERT), U (UPDATE) o D (DELETE). Esta carta indica si la fila se insertó, actualizó o eliminó en la base de datos de origen para una carga de CDC en el destino. `cdcInsertsOnly`Si `y` se `true` establece INSERTs en o, solo se migran al archivo.csv o .parquet desde la base de datos de origen. Solo para el formato .csv, la forma en que se registran estas operaciones INSERT depende del valor de `IncludeOpForFullLoad`. Si `IncludeOpForFullLoad` está establecido en `true`, el primer campo de cada registro CDC se establece en I para indicar la operación INSERT en el origen. Si `IncludeOpForFullLoad` se establece en `false`, cada registro CDC se escribe sin un primer campo para indicar la operación INSERT en el origen. Para obtener más información acerca de cómo estos parámetros funcionan juntos, consulte [Indicar operaciones de base de datos de origen en datos de S3 migrados](#CHAP_Target.S3.Configuring.InsertOps). Valor predeterminado: `false` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Habilita una carga de captura de datos de cambio (CDC) para escribir las operaciones INSERT y UPDATE en archivos de salida .csv o .parquet (almacenamiento en columnas). La configuración predeterminada es`false`, pero cuando `cdcInsertsAndUpdates` se establece en `true` o `y` INSERTs y UPDATEs desde la base de datos de origen se migran al archivo.csv o .parquet.  Solo en el caso del formato de archivo.csv, la forma en que UPDATEs se registren estos INSERTs archivos depende del valor del parámetro. `includeOpForFullLoad` Si `includeOpForFullLoad` se establece en `true`, el primer campo de cada registro de CDC se establece en `I` o `U` para indicar que se trata de operaciones INSERT y UPDATE en el origen. Pero si `includeOpForFullLoad` se establece en `false`, los registros de CDC se escriben sin ninguna indicación relativa a las operaciones INSERT o UPDATE en el origen.   Para obtener más información acerca de cómo estos parámetros funcionan juntos, consulte [Indicar operaciones de base de datos de origen en datos de S3 migrados](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` y `cdcInsertsAndUpdates` no se pueden establecer ambos en «true» para el mismo punto de enlace. Establezca `cdcInsertsOnly` o `cdcInsertsAndUpdates` en `true` para el mismo punto de conexión, pero no ambos.   Valor predeterminado: `false` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Especifica la ruta de la carpeta de los archivos de CDC. Para un origen S3, esta configuración es obligatoria si una tarea captura datos de cambios; de lo contrario, es opcional. Si `CdcPath` está configurado, DMS lee los archivos CDC desde esta ruta y replica los cambios de datos en el punto de conexión de destino. Para un destino de S3 si establece `PreserveTransactions` en verdadero, DMS verifica que ha establecido este parámetro en una ruta de carpeta en su destino de S3 donde DMS puede guardar la orden de transacción para la carga de CDC. DMS crea esta ruta de carpeta CDC en el directorio de trabajo de destino de S3 o en la ubicación de destino de S3 especificada mediante `BucketFolder` y `BucketName`. No puede utilizar este parámetro con `DatePartitionEnabled` ni `AddColumnName`. Tipo: cadena Por ejemplo, si especifica `CdcPath` como `MyChangedData` y `BucketName` como `MyTargetBucket`, pero no especifica `BucketFolder`, DMS crea la siguiente ruta de la carpeta de CDC: `MyTargetBucket/MyChangedData`.  Si especifica la misma `CdcPath` y `BucketName` como `MyTargetBucket` y `BucketFolder` como `MyTargetData`, DMS crea la siguiente ruta de la carpeta de CDC: `MyTargetBucket/MyTargetData/MyChangedData`. Esta configuración se admite en AWS DMS las versiones 3.4.2 y posteriores. Al capturar los cambios de datos en el orden de las transacciones, el DMS siempre almacena los cambios de fila en archivos.csv, independientemente del valor de la configuración de DataFormat S3 en el destino.   | 
|  `CdcMaxBatchInterval`  |  Condición de duración máxima del intervalo, definida en segundos, para enviar un archivo a Amazon S3. Valor predeterminado: 60 segundos Cuando `CdcMaxBatchInterval` se especifica y `CdcMinFileSize` se especifica, la escritura del archivo se desencadena según la condición de parámetro que se cumpla primero.  A partir de la AWS DMS versión 3.5.3, si se utiliza PostgreSQL o Aurora PostgreSQL como origen y Amazon S3 con Parquet como destino`confirmed_flush_lsn`, la frecuencia de las actualizaciones depende de la cantidad de datos que el endpoint de destino esté configurado para conservar en la memoria. AWS DMS lo `confirmed_flush_lsn` devuelve a la fuente solo después de que los datos de la memoria se hayan escrito en Amazon S3. Si configura el parámetro `CdcMaxBatchInterval` con un valor superior, es posible que observe un aumento en el uso de las ranuras de replicación en la base de datos de origen.   | 
|  `CdcMinFileSize`  |  Condición de tamaño de archivo mínimo definido en kilobytes para enviar un archivo a Amazon S3. Valor predeterminado: 32 000 KB Cuando `CdcMinFileSize` se especifica y `CdcMaxBatchInterval` se especifica, la escritura del archivo se desencadena según la condición de parámetro que se cumpla primero.  | 
|  `PreserveTransactions`  |  Si se establece en `true`, DMS guarda la orden de transacción para una carga de captura de datos de cambios (CDC) en el destino de Amazon S3 especificado por `CdcPath`. No puede utilizar este parámetro con `DatePartitionEnabled` ni `AddColumnName`. Tipo: Booleano Al capturar los cambios de datos en el orden de las transacciones, el DMS siempre almacena los cambios de fila en archivos.csv, independientemente del valor de la configuración de DataFormat S3 en el destino. Esta configuración se admite en AWS DMS las versiones 3.4.2 y posteriores.   | 
| IncludeOpForFullLoad |  Un parámetro opcional durante una carga completa para escribir las operaciones INSERT solo en archivos de salida de valores separados por comas (.csv). Para la carga completa, los registros solo se pueden insertar. De forma predeterminada (el valor `false`), no se registra información en estos archivos de salida para una carga completa para indicar que las filas se insertaron en la base de datos de origen. Si `IncludeOpForFullLoad` se establece en `true` o `y`, la operación INSERT se registra como una anotación I en el primer campo del archivo .csv.  Este parámetro funciona junto con `CdcInsertsOnly` o `CdcInsertsAndUpdates` para la salida solo en archivos .csv. Para obtener más información acerca de cómo estos parámetros funcionan juntos, consulte [Indicar operaciones de base de datos de origen en datos de S3 migrados](#CHAP_Target.S3.Configuring.InsertOps).  Valor predeterminado: `false` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Si se establece un parámetro opcional en `GZIP`, utiliza GZIP para comprimir los archivos .csv de destino. Cuando este parámetro se establece en el valor predeterminado, deja los archivos sin comprimir. Valor predeterminado: `NONE` Valores válidos: `GZIP` o `NONE` Ejemplo: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  Delimitador utilizado para separar columnas en los archivos .csv de origen. El valor predeterminado es una coma (,). Ejemplo: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  Delimitador utilizado para separar filas en los archivos de origen .csv. El valor predeterminado es una nueva línea (\$1n). Ejemplo: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Un valor que especifica el tamaño máximo (en KB) de los archivos .csv que se crean al migrar a un destino de S3 durante la carga completa. Valor predeterminado: 1 048 576 KB (1 GB) Valores válidos: 1-1 048 576 Ejemplo: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Un parámetro opcional que se utiliza para establecer un comportamiento de conformidad con RFC de los datos migrados a Amazon S3 utilizando solo el formato de archivo .csv. Cuando este valor se establece en `true` o `y` utiliza Amazon S3 como destino, si los datos contienen comillas, comas o caracteres de nueva línea, AWS DMS encierra toda la columna con un par adicional de comillas dobles («). Cada comilla dentro de los datos se repite dos veces. Este formato cumple con RFC 4180. Valor predeterminado: `true` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  El modo de cifrado del lado del servidor que desea que cifre sus archivos de objeto .csv o .parquet copiados en S3. Los valores válidos son `SSE_S3` (cifrado del lado del servidor de S3) o `SSE_KMS` (cifrado de clave de KMS). Si elige `SSE_KMS`, establezca el parámetro `ServerSideEncryptionKmsKeyId` en el nombre de recurso de Amazon (ARN) para la clave de KMS que se va a utilizar para cifrado.  También puede usar el comando `modify-endpoint` de la CLI para cambiar el valor del atributo `EncryptionMode` para un punto de conexión existente de `SSE_KMS` a `SSE_S3`. Sin embargo, no se puede cambiar el valor `EncryptionMode` de `SSE_S3` a `SSE_KMS`.  Valor predeterminado: `SSE_S3` Valores válidos: `SSE_S3` o `SSE_KMS` Ejemplo: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Si establece `EncryptionMode` en `SSE_KMS`, establezca este parámetro en el nombre de recurso de Amazon (ARN) para la clave de KMS. Para encontrar este ARN, selecciona el alias de clave en la lista de AWS KMS claves creadas para tu cuenta. Al crear la clave, debe asociar políticas y roles específicos asociados a esta clave de KMS. Para obtener más información, consulte [Creación de AWS KMS claves para cifrar los objetos de destino de Amazon S3](#CHAP_Target.S3.KMSKeys). Ejemplo: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  El formato de salida de los archivos que se AWS DMS utilizan para crear los objetos de S3. Para los destinos de Amazon S3, AWS DMS admite archivos.csv o.parquet. Los archivos .parquet tienen un formato de almacenamiento binario en columnas con opciones de compresión eficientes y un rendimiento de consultas más rápido. Para obtener más información sobre los archivos .parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/). Valor predeterminado: `csv` Valores válidos: `csv` o `parquet` Ejemplo: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  El tipo de codificación Parquet. Las opciones del tipo de codificación incluyen lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.S3.html) Valor predeterminado: `rle-dictionary` Valores válidos: `rle-dictionary`, `plain` o `plain-dictionary` Ejemplo: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  El tamaño máximo permitido, en bytes, para una página de diccionario en un archivo .parquet. Si una página de diccionario supera este valor, la página utiliza la codificación sin formato. Valor predeterminado: 1 024 000 (1 MB) Valores válidos: cualquier valor entero válido Ejemplo: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  La cantidad de filas en un grupo de filas de un archivo .parquet. Valor predeterminado: 10 024 (10 KB) Valores válidos: cualquier entero válido Ejemplo: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  El tamaño máximo permitido, en bytes, para una página de datos en un archivo .parquet. Valor predeterminado: 1 024 000 (1 MB) Valores válidos: cualquier entero válido Ejemplo: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  La versión del formato de archivo .parquet. Valor predeterminado: `PARQUET_1_0` Valores válidos: `PARQUET_1_0` o `PARQUET_2_0` Ejemplo: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Establezca en `true` o `y` para habilitar las estadísticas acerca de las páginas de archivo .parquet y grupos de filas. Valor predeterminado: `true` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Un parámetro opcional para incluir una columna de marca temporal en los datos de punto de enlace de destino de S3. AWS DMS incluye una `STRING` columna adicional en los archivos de objetos .csv o .parquet de los datos migrados si se establece en un valor que no esté en `TimestampColumnName` blanco. Para una carga completa, cada fila de esta columna de marca temporal contiene una marca temporal que indica cuándo DMS transfirió los datos del origen al destino.  Para una carga CDC, cada fila de la columna de marca temporal contiene la marca temporal de confirmación de esa fila en la base de datos de origen. El formato de cadena para esta columna de marca de temporal es `yyyy-MM-dd HH:mm:ss.SSSSSS`. De forma predeterminada, la precisión de este valor se encuentra en microsegundos. Para una carga CDC, el redondeo de la precisión depende de la marca de tiempo de confirmación compatible con DMS para la base de datos de origen. Cuando el parámetro `AddColumnName` está establecido en `true`, DMS incluye también el nombre de la columna de marca temporal definido como el valor no vacío de `TimestampColumnName`. Ejemplo: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Cuando se establece en `true`, este parámetro utiliza la hora de inicio de la tarea como el valor de la columna de marca temporal en lugar de la hora en que se escriben los datos en el destino. Para la carga completa, cuando `UseTaskStartTimeForFullLoadTimestamp` se establece en `true`, cada fila de la columna de marca temporal contiene la hora de inicio de la tarea. Para las cargas de CDC, cada fila de la columna de marca temporal contiene la hora de confirmación de la transacción. Cuando `UseTaskStartTimeForFullLoadTimestamp` se establece en `false`, la marca de tiempo de carga completa en la columna de marca de tiempo aumenta con la hora en que los datos llegan al destino. Valor predeterminado: `false` Valores válidos: `true`, `false` Ejemplo: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` ayuda a que el objetivo de S3 `TimestampColumnName` para una carga completa se pueda ordenar con `TimestampColumnName` para una carga de CDC.  | 
| ParquetTimestampInMillisecond |  Un parámetro opcional que especifica la precisión de cada `TIMESTAMP` valor de las columnas escrito en un archivo de objeto S3 en formato .parquet. Si este atributo está establecido en `true` o`y`, AWS DMS escribe todas las `TIMESTAMP` columnas de un archivo con formato .parquet con una precisión de milisegundos. De lo contrario, DMS las escribe con una precisión de microsegundos. Actualmente, Amazon Athena y solo AWS Glue puede gestionar valores con una precisión de milisegundos. `TIMESTAMP` Establezca este atributo como verdadero para los archivos de objetos de punto de conexión de S3 con formato .parquet solo si planea consultar o procesar los datos con Athena o AWS Glue.    AWS DMS escribe cualquier valor de `TIMESTAMP` columna escrito en un archivo S3 en formato.csv con una precisión de microsegundos.   La configuración de este atributo no tiene ningún efecto en el formato de cadena del valor de la columna de marca de tiempo si establece el atributo `TimestampColumnName`.    Valor predeterminado: `false` Valores válidos: `true`, `false`, `y`, `n` Ejemplo: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Para generar una AWS Glue Data Catalog, defina esta configuración de punto final en. `true` Valor predeterminado: `false` Valores válidos: `true`, `false`, Ejemplo: `--s3-settings '{"GlueCatalogGeneration": true}'` **Nota: **No use `GlueCatalogGeneration` con `PreserveTransactions` y `CdcPath`.  | 

## AWS Glue Data Catalog Utilización con un objetivo de Amazon S3 para AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue es un servicio que proporciona formas sencillas de categorizar los datos y consta de un repositorio de metadatos conocido como AWS Glue Data Catalog. Puede realizar la integración AWS Glue Data Catalog con su terminal de destino de Amazon S3 y consultar los datos de Amazon S3 a través de otros AWS servicios, como Amazon Athena. Amazon Redshift funciona con esta AWS Glue opción prediseñada, pero AWS DMS no la admite. 

Para generar el catálogo de datos, defina la configuración del `GlueCatalogGeneration` punto final en`true`, como se muestra en el siguiente AWS CLI ejemplo.

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

Para una tarea de replicación de carga completa que incluye datos de tipo `csv`, establezca `IncludeOpForFullLoad` en `true`.

No use `GlueCatalogGeneration` con `PreserveTransactions` y `CdcPath`. El AWS Glue rastreador no puede conciliar los diferentes esquemas de archivos almacenados en lo especificado. `CdcPath`

Para que Amazon Athena indexe los datos de Amazon S3 y para que usted pueda consultarlos mediante consultas SQL estándar a través de Amazon Athena, el rol de IAM asociado al punto de conexión debe tener la siguiente política:

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

------

**Referencias**
+ *Para obtener más información al respecto AWS Glue, consulte [Conceptos](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) en la AWS Glue Guía para desarrolladores.*
+ Para obtener más información, AWS Glue Data Catalog consulte [Componentes](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) en la *Guía para AWS Glue desarrolladores*.

## Uso del cifrado de datos, archivos Parquet y CDC en el destino de Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

Puede utilizar la configuración de puntos de enlace de destino de S3 para configurar lo siguiente:
+ Una clave de KMS personalizada para cifrar los objetos de destino de S3.
+ Archivos Parquet como formato de almacenamiento para objetos de destino de S3.
+ Captura de datos de cambios (CDC) incluida la orden de transacción en el destino de S3.
+ Intégrelo AWS Glue Data Catalog con su terminal de destino de Amazon S3 y consulte los datos de Amazon S3 a través de otros servicios, como Amazon Athena.

### AWS KMS ajustes clave para el cifrado de datos
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Los siguientes ejemplos muestran cómo configurar una clave de KMS personalizada para cifrar los objetos de destino de S3. Para empezar, puede ejecutar el siguiente comando de la CLI `create-endpoint`.

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

Aquí, el objeto JSON especificado por la opción `--s3-settings` define dos parámetros. Uno es un parámetro `EncryptionMode` con el valor `SSE_KMS`. El otro es un parámetro `ServerSideEncryptionKmsKeyId` con el valor `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Este valor es un nombre de recurso de Amazon (ARN) para su clave de KMS personalizada. En el caso de un destino de S3, también se especifica la configuración adicional. Identifican el rol de acceso del servidor, proporcionan delimitadores para el formato de almacenamiento de objetos CSV predeterminado y proporcionan la ubicación y el nombre del bucket para almacenar objetos de destino de S3.

De forma predeterminada, el cifrado de datos de S3 se realiza utilizando el cifrado del lado del servidor de S3. Para el destino de S3 del ejemplo anterior, esto es también equivalente a especificar la configuración de su punto de enlace, como se indica en el siguiente ejemplo.

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

Para obtener más información sobre el trabajo con el cifrado del lado del servidor de S3, consulte [Protección de datos utilizando el cifrado del lado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**nota**  
También puede usar el comando `modify-endpoint` de la CLI para cambiar el valor del parámetro de `EncryptionMode` para un punto de conexión existente de `SSE_KMS` a `SSE_S3`. Sin embargo, no se puede cambiar el valor `EncryptionMode` de `SSE_S3` a `SSE_KMS`.

### Configuración para utilizar archivos .parquet para almacenar objetos de destino de S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

El formato predeterminado para la creación de objetos de destino de S3 son archivos .csv. Los ejemplos siguientes muestran algunos ajustes de puntos de enlace para especificar archivos .parquet como formato para crear objetos de destino de S3. Puede especificar el formato de los archivos .parquet con todos los valores predeterminados, como en el ejemplo siguiente.

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

Aquí, el parámetro `DataFormat` se ha definido en `parquet` para habilitar el formato con todos los valores predeterminados de S3. Estos valores predeterminados incluyen una codificación de diccionario (`"EncodingType: "rle-dictionary"`) que utiliza una combinación de RLE y paquetes de bits para almacenar los valores repetidos con mayor eficiencia.

Puede añadir ajustes adicionales para otras opciones distintos a los predeterminados como en el ejemplo siguiente.

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

Aquí, además de parámetros para varias opciones estándar de bucket de S3 y el parámetro `DataFormat`, se definen los siguientes parámetros adicionales del archivo .parquet:
+ `EncodingType`: establecido en una codificación de diccionario (`plain-dictionary`) que almacena los valores encontrados en cada columna en un fragmento por columna de la página del diccionario.
+ `DictPageSizeLimit`: establecido en un tamaño máximo de página de diccionario de 3 MB.
+ `EnableStatistics`: desactiva el valor predeterminado que permite la recopilación de estadísticas sobre páginas de archivo Parquet y grupos de filas.

### Captura de datos de cambios (CDC) incluida la orden de transacción en el destino de S3
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

De forma predeterminada, cuando AWS DMS ejecuta una tarea de CDC, almacena todos los cambios de fila registrados en la base de datos de origen (o bases de datos) en uno o más archivos para cada tabla. Cada conjunto de archivos que contiene los cambios de la misma tabla reside en un único directorio de destino asociado a esa tabla. AWS DMS crea tantos directorios de destino como tablas de bases de datos migradas al punto de enlace de destino de Amazon S3. Los archivos se almacenan en el destino de S3 en estos directorios independientemente del orden de las transacciones. Para obtener más información sobre las convenciones de nomenclatura de archivos, contenidos de datos y formato, consulte [Uso de Amazon S3 como objetivo para AWS Database Migration Service](#CHAP_Target.S3).

Para capturar los cambios en la base de datos de origen de manera que también capturen el orden de las transacciones, puede especificar la configuración del punto final de S3 que AWS DMS permite almacenar los cambios de fila de *todas* las tablas de la base de datos en uno o más archivos.csv creados en función del tamaño de la transacción. Estos *archivos de transacciones* .csv contienen todos los cambios de fila mostrados secuencialmente en el orden de las transacciones para todas las tablas implicadas en cada transacción. Estos archivos de transacciones residen juntos en un único *directorio de transacciones* que también se especifica en el destino de S3. En cada archivo de transacciones, la operación de transacción y la identidad de la base de datos y la tabla de origen para cada cambio de fila se almacenan como parte de los datos de la fila de la siguiente manera. 

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

Aquí, `operation` es la operación de transacción en la fila modificada, `table_name` es el nombre de la tabla de base de datos en la que se cambia la fila, `database_schema_name` es el nombre del esquema de base de datos en el que reside la tabla y `field_value` es el primero de uno o más valores de campo que especifican los datos de la fila.

El siguiente ejemplo de un archivo de transacciones muestra las filas modificadas de una o más transacciones que incluyen dos tablas.

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

En este caso, la operación de transacción en cada fila se indica mediante `I` (insertar), `U` (actualizar) o `D` (eliminar) en la primera columna. El nombre de la tabla es el valor de la segunda columna (por ejemplo, `Names_03cdcad11a`). El nombre del esquema de la base de datos es el valor de la tercera columna (por ejemplo, `rdsTempsdb`). Y las columnas restantes se rellenan con sus propios datos de fila (por ejemplo, `13,Daniel`).

Además, asigna un AWS DMS nombre a los archivos de transacciones que crea en el destino de Amazon S3 mediante una marca de tiempo de acuerdo con la siguiente convención de nomenclatura.

```
CDC_TXN-timestamp.csv
```

Aquí, `timestamp` es la hora en que se creó el archivo de transacciones, como en el siguiente ejemplo. 

```
CDC_TXN-20201117153046033.csv
```

Esta marca temporal en el nombre del archivo garantiza que los archivos de transacciones se creen y se muestren en el orden de transacción al incluirlos en el directorio de transacciones.

**nota**  
Al capturar los cambios de datos en el orden de las transacciones, AWS DMS siempre guarda los cambios de fila en archivos.csv, independientemente del valor de la configuración de `DataFormat` S3 en el destino.

Para controlar la frecuencia de las escrituras en un destino de Amazon S3 durante una tarea de replicación de datos, puede configurar los ajustes `CdcMaxBatchInterval` y `CdcMinFileSize`. Esto puede traducirse en un mejor rendimiento al analizar los datos sin necesidad de realizar operaciones adicionales que supongan una sobrecarga. Para obtener más información, consulte [Configuración de punto final cuando se utiliza Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring) 

**Para indicar que AWS DMS se deben almacenar todos los cambios de fila en el orden de las transacciones**

1. Establezca la configuración de `PreserveTransactions` S3 en el destino en `true`.

1. Establezca la configuración `CdcPath` S3 del destino en una ruta de carpeta relativa en la que desee almacenar AWS DMS los archivos de transacción.csv.

   AWS DMS crea esta ruta en el depósito de destino y el directorio de trabajo predeterminados de S3 o en el depósito y la carpeta del depósito que especifique mediante la configuración `BucketName` y `BucketFolder` S3 del destino.

## Indicar operaciones de base de datos de origen en datos de S3 migrados
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Al AWS DMS migrar registros a un destino de S3, puede crear un campo adicional en cada registro migrado. Este campo adicional indica la operación que se aplica al registro en la base de datos de origen. AWS DMS La forma en que se crea y establece este primer campo depende del tipo de tarea de migración y de la configuración de `includeOpForFullLoad``cdcInsertsOnly`, y`cdcInsertsAndUpdates`.

Para una carga completa, cuando `includeOpForFullLoad` es `true`, AWS DMS siempre crea un primer campo adicional en cada registro .csv. Este campo contiene la letra I (INSERT) para indicar que la fila se insertó en la base de datos de origen. Para una carga de CDC, cuando `cdcInsertsOnly` es `false` (valor predeterminado), AWS DMS también crea siempre un primer campo adicional en cada registro.csv o .parquet. Este campo contiene la letra I (INSERT), U (UPDATE) o D (DELETE) para indicar si la fila se insertó, actualizó o eliminó en la base de datos de origen.

En la siguiente tabla, puede ver cómo los ajustes de los atributos `includeOpForFullLoad` y `cdcInsertsOnly` funcionan juntos y afectan a la configuración de los registros migrados.


| Con estas configuraciones de parámetros | DMS establece los registros de destino de la forma siguiente para la salida .csv y .parquet  | includeOpForFullLoad | cdcInsertsOnly | Para la carga completa | Para la carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Valor del primer campo añadido establecido en I | Valor del primer campo añadido establecido en I | 
| false | false | No se ha añadido el campo | Valor del primer campo añadido establecido en I, U o D | 
| false | true | No se ha añadido el campo | No se ha añadido el campo | 
| true | false | Valor del primer campo añadido establecido en I | Valor del primer campo añadido establecido en I, U o D | 

Cuando `includeOpForFullLoad` y `cdcInsertsOnly` se establecen en el mismo valor, los registros de destino se establecen de acuerdo con el atributo que controla el valor del registro para el tipo de migración actual. Este atributo es `includeOpForFullLoad` para la carga completa y `cdcInsertsOnly` para la carga CDC.

Cuando `cdcInsertsOnly` están `includeOpForFullLoad` configurados en valores diferentes, la configuración del AWS DMS registro objetivo es uniforme tanto para los CDC como para los de carga completa. Para ello, hace que el valor del registro para una carga CDC se ajuste al valor del registro de una carga completa anterior especificada por `includeOpForFullLoad`. 

Supongamos, por ejemplo, que una carga completa se establece para añadir un primer campo que indique un registro insertado. En este caso, una carga CDC posterior se establece para añadir un primer campo que indique un registro insertado, actualizado o eliminado, según corresponda en el origen. Supongamos ahora que una carga completa se establece en *no* añadir un primer campo para indicar un registro insertado. En este caso, una carga CDC se establece también para no añadir un primer campo a cada registro independientemente de su operación de registro correspondiente en el origen.

Del mismo modo, la forma en que DMS crea y establece un primer campo adicional depende de la configuración de `includeOpForFullLoad` y `cdcInsertsAndUpdates`. En la siguiente tabla, puede ver cómo el valor de los atributos `includeOpForFullLoad` y `cdcInsertsAndUpdates` funcionan juntos y afectan al valor de los registros migrados en este formato. 


| Con estas configuraciones de parámetros | DMS establece los registros de destino de la forma siguiente para la salida .csv  | includeOpForFullLoad | cdcInsertsAndActualizaciones | Para la carga completa | Para la carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | Valor del primer campo añadido establecido en I | Valor del primer campo agregado establecido en I o U | 
| false | false | No se ha añadido el campo | Valor del primer campo añadido establecido en I, U o D | 
| false | true | No se ha añadido el campo | Valor del primer campo agregado establecido en I o U | 
| true | false | Valor del primer campo añadido establecido en I | Valor del primer campo añadido establecido en I, U o D | 

## Tipos de datos de destino para Parquet de S3
<a name="CHAP_Target.S3.DataTypes"></a>

La siguiente tabla muestra los tipos de datos de destino de Parquet que se admiten cuando se utiliza AWS DMS y el mapeo predeterminado a partir de AWS DMS los tipos de datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de datos  |  Tipo de datos de Parquet de S3   | 
| --- | --- | 
| 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 | 

# Uso de una base de datos de Amazon DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Puede utilizarlos AWS DMS para migrar datos a una tabla de Amazon DynamoDB. Amazon DynamoDB es un servicio de base de datos NoSQL totalmente gestionado que proporciona un rendimiento rápido y predecible con una escalabilidad perfecta. AWS DMS admite el uso de una base de datos relacional o MongoDB como fuente.

En DynamoDB se trabaja principalmente con tablas, elementos y atributos. Una *tabla *es una recopilación de elementos y cada *elemento *es una recopilación de atributos. DynamoDB utiliza claves primarias, denominadas claves de partición, para identificar cada elemento de una tabla de forma unívoca. También puede utilizar claves e índices secundarios para proporcionar más flexibilidad a la hora de realizar consultas.

Puede utilizar el mapeo de objetos para migrar sus datos desde una base de datos de origen a una tabla de DynamoDB de destino. El mapeo de objetos le permite determinar dónde se encuentran los datos de origen en el destino. 

Cuando AWS DMS crea tablas en un punto final de destino de DynamoDB, crea tantas tablas como en el punto final de la base de datos de origen. AWS DMS también establece varios valores de parámetros de DynamoDB. El costo de la creación de la tabla depende de la cantidad de datos y del número de tablas que hay que migrar.

**nota**  
La opción de **modo SSL** de la AWS DMS consola o la API no se aplica a algunos servicios NoSQL y de streaming de datos, como Kinesis y DynamoDB. **Son seguros de forma predeterminada, por lo que AWS DMS indica que la configuración del modo SSL es cero (Modo SSL=Ninguno).** No necesita proporcionar ninguna configuración adicional para que el punto de conexión utilice SSL. Por ejemplo, cuando se utiliza DynamoDB como punto de conexión de destino, es seguro de forma predeterminada. Todas las llamadas de API a DynamoDB utilizan SSL, por lo que no es necesaria una opción de SSL adicional en el punto final. AWS DMS Puede colocar y recuperar datos de forma segura a través de puntos de conexión SSL mediante el protocolo HTTPS, que AWS DMS utiliza de forma predeterminada al conectarse a una base de datos de DynamoDB.

Para ayudar a aumentar la velocidad de la transferencia, AWS DMS admite una carga completa de subprocesos múltiples a una instancia de destino de DynamoDB. DMS admite este multriproceso con configuración de tareas que incluyen lo siguiente:
+ `MaxFullLoadSubTasks`: utilice esta opción para indicar el número máximo de tablas de origen que se pueden cargar en paralelo. DMS carga cada tabla en su tabla de destino de DynamoDB correspondiente mediante una tarea secundaria dedicada. El valor predeterminado es 8. El valor máximo es 49.
+ `ParallelLoadThreads`— Utilice esta opción para especificar el número de subprocesos que se AWS DMS utilizan para cargar cada tabla en su tabla de destino de DynamoDB. El valor predeterminado es 0 (subproceso único). El valor máximo es 200. Puede pedir que se incremente este límite máximo.
**nota**  
El DMS asigna cada segmento de una tabla a su propio subproceso para la carga. Por lo tanto, establezca `ParallelLoadThreads` en el número máximo de segmentos que especifique para una tabla en el origen.
+ `ParallelLoadBufferSize`: utilice esta opción para especificar el número máximo de registros para almacenar en el búfer que los subprocesos de carga en paralelo utilizan para cargar datos en el destino de DynamoDB. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con `ParallelLoadThreads`. `ParallelLoadBufferSize` es válido solo cuando hay más de un subproceso.
+ Ajustes de la asignación de tablas para tablas individuales: utilice las reglas de `table-settings` para identificar las tablas individuales del origen que desea cargar en paralelo. Use también estas reglas para especificar cómo segmentar la filas de cada tabla para cargas de multiprocesos. Para obtener más información, consulte [Reglas y operaciones de configuración de tablas y recopilaciones](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**nota**  
Cuando se AWS DMS establecen los valores de los parámetros de DynamoDB para una tarea de migración, el valor predeterminado del parámetro Unidades de capacidad de lectura (RCU) se establece en 200.  
También se establece el valor del parámetro de las unidades de capacidad de escritura (WCU), pero su valor depende de otras configuraciones diferentes:  
El valor predeterminado para el parámetro WCU es 200.
Si la configuración de la tarea `ParallelLoadThreads` se establece en un valor superior a 1 (el valor predeterminado es 0), entonces el parámetro WCU se establece en un valor 200 veces el valor de `ParallelLoadThreads`.
Se aplican tarifas AWS DMS de uso estándar a los recursos que utilice.

## Migración desde una base de datos relacional a una tabla de DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS admite la migración de datos a tipos de datos escalares de DynamoDB. Al migrar desde una base de datos relacional como Oracle o MySQL a DynamoDB, puede reestructurar la manera de almacenar dichos datos.

Actualmente, AWS DMS admite la reestructuración de tabla única a tabla única a atributos de tipo escalar de DynamoDB. Si migra datos a DynamoDB desde una tabla de base de datos relacional, toma los datos de una tabla y cambia su formato por atributos de tipo de datos escalares de DynamoDB. Estos atributos pueden aceptar datos de varias columnas y puede mapear una columna en un atributo directamente.

AWS DMS admite los siguientes tipos de datos escalares de DynamoDB:
+ Cadena
+ Número
+ Booleano

**nota**  
Los datos NULL del origen se ignoran en el destino.

## Requisitos previos para usar DynamoDB como objetivo para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Antes de empezar a trabajar con una base de datos de DynamoDB como destino, asegúrese AWS DMS de crear un rol de IAM. Esta función de IAM debería permitir asumir y conceder acceso AWS DMS a las tablas de DynamoDB a las que se están migrando. El conjunto mínimo de permisos de acceso se muestra en la siguiente política de IAM.

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

****  

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

------

El rol que utilice para la migración a DynamoDB debe tener los siguientes permisos.

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

------

## Limitaciones al usar DynamoDB como objetivo para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Al utilizar DynamoDB como destino se aplican las siguientes restricciones:
+ DynamoDB limita la precisión del tipo de datos Number a 38 espacios. Almacene todos los tipos de datos con una mayor precisión como cadena. Deberá indicarlo explícitamente empleando la característica de mapeo de objetos.
+ Debido a que DynamoDB no tiene un tipo de datos Date, los datos que utilizan el tipo de datos Date se convierten en cadenas.
+ DynamoDB no permite actualizaciones de los atributos de clave principal. Esta restricción es importante cuando se utiliza la replicación continua con captura de datos de cambio (CDC), ya que puede resultar en la presencia de datos no deseados en el destino. En función del mapeo de objetos, una operación de CDC que actualiza la clave principal puede hacer una de estas dos opciones. Puede producir un error o insertar un nuevo elemento con la clave principal actualizada y datos incompletos.
+ AWS DMS solo admite la replicación de tablas con claves principales no compuestas. La excepción es si especifica un mapeo de objetos para la tabla de destino con una clave de partición personalizada, una clave de ordenación o ambas.
+ AWS DMS no admite datos de LOB a menos que sea un CLOB. AWS DMS convierte los datos CLOB en una cadena de DynamoDB al migrar los datos.
+ Cuando se utiliza DynamoDB como destino, solo se admite la tabla de control Apply Exceptions (Aplicar excepciones) (`dmslogs.awsdms_apply_exceptions`). Para obtener más información sobre las tablas de control, consulte [Configuración de las tareas de la tabla de control](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS no admite la configuración de tareas `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` para DynamoDB como objetivo. 
+ AWS DMS no admite la configuración de tareas `TaskRecoveryTableEnabled` para DynamoDB como objetivo. 
+ `BatchApply` no es compatible con los puntos de conexión de DynamoDB.
+ AWS DMS no puede migrar los atributos cuyos nombres coincidan con palabras reservadas en DynamoDB. Para obtener más información, consulte [Palabras reservadas en DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) en la *Guía para desarrolladores de Amazon DynamoDB*.

## Uso de la asignación de objetos para migrar datos a DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS usa reglas de mapeo de tablas para mapear datos de la tabla de DynamoDB de origen a la de destino. Para asignar datos a un destino de DynamoDB, se utiliza un tipo de regla de mapeo de tabla denominado *object-mapping*. El mapeo de objetos le permite definir los nombres de atributo y los datos que se les puede migrar. Debe tener reglas de selección cuando utilice el mapeo de objetos.

DynamoDB no tiene una estructura predeterminada, simplemente dispone de una clave de partición y una clave de clasificación opcional. Si tiene una clave principal no compuesta, úsela. AWS DMS Si tiene una clave principal compuesta o desea utilizar una clave de ordenación, defina estas claves y el resto de los atributos de su tabla de DynamoDB de destino.

Para crear una regla de mapeo de objetos, debe especificar `rule-type` como *object-mapping*. Esta regla indica el tipo de mapeo de objetos que desea utilizar. 

La estructura de la regla es la siguiente:

```
{ "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 actualmente admite `map-record-to-record` y es `map-record-to-document` el único valor válido para el `rule-action` parámetro. Estos valores especifican lo que AWS DMS ocurre de forma predeterminada con los registros que no se excluyen como parte de la lista de `exclude-columns` atributos. Estos valores no afectan a los mapeos de atributos en modo alguno. 
+ Puede utilizar `map-record-to-record` al migrar desde una base de datos relacional a DynamoDB. Utiliza la clave principal de la base de datos relacional como la clave de partición en DynamoDB y crea un atributo para cada columna de la base de datos de origen. Cuando se utiliza`map-record-to-record`, para cualquier columna de la tabla de origen que no figure en la lista de `exclude-columns` atributos, AWS DMS crea el atributo correspondiente en la instancia de DynamoDB de destino. Lo hace independientemente de si dicha columna de origen se utiliza en un mapeo de atributos. 
+ Utilice `map-record-to-document` para colocar columnas de origen en una asignación de DynamoDB único y plano en el destino utilizando el nombre de atributo “\$1doc”. Cuando se usa`map-record-to-document`, AWS DMS coloca los datos en un único atributo de mapa plano de DynamoDB en la fuente. Este atributo se denomina "\$1doc". Esta colocación se aplica a cada columna de la tabla de origen que no se enumera en la lista de atributos `exclude-columns`. 

Una forma de entender la diferencia entre los parámetros de `rule-action` `map-record-to-record` y `map-record-to-document` consiste en ver los dos parámetros en acción. En este ejemplo, imagine que empieza con una fila de una tabla de base de datos relacional con la estructura y los datos siguientes:

![\[base de datos de ejemplo\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/images/datarep-dynamodb1.png)


Para migrar esta información a DynamoDB, crea reglas para mapear los datos en un elemento de la tabla de DynamoDB. Tenga en cuenta las columnas listadas para el parámetro `exclude-columns`. Estas columnas no se mapean directamente en el destino. En su lugar, la asignación de atributos se utiliza para combinar los datos en nuevos elementos, como dónde, *FirstName*y *LastName*se agrupan para formar parte del *CustomerName*objetivo de DynamoDB. *NickName*y no se *excluyen los ingresos*.

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

Al usar el `rule-action` parámetro *map-record-to-record*, los datos *NickName*y los *ingresos* se asignan a elementos del mismo nombre en el objetivo de DynamoDB. 

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


Sin embargo, supongamos que usa las mismas reglas pero cambia el `rule-action` parámetro a *map-record-to-document*. En este caso, las columnas que no figuran en el `exclude-columns` parámetro *NickName*y *los ingresos* se asignan a un elemento *\$1doc*.

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


### Uso de expresiones de condición personalizadas con mapeo de objetos
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

Puede utilizar una característica de DynamoDB denominada “expresiones de condición” para manipular los datos que se escriben en una tabla de DynamoDB. Para obtener más información sobre las expresiones de condición en DynamoDB, consulte [Expresiones de condición](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Un miembro de una expresión de condición consta de: 
+ una expresión (obligatorio), 
+ valores de atributo de expresión (obligatorio). Especifica una estructura json de DynamoDB del valor del atributo. Esto resulta útil para comparar un atributo con un valor en DynamoDB que quizás no conozca hasta el tiempo de ejecución. Puede definir un atributo de expresión como marcador de posición para un valor real.
+ nombres de atributo de expresión (obligatorio). Esto ayuda a evitar posibles conflictos con cualquier palabra reservada de DynamoDB, nombres de atributos que contengan caracteres especiales y similares.
+ las opciones sobre cuándo utilizar la expresión de condición (opcional). El valor predeterminado es apply-during-cdc = false y apply-during-full-load = true

La estructura de la regla es la siguiente:

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

En el siguiente ejemplo se destacan las secciones que se utilizan para la expresión de condición.

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


### Uso del mapeo de atributos con el mapeo de objetos
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

El mapeo de atributos le permite especificar una cadena de ejemplo utilizando nombres de columna del origen para reestructurar los datos en el destino. El formato se modifica en función de lo que especifique el usuario en la plantilla.

El siguiente ejemplo muestra la estructura de la base de datos de origen y la estructura deseada de destino en DynamoDB. En primer lugar se muestra la estructura de origen, en este caso, una base de datos de Oracle y, a continuación, la estructura deseada de los datos en DynamoDB. El ejemplo concluye con la estructura JSON utilizada para crear la estructura de destino deseada.

La estructura de los datos de Oracle es la siguiente:


****  

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

La estructura de los datos de DynamoDB es la siguiente:


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Clave de partición | Clave de ordenación | 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> | 

La siguiente estructura JSON muestra el mapeo de objetos y de columnas que se utiliza para conseguir la estructura de 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}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Otro modo de utilizar el mapeo de columnas es utilizar el formato DynamoDB como su tipo de documento. El siguiente ejemplo de código utiliza *dynamodb-map* como el `attribute-sub-type` para el mapeo de atributos. 

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

Como alternativa`dynamodb-map`, puede utilizarla `dynamodb-list` como mapeo attribute-sub-type de atributos, como se muestra en el siguiente ejemplo.

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

### Ejemplo 1: Uso del mapeo de atributos con el mapeo de objetos
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

El siguiente ejemplo migra datos de dos tablas de bases de datos MySQL, *nfl\$1data y *sport\$1team**, a dos tablas de DynamoDB denominadas y. *NFLTeams*SportTeams** A continuación se muestra la estructura de las tablas y la estructura JSON que se utilizan para mapear los datos de las tablas de la base de datos MySQL en las tablas de DynamoDB.

A continuación se muestra la estructura de la tabla de base de datos MySQL *nfl\$1data*:

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

A continuación se muestra la estructura de la tabla de la base de datos MySQL *sport\$1team*:

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

A continuación, se muestran las reglas de mapeo de tablas que se utilizan para asignar las dos tablas a las dos tablas de DynamoDB:

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

El ejemplo de salida de la tabla de *NFLTeams*DynamoDB se muestra a continuación:

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

El ejemplo de salida de la tabla de SportsTeams *DynamoDB* se muestra a continuación:

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

## Tipos de datos de destino para DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

El punto de conexión de DynamoDB es AWS DMS compatible con la mayoría de los tipos de datos de DynamoDB. La siguiente tabla muestra los tipos de datos de AWS DMS destino de Amazon que se admiten cuando se utilizan AWS DMS y el mapeo predeterminado a partir de AWS DMS los tipos de datos.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Al AWS DMS migrar datos de bases de datos heterogéneas, asignamos los tipos de datos de la base de datos de origen a tipos de datos intermedios denominados tipos de AWS DMS datos. A continuación, se mapean los tipos de datos intermedios en los tipos de datos de destino. La siguiente tabla muestra cada tipo de AWS DMS datos y el tipo de datos al que se asigna en DynamoDB:


| AWS DMS tipo de datos | Tipo de dato de DynamoDB | 
| --- | --- | 
|  Cadena  |  Cadena  | 
|  WString  |  Cadena  | 
|  Booleano  |  Booleano  | 
|  Fecha  |  Cadena  | 
|  DateTime  |  Cadena  | 
|  INT1  |  Número  | 
|  INT2  |  Número  | 
|  INT4  |  Número  | 
|  INT8  |  Número  | 
|  Numérico  |  Número  | 
|  Real4  |  Número  | 
|  Real8  |  Número  | 
|  UINT1  |  Número  | 
|  UINT2  |  Número  | 
|  UINT4  |  Número  | 
| UINT8 | Número | 
| CLOB | Cadena | 

# Uso de Amazon Kinesis Data Streams como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Puede utilizarlos AWS DMS para migrar datos a una transmisión de datos de Amazon Kinesis. Amazon Kinesis Data Streams forma parte del servicio de Amazon Kinesis Data Streams. Puede utilizar Kinesis Data Streams para recopilar y procesar grandes secuencias de registros de datos en tiempo real.

Un flujo de datos de Kinesis se compone de particiones. Las *particiones* son secuencias de registros de datos identificados inequívocamente en una secuencia. Para obtener más información sobre las particiones en Amazon Kinesis Data Streams, consulte [Partición](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.

AWS Database Migration Service publica registros en una transmisión de datos de Kinesis mediante JSON. Durante la conversión, AWS DMS serializa cada registro de la base de datos de origen en un par de atributo-valor en formato JSON o en un formato de mensaje JSON\$1UNFORMATTED. Un formato de mensaje JSON\$1UNFORMATTED es una cadena JSON de una sola línea con un delimitador de nueva línea. Permite a Amazon Data Firehose enviar datos de Kinesis a un destino de Amazon S3 y consultar después estos datos mediante distintos motores de consulta, incluido Amazon Athena.

Puede utilizar el mapeo de objetos para migrar sus datos desde cualquier origen de datos admitido a una secuencia de destino. Con el mapeo de datos, se determina cómo se estructuran los registros de datos de la secuencia. También debe definir una clave de partición para cada tabla, que Kinesis Data Streams utiliza para agrupar los datos en particiones. 

AWS DMS también establece varios valores de parámetros de Kinesis Data Streams. El costo de la creación de la tabla depende de la cantidad de datos y del número de tablas que hay que migrar.

**nota**  
La opción de **modo SSL** de la AWS DMS consola o la API no se aplica a algunos servicios NoSQL y de streaming de datos, como Kinesis y DynamoDB. **Son seguros de forma predeterminada, por lo que AWS DMS indica que la configuración del modo SSL es cero (Modo SSL=Ninguno).** No necesita proporcionar ninguna configuración adicional para que el punto de conexión utilice SSL. Por ejemplo, cuando se utiliza Kinesis como punto de conexión de destino, es seguro de forma predeterminada. Todas las llamadas de API a Kinesis utilizan SSL, por lo que no es necesaria una opción de SSL adicional en el AWS DMS punto final. Puede colocar y recuperar datos de forma segura a través de puntos de conexión SSL mediante el protocolo HTTPS, que AWS DMS utiliza de forma predeterminada al conectarse a un flujo de datos de Kinesis.

**Configuración del punto de conexión de Kinesis Data Streams**

Cuando utiliza los puntos de enlace de destino de Kinesis Data Streams, puede obtener los detalles de las transacciones y el control mediante `KinesisSettings` la opción de la API. AWS DMS 

Puede configurar ajustes de conexión de las siguientes formas:
+ En la AWS DMS consola, mediante la configuración de los puntos finales.
+ En la CLI, mediante la `kinesis-settings` opción del [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)comando.

En la CLI, utilice los siguientes parámetros de solicitud de la opción de `kinesis-settings`:
**nota**  
La compatibilidad con la configuración del punto de conexión de `IncludeNullAndEmpty` está disponible en la versión de AWS DMS 3.4.1 y superiores. Sin embargo, la compatibilidad con las siguientes configuraciones de punto final para los destinos de Kinesis Data Streams está disponible en AWS DMS. 
+ `MessageFormat`: el formato del resultado de los registros creados en el punto de conexión. El formato del mensaje es `JSON` (predeterminado) o `JSON_UNFORMATTED` (una sola línea sin tabulación).
+ `IncludeControlDetails`: muestra información detallada de control para la definición de tablas, la definición de columnas y los cambios de tablas y columnas en la salida del mensaje de Kinesis. El valor predeterminado es `false`.
+ `IncludeNullAndEmpty`: incluya columnas NULL y vacías en el objetivo. El valor predeterminado es `false`.
+ `IncludePartitionValue`: muestra el valor de partición dentro de la salida del mensaje de Kinesis, a menos que el tipo de partición sea `schema-table-type`. El valor predeterminado es `false`.
+ `IncludeTableAlterOperations`: incluye todas las operaciones de lenguaje de definición de datos (DDL) que cambien la tabla en los datos de control, como `rename-table`, `drop-table`, `add-column`, `drop-column` y `rename-column`. El valor predeterminado es `false`.
+ `IncludeTransactionDetails`: proporciona información detallada sobre transacciones de la base de datos de origen. Esta información incluye una marca temporal de confirmación, una posición de registro y valores para `transaction_id`, `previous_transaction_id` y `transaction_record_id ` (el desplazamiento del registro dentro de una transacción). El valor predeterminado es `false`.
+ `PartitionIncludeSchemaTable`: agrega los nombres de los esquemas y de las tablas como prefijo a los valores de partición, cuando el tipo de partición es `primary-key-type`. Al hacerlo, aumenta la distribución de datos entre las particiones de Kinesis. Por ejemplo, supongamos que un esquema `SysBench` tiene miles de tablas y cada tabla tiene un rango limitado para una clave principal. En este caso, la misma clave principal se envía desde miles de tablas a la misma partición, lo que provoca la limitación controlada. El valor predeterminado es `false`.
+ `UseLargeIntegerValue`— Utilice un int de hasta 18 dígitos en lugar de convertir los int como dobles, disponible en la AWS DMS versión 3.5.4. El valor predeterminado es false.

En el siguiente ejemplo, se muestra la opción `kinesis-settings` en uso con un comando `create-endpoint` de ejemplo emitido mediante la 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
```

**Configuración de tareas de carga completa con varios subprocesos**

Para ayudar a aumentar la velocidad de la transferencia, AWS DMS admite una carga completa de subprocesos múltiples a una instancia de destino de Kinesis Data Streams. DMS admite este multriproceso con configuración de tareas que incluyen lo siguiente:
+ `MaxFullLoadSubTasks`: utilice esta opción para indicar el número máximo de tablas de origen que se pueden cargar en paralelo. DMS carga cada tabla en su tabla de destino de Kinesis correspondiente mediante una tarea secundaria dedicada. El valor predeterminado es 8, el valor máximo es 49.
+ `ParallelLoadThreads`— Utilice esta opción para especificar el número de subprocesos que se AWS DMS utilizan para cargar cada tabla en su tabla de destino de Kinesis. El valor máximo para un objetivo de Kinesis Data Streams es 32. Puede pedir que se incremente este límite máximo.
+ `ParallelLoadBufferSize`: utilice esta opción para especificar el número máximo de registros para almacenar en el búfer que los subprocesos de carga en paralelo utilizan para cargar datos en el destino de Kinesis. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con `ParallelLoadThreads`. `ParallelLoadBufferSize` es válido solo cuando hay más de un subproceso.
+ `ParallelLoadQueuesPerThread`: utilice esta opción para especificar el número de colas que acceden a cada subproceso simultáneo para eliminar los registros de datos de las colas y generar una carga por lotes para el destino. El valor predeterminado de es 1. Sin embargo, para los destinos de Kinesis de varios tamaños de carga, el intervalo válido es de 5-512 colas por subproceso.

**Configuración de tareas de carga de CDC con varios subprocesos**

Puede mejorar el rendimiento de la captura de datos de cambios (CDC) para los puntos de conexión de destino de flujo de datos en tiempo real como Kinesis mediante la configuración de tareas para modificar el comportamiento de la llamada a la API `PutRecords`. Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas `ParallelApply*`. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 128 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer. 

Para promover el desempeño de los CDC, AWS DMS admite las siguientes configuraciones de tareas:
+ `ParallelApplyThreads`— Especifica el número de subprocesos simultáneos que se AWS DMS utilizan durante una carga de CDC para enviar registros de datos a un punto final de Kinesis de destino. El valor predeterminado es cero (0) y el valor máximo es 32.
+ `ParallelApplyBufferSize`: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Kinesis durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando `ParallelApplyThreads` especifique más de un subproceso. 
+ `ParallelApplyQueuesPerThread`: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Kinesis durante el proceso de CDC. El valor predeterminado es 1 y el máximo es 512.

Cuando se utiliza la configuración de tareas `ParallelApply*`, el valor predeterminado de `partition-key-type` es el valor de `primary-key` de la tabla, no el valor de `schema-name.table-name`.

## Uso de una imagen anterior para consultar los valores originales de las filas de CDC de un flujo de datos de Kinesis como destino
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Al escribir actualizaciones de CDC en un destino de flujo de datos como Kinesis, puede ver los valores originales de una fila de base de datos de origen antes de cambiar mediante una actualización. Para que esto sea posible, AWS DMS rellena una *imagen anterior* de los eventos de actualización en función de los datos proporcionados por el motor de base de datos de origen. 

Los diferentes motores de base de datos de origen proporcionan diferentes cantidades de información para una imagen anterior: 
+ Oracle proporciona actualizaciones a las columnas solo si cambian. 
+ PostgreSQL proporciona datos solo para las columnas que forman parte de la clave principal (cambiadas o no). Para proporcionar datos para todas las columnas (cambiadas o no), debe establecer `REPLICA_IDENTITY` en `FULL` en lugar de `DEFAULT`. Tenga en cuenta que debe elegir cuidadosamente la configuración de `REPLICA_IDENTITY` para cada tabla. Si establece `REPLICA_IDENTITY` en `FULL`, todos los valores de las columnas se escriben en el registro antes de la escritura (WAL) de forma continua. Esto puede provocar problemas de rendimiento o de recursos en las tablas que se actualizan con frecuencia.
+ MySQL generalmente proporciona datos para todas las columnas excepto para los tipos de datos BLOB y CLOB (cambiadas o no).

Para habilitar imágenes anteriores para agregar valores originales de la base de datos de origen a la salida AWS DMS , utilice la configuración de tarea `BeforeImageSettings` o el parámetro `add-before-image-columns`. Este parámetro aplica una regla de transformación de columna. 

`BeforeImageSettings` agrega un nuevo atributo JSON a cada operación de actualización con valores recopilados desde el sistema de base de datos de origen, como se muestra a continuación.

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

**nota**  
Solo se aplica `BeforeImageSettings` a AWS DMS las tareas que contienen un componente de los CDC, como la carga completa más las tareas de los CDC (que migran los datos existentes y reproducen los cambios en curso), o a las tareas exclusivas de los CDC (que solo replican los cambios en los datos). No se aplica `BeforeImageSettings` a tareas que son solo de carga completa.

Para las opciones de `BeforeImageSettings`, se aplica lo siguiente:
+ Establezca la opción `EnableBeforeImage` para habilitar `true` antes de crear imágenes. El valor predeterminado es `false`. 
+ Utilice la opción `FieldName` para asignar un nombre al nuevo atributo JSON. Cuando `EnableBeforeImage` es `true`, `FieldName` es necesario y no puede estar vacío.
+ La opción `ColumnFilter` especifica una columna para agregar mediante el uso de las imágenes anteriores. Para agregar solo columnas que forman parte de las claves principales de la tabla, utilice el valor predeterminado, `pk-only`. Para agregar cualquier columna que tenga un valor de imagen anterior, utilice `all`. Tenga en cuenta que la imagen anterior no contiene columnas con tipos de datos de LOB, como CLOB o BLOB.

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

**nota**  
Los objetivos de Amazon S3 no admiten `BeforeImageSettings`. Para los destinos de S3, utilice solo la regla de transformación `add-before-image-columns` que debe realizarse antes de crear imágenes durante el CDC.

### Uso de una regla de transformación de imagen anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

Como alternativa a la configuración de tareas, puede utilizar el parámetro `add-before-image-columns`, que aplica una regla de transformación de columnas. Con este parámetro, puede habilitar imágenes anteriores durante CDC en destinos de flujo de datos como Kinesis. 

Al utilizar `add-before-image-columns` en una regla de transformación, puede aplicar un control más detallado de los resultados de la imagen anterior. Las reglas de transformación permiten utilizar un localizador de objetos que le da control sobre las tablas seleccionadas para la regla. Además, puede encadenar reglas de transformación, lo que permite aplicar diferentes reglas a diferentes tablas. A continuación, puede manipular las columnas producidas utilizando otras reglas. 

**nota**  
No utilice el parámetro `add-before-image-columns` junto con la configuración de tarea `BeforeImageSettings` dentro de la misma tarea. En su lugar, utilice el parámetro o la configuración, pero no ambos, para una sola tarea.

Un tipo de regla `transformation` con el parámetro `add-before-image-columns` de una columna debe proporcionar una sección `before-image-def`. A continuación se muestra un ejemplo.

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

El valor de `column-prefix` se antepone a un nombre de columna y el valor predeterminado de `column-prefix` es `BI_`. El valor de `column-suffix` se añade al nombre de la columna y el valor predeterminado está vacío. No configure ambas cadenas `column-prefix` y `column-suffix` como cadenas vacías.

Elija un valor para `column-filter`. Para agregar solo columnas que forman parte de las claves principales de la tabla, elija `pk-only`. Elija `non-lob` para agregar solo columnas que no sean de tipo LOB. O elija `all` para agregar cualquier columna que tenga un valor de imagen anterior.

### Ejemplo de una regla de transformación de imagen anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

La regla de transformación del siguiente ejemplo agrega una nueva columna llamada `BI_emp_no` en el destino. Entonces, una instrucción como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` rellena el campo `BI_emp_no` con 1. Cuando escribe actualizaciones de CDC en destinos de Amazon S3, la columna `BI_emp_no` permite indicar qué fila original se actualizó.

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

Para obtener información sobre el uso de la acción de regla `add-before-image-columns`, consulte [Reglas y acciones de transformación](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Requisitos previos para utilizar una transmisión de datos de Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Función de IAM para utilizar una transmisión de datos de Kinesis como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Antes de configurar una transmisión de datos de Kinesis como destino AWS DMS, asegúrese de crear una función de IAM. Esta función debe permitir asumir y conceder acceso AWS DMS a las transmisiones de datos de Kinesis a las que se están migrando. El conjunto mínimo de permisos de acceso se muestra en la siguiente política de IAM.

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

****  

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

------

El rol que utilice para la migración a un flujo de datos de Kinesis debe tener los siguientes permisos.

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

****  

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

------

### Acceder a una transmisión de datos de Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

En AWS DMS la versión 3.4.7 y versiones posteriores, para conectarse a un endpoint de Kinesis, debe realizar una de las siguientes acciones:
+ Configure DMS para que utilice puntos de conexión de VPC. Para obtener más información sobre la configuración de DMS para utilizar puntos de conexión de VPC, consulte [Configuración de puntos finales de VPC para AWS DMS](CHAP_VPC_Endpoints.md).
+ Configure DMS para que utilice rutas públicas, es decir, haga pública su instancia de replicación. Para obtener información sobre las instancias de replicación públicas, consulte [Instancias de replicación pública y privada](CHAP_ReplicationInstance.PublicPrivate.md).

## Limitaciones al utilizar Kinesis Data Streams como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Al utilizar Kinesis Data Streams como destino se aplican las siguientes restricciones:
+ AWS DMS publica cada actualización en un único registro de la base de datos de origen como un registro de datos en un flujo de datos de Kinesis determinado, independientemente de las transacciones. Sin embargo, puede incluir detalles de transacción para cada registro de datos utilizando los parámetros pertinentes de la API `KinesisSettings`.
+ No se admite el modo LOB completo.
+ El tamaño de LOB máximo admitido es 1 MB.
+ Kinesis Data Streams no admite la desduplicación. Las aplicaciones que consumen datos de una secuencia necesitan ocuparse de los registros duplicados. Para obtener más información, consulte [Gestión de registros duplicados](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.
+ AWS DMS admite las siguientes cuatro formas de claves de partición:
  + `SchemaName.TableName` una combinación del nombre de esquema y de tabla.
  + `${AttributeName}`: el valor de uno de los campos del archivo JSON o la clave principal de la tabla de la base de datos de origen.
  + `transaction-id`: El identificador de transacción de los CDC. Todos los registros de la misma transacción van a la misma partición.
  + `constant`: un valor literal fijo para cada registro, independientemente de la tabla o los datos. Todos los registros se envían al mismo valor de clave de partición «constante», lo que proporciona un orden global estricto en todas las tablas.

  ```
  {
      "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"
      }
  }
  ```
+ Para obtener información sobre el cifrado de los datos en reposo en Kinesis Data Streams, consulte [Protección de datos en Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html) en la *Guía para desarrolladores de AWS Key Management Service *. 
+ La configuración del `IncludeTransactionDetails` punto final solo se admite cuando el punto final de origen es Oracle, SQL Server, PostgreSQL o MySQL. En el caso de otros tipos de puntos finales de origen, no se incluirán los detalles de la transacción.
+ `BatchApply` no es compatible con un punto de conexión de Kinesis. Es posible que el uso de la aplicación por lotes (por ejemplo, la configuración de tareas de metadatos de destino `BatchApplyEnabled`) para un destino de Kinesis provoque la pérdida de datos y el fallo de la tarea. No active `BatchApply` cuando utilice Kinesis como punto de conexión de destino.
+ Los destinos de Kinesis solo se admiten para una transmisión de datos de Kinesis en la misma AWS cuenta y en la Región de AWS misma instancia de replicación.
+ Al migrar desde una fuente de MySQL, los BeforeImage datos no incluyen los tipos de datos CLOB y BLOB. Para obtener más información, consulte [Uso de una imagen anterior para consultar los valores originales de las filas de CDC de un flujo de datos de Kinesis como destino](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS no admite la migración de valores de tipos de `BigInt` datos con más de 16 dígitos. Para evitar esta limitación, puede usar la siguiente regla de transformación para convertir la columna `BigInt` en una cadena. Para obtener más información sobre las reglas de transformación, consulte [Reglas y acciones de transformación](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
      }
  }
  ```
+ Cuando varias operaciones de DML dentro de una sola transacción modifican una columna de objetos grandes (LOB) de la base de datos de origen, la base de datos de destino solo conserva el valor final de LOB de la última operación de esa transacción. Los valores de LOB intermedios establecidos por las operaciones anteriores de la misma transacción se sobrescriben, lo que puede provocar la pérdida de datos o la aparición de incoherencias. Este comportamiento se debe a la forma en que se procesan los datos de LOB durante la replicación.
+ AWS DMS no admite datos de origen que contengan `'\0'` caracteres incrustados cuando se utiliza Kinesis como punto final de destino. Los datos que contengan `'\0'` caracteres incrustados se truncarán en el primer carácter. `'\0'`

## Uso de la asignación de objetos para migrar datos a un flujo de datos de Kinesis
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS utiliza reglas de mapeo de tablas para mapear los datos del flujo de datos de Kinesis de origen al de destino. Para asignar datos a una secuencia de destino, se utiliza un tipo de regla de mapeo de tablas denominada "object mapping". Puede utilizar la asignación de objetos para definir cómo los registros de datos del origen asignan a los registros de datos publicados en el flujo de datos de Kinesis. 

Kinesis Data Streams no tiene una estructura predeterminada distinta de una clave de partición. En una regla de asignación de objetos, los valores posibles de `partition-key-type` para los registros de datos son `schema-table`, `transaction-id`, `primary-key`, `constant` y `attribute-name`.

Para crear una regla de mapeo de objetos, especifique `rule-type` como `object-mapping`. Esta regla indica el tipo de mapeo de objetos que desea utilizar. 

La estructura de la regla es la siguiente.

```
{
    "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 actualmente admite `map-record-to-record` y es `map-record-to-document` el único valor válido para el parámetro. `rule-action` Esta configuración afecta a los valores que no están excluidos como parte de la lista de atributos `exclude-columns`. Los `map-record-to-document` valores `map-record-to-record` y especifican cómo se AWS DMS gestionan estos registros de forma predeterminada. Estos valores no afectan a los mapeos de atributos en modo alguno. 

Utilice `map-record-to-record` al migrar desde una base de datos relacional a un flujo de datos de Kinesis. Este tipo de regla utiliza el valor `taskResourceId.schemaName.tableName` de la base de datos relacional como la clave de partición en el flujo de datos de Kinesis y crea un atributo para cada columna de la base de datos de origen. 

Cuando utilice `map-record-to-record`, tenga en cuenta lo siguiente:
+ Esta configuración solo afecta a las columnas excluidas de la lista `exclude-columns`.
+ Para cada columna de este tipo, AWS DMS crea un atributo correspondiente en el tema de destino.
+ AWS DMS crea el atributo correspondiente independientemente de si la columna de origen se utiliza en una asignación de atributos. 

Se utiliza `map-record-to-document` para colocar las columnas de origen en un único documento plano en la secuencia de destino correspondiente utilizando el nombre de atributo “\$1doc”. AWS DMS coloca los datos en un único mapa plano del origen denominado “`_doc`”. Esta colocación se aplica a cada columna de la tabla de origen que no se enumera en la lista de atributos `exclude-columns`.

Una forma de entender `map-record-to-record` es verlo en acción. En este ejemplo, imagine que empieza con una fila de una tabla de base de datos relacional con la estructura y los datos siguientes.


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

Para migrar esta información desde un esquema denominado `Test` a un flujo de datos de Kinesis, debe crear reglas para asignar los datos a la secuencia de destino. La siguiente regla ilustra la operación de asignación. 

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

A continuación, se ilustra el formato de registro resultante en el flujo de datos de Kinesis: 
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaname.tableName
+ Datos: //El siguiente mensaje JSON

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

Sin embargo, supongamos que utiliza las mismas reglas pero cambia el parámetro `rule-action` a `map-record-to-document` y excluye determinadas columnas. La siguiente regla ilustra la operación de asignación.

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

En este caso, las columnas que no aparecen en el parámetro `exclude-columns`, `FirstName`, `LastName`, `StoreId` y `DateOfBirth`, se asignan a `_doc`. A continuación, se ilustra el formato de registro resultante. 

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

### Reestructuración de datos con el mapeo de atributos
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

Puede reestructurar los datos mientras los migra a un flujo de datos de Kinesis mediante un mapa de atributos. Por ejemplo, es posible que desee combinar varios campos del origen en un único campo en el destino. El mapa de atributos siguiente ilustra cómo reestructurar los datos.

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

Para establecer un valor constante para, especifique`partition-key`, esto establece el valor de la partición en. `"partition-key-type: "constant"` `constant` Tal vez desee hacer esto, por ejemplo, para obligar a que todos los datos se almacenen en una única partición. El siguiente mapeo ilustra este enfoque. 

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

**nota**  
El valor `partition-key` de un registro de control para una tabla específica es `TaskId.SchemaName.TableName`. El valor `partition-key` de un registro de control para una tabla específica es el `TaskId` de ese registro. La especificación de un valor `partition-key` en el mapeo de objetos no tiene ningún efecto en el elemento `partition-key` de un registro de control.  
 Si `partition-key-type` se establece `attribute-name` en una regla de mapeo de tablas, debe especificarse`partition-key-name`, que debe hacer referencia a una columna de la tabla de origen o a una columna personalizada definida en la asignación. Además, `attribute-mappings` debe proporcionarse para definir cómo se asignan las columnas de origen a la transmisión de Kinesis de destino.

### Formato de mensaje para Kinesis Data Streams
<a name="CHAP_Target.Kinesis.Messageformat"></a>

La salida JSON es simplemente una lista de pares de clave-valor. Un formato de mensaje JSON\$1UNFORMATTED es una cadena JSON de una sola línea con un delimitador de nueva línea.

AWS DMS proporciona los siguientes campos reservados para facilitar el consumo de los datos de Kinesis Data Streams: 

**RecordType**  
El tipo de registro puede ser de datos o de control. Los *registros de datos *representan las filas reales en el origen. Los *registros de control* son para eventos importantes de la secuencia como, por ejemplo, el reinicio de una tarea.

**Operación**  
Para los registros de datos, la operación puede ser `load`, `insert`, `update` o `delete`.  
Para los registros de control, la operación puede ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` o `column-type-change`.

**SchemaName**  
El esquema de origen del registro. Este campo puede estar vacío para un registro de control.

**TableName**  
La tabla de origen del registro. Este campo puede estar vacío para un registro de control.

**Timestamp**  
La marca temporal que indica cuándo se creó el mensaje JSON. El campo está formateado con el formato ISO 8601.

# Uso de Apache Kafka como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

Puede usarlo AWS DMS para migrar datos a un clúster de Apache Kafka. Apache Kafka es una plataforma de streaming distribuida. Puede utilizar Apache Kafka para ingerir y procesar datos de streaming en tiempo real.

AWS también ofrece Amazon Managed Streaming para que Apache Kafka (Amazon MSK) lo utilice como objetivo. AWS DMS Amazon MSK es un servicio de streaming de Apache Kafka completamente administrado que simplifica la implementación y gestión de instancias de Apache Kafka. Funciona con versiones de código abierto de Apache Kafka y puede acceder a las instancias de Amazon MSK como AWS DMS destinos exactamente igual que a cualquier instancia de Apache Kafka. Para obtener más información, consulte [¿Qué es Amazon MSK?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) en la *Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.*.

Un clúster de Kafka almacena flujos de registros en categorías denominadas temas que se dividen en particiones. Las *particiones* son secuencias de registros de datos (mensajes) identificados de forma única en un tema. Las particiones se pueden distribuir entre varios agentes de un clúster para permitir el procesamiento paralelo de los registros de un tema. Para obtener más información sobre temas y particiones y su distribución en Apache Kafka, consulte [Temas y registros](https://kafka.apache.org/documentation/#intro_topics) y [Distribución](https://kafka.apache.org/documentation/#intro_distribution).

El clúster de Kafka puede ser una instancia de Amazon MSK, un clúster que se ejecute en una instancia de Amazon EC2 o un clúster en las instalaciones. Una instancia de Amazon MSK o un clúster en una instancia de Amazon EC2 se pueden encontrar en la misma VPC o en una diferente. Si el clúster está en las instalaciones, puede usar su propio servidor de nombres en las instalaciones para la instancia de replicación a fin de resolver el nombre de host del clúster. Para obtener información acerca de cómo configurar un servidor de nombres para la instancia de replicación, consulte [Uso de su propio servidor de nombres en las instalaciones](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Para obtener más información sobre cómo configurar una red, consulte [Configuración de una red para una instancia de replicación](CHAP_ReplicationInstance.VPC.md).

Cuando utilice un clúster de Amazon MSK, asegúrese de que su grupo de seguridad permita el acceso desde la instancia de replicación. Para obtener información sobre cómo cambiar el grupo de seguridad de un clúster de Amazon MSK, consulte [Cambio del grupo de seguridad de un clúster de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service publica los registros de un tema de Kafka mediante JSON. Durante la conversión, AWS DMS serializa cada registro de la base de datos de origen en un par de atributo-valor en formato JSON.

Para migrar los datos desde cualquier origen de datos admitido a un clúster de Kafka de destino, se usa la asignación de objetos. Con la asignación de objetos, se determina cómo se estructuran los registros de datos en el tema de destino. También debe definir una clave de partición para cada tabla, que Apache Kafka utiliza para agrupar los datos en particiones. 

Actualmente, AWS DMS admite un solo tema por tarea. En el caso de una sola tarea con varias tablas, todos los mensajes van a un solo tema. Cada mensaje incluye una sección de metadatos que identifica el esquema y la tabla de destino. AWS DMS las versiones 3.4.6 y superiores admiten la replicación multitema mediante el mapeo de objetos. Para obtener más información, consulte [Replicación multitemática mediante asignación de objetos](#CHAP_Target.Kafka.MultiTopic).

**Configuración de punto de enlace de Apache Kafka**

Puede especificar los detalles de la conexión mediante la configuración del punto final en la AWS DMS consola o mediante la `--kafka-settings` opción en la CLI. A continuación se indican los requisitos para cada ajuste:
+ `Broker`: especifique las ubicaciones de uno o más agentes en el clúster de Kafka en forma de una lista separada por comas de cada `broker-hostname:port`. Un ejemplo es `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Esta configuración puede especificar las ubicaciones de algunos o todos los agentes del clúster. Todos los agentes de clúster se comunican para gestionar la partición de los registros de datos migrados al tema.
+ `Topic`: (opcional) especifique el nombre del tema con una longitud máxima de 255 letras y símbolos. Puede usar el punto (.), el guion bajo (\$1) y el signo menos (-). Los nombres de temas con un punto (.) o guion bajo (\$1) pueden colisionar en las estructuras de datos internas. Puede usar uno de estos símbolos, pero no ambos, en el nombre del tema. Si no especifica un nombre para el tema, `"kafka-default-topic"` lo AWS DMS utiliza como tema de migración.
**nota**  
Para AWS DMS crear un tema de migración que especifique o el tema predeterminado, `auto.create.topics.enable = true` configúrelo como parte de la configuración del clúster de Kafka. Para obtener más información, consulte [Limitaciones a la hora de utilizar Apache Kafka como destino para AWS Database Migration Service](#CHAP_Target.Kafka.Limitations)
+ `MessageFormat`: el formato del resultado de los registros creados en el punto de conexión. El formato del mensaje es `JSON` (predeterminado) o `JSON_UNFORMATTED` (una sola línea sin tabulación).
+ `MessageMaxBytes`: el tamaño máximo en bytes de los registros creados en el punto de conexión. El valor predeterminado es 1 000 000.
**nota**  
Solo puede usar la AWS CLI/SDK para cambiar a un valor que no sea `MessageMaxBytes` el predeterminado. Por ejemplo, para modificar el punto de conexión de Kafka existente y cambiar `MessageMaxBytes`, utilice el siguiente comando.  

  ```
  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`: proporciona información detallada sobre transacciones de la base de datos de origen. Esta información incluye una marca temporal de confirmación, una posición de registro y valores para `transaction_id`, `previous_transaction_id` y `transaction_record_id` (el desplazamiento del registro dentro de una transacción). El valor predeterminado es `false`.
+ `IncludePartitionValue`: muestra el valor de partición dentro de la salida del mensaje de Kafka, a menos que el tipo de partición sea `schema-table-type`. El valor predeterminado es `false`.
+ `PartitionIncludeSchemaTable`: agrega los nombres de los esquemas y de las tablas como prefijo a los valores de partición, cuando el tipo de partición es `primary-key-type`. Al hacerlo, aumenta la distribución de datos entre las particiones de Kafka. Por ejemplo, supongamos que un esquema `SysBench` tiene miles de tablas y cada tabla tiene un rango limitado para una clave principal. En este caso, la misma clave principal se envía desde miles de tablas a la misma partición, lo que provoca limitación. El valor predeterminado es `false`.
+ `IncludeTableAlterOperations`: incluye todas las operaciones de lenguaje de definición de datos (DDL) que cambien la tabla en los datos de control, como `rename-table`, `drop-table`, `add-column`, `drop-column` y `rename-column`. El valor predeterminado es `false`. 
+ `IncludeControlDetails`: muestra información detallada de control para la definición de tablas, la definición de columnas y los cambios de tablas y columnas en la salida del mensaje de Kafka. El valor predeterminado es `false`.
+ `IncludeNullAndEmpty`: incluya columnas NULL y vacías en el objetivo. El valor predeterminado es `false`.
+ `SecurityProtocol`: establece una conexión segura a un punto de conexión de destino de Kafka utilizando la seguridad de la capa de transporte (TLS). Las opciones incluyen `ssl-authentication`, `ssl-encryption` y `sasl-ssl`. El uso de `sasl-ssl` requiere `SaslUsername` y `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`: establece la verificación del nombre de host para el certificado. Esta configuración se admite en AWS DMS versión 3.5.1 y posteriores. Estas son las opciones disponibles: 
  + `NONE`: deshabilita la verificación del nombre de host del agente en la conexión del cliente.
  + `HTTPS`: habilita la verificación del nombre de host del agente en la conexión del cliente.
+ `useLargeIntegerValue`— Utilice un int de hasta 18 dígitos en lugar de convertir los int como dobles, disponible a partir AWS DMS de la versión 3.5.4. El valor predeterminado es false.

Puede usar la configuración para ayudar a aumentar la velocidad de la transferencia. Para ello, AWS DMS admite la carga completa con varios subprocesos en un clúster de destino de Apache Kafka. AWS DMS admite esta operación con varios subprocesos con las configuraciones de tareas que incluyen lo siguiente:
+ `MaxFullLoadSubTasks`— Utilice esta opción para indicar el número máximo de tablas de origen que se van a cargar en paralelo. AWS DMS carga cada tabla en su tabla de destino de Kafka correspondiente mediante una subtarea dedicada. El valor predeterminado es 8, el valor máximo es 49.
+ `ParallelLoadThreads`— Utilice esta opción para especificar el número de subprocesos que se AWS DMS utilizan para cargar cada tabla en su tabla de destino de Kafka. El valor máximo para un destino de Apache Kafka es 32. Puede pedir que se incremente este límite máximo.
+ `ParallelLoadBufferSize`: utilice esta opción para especificar el número máximo de registros para almacenar en el búfer que los subprocesos de carga en paralelo utilizan para cargar datos en el destino de Kafka. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con `ParallelLoadThreads`. `ParallelLoadBufferSize` es válido solo cuando hay más de un subproceso.
+ `ParallelLoadQueuesPerThread`: utilice esta opción para especificar el número de colas que acceden a cada subproceso simultáneo para eliminar los registros de datos de las colas y generar una carga por lotes para el destino. El valor predeterminado de es 1. El máximo es 512.

Puede mejorar el rendimiento de la captura de datos de cambios (CDC) para los puntos de conexión de Kafka ajustando la configuración de las tareas para los subprocesos paralelos y las operaciones masivas. Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas `ParallelApply*`. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 128 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer. 

Para promover el desempeño de los CDC, AWS DMS admite las siguientes configuraciones de tareas:
+ `ParallelApplyThreads`— Especifica la cantidad de subprocesos simultáneos que se AWS DMS utilizan durante una carga de CDC para enviar los registros de datos a un punto final de Kafka. El valor predeterminado es cero (0) y el valor máximo es 32.
+ `ParallelApplyBufferSize`: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Kafka durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando `ParallelApplyThreads` especifique más de un subproceso. 
+ `ParallelApplyQueuesPerThread`: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Kafka durante el proceso de CDC. El valor predeterminado de es 1. El máximo es 512.

Cuando se utiliza la configuración de tareas `ParallelApply*`, el valor predeterminado de `partition-key-type` es el valor de `primary-key` de la tabla, no el valor de `schema-name.table-name`.

## Conexión a Kafka mediante seguridad de la capa de transporte (TLS)
<a name="CHAP_Target.Kafka.TLS"></a>

Un clúster de Kafka acepta conexiones seguras mediante seguridad de la capa de transporte (TLS). Con DMS, puede utilizar cualquiera de las siguientes tres opciones de protocolos de seguridad para proteger una conexión de punto de conexión de Kafka.

**Cifrado SSL (`server-encryption`)**  
Los clientes validan la identidad del servidor mediante el certificado del servidor. A continuación, se establece una conexión cifrada entre el servidor y el cliente.

**Autenticación SSL (`mutual-authentication`)**  
El servidor y el cliente validan la identidad entre sí mediante sus propios certificados. A continuación, se establece una conexión cifrada entre el servidor y el cliente.

**SASL-SSL (`mutual-authentication`)**  
El método de capa de seguridad y autenticación simple (SASL) reemplaza el certificado del cliente por un nombre de usuario y una contraseña para validar la identidad del cliente. En concreto, debe proporcionar un nombre de usuario y una contraseña que el servidor haya registrado para que el servidor pueda validar la identidad de un cliente. A continuación, se establece una conexión cifrada entre el servidor y el cliente.

**importante**  
Apache Kafka y Amazon MSK aceptan certificados resueltos. Se trata de una limitación conocida que deben abordar Kafka y Amazon MSK. Para obtener más información, consulte [Problemas de Apache Kafka, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Si utiliza Amazon MSK, considere la posibilidad de utilizar listas de control de acceso (ACLs) como solución alternativa a esta limitación conocida. Para obtener más información sobre su uso ACLs, consulte la ACLs sección [Apache Kafka](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) de la Guía para desarrolladores de *Amazon Managed Streaming for Apache Kafka*.  
Si utiliza un clúster de Kafka autoadministrado, consulte [Comentario del 21 de octubre de 2018](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) para obtener información sobre la configuración del clúster.

### Uso del cifrado SSL con Amazon MSK o un clúster de Kafka autoadministrado
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

Puede utilizar el cifrado SSL para proteger una conexión de punto de conexión con Amazon MSK o con un clúster de Kafka autoadministrado. Cuando utiliza el método de autenticación de cifrado SSL, los clientes validan la identidad de un servidor mediante el certificado del servidor. A continuación, se establece una conexión cifrada entre el servidor y el cliente.

**Uso del cifrado SSL para conectarse a Amazon MSK**
+ Establezca la configuración del punto de conexión del protocolo de seguridad (`SecurityProtocol`) mediante la opción `ssl-encryption` al crear el punto de conexión de Kafka de destino. 

  En el siguiente ejemplo de JSON se establece el protocolo de seguridad como cifrado SSL.

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

**Uso del cifrado SSL en un clúster de Kafka autoadministrado**

1. Si utiliza una entidad de certificación (CA) privada en el clúster de Kafka en las instalaciones, cargue el certificado de la entidad de certificación privado y obtenga un nombre de recurso de Amazon (ARN). 

1. Establezca la configuración del punto de conexión del protocolo de seguridad (`SecurityProtocol`) mediante la opción `ssl-encryption` al crear el punto de conexión de Kafka de destino. En el siguiente ejemplo de JSON se establece el protocolo de seguridad como `ssl-encryption`.

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

1. Si utiliza una entidad de certificación privada, establezca `SslCaCertificateArn` en el ARN que obtuvo en el primer paso anterior.

### Uso de la autenticación SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

Puede utilizar la autenticación SSL para proteger una conexión de punto de conexión con Amazon MSK o con un clúster de Kafka autoadministrado.

Para habilitar la autenticación y el cifrado del cliente mediante la autenticación SSL para conectarse a Amazon MSK, haga lo siguiente:
+ Prepare una clave privada y un certificado público para Kafka.
+ Cargue certificados en el mánager de certificados de DMS.
+ Cree un punto final de destino de Kafka con el certificado correspondiente ARNs especificado en la configuración del punto final de Kafka.

**Preparación de una clave privada y un certificado público para Amazon MSK**

1. Cree una instancia EC2 y configure un cliente para que utilice la autenticación tal y como se describe en los pasos 1 a 9 de la sección [Autenticación de clientes](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) de la *Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka*.

   Tras completar estos pasos, dispondrá de un ARN de certificado (el ARN del certificado público guardado en ACM) y de una clave privada en un archivo `kafka.client.keystore.jks`.

1. Obtenga el certificado público y cópielo en el archivo `signed-certificate-from-acm.pem` mediante el siguiente comando:

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

   El comando devuelve información similar al siguiente ejemplo:

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

   A continuación, copie el equivalente de `"123"` al archivo `signed-certificate-from-acm.pem`.

1. Obtenga la clave privada importando la clave `msk-rsa` desde `kafka.client.keystore.jks to keystore.p12`, como se muestra en el siguiente ejemplo.

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

1. Utilice el siguiente comando para exportar `keystore.p12` a un formato `.pem`. 

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

   Aparece el mensaje **Ingrese la frase de contraseña PEM** e identifica la clave que se aplica para cifrar el certificado.

1. Elimine los atributos de bolsa y los atributos de clave del archivo `.pem` para asegurarse de que la primera línea comience con la siguiente cadena.

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

**Carga de un certificado público y una clave privada en el mánager de certificados de DMS y prueba de la conexión a Amazon MSK**

1. Cargue en el mánager de certificados de DMS mediante el siguiente comando.

   ```
   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. Cree un punto de conexión de destino de Amazon MSK y pruebe la conexión para asegurarse de que la autenticación TLS funciona.

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

**importante**  
Puede utilizar la autenticación SSL para proteger una conexión a un clúster de Kafka autoadministrado. En algunos casos, es posible que use una entidad de certificación (CA) privada en el clúster de Kafka en las instalaciones. Si es así, cargue la cadena de la entidad de certificación, el certificado público y la clave privada en el mánager de certificados de DMS. A continuación, utilice el nombre de recurso de Amazon (ARN) correspondiente en la configuración del punto de conexión cuando cree el punto de conexión de destino Kafka en las instalaciones.

**Preparación de una clave privada y un certificado firmado para un clúster de Kafka autoadministrado**

1. Genere un par de claves como se muestra en el siguiente ejemplo.

   ```
   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. Genere una solicitud de firma de certificado (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. Utilice la entidad de certificación del almacén de confianza del clúster para firmar la CSR. Si no tiene una entidad de certificación, puede crear su propia entidad de certificación privada.

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

1. Importe `ca-cert` en el almacén de confianza y al almacén de claves del servidor. Si no dispone de un almacén de confianza, utilice el siguiente comando para crear el almacén de confianza e importar `ca-cert ` en él. 

   ```
   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. Firme el certificado.

   ```
   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. Importe el certificado firmado al almacén de claves.

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

1. Utilice el siguiente comando para importar la clave `on-premise-rsa` de `kafka.server.keystore.jks` a `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. Utilice el siguiente comando para exportar `keystore.p12` a un formato `.pem`.

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

1. Cargue `encrypted-private-server-key.pem`, `signed-certificate.pem` y `ca-cert` en el mánager de certificados de DMS.

1. Cree un punto final utilizando el devuelto. 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
   ```

### Uso de la autenticación SASL-SSL para conectarse a Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

El método de capa de seguridad y autenticación simple (SASL) utiliza un nombre de usuario y una contraseña para validar la identidad del cliente y establece una conexión cifrada entre el servidor y el cliente.

Para usar SASL, primero debe crear un nombre de usuario y una contraseña seguros al configurar el clúster de Amazon MSK. Para obtener una descripción de cómo configurar un nombre de usuario y una contraseña seguros para un clúster de Amazon MSK, consulte [Configuración de la SASL/SCRAM autenticación para un clúster de Amazon MSK en la Guía para desarrolladores](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) de *Amazon Managed Streaming for Apache Kafka*.

A continuación, cuando cree el punto de conexión de destino de Kafka, establezca la configuración del punto de conexión del protocolo de seguridad (`SecurityProtocol`) mediante la opción `sasl-ssl`. Establezca también las opciones `SaslUsername` y `SaslPassword`. Asegúrese de que coincidan con el nombre de usuario y la contraseña seguros que creó cuando configuró por primera vez el clúster de Amazon MSK, como se muestra en el siguiente ejemplo de JSON.

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

**nota**  
Actualmente, solo AWS DMS admite el SASL-SSL público respaldado por una CA. DMS no admite el SASL-SSL para usarlo con Kafka autoadministrado y respaldado por una entidad de certificación privada.
Para la autenticación SASL-SSL, AWS DMS es compatible con el mecanismo SCRAM-SHA-512 de forma predeterminada. AWS DMS las versiones 3.5.0 y superiores también admiten el mecanismo Plain. Para admitir el mecanismo Plain, defina el parámetro `SaslMechanism` del tipo de datos de la API `KafkaSettings` en `PLAIN`. El tipo de datos `PLAIN` es compatible con Kafka, pero no con Amazon Kafka (MSK).

## Uso de una imagen anterior para consultar los valores originales de las filas de CDC para Apache Kafka como destino
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Al escribir actualizaciones de CDC en un destino de transmisión de datos como Kafka, puede ver los valores originales de una fila de base de datos de origen antes de cambiar mediante una actualización. Para que esto sea posible, AWS DMS rellena una *imagen anterior* de los eventos de actualización en función de los datos proporcionados por el motor de base de datos de origen. 

Los diferentes motores de base de datos de origen proporcionan diferentes cantidades de información para una imagen anterior: 
+ Oracle proporciona actualizaciones a las columnas solo si cambian. 
+ PostgreSQL proporciona datos solo para las columnas que forman parte de la clave principal (cambiadas o no). Si se utiliza la replicación lógica y se ha configurado REPLICA IDENTITY FULL para la tabla de origen, puede escribir toda la información de antes y después de la fila WALs y verla aquí.
+ MySQL generalmente proporciona datos para todas las columnas (cambiadas o no).

Para habilitar imágenes anteriores para agregar valores originales de la base de datos de origen a la salida AWS DMS , utilice la configuración de tarea `BeforeImageSettings` o el parámetro `add-before-image-columns`. Este parámetro aplica una regla de transformación de columna. 

`BeforeImageSettings` agrega un nuevo atributo JSON a cada operación de actualización con valores recopilados desde el sistema de base de datos de origen, como se muestra a continuación.

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

**nota**  
Aplicar `BeforeImageSettings` a tareas de carga completa más CDC (que migran datos existentes y replican cambios en curso) o a tareas de solo CDC (que replican cambios de datos solamente). No se aplica `BeforeImageSettings` a tareas que son solo de carga completa.

Para las opciones de `BeforeImageSettings`, se aplica lo siguiente:
+ Establezca la opción `EnableBeforeImage` para habilitar `true` antes de crear imágenes. El valor predeterminado es `false`. 
+ Utilice la opción `FieldName` para asignar un nombre al nuevo atributo JSON. Cuando `EnableBeforeImage` es `true`, `FieldName` es necesario y no puede estar vacío.
+ La opción `ColumnFilter` especifica una columna para agregar mediante el uso de las imágenes anteriores. Para agregar solo columnas que forman parte de las claves principales de la tabla, utilice el valor predeterminado, `pk-only`. Para agregar solo columnas que no son del tipo LOB, utilice `non-lob`. Para agregar cualquier columna que tenga un valor de imagen anterior, utilice `all`. 

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

### Uso de una regla de transformación de imagen anterior
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

Como alternativa a la configuración de tareas, puede utilizar el parámetro `add-before-image-columns`, que aplica una regla de transformación de columnas. Con este parámetro, puede habilitar las imágenes anteriores durante CDC en destinos de transmisión de datos como Kafka.

Al utilizar `add-before-image-columns` en una regla de transformación, puede aplicar un control más detallado de los resultados de la imagen anterior. Las reglas de transformación permiten utilizar un localizador de objetos que le da control sobre las tablas seleccionadas para la regla. Además, puede encadenar reglas de transformación, lo que permite aplicar diferentes reglas a diferentes tablas. A continuación, puede manipular las columnas producidas utilizando otras reglas. 

**nota**  
No utilice el parámetro `add-before-image-columns` junto con la configuración de tarea `BeforeImageSettings` dentro de la misma tarea. En su lugar, utilice el parámetro o la configuración, pero no ambos, para una sola tarea.

Un tipo de regla `transformation` con el parámetro `add-before-image-columns` de una columna debe proporcionar una sección `before-image-def`. A continuación se muestra un ejemplo.

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

El valor de `column-prefix` se antepone a un nombre de columna y el valor predeterminado de `column-prefix` es `BI_`. El valor de `column-suffix` se añade al nombre de la columna y el valor predeterminado está vacío. No configure ambas cadenas `column-prefix` y `column-suffix` como cadenas vacías.

Elija un valor para `column-filter`. Para agregar solo columnas que forman parte de las claves principales de la tabla, elija `pk-only`. Elija `non-lob` para agregar solo columnas que no sean de tipo LOB. O elija `all` para agregar cualquier columna que tenga un valor de imagen anterior.

### Ejemplo de una regla de transformación de imagen anterior
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

La regla de transformación del siguiente ejemplo agrega una nueva columna llamada `BI_emp_no` en el destino. Entonces, una instrucción como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` rellena el campo `BI_emp_no` con 1. Cuando escribe actualizaciones de CDC en destinos de Amazon S3, la columna `BI_emp_no` permite indicar qué fila original se actualizó.

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

Para obtener información sobre el uso de la acción de regla `add-before-image-columns`, consulte [Reglas y acciones de transformación](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Limitaciones a la hora de utilizar Apache Kafka como destino para AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Al utilizar Apache Kafka como destino, se aplican las siguientes restricciones:
+ AWS DMS Los puntos de enlace de destino de Kafka no admiten el control de acceso de IAM para Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ No se admite el modo LOB completo.
+ Especifique un archivo de configuración de Kafka para su clúster con propiedades que permitan AWS DMS crear nuevos temas automáticamente. Incluya el valor `auto.create.topics.enable = true`. Si utiliza Amazon MSK, puede especificar la configuración predeterminada al crear el clúster de Kafka y, a continuación, cambiar la configuración de `auto.create.topics.enable` a `true`. Para obtener más información acerca de los valores de configuración predeterminados, consulte [La configuración predeterminada de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) en la *Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka*. Si necesita modificar un clúster de Kafka existente creado con Amazon MSK, ejecute el AWS CLI comando `aws kafka create-configuration` para actualizar la configuración de Kafka, como en el siguiente ejemplo:

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

  Aquí, `//~/kafka_configuration` es el archivo de configuración que ha creado con los valores de propiedades necesarios.

  Si utiliza su propia instancia de Kafka instalada en Amazon EC2, modifique la configuración del clúster de Kafka con `auto.create.topics.enable = true` la configuración AWS DMS que permita la creación automática de nuevos temas mediante las opciones que se proporcionan con la instancia.
+ AWS DMS publica cada actualización en un único registro de la base de datos de origen como un registro de datos (mensaje) de un tema de Kafka determinado, independientemente de las transacciones.
+ AWS DMS admite las siguientes cuatro formas de claves de partición:
  + `SchemaName.TableName` una combinación del nombre de esquema y de tabla.
  + `${AttributeName}`: el valor de uno de los campos del archivo JSON o la clave principal de la tabla de la base de datos de origen.
  + `transaction-id`: El identificador de transacción de los CDC. Todos los registros de la misma transacción van a la misma partición.
  + `constant`: un valor literal fijo para cada registro, independientemente de la tabla o los datos. Todos los registros se envían al mismo valor de clave de partición «constante», lo que proporciona un orden global estricto en todas las tablas.

  ```
  {
      "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"
      }
  }
  ```
+ La configuración del `IncludeTransactionDetails` punto final solo se admite cuando el punto final de origen es Oracle, SQL Server, PostgreSQL o MySQL. En el caso de otros tipos de puntos finales de origen, no se incluirán los detalles de la transacción.
+ `BatchApply` no es compatible con un punto de conexión de Kafka. Es posible que el uso de la aplicación por lotes (por ejemplo, la configuración de tareas de metadatos de destino `BatchApplyEnabled`) para un objetivo de Kafka provoque la pérdida de datos.
+ AWS DMS no admite la migración de valores de tipos de `BigInt` datos con más de 16 dígitos. Para evitar esta limitación, puede usar la siguiente regla de transformación para convertir la columna `BigInt` en una cadena. Para obtener más información sobre las reglas de transformación, consulte [Reglas y acciones de transformación](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 Los puntos de enlace de destino de Kafka no son compatibles con Amazon MSK servless.
+ Al definir las reglas de asignación, no se admite disponer de una regla de asignación de objetos y una regla de transformación. Debe establecer solo una regla. 
+ AWS DMS admite la autenticación SASL para las versiones de Apache Kafka hasta la 3.8. Si utiliza Kafka 4.0 o una versión superior, solo puede conectarse sin la autenticación SASL.
+ AWS DMS no admite datos de origen que contengan `'\0'` caracteres incrustados cuando se utiliza Kafka como punto final de destino. Los datos que contengan `'\0'` caracteres incrustados se truncarán en el primer carácter. `'\0'`

## Uso de la asignación de objetos para migrar datos a un tema de Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS utiliza reglas de mapeo de tablas para mapear los datos del tema de Kafka de origen al tema de Kafka de destino. Para asignar datos a un tema de destino, se utiliza un tipo de regla de asignación de tablas denominado asignación de objetos. Puede utilizar el mapeo de objetos para definir cómo los registros de datos del origen se asignan a los registros de datos publicados en un tema de Kafka. 

Los temas de Kafka no tienen una estructura predeterminada distinta de una clave de partición.

**nota**  
No tiene que utilizar la asignación de objetos. Puede utilizar la asignación de tablas normal para varias transformaciones. Sin embargo, el tipo de clave de partición seguirá estos comportamientos predeterminados:   
La clave principal se usa como clave de partición para la carga completa.
Si no se utiliza ninguna configuración de tareas de aplicación paralela, `schema.table` se utiliza como clave de partición para CDC.
Si se utiliza la configuración de tareas de aplicación paralela, la clave principal se utiliza como clave de partición para CDC.

Para crear una regla de mapeo de objetos, se especifica `rule-type` como `object-mapping`. Esta regla indica el tipo de mapeo de objetos que desea utilizar. 

La estructura de la regla es la siguiente.

```
{
    "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 actualmente admite `map-record-to-record` y es `map-record-to-document` el único valor válido para el parámetro. `rule-action` Esta configuración afecta a los valores que no están excluidos como parte de la lista de atributos `exclude-columns`. Los `map-record-to-document` valores `map-record-to-record` y especifican cómo se AWS DMS gestionan estos registros de forma predeterminada. Estos valores no afectan a los mapeos de atributos en modo alguno. 

Utilice `map-record-to-record` al migrar desde una base de datos relacional a un tema de Kafka. Este tipo de regla utiliza el valor `taskResourceId.schemaName.tableName` de la base de datos relacional como la clave de partición en el tema de Kafka y crea un atributo para cada columna de la base de datos de origen. 

Cuando utilice `map-record-to-record`, tenga en cuenta lo siguiente:
+ Esta configuración solo afecta a las columnas excluidas de la lista `exclude-columns`.
+ Para cada columna de este tipo, AWS DMS crea un atributo correspondiente en el tema de destino.
+ AWS DMS crea el atributo correspondiente independientemente de si la columna de origen se utiliza en una asignación de atributos. 

Una forma de entender `map-record-to-record` es verlo en acción. En este ejemplo, imagine que empieza con una fila de una tabla de base de datos relacional con la estructura y los datos siguientes.


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

Para migrar esta información desde un esquema denominado `Test` a un tema de Kafka, cree reglas para mapear los datos al tema. La siguiente regla ilustra la operación de asignación. 

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

Dados un tema de Kafka y una clave de partición (en este caso, `taskResourceId.schemaName.tableName`), a continuación se ilustra el formato de registro resultante al usar nuestros datos de ejemplo en el tema de destino de 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**
+ [Reestructuración de datos con el mapeo de atributos](#CHAP_Target.Kafka.AttributeMapping)
+ [Replicación multitemática mediante asignación de objetos](#CHAP_Target.Kafka.MultiTopic)
+ [Formato de mensajes para Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Reestructuración de datos con el mapeo de atributos
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

Puede reestructurar los datos mientras los migra a un tema de Kafka utilizando un mapa de atributos. Por ejemplo, es posible que desee combinar varios campos del origen en un único campo en el destino. El mapa de atributos siguiente ilustra cómo reestructurar los datos.

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

Para establecer un valor constante para`partition-key`, especifique`"partition-key-type: "constant"`, esto establece el valor de la partición en`constant`. Tal vez desee hacer esto, por ejemplo, para obligar a que todos los datos se almacenen en una única partición. El siguiente mapeo ilustra este enfoque. 

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

**nota**  
El valor `partition-key` de un registro de control para una tabla específica es `TaskId.SchemaName.TableName`. El valor `partition-key` de un registro de control para una tabla específica es el `TaskId` de ese registro. La especificación de un valor `partition-key` en el mapeo de objetos no tiene ningún efecto en el elemento `partition-key` de un registro de control.  
 Si `partition-key-type` se establece `attribute-name` en una regla de mapeo de tablas, debe especificarse`partition-key-name`, que debe hacer referencia a una columna de la tabla de origen o a una columna personalizada definida en la asignación. Además, `attribute-mappings` debe proporcionarse para definir cómo se asignan las columnas de origen al tema de Kafka de destino.

### Replicación multitemática mediante asignación de objetos
<a name="CHAP_Target.Kafka.MultiTopic"></a>

De forma predeterminada, AWS DMS las tareas migran todos los datos de origen a uno de los siguientes temas de Kafka:
+ Como se especifica en el campo **Tema** del punto final de AWS DMS destino.
+ Como especifica `kafka-default-topic` si el campo **Tema** del punto de conexión de destino no está rellenado y la configuración `auto.create.topics.enable` de Kafka está establecida en `true`.

Con las versiones 3.4.6 y posteriores AWS DMS del motor, puede usar el `kafka-target-topic` atributo para asignar cada tabla fuente migrada a un tema diferente. Por ejemplo, las siguientes reglas de asignación de objetos migran las tablas de origen `Customer` y `Address` a los temas de Kafka `customer_topic` y `address_topic`, respectivamente. Al mismo tiempo, AWS DMS migra todas las demás tablas de origen, incluida la `Bills` tabla del `Test` esquema, al tema especificado en el punto final de destino.

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

Al utilizar la replicación multitema de Kafka, puede agrupar y migrar las tablas de origen para separar los temas de Kafka mediante una única tarea de replicación.

### Formato de mensajes para Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

La salida JSON es simplemente una lista de pares de clave-valor. 

**RecordType**  
El tipo de registro puede ser de datos o de control. Los *registros de datos *representan las filas reales en el origen. Los *registros de control* son para eventos importantes de la secuencia como, por ejemplo, el reinicio de una tarea.

**Operación**  
Para los registros de datos, la operación puede ser `load`, `insert`, `update` o `delete`.  
Para los registros de control, la operación puede ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` o `column-type-change`.

**SchemaName**  
El esquema de origen del registro. Este campo puede estar vacío para un registro de control.

**TableName**  
La tabla de origen del registro. Este campo puede estar vacío para un registro de control.

**Timestamp**  
La marca temporal que indica cuándo se creó el mensaje JSON. El campo está formateado con el formato ISO 8601.

El siguiente ejemplo de mensaje JSON ilustra un mensaje de tipo de datos con todos los metadatos adicionales.

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

El siguiente ejemplo de mensaje JSON ilustra un mensaje de tipo control.

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

# Utilizar un clúster OpenSearch de Amazon Service como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Se puede utilizar AWS DMS para migrar datos a Amazon OpenSearch Service (OpenSearch Servicio). OpenSearch El servicio es un servicio gestionado que facilita la implementación, el funcionamiento y el escalado de un clúster OpenSearch de servicios. 

En OpenSearch Service, se trabaja con índices y documentos. Un *índice* es una colección de documentos y un *documento* es un objeto JSON que contiene valores escalares, matrices y otros objetos. OpenSearch proporciona un lenguaje de consulta basado en JSON para que pueda consultar los datos de un índice y recuperar los documentos correspondientes.

Cuando AWS DMS crea índices para un punto final de destino para OpenSearch Service, crea un índice para cada tabla desde el punto final de origen. El coste de crear un índice OpenSearch de servicios depende de varios factores. Estos son el número de índices creados, la cantidad total de datos que contienen y la pequeña cantidad de metadatos que se OpenSearch almacenan para cada documento.

Configure su clúster de OpenSearch servicios con los recursos de procesamiento y almacenamiento adecuados para el alcance de la migración. Le recomendamos que tenga en cuenta los factores siguientes, en función de la tarea de replicación que desee utilizar:
+ Para una carga de datos completa, considere la cantidad total de datos que va a migrar, así como la velocidad de la transferencia.
+ Para replicar los cambios en curso, tenga en cuenta la frecuencia de las actualizaciones y sus requisitos de end-to-end latencia.

Además, configure los ajustes del índice en su OpenSearch clúster, prestando especial atención al recuento de documentos.

**Configuración de tareas de carga completa con varios subprocesos**

Para ayudar a aumentar la velocidad de la transferencia, AWS DMS admite una carga completa de subprocesos múltiples a un clúster de destino del OpenSearch servicio. AWS DMS admite este subprocesamiento múltiple con una configuración de tareas que incluye lo siguiente:
+ `MaxFullLoadSubTasks`: utilice esta opción para indicar el número máximo de tablas de origen que se pueden cargar en paralelo. DMS carga cada tabla en su índice de objetivos de OpenSearch servicio correspondiente mediante una subtarea dedicada. El valor predeterminado es 8, el valor máximo es 49.
+ `ParallelLoadThreads`— Utilice esta opción para especificar el número de subprocesos que se AWS DMS utilizan para cargar cada tabla en su índice de destino OpenSearch de servicio. El valor máximo para un objetivo OpenSearch de servicio es 32. Puede pedir que se incremente este límite máximo.
**nota**  
Si no cambia `ParallelLoadThreads` desde su valor predeterminado (0), AWS DMS transfiere un solo registro a la vez. Este enfoque supone una carga excesiva para el clúster OpenSearch de servicios. Asegúrese de que configura esta opción en 1 o más.
+ `ParallelLoadBufferSize`— Utilice esta opción para especificar el número máximo de registros que se almacenarán en el búfer que utilizan los subprocesos de carga paralela para cargar datos en el destino del OpenSearch servicio. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con `ParallelLoadThreads`. `ParallelLoadBufferSize` es válido solo cuando hay más de un subproceso.

Para obtener más información sobre cómo DMS carga un clúster de OpenSearch servicios mediante subprocesos múltiples, consulte la AWS entrada del 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 

**Configuración de tareas de carga de CDC con varios subprocesos**

Puede mejorar el rendimiento de la captura de datos de cambios (CDC) para un clúster de destino de un OpenSearch servicio mediante la configuración de tareas para modificar el comportamiento de la llamada a la API. `PutRecords` Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas `ParallelApply*`. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 32 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer. 
**nota**  
El soporte para el uso de la configuración de `ParallelApply*` tareas durante los puntos finales de destino de CDC a Amazon OpenSearch Service está disponible en AWS DMS las versiones 3.4.0 y posteriores.

Para promover el desempeño de los CDC, AWS DMS apoya las siguientes configuraciones de tareas:
+ `ParallelApplyThreads`— Especifica la cantidad de subprocesos simultáneos que se AWS DMS utilizan durante una carga de CDC para enviar los registros de datos a un punto final de destino del OpenSearch servicio. El valor predeterminado es cero (0) y el valor máximo es 32.
+ `ParallelApplyBufferSize`— Especifica el número máximo de registros que se deben almacenar en cada cola de búfer para que los subprocesos simultáneos se envíen a un punto final de destino del OpenSearch servicio durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando `ParallelApplyThreads` especifique más de un subproceso. 
+ `ParallelApplyQueuesPerThread`— Especifica el número de colas a las que accede cada subproceso para extraer los registros de datos de las colas y generar una carga por lotes para un punto final del servicio durante la CDC. OpenSearch 

Cuando se utiliza la configuración de tareas `ParallelApply*`, el valor predeterminado de `partition-key-type` es el valor de `primary-key` de la tabla, no el valor de `schema-name.table-name`.

## Migración de una tabla de base de datos relacional a un índice de servicios OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS admite la migración de datos a los tipos de datos escalares del OpenSearch Servicio. Al migrar de una base de datos relacional como Oracle o MySQL a OpenSearch Service, es posible que desee reestructurar la forma en que almacena estos datos.

AWS DMS admite los siguientes tipos de datos escalares OpenSearch de servicio: 
+ Booleano 
+ Date
+ Flotante
+ Int
+ Cadena

AWS DMS convierte los datos de tipo Date en tipo String. Puede especificar la asignación personalizada para interpretar estas fechas.

AWS DMS no admite la migración de tipos de datos LOB.

## Requisitos previos para utilizar Amazon OpenSearch Service como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Antes de empezar a trabajar con una base de datos de OpenSearch servicios como destino AWS DMS, asegúrese de crear un rol AWS Identity and Access Management (de IAM). Esta función debería permitir el AWS DMS acceso a los índices del OpenSearch servicio en el punto final de destino. El conjunto mínimo de permisos de acceso se muestra en la siguiente política de IAM.

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

****  

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

------

El rol que utilice para la migración al OpenSearch Servicio debe tener los siguientes permisos.

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

****  

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

------

En el ejemplo anterior, `region` sustitúyalo por el identificador de AWS región, *`account-id`* por el ID de tu AWS cuenta y `domain-name` por el nombre de tu dominio de Amazon OpenSearch Service. Un ejemplo es `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`.

## Configuración del punto final cuando se utiliza el OpenSearch Servicio como destino para AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Puede utilizar los ajustes de punto final para configurar la base de datos de destino del OpenSearch Servicio de forma similar a como se utilizan atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintaxis `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

En la siguiente tabla se muestran los ajustes de punto final que puede utilizar con OpenSearch Service como destino.


| Nombre de atributo | Valores válidos | Valor predeterminado y descripción | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Un número entero positivo mayor que 0, pero menor que 100.  |  10: para una tarea de carga completa, este atributo determina el umbral de errores permitidos antes de producirse un error en la tarea. Por ejemplo, suponga que hay 1 500 filas en el punto de enlace de origen y que este parámetro está establecido en 10. Entonces, la tarea falla si AWS DMS encuentra más de 150 errores (el 10 por ciento del recuento de filas) al escribir en el punto final de destino.  | 
|   `ErrorRetryDuration`   |  Un número entero positivo mayor que 0.  |  300: si se produce un error en el punto final de destino, AWS DMS vuelve a intentarlo durante ese número de segundos. De lo contrario, la tarea produce un error.  | 
|  `UseNewMappingType`  | true o false |  `false`, pero para trabajar con opensearch v2.x, debe configurarse en `true`.  | 

## Limitaciones al utilizar Amazon OpenSearch Service como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

Cuando se utiliza Amazon OpenSearch Service como objetivo, se aplican las siguientes limitaciones:
+ OpenSearch El servicio utiliza el mapeo dinámico (estimación automática) para determinar los tipos de datos que se utilizarán para los datos migrados.
+ OpenSearch El servicio almacena cada documento con un identificador único. A continuación, se muestra un ID de ejemplo. 

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

  Cada ID de documento tiene una longitud de 64 bytes, por lo que debe prever este requisito de almacenamiento. Por ejemplo, si migra 100 000 filas de una AWS DMS fuente, el índice de OpenSearch servicios resultante requiere almacenamiento de 6 400 000 bytes adicionales.
+ Con OpenSearch Service, no puede actualizar los atributos clave principales. Esta restricción es importante cuando se utiliza la replicación continua con captura de datos de cambio (CDC), ya que puede resultar en la presencia de datos no deseados en el destino. En el modo CDC, las claves principales se asignan a SHA256 valores, que tienen una longitud de 32 bytes. Se convierten en cadenas de 64 bytes legibles por humanos y se utilizan como documento de servicio. OpenSearch IDs
+ Si AWS DMS encuentra algún elemento que no se pueda migrar, escribe mensajes de error en Amazon CloudWatch Logs. Este comportamiento difiere del de otros puntos finales de AWS DMS destino, que escriben los errores en una tabla de excepciones.
+ AWS DMS no admite la conexión a un clúster de Amazon ES que tenga habilitado el control de acceso detallado con un usuario maestro y una contraseña.
+ AWS DMS no es compatible con el servicio sin servidor OpenSearch .
+ OpenSearch El servicio no admite la escritura de datos en índices preexistentes.
+ La configuración de tareas de replicación no `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` se admite para su uso con un punto final de OpenSearch destino.
+ Al migrar datos a Amazon Elasticsearch mediante AWS DMS, los datos de origen deben tener una clave principal o una columna de identificador único. Si los datos de origen no tienen una clave principal o un identificador único, debe definir uno mediante la define-primary-key regla de transformación.

## Tipos de datos de destino para Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Cuando AWS DMS migra datos de bases de datos heterogéneas, el servicio mapea los tipos de datos de la base de datos de origen a tipos de datos intermedios, denominados tipos de AWS DMS datos. A continuación, el servicio asigna los tipos de datos intermedios a los tipos de datos de destino. La siguiente tabla muestra cada tipo de AWS DMS datos y el tipo de datos al que se asigna en OpenSearch Service.


| AWS DMS tipo de datos | OpenSearch tipo de datos de servicio | 
| --- | --- | 
|  Booleano  |  booleano  | 
|  Fecha  |  cadena  | 
|  Tiempo  |  date  | 
|  Marca temporal  |  date  | 
|  INT4  |  entero  | 
|  Real4  |  float  | 
|  UINT4  |  entero  | 

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte[Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Uso de Amazon DocumentDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DocumentDB"></a>

 Para obtener información sobre las versiones de Amazon DocumentDB (compatibles con MongoDB) compatibles, consulte. AWS DMS [Objetivos para AWS DMS](CHAP_Introduction.Targets.md) Puede usar AWS DMS para migrar datos a Amazon DocumentDB (con compatibilidad con MongoDB) desde cualquiera de los motores de datos de origen compatibles con AWS DMS . El motor de origen puede estar en un servicio AWS gestionado como Amazon RDS, Aurora o Amazon S3. O el motor puede estar en una base de datos autoadministrada, como MongoDB ejecutándose en Amazon EC2 o en las instalaciones.

Puede utilizarlos AWS DMS para replicar los datos de origen en bases de datos, colecciones o documentos de Amazon DocumentDB. 

**nota**  
Si el punto de conexión de origen es MongoDB o Amazon DocumentDB, ejecute la migración en **modo documento**.

MongoDB almacena los datos en un formato JSON binario (BSON). AWS DMS admite todos los tipos de datos BSON compatibles con Amazon DocumentDB. Para obtener una lista de estos tipos de datos, consulte [ APIsMongoDB, operaciones y tipos de datos compatibles en la Guía](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) para desarrolladores de *Amazon DocumentDB.*

Si el punto final de origen es una base de datos relacional, AWS DMS asigna los objetos de la base de datos a Amazon DocumentDB de la siguiente manera:
+ Una base de datos relacional o un esquema de base de datos, se asigna una *base de datos* de Amazon DocumentDB. 
+ Las tablas de una base de datos relacional se corresponden con *recopilaciones* en Amazon DocumentDB.
+ Los registros de una tabla relacional se asignan a *documentos* en Amazon DocumentDB. Cada documento se crea a partir de los datos del registro de origen.

Si el punto de conexión de origen es Amazon S3, los objetos de Amazon DocumentDB resultantes se corresponden con reglas de asignación de AWS DMS para Amazon S3. Considere, por ejemplo, el siguiente URI.

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

En este caso, AWS DMS asigne los objetos `amzn-s3-demo-bucket` a Amazon DocumentDB de la siguiente manera:
+ La parte del URI del nivel superior (`hr`) se asigna a una base de datos de Amazon DocumentDB. 
+ La parte del URI siguiente (`employee`) se asigna a una recopilación de Amazon DocumentDB.
+ Cada objeto en `employee` asigna un documento de Amazon DocumentDB.

Para obtener más información sobre las reglas de asignación de Amazon S3, consulte [Uso de Amazon S3 como fuente de AWS DMS](CHAP_Source.S3.md).

**Configuración del punto de conexión de Amazon DocumentDB**

En AWS DMS las versiones 3.5.0 y posteriores, puede mejorar el rendimiento de la captura de datos de cambios (CDC) para los puntos de enlace de Amazon DocumentDB ajustando la configuración de las tareas para los subprocesos paralelos y las operaciones masivas. Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas `ParallelApply*`. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 128 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer. 

Para promover el desempeño de los CDC, AWS DMS es compatible con las siguientes configuraciones de tareas:
+ `ParallelApplyThreads`— Especifica el número de subprocesos simultáneos que se AWS DMS utilizan durante una carga de CDC para enviar registros de datos a un punto final de destino de Amazon DocumentDB. El valor predeterminado es cero (0) y el valor máximo es 32.
+ `ParallelApplyBufferSize`: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Amazon DocumentDB durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando `ParallelApplyThreads` especifique más de un subproceso. 
+ `ParallelApplyQueuesPerThread`: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Amazon DocumentDB durante el proceso de CDC. El valor predeterminado de es 1. El máximo es 512.

**nota**  
 En el caso de los objetivos de Amazon DocumentDB, la solicitud paralela de los CDC puede provocar errores clave duplicados o el estancamiento de la solicitud de los CDC para las cargas de trabajo que utilizan índices únicos secundarios o que requieren un orden estricto de los cambios. Utilice la configuración de aplicación CDC de subproceso único predeterminada para estas cargas de trabajo. 

Para obtener información adicional sobre cómo trabajar con Amazon DocumentDB como destino AWS DMS, consulte las siguientes secciones:

**Topics**
+ [Asignación de datos desde un origen a un destino de Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Conexión a los clústeres elásticos de Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Replicación continua con Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Limitaciones para usar Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.limitations)
+ [Uso de la configuración de puntos de conexión con Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.ECAs)
+ [Tipos de datos de destino de Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**nota**  
Para obtener información step-by-step detallada sobre el proceso de migración, consulte [Migración de MongoDB a Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html) en la Guía de migración. AWS Database Migration Service Step-by-Step 

## Asignación de datos desde un origen a un destino de Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS lee los registros del punto final de origen y crea documentos JSON en función de los datos que lee. Para cada documento JSON, AWS DMS debe determinar un `_id` campo que actúe como identificador único. A continuación, escribe el documento JSON en una recopilación de Amazon DocumentDB, con el campo `_id` como clave principal.

### Datos de origen que están en una sola columna
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Si los datos de origen constan de una única columna, deben ser del tipo cadena. (Según el motor de origen, el tipo de datos real puede ser VARCHAR, NVARCHAR, TEXT, LOB, CLOB o similar). AWS DMS asume que los datos son un documento JSON válido y los replica en Amazon DocumentDB tal cual.

Si el documento JSON resultante contiene un campo llamado `_id`, entonces se utiliza ese campo como el `_id` único en Amazon DocumentDB.

Si JSON no contiene un campo `_id`, Amazon DocumentDB genera un valor de `_id` automáticamente.

### Datos de origen que están en varias columnas
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Si los datos de origen constan de varias columnas, crea un documento JSON a partir de todas estas columnas. AWS DMS Para determinar el `_id` campo del documento, AWS DMS proceda de la siguiente manera:
+ Si una de las columnas se llama `_id`, los datos de esa columna se utilizan como el `_id` de destino.
+ Si no hay ninguna `_id` columna, pero los datos de origen tienen una clave principal o un índice único, AWS DMS utiliza esa clave o valor de índice como `_id` valor. Los datos de la clave principal o el índice único también aparecen como campos explícitos en el documento JSON.
+ Si no hay ninguna columna `_id` y tampoco hay una clave principal o un índice único, Amazon DocumentDB genera un valor de `_id` automáticamente.

### Forzar un tipo de datos en el punto de enlace de destino
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS puede modificar las estructuras de datos cuando escribe en un punto final de destino de Amazon DocumentDB. Puede solicitar estos cambios modificando los nombres de las columnas y las tablas en el punto de enlace de origen o proporcionando reglas de transformación que se apliquen cuando se ejecute una tarea.

#### Uso de un documento JSON anidado (json\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Para forzar un tipo de datos, puede incluir el prefijo `json_` en el nombre de la columna de origen (por ejemplo, `json_columnName`) manualmente o mediante una transformación. En este caso, la columna se crea como un documento JSON anidado dentro del documento de destino, en lugar de como un campo de cadena.

Suponga, por ejemplo, que desea migrar el siguiente documento desde un punto de enlace de origen de MongoDB.

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

Si no fuerza ningún tipo de datos de origen, el documento `ContactDetails` incrustado se migra como una cadena.

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

Sin embargo, puede añadir una regla de transformación para obligar a que `ContactDetails` sea un objeto JSON. Suponga, por ejemplo, que el nombre original de la columna de origen es `ContactDetails`. Para utilizar el tipo de datos como JSON anidado, es necesario cambiar el nombre de la columna situada en el punto final de origen a «json\$1ContactDetails», ya sea añadiendo el prefijo «\$1json\$1\$1» a la fuente de forma manual o mediante reglas de transformación. Por ejemplo, puede usar la siguiente regla de transformación:

```
{
    "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 replica el campo como JSON anidado, de la siguiente manera. ContactDetails 

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

#### Uso de una matriz JSON (array\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Para forzar un tipo de datos, puede incluir el prefijo `array_` en el nombre de la columna (por ejemplo, `array_columnName`) manualmente o mediante una transformación. En este caso, AWS DMS considera la columna como una matriz JSON y la crea como tal en el documento de destino.

Suponga que desea migrar el siguiente documento desde un punto de enlace de origen de MongoDB.

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

Si no fuerza ningún tipo de datos de origen, el documento `ContactDetails` incrustado se migra como una cadena.

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

 Sin embargo, puede añadir reglas de transformación para imponer el tipo de datos de matriz JSON a `ContactAddress` y `ContactPhoneNumbers`, tal y como se muestra en la siguiente tabla.


****  

| Nombre original de la columna de origen | Nuevo nombre de la columna de origen | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS se replica `ContactAddress` y de la `ContactPhoneNumbers` siguiente manera.

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

### Conexión a Amazon DocumentDB mediante TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

De forma predeterminada, un clúster de Amazon DocumentDB recién creado solo acepta conexiones seguras mediante la seguridad de la capa de transporte (TLS). Cuando TLS está habilitado, cada conexión a Amazon DocumentDB requiere una clave pública.

Puede recuperar la clave pública de Amazon DocumentDB descargando el archivo desde un bucket de Amazon S3 AWS alojado. `rds-combined-ca-bundle.pem` Para obtener más información acerca de la descarga de este archivo, consulte [Cifrado de conexiones mediante TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) en la *Guía para desarrolladores de Amazon DocumentDB*

Tras descargar este archivo.pem, puede importar la clave pública que contiene tal y AWS DMS como se describe a continuación.

#### Consola de administración de AWS
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Para importar el archivo de clave pública (.pem)**

1. [Abra la AWS DMS consola en /dms. https://console.aws.amazon.com](https://console.aws.amazon.com/dms)

1. En el panel de navegación, elija **Certificates**.

1. Elija **Import certificate (Importar certificado)** y haga lo siguiente:
   + En **Certificate identifier (Identificador del certificado)**, escriba un nombre único para el certificado (por ejemplo `docdb-cert`).
   + En **Import file (Archivo de importación)**, desplácese hasta la ubicación en la que guardó el archivo .pem.

   Cuando los ajustes sean los deseados, elija **Add new CA certificate (Añadir nuevo certificado de CA)**.

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

Utilice el comando `aws dms import-certificate`, tal y como se muestra en el ejemplo siguiente.

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

Al crear un punto final de AWS DMS destino, proporcione el identificador del certificado (por ejemplo,`docdb-cert`). A continuación, establezca el parámetro de modo de SSL en `verify-full`.

## Conexión a los clústeres elásticos de Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

En AWS DMS las versiones 3.4.7 y posteriores, puede crear un punto final de destino de Amazon DocumentDB como un clúster elástico. Si crea el punto de conexión de destino como un clúster elástico, debe adjuntar un certificado SSL nuevo al punto de conexión del clúster elástico de Amazon DocumentDB, ya que el certificado SSL existente no funcionará.

**Asociación de un certificado SSL nuevo al punto de conexión del clúster elástico de Amazon DocumentDB**

1. En un navegador, abra [ https://www.amazontrust.com/repository/SFSRootCAG2.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) y guarde el contenido en un `.pem` archivo con un nombre de archivo único, por ejemplo. `SFSRootCAG2.pem` Este es el archivo de certificado que debe importar en los pasos siguientes.

1. Cree el punto de conexión del clúster elástico y establezca las siguientes opciones:

   1. En **Configuración del punto de conexión**, elija **Agregar un nuevo certificado de entidad de certificación**.

   1. En **Identificador del certificado**, escriba **SFSRootCAG2.pem**.

   1. Para **Importar archivo de certificado**, elija **Elegir archivo**, después acceda al archivo `SFSRootCAG2.pem` que descargó anteriormente.

   1. Seleccione y abra el archivo `SFSRootCAG2.pem` descargado.

   1. Seleccione **Importar certificado**.

   1. **En el menú desplegable **Elegir un certificado**, elija SFSRoot CAG2 .pem.**

El nuevo certificado SSL del archivo `SFSRootCAG2.pem` descargado ahora está adjunto al punto de conexión del clúster elástico de Amazon DocumentDB.

## Replicación continua con Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Si la replicación continua (captura de datos de cambios, CDC) está habilitada para Amazon DocumentDB como objetivo, las versiones 3.5.0 y superiores de AWS DMS proporcionan una mejora del rendimiento veinte veces mayor que las versiones anteriores. En versiones anteriores, en AWS DMS las que se gestionaban hasta 250 registros por segundo, AWS DMS ahora se procesan de forma eficiente más de 5000 registros por segundo. AWS DMS también garantiza que los documentos de Amazon DocumentDB permanezcan sincronizados con la fuente. Cuando se crea o actualiza un registro fuente, primero AWS DMS debe determinar qué registro de Amazon DocumentDB se ve afectado de la siguiente manera:
+ Si el registro de origen tiene una columna denominada `_id`, el valor de esa columna determina el `_id` correspondiente en la recopilación de Amazon DocumentDB.
+ Si no hay ninguna `_id` columna, pero los datos de origen tienen una clave principal o un índice único, AWS DMS utiliza esa clave o valor de índice como el de la `_id` colección Amazon DocumentDB.
+ Si el registro de origen no tiene una `_id` columna, una clave principal o un índice único, hace AWS DMS coincidir todas las columnas de origen con los campos correspondientes de la colección Amazon DocumentDB.

Cuando se crea un registro de origen nuevo, AWS DMS escribe el documento correspondiente en Amazon DocumentDB. Si se actualiza un registro de origen existente, AWS DMS actualiza los campos correspondientes del documento de destino en Amazon DocumentDB. Los campos que existen en el documento de destino pero no en el registro de origen se mantienen tal cual están.

Cuando se elimina un registro de origen, AWS DMS elimina el documento correspondiente de Amazon DocumentDB.

### Cambios estructurales (DDL) en el origen
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Con la replicación continua, todos los cambios realizados en las estructuras de datos de origen (como tablas, columnas, etc.) se propagan a los elementos correspondientes en Amazon DocumentDB. En las bases de datos relacionales, estos cambios se inician con instrucciones del lenguaje de definición de datos (DDL). Puede ver cómo AWS DMS se propagan estos cambios a Amazon DocumentDB en la siguiente tabla.


****  

| DDL en el origen | Efecto en el objetivo de Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Crea una colección vacía. | 
| Instrucción que cambia el nombre de una tabla (RENAME TABLE, ALTER TABLE...RENAME y similar) | Cambia el nombre de la colección. | 
| TRUNCATE TABLE | Elimina todos los documentos de la colección, pero solo si HandleSourceTableTruncated es true. Para obtener más información, consulte [Configuración de tareas para la administración de DDL del procesamiento de cambios](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Elimina la colección, pero solo si HandleSourceTableDropped es true. Para obtener más información, consulte [Configuración de tareas para la administración de DDL del procesamiento de cambios](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Instrucción que añade una columna a una tabla (ALTER TABLE...ADD y similar) | La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen, se añade el nuevo campo al documento de destino. | 
| ALTER TABLE...RENAME COLUMN | La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen, el campo con el nuevo nombre se añade al documento de destino. | 
| ALTER TABLE...DROP COLUMN | La instrucción DDL se omite y se envía una advertencia. | 
| Instrucción que cambia el tipo de datos de las columnas (ALTER COLUMN...MODIFY y similar) | La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen con el nuevo tipo de datos, se crea el documento de destino con un campo de ese nuevo tipo de datos. | 

## Limitaciones para usar Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.limitations"></a>

Se aplican las siguientes limitaciones cuando se utiliza Amazon DocumentDB como destino para: AWS DMS
+ En Amazon DocumentDB, los nombres de las recopilaciones no pueden incluir el símbolo del dólar (\$1). Además, los nombres de las bases de datos no pueden contener caracteres Unicode.
+ AWS DMS no admite la fusión de varias tablas de origen en una única colección de Amazon DocumentDB.
+ Cuando AWS DMS los procesos cambian desde una tabla de origen que no tiene una clave principal, se ignoran todas las columnas LOB de esa tabla.
+ Si la opción **Tabla de cambios** está habilitada y AWS DMS encuentra una columna de origen llamada “*\$1id*”, esa columna aparece como “*\$1\$1id*” (con dos guiones bajos) en la tabla de cambios.
+ Si elige Oracle como punto de enlace de origen, el origen de Oracle debe tener el registro suplementario completo habilitado. De lo contrario, si hay columnas en el origen que no han cambiado, los datos se cargan en Amazon DocumentDB como valores nulos.
+ La configuración de tareas de replicación, `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` no se admite para su uso con un punto de conexión de destino de DocumentDB. 
+ Amazon DocumentDB no admite las colecciones limitadas de MongoDB. Sin embargo, AWS DMS migra automáticamente dichos objetos como colecciones ilimitadas en la DocumentDB de destino.
+ La solicitud paralela de los CDC a los objetivos de Amazon DocumentDB puede provocar errores clave duplicados o el estancamiento de la solicitud de los CDC para cargas de trabajo que utilizan índices únicos secundarios o que requieren un orden estricto de los cambios. Para este tipo de cargas de trabajo, utilice la configuración de aplicación CDC predeterminada de un solo subproceso.

## Uso de la configuración de puntos de conexión con Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.ECAs"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Amazon DocumentDB de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la `--doc-db-settings '{"EndpointSetting": "value", ...}'` sintaxis JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Amazon DocumentDB como destino.


| Nombre de atributo | Valores válidos | Valor predeterminado y descripción | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  booleano `true` `false`  |  Cuando se establece en `true`, esta configuración de punto de conexión tiene los siguientes efectos e impone las siguientes limitaciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Tipos de datos de destino de Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

En la siguiente tabla, puede encontrar los tipos de datos de destino de Amazon DocumentDB que se admiten cuando se utiliza AWS DMS y el mapeo predeterminado a partir de los tipos de datos de AWS DMS. Para obtener más información sobre los tipos de datos de AWS DMS, consulte. [Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md)


|  AWS Tipo de datos DMS  |  Tipo de datos de Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Booleano  | 
|  BYTES  |  Datos binarios  | 
|  DATE  | Date | 
|  TIME  | Cadena () UTF8 | 
|  DATETIME  | Date | 
|  INT1  | Entero de 32 bits | 
|  INT2  |  Entero de 32 bits  | 
|  INT4  | Entero de 32 bits | 
|  INT8  |  Entero de 64 bits  | 
|  NUMERIC  | Cadena (UTF8) | 
|  REAL4  |  Double  | 
|  REAL8  | Double | 
|  STRING  |  Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se asignan a String (). UTF8  | 
|  UINT1  | Entero de 32 bits | 
|  UINT2  | Entero de 32 bits | 
|  UINT4  | Entero de 64 bits | 
|  UINT8  |  Cadena () UTF8  | 
|  WSTRING  | Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se asignan a String (). UTF8 | 
|  BLOB  | Binario | 
|  CLOB  | Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se asignan a String (). UTF8 | 
|  NCLOB  | Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se asignan a String (). UTF8 | 

# Uso de Amazon Neptune como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

Amazon Neptune es un servicio de base de datos de gráficos rápido, fiable y completamente administrado que le permite crear y ejecutar fácilmente aplicaciones que funcionen con conjuntos de datos altamente conectados. El componente principal de Neptune es un motor de base de datos de gráficos de alto rendimiento y personalizado. Este motor está optimizado para almacenar miles de millones de relaciones y consultar el gráfico con una latencia de milisegundos. Neptune es compatible con los populares lenguajes de consulta gráfica Apache TinkerPop Gremlin y SPARQL del W3C. Para obtener más información sobre Amazon Neptune, consulte [¿Qué es Amazon Neptune?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) en la *Guía del usuario de Amazon Neptune*. 

Sin una base de datos de gráficos como Neptune, probablemente modele datos altamente conectados en una base de datos relacional. Como los datos tienen conexiones potencialmente dinámicas, las aplicaciones que usan dichos orígenes de datos deben modelar consultas de datos conectados en SQL. Este enfoque requiere que escriba una capa adicional para convertir consultas de gráficos a SQL. Además, las bases de datos relacionales vienen con rigidez de esquema. Cualquier cambio en el esquema para modelar las conexiones cambiantes requiere tiempo de inactividad y mantenimiento adicional de la conversión de la consulta para admitir el nuevo esquema. El rendimiento de la consulta es otra gran restricción a tener en cuenta al diseñar sus aplicaciones.

Las bases de datos de gráficos pueden simplificar en gran medida dichas situaciones. Sin ningún esquema, las capas (Gremlin o SPARQL) de consulta de gráficos enriquecidos y los índices optimizados para la consulta de gráficos aumentan la flexibilidad y el rendimiento. La base de datos de gráficos de Amazon Neptune también tiene características empresariales como el cifrado en reposo, una capa de autorización con seguridad, copias de seguridad por defecto, compatibilidad Multi-AZ, compatibilidad con réplicas de lectura, etc.

Con él AWS DMS, puede migrar datos relacionales que modelan un gráfico altamente conectado a un punto final de destino de Neptune desde un punto final de origen de DMS para cualquier base de datos SQL compatible.

Para obtener más detalles, consulte lo siguiente.

**Topics**
+ [Información general sobre la migración a Amazon Neptune como destino](#CHAP_Target.Neptune.MigrationOverview)
+ [Especificación de la configuración del punto de conexión de Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings)
+ [Creación de un rol de servicio de IAM para acceder a Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole)
+ [Especificación de reglas de asignación de gráficos mediante Gremlin y R2RML para Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping)
+ [Tipos de datos para la migración de Gremlin y R2RML a Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes)
+ [Restricciones del uso de Amazon Neptune como destino](#CHAP_Target.Neptune.Limitations)

## Información general sobre la migración a Amazon Neptune como destino
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Antes de iniciar una migración a un objetivo de Neptune, cree los siguientes recursos en su AWS cuenta:
+ Un clúster de Neptune para el punto de conexión de destino. 
+ Una base de datos relacional SQL compatible con el punto AWS DMS final de origen. 
+ Un bucket de Amazon S3 para el punto de conexión de destino. Cree este depósito S3 en la misma AWS región que su clúster de Neptune. AWS DMS utiliza este depósito S3 como almacenamiento de archivos intermedio para los datos de destino que carga de forma masiva en la base de datos de Neptune. Para obtener más información sobre la creación de un bucket de S3, consulte [Creación de un bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) en la *Guía del usuario de Amazon Simple Storage Service.*
+ Un punto de conexión de nube privada virtual (VPC) de S3 en la misma VPC que el clúster de Neptune. 
+ Un rol AWS Identity and Access Management (de IAM) que incluye una política de IAM. Esta política especifica los permisos `GetObject`, `PutObject`, `DeleteObject` y `ListObject` del bucket de S3 de su punto de enlace de destino. Tanto AWS DMS Neptune como Neptune asumen esta función con acceso de IAM tanto al bucket S3 de destino como a la base de datos de Neptune. Para obtener más información, consulte [Creación de un rol de servicio de IAM para acceder a Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).

Después de obtener estos recursos, la configuración y el inicio de una migración a un destino de Neptune es similar a cualquier migración de carga completa mediante la consola o la API de DMS. Sin embargo, una migración a un destino de Neptune requiere algunos pasos únicos.

**Para migrar una base de datos AWS DMS relacional a Neptune**

1. Cree una instancia de replicación como se describe en [Creación de una instancia de replicación](CHAP_ReplicationInstance.Creating.md).

1. Cree y pruebe una base de datos relacional SQL compatible con el punto final AWS DMS de origen.

1. Cree y pruebe el punto de conexión de destino de la base de datos de Neptune. 

   Para conectar el punto de conexión de destino con la base de datos de Neptune, especifique el nombre del servidor para el punto de conexión del clúster de Neptune o para el punto de conexión de la instancia de escritor de Neptune. Además, especifique la carpeta del bucket S3 para almacenar sus archivos intermedios AWS DMS para cargarlos de forma masiva en la base de datos de Neptune. 

   Durante la migración, AWS DMS almacena todos los datos de destino migrados en esta carpeta de bucket de S3 hasta el tamaño máximo de archivo que especifique. Cuando el almacenamiento de este archivo alcanza este tamaño máximo, carga de AWS DMS forma masiva los datos de S3 almacenados en la base de datos de destino. Luego elimina la carpeta para permitir el almacenamiento de cualquier dato de destino adicional para su carga posterior en la base de datos de destino. Para obtener más información sobre cómo especificar esta configuración, consulte [Especificación de la configuración del punto de conexión de Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

1. Cree una tarea de replicación de carga completa con los recursos que ha creado en los pasos 1-3 y haga lo siguiente: 

   1. Use la asignación de la tabla de tareas como de costumbre para identificar esquemas, tablas y vistas de origen concreto para migrar de su base de datos relacional mediante las reglas de transformación y selección adecuadas. Para obtener más información, consulte [Uso del mapeo de tablas para especificar la configuración de tareas](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Especifique las asignaciones de destino eligiendo una de las siguientes para especificar las reglas de asignación de las tablas y vistas de origen al gráfico de base de datos de destino de Neptune:
      + Gremlin JSON: para obtener información sobre el uso de JSON de Gremlin para cargar una base de datos de Neptune, consulte el [formato de datos de carga Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) en la *Guía del usuario de Amazon Neptune*.
      + Lenguaje de asignación del RDB al marco de descripción de recursos (R2RML) de SPARQL: para obtener información sobre el uso de R2RML de SPARQL, consulte la especificación de W3C [R2RML: lenguaje de asignación de RDB a RDF](https://www.w3.org/TR/r2rml/).

   1. Realice una de las siguientes acciones:
      + Con la AWS DMS consola, especifique las opciones de mapeo de gráficos mediante las **reglas de mapeo de gráficos** en la página de **tareas Crear una base de datos para migrar**. 
      + Con la AWS DMS API, especifique estas opciones mediante el parámetro de `TaskData` solicitud de la llamada a la `CreateReplicationTask` API. 

      Para obtener más información y ejemplos de uso de JSON de Gremlin y R2RML de SPARQL para especificar reglas de asignación de gráficos, consulte [Especificación de reglas de asignación de gráficos mediante Gremlin y R2RML para Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

1. Inicie la replicación de la tarea de migración.

## Especificación de la configuración del punto de conexión de Amazon Neptune como destino
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Para crear o modificar un punto de enlace de destino, puede usar la consola o las operaciones de la API `CreateEndpoint` o `ModifyEndpoint`. 

**Para un destino de Neptune en la AWS DMS consola, especifique la **configuración específica del punto final en la página Crear punto** **final o Modificar punto final** de la consola.** En `CreateEndpoint` y `ModifyEndpoint`, especifique los parámetros de solicitud de la opción `NeptuneSettings`. El siguiente ejemplo muestra cómo hacer esto usando la CLI. 

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

Aquí, la opción `--server-name` de la CLI especifica el nombre del servidor del punto de conexión del escritor del clúster de Neptune. O puede especificar el nombre del servidor para un punto de conexión de instancia del escritor de Neptune. 

Los parámetros de la solicitud de la opción `--neptune-settings` son los siguientes:
+ `ServiceAccessRoleArn`: (requerido) el nombre de recurso de Amazon (ARN) del rol de servicio que ha creado para el punto de conexión de destino de Neptune. Para obtener más información, consulte [Creación de un rol de servicio de IAM para acceder a Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName`: (requerido) el nombre del bucket de S3 en el que DMS puede almacenar temporalmente datos de gráficos migrados en archivos .csv antes de cargarlos en masa en la base de datos de destino de Neptune. DMS asigna los datos de origen SQL a datos gráficos antes de almacenarlos en estos archivos.csv.
+ `S3BucketFolder`: (requerido) una ruta de carpeta en la que desea que DMS almacene datos de gráficos migrados en el bucket de S3 especificado por `S3BucketName`.
+ `ErrorRetryDuration`: (opcional) el número de milisegundos para DMS que espera para volver a intentar una carga en masa de datos de gráficos migrados a la base de datos de destino de Neptune antes de generar un error. El valor predeterminado es 250.
+ `MaxFileSize`: (opcional) el tamaño máximo en KB de datos de gráficos migrados almacenados en un archivo .csv antes de que DMS cargue en masa los datos en la base de datos de destino de Neptune. El valor predeterminado es 1.048.576 KB (1 GB). Si se realiza correctamente, DMS borra el bucket y está listo para almacenar el siguiente lote de datos de gráficos migrados.
+ `MaxRetryCount`: (opcional) el número de veces que DMS vuelve a intentar una carga en masa de datos de gráficos migrados a la base de datos de destino de Neptune antes de generar un error. El valor predeterminado es 5.
+ `IAMAuthEnabled`: (opcional) si desea habilitar la autorización de IAM para este punto de conexión, establezca este parámetro en `true` y adjunte el documento de política de IAM correspondiente al rol de servicio especificado por `ServiceAccessRoleArn`. El valor predeterminado es `false`.

## Creación de un rol de servicio de IAM para acceder a Amazon Neptune como destino
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Para acceder a Neptune como destino, cree un rol de servicio mediante IAM. En función de la configuración del punto de conexión de Neptune, adjunte a este rol alguna o todas las políticas de IAM y documentos de confianza. Cuando crea el punto de conexión de Neptune, proporciona el ARN de este rol de servicio. De este modo, AWS DMS Amazon Neptune podrá obtener permisos para acceder tanto a Neptune como a su bucket de Amazon S3 asociado.

Si establece el parámetro `IAMAuthEnabled` de `NeptuneSettings` en `true` en la configuración del punto de conexión de Neptune, adjunte una política de IAM como la siguiente al rol de servicio. Si establece `IAMAuthEnabled` como `false`, puede ignorar esta política.

```
// 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 política de IAM anterior permite acceso completo al clúster de destino de Neptune especificado por `Resource`.

Adjunte una política de IAM como la siguiente a su rol de servicio. Esta política permite a DMS almacenar de forma temporal datos de gráficos migrados en el bucket de S3 que ha creado para cargarlos por lotes a la base de datos de destino de 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 política de IAM anterior permite a la cuenta consultar el contenido del bucket de S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) creado para el destino de Neptune. También permite que su cuenta funcione completamente con el contenido de todos los archivos y carpetas del bucket (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Edite la relación de confianza y asocie la siguiente función de IAM a su función de servicio para permitir que AWS DMS tanto el servicio de base de datos Amazon Neptune asuman la función.

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

------

Para obtener información sobre cómo especificar este rol de servicio para el punto de conexión de destino de Neptune, consulte [Especificación de la configuración del punto de conexión de Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

## Especificación de reglas de asignación de gráficos mediante Gremlin y R2RML para Amazon Neptune como destino
<a name="CHAP_Target.Neptune.GraphMapping"></a>

Las reglas de asignación de gráficos que cree especifican cómo se cargan los datos extraídos de un origen de base de datos relacional SQL en un destino de clúster Neptune de base de datos. El formato de estas reglas de mapeo varía en función de si se utilizan para cargar datos de gráficos de propiedades con Apache TinkerPop Gremlin o datos del Resource Description Framework (RDF) con R2RML. A continuación, puede encontrar información sobre estos formatos y dónde obtener más información.

Puede especificar estas reglas de asignación al crear la tarea de migración mediante la consola o la API de DMS. 

Mediante la consola, especifique estas reglas de asignación mediante **Graph mapping rules (Reglas de asignación de gráficos)** en la página **Create database migration task (Crear migración de base de datos)**. En **Graph mapping rules (Reglas de asignación de gráficos)**, puede introducir y editar las reglas de asignación directamente mediante el editor proporcionado. También puede buscar un archivo que contenga las reglas de asignación en el formato de asignación de gráficos adecuado. 

Mediante la API, especifique estas opciones mediante el parámetro de solicitud `TaskData` de la llamada a la API `CreateReplicationTask`. Establezca `TaskData` en la ruta de un archivo que contiene las reglas de asignación en el formato de asignación de gráficos adecuado.

### Reglas de mapeo de gráficos para generar datos de gráficos de propiedades mediante Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Usando Gremlin para generar los datos de gráficos de propiedades, especifique un objeto JSON con una regla de asignación para cada entidad de gráfico que se generará a partir de los datos de origen. El formato de este JSON se define específicamente para la carga por lotes de Amazon Neptune. La plantilla siguiente muestra el aspecto de cada regla en este objeto.

```
{
    "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 presencia de una etiqueta de vértice implica que el vértice se está creando aquí. Su ausencia implica que el vértice es creado por una fuente diferente, y esta definición solo añade propiedades de vértice. Especifique tantas definiciones de borde y vértice como sea necesario para especificar las asignaciones de su origen de base de datos relacional entero.

A continuación se muestra una regla de ejemplo para una tabla de `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"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Aquí, las definiciones de vértice y borde asignan una relación de informe de un nodo `employee` con el ID de empleado (`EmpID`) y un nodo `employee` con un ID de empleado (`managerId`).

Para obtener más información acerca de la creación de reglas de asignación de gráficos mediante el JSON de Gremlin, consulte [Formato de datos de carga Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) en la *Guía del usuario de Amazon Neptune*.

### Reglas de RDF/SPARQL mapeo gráfico para generar datos
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Si está cargando datos de RDF para realizar consultas mediante SPARQL, escriba las reglas de asignación de gráficos en R2RML. R2RML es un lenguaje W3C estándar para asignar datos relacionales a RDF. En un archivo R2RML, una *asignación de triples* (por ejemplo, el `<#TriplesMap1>` a continuación) especifica una regla para traducir cada fila de una tabla lógica a cero o más triples de RDF. Una *asignación de asunto* (por ejemplo, cualquier `rr:subjectMap` a continuación) especifica una regla para generar los sujetos de los triples de RDF generados por las asignaciones de triples. Una *asignación de predicación-objeto* (por ejemplo, cualquier `rr:predicateObjectMap` a continuación) es una función que crea uno o más pares de predicación-objeto para cada fila de tabla lógica de una tabla lógica.

A continuación se muestra un sencillo ejemplo de `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" ];
    ]
```

En el ejemplo anterior, la asignación define los nodos de gráficos asignados a partir de una tabla de empleados.

A continuación se muestra otro sencillo ejemplo de una tabla de `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" ]
    ].
```

En el ejemplo anterior, el mapeo define los nodos gráficos que mapean friend-of-a-friend las relaciones entre las personas de una `Student` tabla.

Para obtener más información acerca de la creación de reglas de mapeo de gráficos mediante SPARQL R2RML, consulte la especificación de W3C [R2RML: RDB to RDF mapping language](https://www.w3.org/TR/r2rml/).

## Tipos de datos para la migración de Gremlin y R2RML a Amazon Neptune como destino
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS realiza la asignación de tipos de datos desde el punto final de origen de SQL al destino de Neptune de dos maneras. La forma en que los utilice depende del formato de asignación de gráficos que utilice para cargar la base de datos de Neptune: 
+ Apache TinkerPop Gremlin, mediante una representación en JSON de los datos de migración.
+ SPARQL de W3C, mediante una representación R2RML de los datos de migración. 

Para obtener más información sobre estos dos formatos de asignación de gráficos, consulte [Especificación de reglas de asignación de gráficos mediante Gremlin y R2RML para Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

A continuación, puede encontrar descripciones de las asignaciones de tipos de datos para cada formato.

### Mapeo de tipos de datos de origen de SQL a destino de Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

En la siguiente tabla se muestran las asignaciones de tipos de datos de un origen SQL a un destino con formato Gremlin. 

AWS DMS asigna cualquier tipo de datos fuente SQL que no figure en la lista a un Gremlin. `String`



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

Para obtener más información sobre los tipos de datos de Gremlin para cargar Neptune, consulte [Tipos de datos de Gremlin](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) en la *Guía del usuario de Neptune.*

### Mapeo de tipos de datos de origen de SQL a destino de R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

En la tabla siguiente se muestran las asignaciones de tipos de datos de un origen SQL a un destino con formato R2RML.

Todos los tipos de datos RDF listados distinguen mayúsculas de minúsculas, excepto el RDF literal. AWS DMS asigna cualquier tipo de datos de origen SQL que no figure en la lista a un literal RDF. 

Un *RDF literal* es uno de entre una variedad de formas léxicas literales y tipos de datos. Para obtener más información, consulte [RDF literals](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) en la especificación de W3C *Marco de descripción de recursos (RDF): Conceptos y sintaxis abstracta*.

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

Para obtener más información sobre los tipos de datos RDF para cargar Neptune y las asignaciones a tipos de datos de origen de SQL, consulte [Conversiones de tipos de datos](https://www.w3.org/TR/r2rml/#datatype-conversions) en la especificación de W3C *R2RML: Lenguaje de asignación RBD a RDF*.

## Restricciones del uso de Amazon Neptune como destino
<a name="CHAP_Target.Neptune.Limitations"></a>

Al utilizar Neptune como destino se aplican las siguientes restricciones:
+ AWS DMS actualmente solo admite tareas de carga completa para la migración a un objetivo de Neptune. No se admite la migración de captura de datos (CDC) a un destino de Neptune.
+ Asegúrese de que elimina todos los datos de la base de datos de Neptune de destino antes de empezar la tarea de migración, como en los siguientes ejemplos.

  Para borrar todos los datos (vértices y bordes) que hay en el gráfico, ejecute el siguiente comando Gremlin.

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

  Para borrar los vértices que tienen la etiqueta `'customer'`, ejecute el siguiente comando Gremlin.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**nota**  
Puede llevar algún tiempo eliminar un conjunto de datos grande. Es posible que desee iterar `drop()` con un límite, por ejemplo, `limit(1000)`.

  Para borrar las aristas que tienen la etiqueta `'rated'`, ejecute el siguiente comando Gremlin.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**nota**  
Puede llevar algún tiempo eliminar un conjunto de datos grande. Es posible que desee iterar `drop()` con un límite, por ejemplo `limit(1000)`.
+ La operación `DescribeTableStatistics` de la API de DMS puede devolver resultados inexactos sobre una tabla dada debido a la naturaleza de las estructuras de datos de gráficos de Neptune.

  Durante la migración, AWS DMS escanea cada tabla de origen y utiliza el mapeo de gráficos para convertir los datos de origen en un gráfico de Neptune. Los datos convertidos se almacenan primero en la carpeta del bucket de S3 en el punto de enlace de destino. Si se analiza el origen y estos datos de S3 intermedios se generan correctamente, `DescribeTableStatistics` asume que los datos se han cargado correctamente en la base de datos de destino de Neptune. Pero esto no siempre es cierto. Para verificar que los datos se han cargado correctamente en una tabla, compare los valores de retorno de `count()` en ambos extremos de la migración de esa tabla. 

  En el siguiente ejemplo, AWS DMS ha cargado una `customer` tabla de la base de datos de origen, a la que se le asigna la etiqueta `'customer'` en el gráfico de la base de datos de Neptune de destino. Puede asegurarse de que esta etiqueta se escribe en la base de datos de destino. Para ello, compare la cantidad de filas `customer` disponibles en la base de datos de origen con la cantidad de filas etiquetadas con `'customer'` cargadas en la base de datos de destino de Neptune después de la finalización de la tarea.

  Para obtener la cantidad de filas de cliente disponibles en la base de datos de origen mediante SQL, ejecute lo siguiente.

  ```
  select count(*) from customer;
  ```

  Para obtener la cantidad de filas etiquetadas como `'customer'` cargadas en el gráfico de la base de datos de destino mediante Gremlin, ejecute lo siguiente.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Actualmente, si una sola tabla no se carga, se produce un error en toda la tarea. A diferencia de un destino de base de datos relacional, los datos de Neptune están altamente conectados, lo que hace que en muchos casos sea imposible realizar una tarea. Si no se puede reanudar una tarea correctamente debido a esta clase de error de carga de datos, cree una nueva tarea para cargar la tabla que no se ha podido cargar. Antes de ejecutar esta nueva tarea, borre manualmente la tabla parciamente cargada del destino de Neptune.
**nota**  
Puede reanudar una tarea con un error de migración a un destino de Neptune si el error se puede recuperar (por ejemplo, un error de tránsito de red).
+ AWS DMS es compatible con la mayoría de los estándares de R2RML. Sin embargo, AWS DMS no es compatible con ciertos estándares de R2RML, incluidas las expresiones inversas, las uniones y las vistas. Una solución alternativa para una vista R2RML consiste en crear una vista SQL personalizada correspondiente en la base de datos de origen. En la tarea de migración, utilice la asignación de tablas para elegir la vista como entrada. A continuación, asigne la vista a una tabla que R2RML consume para generar datos de gráficos.
+ Al migrar datos de origen con tipos de datos SQL no admitidos, puede haber una pérdida de precisión en los datos de destino resultantes. Para obtener más información, consulte [Tipos de datos para la migración de Gremlin y R2RML a Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS no admite la migración de datos LOB a un objetivo de Neptune.

# Uso de Redis OSS como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

Redis OSS es un almacén de estructura de datos en memoria de código abierto que se utiliza como base de datos, caché y agente de mensajes. La administración de datos en memoria puede provocar que las operaciones de lectura o escritura tarden menos de un milisegundo y que se realicen cientos de millones de operaciones por segundo. Como almacén de datos en memoria, Redis OSS potencia las aplicaciones más exigentes que requieren tiempos de respuesta inferiores a un milisegundo.

Con él AWS DMS, puede migrar datos de cualquier base de datos de origen compatible a un almacén de datos de Redis OSS de destino con un tiempo de inactividad mínimo. Para obtener información adicional sobre Redis OSS, consulte la [Documentación de Redis OSS](https://redis.io/documentation).

Además del OSS de Redis local, es AWS Database Migration Service compatible con lo siguiente:
+ [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/) como almacén de datos de destino. ElastiCache (Redis OSS) funciona con sus clientes de Redis OSS y utiliza el formato de datos abierto de Redis OSS para almacenar sus datos.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) como almacén de datos de destino. MemoryDB es compatible con Redis OSS y le permite crear aplicaciones utilizando todas las estructuras de datos y comandos de Redis OSS que se utilizan en la actualidad. APIs

Para obtener información adicional sobre cómo trabajar con Redis OSS como objetivo AWS DMS, consulte las siguientes secciones: 

**Topics**
+ [Requisitos previos para utilizar un clúster de Redis OSS como destino para AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Limitaciones a la hora de utilizar Redis como objetivo para AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migración de datos de una base de datos relacional o no relacional a un destino de Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Especificación de la configuración del punto de conexión para Redis OSS como destino](#CHAP_Target.Redis.EndpointSettings)

## Requisitos previos para utilizar un clúster de Redis OSS como destino para AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

DMS admite un destino de Redis OSS en las instalaciones en una configuración independiente o como clúster de Redis OSS en el que los datos se *particionan* de forma automática en varios nodos. La fragmentación es el proceso de separar los datos en partes más pequeñas, denominados particiones, que se distribuyen en varios servidores o nodos. En efecto, una partición es una partición de datos que contiene un subconjunto del conjunto total de datos y sirve para cubrir una parte de la carga de trabajo total.

Dado que Redis OSS es un almacén de datos NoSQL de clave-valor, la convención de nomenclatura de claves de Redis OSS que se debe utilizar cuando el origen es una base de datos relacional es **schema-name.table-name.primary-key**. En Redis OSS, la clave y el valor no deben contener el carácter especial %. De lo contrario, DMS omite el registro. 

**nota**  
Si utiliza ElastiCache (Redis OSS) como destino, el DMS solo admite configuraciones habilitadas en *modo clúster*. Para obtener más información sobre el uso de la versión 6.x o superior ElastiCache (Redis OSS) para crear un almacén de datos de destino habilitado para el modo de clúster, consulte [Introducción](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) en la Guía del usuario de *Amazon ElastiCache (Redis OSS)*. 

Antes de iniciar la migración de una base de datos, lance el clúster de Redis OSS con los siguientes criterios.
+ El clúster tiene una o varias particiones.
+ Si utiliza un destino ElastiCache (Redis OSS), asegúrese de que su clúster no utilice un control de acceso basado en roles de IAM. En su lugar, utilice la autenticación de Redis OSS para autenticar a los usuarios.
+ Habilite Multi-AZ (zonas de disponibilidad).
+ Asegúrese de que el clúster tenga suficiente memoria disponible para ajustar los datos a migrar desde la base de datos. 
+ Asegúrese de que el clúster de Redis OSS de destino esté libre de todos los datos antes de empezar la tarea de migración inicial.

Debe determinar los requisitos de seguridad para la migración de datos antes de crear la configuración del clúster. DMS admite la migración a los grupos de replicación de destino, independientemente de la configuración de cifrado. Sin embargo, solo puede habilitar o desactivar el cifrado al crear la configuración del clúster.

## Limitaciones a la hora de utilizar Redis como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Las siguientes restricciones se aplican cuando se usa Redis OSS como destino:
+ Dado que Redis OSS es un almacén de datos de clave-valor NoSQL, la convención de nomenclatura de claves de Redis OSS que se debe utilizar cuando el origen es una base de datos relacional es `schema-name.table-name.primary-key`. 
+ En Redis OSS, la clave y el valor no pueden contener el carácter especial `%`. De lo contrario, DMS omite el registro.
+ DMS no migrará las filas que contengan el carácter `%`.
+ DMS no migrará los campos que contengan el carácter `%` en el nombre del campo.
+ No se admite el modo LOB completo.
+  No se admite una autoridad de certificación (CA) privada cuando se utiliza ElastiCache (Redis OSS) como destino.
+ AWS DMS no admite datos de origen que contengan `'\0'` caracteres incrustados cuando se utiliza Redis como punto final de destino. Los datos que contengan `'\0'` caracteres incrustados se truncarán en el primer carácter. `'\0'`

## Migración de datos de una base de datos relacional o no relacional a un destino de Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

Puede migrar datos de cualquier almacén de datos SQL o NoSQL de origen directamente a un destino de Redis OSS. La configuración y el inicio de una migración a un destino de Redis OSS es similar a cualquier migración de carga completa y captura de datos de cambios mediante la API o la consola de DMS. Para realizar una migración de base de datos a un destino de Redis OSS, haga lo siguiente.
+ Cree una instancia de replicación que efectúe todos los procesos para la migración. Para obtener más información, consulte [Creación de una instancia de replicación](CHAP_ReplicationInstance.Creating.md).
+ Especifique un punto de conexión de origen. Para obtener más información, consulte [Creación de puntos de enlace de origen y destino](CHAP_Endpoints.Creating.md).
+ Busque el nombre de DNS y el número de puerto del clúster.
+ Descargue un paquete de certificados que pueda usar para verificar las conexiones SSL.
+ Especifique un punto de conexión de destino, tal y como se describe a continuación.
+ Crear una tarea o conjunto de tareas para definir qué tablas y procesos de replicación desea utilizar. Para obtener más información, consulte [Creación de una tarea](CHAP_Tasks.Creating.md).
+ Migre los datos de la base de datos de origen al clúster de destino.

Puede iniciar una migración de base de datos de una de las dos formas:

1. Puede elegir la AWS DMS consola y realizar allí cada paso.

1. Puede usar el AWS Command Line Interface (AWS CLI). [Para obtener más información sobre el uso de la CLI con AWS DMS, consulte AWS CLIAWS DMS.](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

**Búsqueda del nombre de DNS y el número de puerto del clúster**
+ Utilice el siguiente AWS CLI comando para `replication-group-id` proporcionarle el nombre de su grupo de replicación.

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Aquí, el resultado muestra el nombre de DNS en el atributo `Address` y el número de puerto en el atributo `Port` del nodo principal del clúster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Si utiliza MemoryDB como destino, utilice el comando de la AWS CLI siguiente para proporcionar una dirección de punto de conexión al clúster de Redis OSS. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Descarga de un paquete de certificados para usar para verificar las conexiones SSL**
+ Ingrese el siguiente comando `wget` en la línea de comandos. Wget es una herramienta de utilidad gratuita de línea de comandos de GNU que se utiliza para descargar archivos de Internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Aquí, `aws-api-domain` complete el dominio de Amazon S3 de su AWS región necesario para acceder al bucket de S3 especificado y al rds-combined-ca-bundle archivo.pem que proporciona.

**Para crear un punto final de destino mediante la consola AWS DMS**

Este punto de conexión es para el destino de Redis OSS que ya está en ejecución. 
+ En la consola, elija **Puntos de conexión** del panel de navegación y, a continuación, elija **Crear punto de conexión**. La tabla siguiente describe la configuración.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.Redis.html)

Cuando haya terminado de proporcionar toda la información para el punto de conexión, AWS DMS crea el punto de conexión de destino de Redis OSS para usarlo durante la migración de la base de datos.

Para obtener información sobre cómo crear una tarea de migración e iniciar la migración de la base de datos, consulte [Creación de una tarea](CHAP_Tasks.Creating.md).

## Especificación de la configuración del punto de conexión para Redis OSS como destino
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Para crear o modificar un punto de enlace de destino, puede usar la consola o las operaciones de la API `CreateEndpoint` o `ModifyEndpoint`. 

**Para un destino de Redis OSS en la AWS DMS consola, especifique la **configuración específica del punto final en la página Crear punto** **final o Modificar dispositivo final** de la consola.**

Cuando utilice las operaciones de API `CreateEndpoint` y `ModifyEndpoint`, especifique los parámetros de solicitud de la opción `RedisSettings`. El siguiente ejemplo muestra cómo hacer esto mediante la 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"
        }
    }
}
```

Los parámetros `--redis-settings` son:
+ `ServerName`: (obligatorio) de tipo `string`, especifica el clúster de Redis OSS al que se migrarán los datos y se encuentra en la misma VPC.
+ `Port`: (obligatorio) de tipo `number`, el valor del puerto utilizado para acceder al punto de conexión.
+ `SslSecurityProtocol`: (opcional) los valores válidos son `plaintext` y `ssl-encryption`. El valor predeterminado es `ssl-encryption`. 

  La opción de `plaintext` no ofrece cifrado de seguridad de la capa de transporte (TLS) para el tráfico entre el punto de conexión y la base de datos. 

  Se utiliza `ssl-encryption` para establecer una conexión cifrada. `ssl-encryption` no requiere un ARN de una entidad de certificación (CA) SSL para verificar el certificado de un servidor, pero se puede identificar uno opcionalmente mediante la configuración `SslCaCertificateArn`. Si no se proporciona un ARN de entidad de certificación, DMS utiliza la entidad de certificación raíz de Amazon.

  Cuando se utiliza un destino de Redis OSS en las instalaciones, se puede utilizar `SslCaCertificateArn` para importar una autoridad de certificación (CA) pública o privada a DMS y proporcionar ese ARN para la autenticación del servidor. No se admite una CA privada cuando se utiliza ElastiCache (Redis OSS) como destino.
+ `AuthType`: (obligatorio) indica el tipo de autenticación que se realiza cuando se conecta a Redis OSS. Los valores válidos son `none`, `auth-token` y `auth-role`.

  La `auth-token` opción requiere que se proporcione un *AuthPassword* «», mientras que la `auth-role` opción requiere que se proporcionen *AuthUserName* «» y *AuthPassword* «».

# Uso de Babelfish como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

Puede migrar datos de una base de datos fuente de Microsoft SQL Server a un destino de Babelfish utilizando. AWS Database Migration Service

Babelfish for Aurora PostgreSQL amplía la base de datos de edición compatible con Amazon Aurora PostgreSQL con la capacidad de aceptar conexiones de bases de datos de clientes de Microsoft SQL Server. Esto permite que las aplicaciones creadas originalmente para SQL Server funcionen directamente con Aurora PostgreSQL con pocos cambios de código en comparación con una migración tradicional y sin cambiar los controladores de base de datos. 

Para obtener información sobre las versiones de Babelfish AWS DMS compatibles como destino, consulte. [Objetivos para AWS DMS](CHAP_Introduction.Targets.md) Las versiones anteriores de Babelfish en Aurora PostgreSQL requieren una actualización antes de utilizar el punto de conexión de Babelfish.

**nota**  
El punto de conexión de destino de Aurora PostgreSQL es la forma preferida de migrar datos a Babelfish. Para obtener más información, consulte [Uso de Babelfish para Aurora PostgreSQL como destino](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

Para obtener información sobre el uso de Babelfish como punto de conexión de la base de datos, consulte [Babelfish para Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) en la *Guía del usuario de Amazon Aurora para Aurora* 

## Requisitos previos para utilizar Babelfish como objetivo para AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

Debe crear sus tablas antes de migrar los datos para asegurarse de que AWS DMS utiliza los tipos de datos y los metadatos de las tablas correctos. Si no crea las tablas en el destino antes de ejecutar la migración, es AWS DMS posible que cree las tablas con permisos y tipos de datos incorrectos. Por ejemplo, AWS DMS crea una columna de fecha y hora como binaria (8) y no proporciona la funcionalidad esperada timestamp/rowversion .

**Preparación y creación de las tablas antes de la migración**

1. Ejecute las instrucciones DDL de creación de tablas que incluyan cualquier restricción única, claves principales o restricciones predeterminadas. 

   No incluya restricciones de clave externa ni instrucciones DDL para objetos como vistas, procedimientos almacenados, funciones o desencadenadores. Puede aplicarlos después de migrar la base de datos de origen.

1. Identifique las columnas de identidad, columnas calculadas o columnas que contengan tipos de datos de versión de fila o marca temporal para las tablas. A continuación, cree las reglas de transformación necesarias para gestionar los problemas conocidos al ejecutar la tarea de migración. Para obtener más información, consulte [Reglas y acciones de transformación](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifique las columnas con tipos de datos que Babelfish no admite. A continuación, cambie las columnas afectadas de la tabla de destino para utilizar los tipos de datos compatibles o cree una regla de transformación que las elimine durante la tarea de migración. Para obtener más información, consulte [Reglas y acciones de transformación](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   En la siguiente tabla se muestran los tipos de datos de origen que Babelfish no admite y el correspondiente tipo de datos de destino que se recomienda utilizar.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Para establecer el nivel de unidades de capacidad (ACUs) de Aurora para la base de datos de origen Aurora PostgreSQL Serverless V2**

Puede mejorar el rendimiento de la tarea de AWS DMS migración antes de ejecutarla estableciendo el valor mínimo de la ACU.
+ En la ventana de **configuración de capacidad de Severless v2**, establezca un nivel **mínimo ACUs** o razonable para su clúster de base de datos Aurora. **2**

  Para obtener información adicional sobre cómo establecer unidades de capacidad de Aurora, consulte [Elección del rango de capacidad máxima de Aurora sin servidor v2 para un clúster de Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html) en la *Guía del usuario de Amazon Aurora* 

Tras ejecutar AWS DMS la tarea de migración, puede restablecer el valor mínimo de su base de datos de origen Aurora PostgreSQL Serverless V2 ACUs a un nivel razonable.

## Requisitos de seguridad al utilizar Babelfish como destino para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

A continuación se describen los requisitos de seguridad para su uso AWS DMS con un objetivo Babelfish:
+ El nombre de usuario del administrador (el usuario administrador) utilizado para crear la base de datos.
+ Inicio de sesión y usuario de PSQL con los permisos SELECT, INSERT, UPDATE, DELETE y REFERENCES suficientes.

## Permisos de usuario para usar Babelfish como objetivo para AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**importante**  
Por motivos de seguridad, la cuenta de usuario utilizada para la migración de datos debe ser un usuario registrado en cualquier base de datos de Babelfish que utilice como destino.

El punto de conexión de destino de Babelfish requiere permisos de usuario mínimos para ejecutar una migración de AWS DMS .

**Creación de un inicio de sesión y un usuario Transact-SQL (T-SQL) con pocos privilegios**

1. Cree un nombre de usuario y una contraseña para utilizarlos cuando se conecte al servidor.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Cree la base de datos virtual para el clúster de Babelfish.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Cree el usuario de T-SQL para la base de datos de destino.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. CONCEDA permisos a las tablas para cada tabla de la base de datos de Babelfish.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Limitaciones en el uso de Babelfish como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

Cuando se utiliza una base de datos de Babelfish como destino para AWS DMS, se aplican las siguientes restricciones:
+ Solo se admite el modo de preparación de tablas “**No hacer nada**”.
+ El tipo de datos ROWVERSION requiere una regla de asignación de tablas que elimine el nombre de la columna de la tabla durante la tarea de migración.
+ No se admite el tipo de datos sql\$1variant.
+ Se admite el modo de LOB completo. El uso de SQL Server como punto final de origen requiere que se establezca la configuración `ForceFullLob=True` del atributo de conexión del punto final de SQL Server para poder migrarlo LOBs al punto final de destino.
+ La configuración de las tareas de replicación presenta las siguientes limitaciones:

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Los tipos de datos TIME DATETIME2 (7), (7) y DATETIMEOFFSET (7) de Babelfish limitan el valor de precisión de la parte de segundos del tiempo a 6 dígitos. Considere la posibilidad de utilizar un valor de precisión de 6 para la tabla de destino cuando utilice estos tipos de datos. En las versiones 2.2.0 y posteriores de Babelfish, cuando se utilizan TIME (7) y DATETIME2 (7), el séptimo dígito de precisión es siempre cero.
+ En el modo DO\$1NOTHING, DMS comprueba si la tabla ya existe. Si la tabla no existe en el esquema de destino, DMS la crea en función de la definición de la tabla de origen y asigna cualquier tipo de datos definido por el usuario al tipo de datos base.
+ Una tarea de AWS DMS migración a un destino de Babelfish no admite tablas que tengan columnas con los tipos de datos ROWVERSION o TIMESTAMP. Puede usar una regla de asignación de tablas que elimine el nombre de la columna de la tabla durante el proceso de transferencia. En el siguiente ejemplo de regla de transformación, se transforma una tabla denominada `Actor` en el origen para eliminar todas las columnas que empiecen por los caracteres `col` de la tabla de `Actor` en el destino.

  ```
  {
   	"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%"
  		}
  	}]
   }
  ```
+ Para las tablas con columnas de identidad o calculadas, en las que las tablas de destino utilizan nombres en mayúsculas y minúsculas, como Categorías, debe crear una acción de regla de transformación que convierta los nombres de las tablas a minúsculas para la tarea de DMS. En el siguiente ejemplo, se muestra cómo crear la acción de la regla de transformación, **Convertir** en minúsculas, mediante la consola. AWS DMS Para obtener más información, consulte [Reglas y acciones de transformación](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Regla de transformación de Babelfish\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Antes de la versión 2.2.0 de Babelfish, DMS limitó el número de columnas que se podían replicar en un punto de conexión de destino de Babelfish a veinte (20) columnas. Con Babelfish 2.2.0, el límite aumentó a 100 columnas. Sin embargo, con las versiones 2.4.0 y superiores de Babelfish, el número de columnas que puede replicar vuelve a aumentar. Puede ejecutar el siguiente ejemplo de código en la base de datos de SQL Server para determinar qué tablas son demasiado largas.

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

## Tipos de datos de destino para Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

La siguiente tabla muestra los tipos de datos objetivo de Babelfish que se admiten cuando se utiliza AWS DMS y el mapeo predeterminado a partir de los tipos de datos. AWS DMS 

Para obtener información adicional sobre AWS DMS los tipos de datos, consulte. [Tipos de datos de AWS Database Migration Service](CHAP_Reference.DataTypes.md) 


|  AWS DMS tipo de datos  |  Tipo de datos de Babelfish   | 
| --- | --- | 
|  BOOLEANO  |  TINYINT  | 
|  BYTES  |  VARBINARY (longitud)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  Si la columna es una columna de fecha u hora, haga lo siguiente:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/dms/latest/userguide/CHAP_Target.Babelfish.html) Si la columna no es una columna de fecha o de hora, utilice VARCHAR (longitud).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(length)  | 
|  BLOB  |  VARBINARY (máx.) Para usar este tipo de datos con DMS, debe habilitar el uso de BLOBs para una tarea específica. DMS solo es compatible con tipos de datos BLOB en las tablas que incluyen una clave principal.  | 
|  CLOB  |  VARCHAR (máx.) Para utilizar este tipo de datos con el DMS, debe habilitar el uso de CLOBs para una tarea específica.  | 
|  NCLOB  |  NVARCHAR (máx.) Para utilizar este tipo de datos con el DMS, debe habilitar el uso de NCLOBs para una tarea específica. En la CDC, DMS admite tipos de datos NCLOB solo en las tablas que incluyan una clave principal.  | 

# Uso de Amazon Timestream como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Puede utilizarlos AWS Database Migration Service para migrar datos de su base de datos de origen a un punto final de destino de Amazon Timestream, con soporte para migraciones de datos de Full Load y CDC.

Amazon Timestream es un servicio de base de datos de series temporales rápido, escalable y sin servidor creado para la ingesta de datos de gran volumen. Los datos de series temporales son una secuencia de puntos de datos recopilados durante un intervalo de tiempo y se utilizan para medir eventos que cambian con el tiempo. Se utiliza para recopilar, almacenar y analizar métricas de aplicaciones de IoT, DevOps aplicaciones y aplicaciones de análisis. Una vez que tenga los datos en Timestream, podrá visualizar e identificar las tendencias y los patrones de los datos prácticamente en tiempo real. Para obtener más información sobre Amazon Timestream, consulte [¿Qué es Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) en la *Guía para desarrolladores de Amazon Timestream*.

**Topics**
+ [Requisitos previos para usar Amazon Timestream como objetivo para AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Configuración de tareas de carga completa con varios subprocesos](#CHAP_Target.Timestream.FLTaskSettings)
+ [Configuración de tareas de carga de CDC con varios subprocesos](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Configuración del punto final cuando se utiliza Timestream como objetivo para AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Creación y modificación de un punto de conexión de destino de Amazon Timestream](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Uso de la asignación de objetos para migrar datos a un tema de Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Limitaciones al usar Amazon Timestream como objetivo para AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Requisitos previos para usar Amazon Timestream como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Antes de configurar Amazon Timestream como objetivo, asegúrese AWS DMS de crear un rol de IAM. Esta función debe permitir acceder AWS DMS a los datos que se migran a Amazon Timestream. En la siguiente política de IAM se muestra el conjunto mínimo de permisos de acceso para el rol que utilice para migrar a Timestream.

------
#### [ 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 tiene intención de migrar todas las tablas, úselo `*` *TABLE\$1NAME* en el ejemplo anterior.

Tenga en cuenta lo siguiente acerca del uso de Timestream como destino:
+ Si tiene intención de ingerir datos históricos con marcas de tiempo de más de 1 año, le recomendamos que utilice AWS DMS para escribir los datos en Amazon S3 en un formato de valores separados por comas (csv). A continuación, utilice la carga por lotes de Timestream para ingerir los datos a Timestream. Para obtener más información, consulte [Uso de la carga por lotes en Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) en la [Guía para desarrolladores de Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Para migraciones de datos de carga completa de datos con menos de 1 año de antigüedad, recomendamos establecer el período de retención en el almacén en memoria de la tabla de Timestream superior o igual a la marca de tiempo más antigua. A continuación, una vez finalizada la migración, edite la retención del almacén en memoria de la tabla con el valor deseado. Por ejemplo, para migrar datos cuya marca de tiempo más antigua tenga 2 meses de antigüedad, haga lo siguiente:
  + Establezca la retención del almacén en memoria de la tabla de destino de Timestream en 2 meses.
  + Inicie la migración de datos utilizando AWS DMS.
  + Una vez que se complete la migración de datos, cambie el período de retención de la tabla de Timestream de destino al valor deseado. 

   Recomendamos estimar el costo del almacén en memoria antes de la migración utilizando la información de las siguientes páginas:
  + [Precios de Amazon Timestream](https://aws.amazon.com/timestream/pricing)
  + [AWS calculadora de precios](https://calculator.aws/#/addService) 
+ Para las migraciones de datos de CDC, recomendamos configurar el período de retención en el almacén en memoria de la tabla de destino de manera que los datos ingeridos se encuentren dentro de los límites de retención del almacén en memoria. Para obtener más información, consulte [Prácticas recomendadas de escritura](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) en la [Guía para desarrolladores de Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Configuración de tareas de carga completa con varios subprocesos
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Para ayudar a aumentar la velocidad de transferencia de datos, AWS DMS admite una tarea de migración a carga completa y multiproceso a un punto final de destino de Timestream con la siguiente configuración de tareas:
+ `MaxFullLoadSubTasks`: utilice esta opción para indicar el número máximo de tablas de origen que se pueden cargar en paralelo. DMS carga cada tabla en su tabla de destino de Amazon Timestream correspondiente mediante una tarea secundaria dedicada. El valor predeterminado es 8, el valor máximo es 49.
+ `ParallelLoadThreads`— Utilice esta opción para especificar el número de subprocesos que se AWS DMS utilizan para cargar cada tabla en su tabla de destino de Amazon Timestream. El valor máximo para un destino de Amazon Timestream es de 32. Puede pedir que se incremente este límite máximo.
+ `ParallelLoadBufferSize`: utilice esta opción para especificar el número máximo de registros para almacenar en el búfer que los subprocesos de carga en paralelo utilizan para cargar datos en el destino de Amazon Timestream. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con `ParallelLoadThreads`. `ParallelLoadBufferSize` es válido solo cuando hay más de un subproceso.
+ `ParallelLoadQueuesPerThread`: utilice esta opción para especificar el número de colas que acceden a cada subproceso simultáneo para eliminar los registros de datos de las colas y generar una carga por lotes para el destino. El valor predeterminado de es 1. Sin embargo, para los destinos de Amazon Timestream de varios tamaños de carga, el intervalo válido es de 5-512 colas por subproceso.

## Configuración de tareas de carga de CDC con varios subprocesos
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Para promover el desempeño de los CDC, AWS DMS es compatible con las siguientes configuraciones de tareas:
+ `ParallelApplyThreads`— Especifica la cantidad de subprocesos simultáneos que se AWS DMS utilizan durante una carga de los CDC para enviar los registros de datos a un punto final de destino de Timestream. El valor predeterminado es 1 y el máximo es 32.
+ `ParallelApplyBufferSize`: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Timestream durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando `ParallelApplyThreads` especifique más de un subproceso. 
+ `ParallelApplyQueuesPerThread`: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Timestream durante el proceso de CDC. El valor predeterminado es 1 y el máximo es 512.

## Configuración del punto final cuando se utiliza Timestream como objetivo para AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Timestream de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintaxis `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Timestream como destino.

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

## Creación y modificación de un punto de conexión de destino de Amazon Timestream
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Una vez que haya creado un rol de IAM y establecido el conjunto mínimo de permisos de acceso, podrá crear un punto final de destino de Amazon Timestream AWS DMS mediante la consola o `create-endpoint` mediante el comando de, con la sintaxis [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

En los siguientes ejemplos se muestra cómo crear y modificar un punto de conexión de destino de Timestream con la AWS CLI.

**Crear comando de punto de conexión de destino de Timestream**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**Modificar el comando de punto de conexión de destino de Timestream**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

## Uso de la asignación de objetos para migrar datos a un tema de Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS utiliza reglas de mapeo de tablas para mapear los datos del tema de Timestream de origen al tema de Timestream de destino. Para asignar datos a un tema de destino, se utiliza un tipo de regla de asignación de tablas denominado asignación de objetos. Puede utilizar el mapeo de objetos para definir cómo los registros de datos del origen se asignan a los registros de datos publicados en un tema de Timestream. 

Los temas de Timestream no tienen una estructura predeterminada distinta de una clave de partición.

**nota**  
No tiene que utilizar la asignación de objetos. Puede utilizar la asignación de tablas normal para varias transformaciones. Sin embargo, el tipo de clave de partición seguirá estos comportamientos predeterminados:   
La clave principal se usa como clave de partición para la carga completa.
Si no se utiliza ninguna configuración de tareas de aplicación paralela, `schema.table` se utiliza como clave de partición para CDC.
Si se utiliza la configuración de tareas de aplicación paralela, la clave principal se utiliza como clave de partición para CDC.

Para crear una regla de mapeo de objetos, se especifica `rule-type` como `object-mapping`. Esta regla indica el tipo de mapeo de objetos que desea utilizar. La estructura de la regla es la siguiente.

```
{
    "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 actualmente admite `map-record-to-record` y `map-record-to-document` es el único valor válido para el parámetro. `rule-action` `map-record-to-document`Los valores `map-record-to-record` y especifican lo que AWS DMS ocurre de forma predeterminada con los registros que no se excluyen como parte de la lista de `exclude-columns` atributos. Estos valores no afectan a los mapeos de atributos en modo alguno. 

Utilice `map-record-to-record` al migrar desde una base de datos relacional a un tema de Timestream. Este tipo de regla utiliza el valor `taskResourceId.schemaName.tableName` de la base de datos relacional como la clave de partición en el tema de Timestream y crea un atributo para cada columna de la base de datos de origen. Cuando se utiliza`map-record-to-record`, para cualquier columna de la tabla de origen que no aparezca en la lista de `exclude-columns` atributos, AWS DMS crea el atributo correspondiente en el tema de destino. Este atributo se crea independientemente de si dicha columna de origen se utiliza en un mapeo de atributos. 

Una forma de entender `map-record-to-record` es verlo en acción. En este ejemplo, imagine que empieza con una fila de una tabla de base de datos relacional con la estructura y los datos siguientes.


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

Para migrar esta información desde un esquema denominado `Test` a un tema de Timestream, cree reglas para mapear los datos al tema. La siguiente regla ilustra la operación de asignación. 

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

Dados un tema de Timestream y una clave de partición (en este caso, `taskResourceId.schemaName.tableName`), a continuación se ilustra el formato de registro resultante al usar nuestros datos de ejemplo en el tema de destino de Timestream: 

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

## Limitaciones al usar Amazon Timestream como objetivo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

Al utilizar Amazon Timestream como destino se aplican las siguientes restricciones:
+ **Dimensiones y marcas de tiempo:** Timestream utiliza las dimensiones y las marcas de tiempo de los datos de origen como una clave primaria compuesta, y no permite actualizar estos valores. Esto significa que si cambia la marca de tiempo o las dimensiones de un registro en la base de datos de origen, la base de datos de Timestream intentará crear un registro nuevo. Por lo tanto, si cambia la dimensión o la marca de tiempo de un registro para que coincidan con las de otro registro existente, AWS DMS actualice los valores del otro registro en lugar de crear un registro nuevo o actualizar el registro anterior correspondiente.
+ **Comandos DDL:** la versión actual AWS DMS solo admite `CREATE TABLE` comandos DDL. `DROP TABLE`
+ **Limitaciones de registro:** Timestream tiene limitaciones para los registros, como el tamaño del registro y el tamaño de la medida. Para obtener más información, consulte [Cuotas](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) en la [Guía para desarrolladores de Amazon Timestream](https://docs.aws.amazon.com/).
+ **Eliminar registros y valores nulos:** Timestream no admite la eliminación de registros. Para permitir la migración de registros eliminados del origen, AWS DMS borra los campos correspondientes de los registros de la base de datos de destino de Timestream. AWS DMS cambia los valores de los campos del registro de destino correspondiente con **0** para los campos numéricos, **nulo** para los campos de texto y **falso** para los campos booleanos.
+ Timestream como destino no admite orígenes que no sean bases de datos relacionales (RDBMS).
+ AWS DMS solo admite Timestream como destino en las siguientes regiones:
  + Este de EE. UU. (Norte de Virginia)
  + Este de EE. UU. (Ohio)
  + Oeste de EE. UU. (Oregón)
  + Europa (Irlanda)
  + Europa (Fráncfort)
  + Asia-Pacífico (Sídney)
  + Asia-Pacífico (Tokio)
+ Timestream como destino no admite la configuración de `TargetTablePrepMode` para `TRUNCATE_BEFORE_LOAD`. Le recomendamos que utilice `DROP_AND_CREATE` para esta configuración.

# Uso de Amazon RDS para Db2 e IBM Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2"></a>

Puede migrar datos a una base de datos Amazon RDS para Db2 o a una base de datos Db2 local desde una base de datos LUW de Db2 mediante (). AWS Database Migration Service AWS DMS

Para obtener información sobre las versiones de Db2 LUW compatibles como destino, consulte. AWS DMS [Objetivos para AWS DMS](CHAP_Introduction.Targets.md)

Puede utilizar la Capa de conexión segura (SSL) para cifrar las conexiones entre el punto de enlace de Db2 LUW y la instancia de replicación. Para obtener más información sobre cómo utilizar SSL con un punto de conexión de Db2 LUW, consulte [Uso de SSL con AWS Database Migration Service](CHAP_Security.SSL.md).

## Limitaciones al utilizar Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

Las siguientes limitaciones se aplican al utilizar la base de datos LUW de Db2 como destino para. AWS DMS Para restricciones al usar Db2 LUW como origen, consulte [Limitaciones al utilizar Db2 LUW como fuente de AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations).
+ AWS DMS solo admite Db2 LUW como destino cuando el origen es Db2 LUW o Db2 for z/OS.
+ El uso de Db2 LUW como destino no admite replicaciones con el modo de LOB completo.
+ El uso de Db2 LUW como destino no admite el tipo de datos XML en la fase de carga completa. Se trata de una limitación de la utilidad dbload de IBM. Para obtener más información, consulte [La utilidad dbload](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) en la documentación de *IBM Informix Servers*.
+ AWS DMS trunca los campos BLOB con valores correspondientes al carácter de comillas dobles («). Se trata de una limitación de la utilidad dbload de IBM. 
+ AWS DMS no admite la opción de carga completa en paralelo al migrar a un destino LUW de Db2 en la versión 3.5.3 del DMS. Esta opción está disponible a partir de la versión 3.5.4 o posteriores de DMS.

## Configuración del punto final cuando se utiliza Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Db2 LUW de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de destino mediante la AWS DMS consola o mediante el `create-endpoint` comando del [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), con la sintaxis `--ibm-db2-settings '{"EndpointSetting": "value", ...}'` JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Db2 LUW como destino.


| Name | Description (Descripción) | 
| --- | --- | 
|  `KeepCsvFiles`  |  Si es verdadero, AWS DMS guarda todos los archivos.csv en el destino LUW de Db2 que se hayan utilizado para replicar datos. DMS utiliza estos archivos para el análisis y la solución de problemas.  | 
|  `LoadTimeout`  |  El tiempo (en milisegundos) antes de que se agote el AWS DMS tiempo de espera de las operaciones realizadas por el DMS en el destino de Db2. El valor predeterminado es 1200 (20 minutos).  | 
|  `MaxFileSize`  |  Especifica el tamaño máximo (en KB) de los archivos .csv que se utilizan para transferir datos a Db2 LUW.  | 
|  `WriteBufferSize`  |  El tamaño (en KB) del búfer de escritura de archivos en memoria que se utiliza al generar archivos .csv en el disco local de la instancia de replicación DMS. El valor predeterminado es 1024 (1 MB).  | 