Uso de Amazon S3 como fuente deAWS DMS - AWS Database Migration Service

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.

Uso de Amazon S3 como fuente deAWS DMS

Puede migrar datos desde un bucket de Amazon S3 medianteAWS DMS. Para ello, proporcione acceso a un bucket de Amazon S3 que contenga uno o más archivos de datos. En ese bucket de S3 incluya un archivo JSON que describa el mapeo entre los datos y las tablas de la base de datos de los datos de esos archivos.

Los archivos de datos de origen deben estar presentes en el bucket de Amazon S3 antes de que comience la carga completa. El nombre del bucket se especifica mediante el parámetro bucketName.

Los archivos de datos de origen deben estar en formato de valores separados por comas (CSV). Asígneles un nombre con la siguiente convención de nomenclatura. En esta convención, schemaName es el esquema de origen y tableName es el nombre de una tabla dentro de dicho esquema.

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

Por ejemplo, suponga que sus archivos de datos están enmybucket, en la siguiente ruta de Amazon S3.

s3://mybucket/hr/employee

En tiempo de carga, AWS DMS presupone que el nombre del esquema de origen es hr y que el nombre de la tabla de origen es employee.

Además debucketName(lo cual es obligatorio), puede proporcionar opcionalmente unbucketFolderparámetro para especificar dóndeAWS DMSdebe buscar archivos de datos en el bucket de Amazon S3. Continuando con el ejemplo anterior, si configurabucketFolderasourcedata, entoncesAWS DMSlee los archivos de datos en la siguiente ruta.

s3://mybucket/sourcedata/hr/employee

Puede especificar el delimitador de columnas, el delimitador de filas, el indicador de valor nulo y otros parámetros mediante los atributos de conexión adicionales. Para obtener más información, consulte Configuración de endpoint para Amazon S3 como fuente deAWS DMS.

Para especificar el propietario de un bucket y evitar los ataques de francotiradores, utilice laExpectedBucketOwnerConfiguración de endpoint de Amazon S3, como se muestra a continuación. A continuación, cuando realizas una solicitud para probar una conexión o realizar una migración, S3 comprueba el ID de cuenta del propietario del bucket con el parámetro especificado.

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

Definir tablas externas para Amazon S3 como fuente deAWS DMS

Además de los archivos de datos, debe indicar también una definición de tabla externa. Undefinición de tabla externaes un documento JSON que describe cómoAWS DMSdebe interpretar los datos de Amazon S3. El tamaño máximo de este documento es de 2 MB. Si crea un punto de enlace de origen con la consola de administración de AWS DMS, puede escribir el JSON directamente en el cuadro de mapeo de la tabla. Si utiliza la AWS Command Line Interface (AWS CLI) o la API de AWS DMS para realizar migraciones, puede crear un archivo JSON para especificar la definición de tabla externa.

Supongamos que tiene un archivo de datos que contiene la información siguiente.

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

A continuación se muestra un ejemplo de definición de tabla externa para estos datos.

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

Los elementos de este documento JSON son los siguientes:

TableCount— el número de tablas de origen. En este ejemplo, solo hay una tabla.

Tables— una matriz que consiste en un mapa JSON por tabla fuente. En este ejemplo, solo hay un mapa. Cada mapa está formado por los siguientes elementos:

  • TableName— el nombre de la tabla de origen.

  • TablePath— la ruta de su bucket de Amazon S3 dondeAWS DMSpuede encontrar el archivo de carga de datos completo. Si unbucketFolderse especifica el valor, su valor se antepone a la ruta.

  • TableOwner— el nombre del esquema de esta tabla.

  • TableColumns— una matriz de uno o más mapas, cada uno de los cuales describe una columna de la tabla fuente:

    • ColumnName— el nombre de una columna de la tabla de origen.

    • ColumnType— el tipo de datos de la columna. Para consultar los tipos de datos válidos, vea Tipos de datos de origen para Amazon S3.

    • ColumnLength— el número de bytes de esta columna. La longitud máxima de columna está limitada a 2147483647 bytes (2.047)MegaBytes) ya que una fuente de S3 no admite el modo FULL LOB.ColumnLengthes válido para los siguientes tipos de datos:

      • BYTE

      • STRING

    • ColumnNullable— un valor booleano que estruesi esta columna puede contener valores NULOS (predeterminado =false).

    • ColumnIsPk— un valor booleano que estruesi esta columna forma parte de la clave principal (por defecto =false).

    • ColumnDateFormat— el formato de fecha de entrada para una columna con los tipos FECHA, HORA y FECHA, que se utiliza para analizar una cadena de datos en un objeto de fecha. Entre los valores posibles se incluyen:

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal— el número total de columnas. Este número debe coincidir con el número de elementos de la matriz TableColumns.

Si no especifica lo contrario, AWS DMS presupone que ColumnLength es cero.

nota

En las versiones compatibles deAWS DMS, los datos fuente de S3 también pueden contener una columna de operación opcional como primera columna antes de laTableNamevalor de columna. Esta columna de operación identifica la operación (INSERT) utilizada para migrar los datos a un punto de enlace de destino S3 durante una carga completa.

Si está presente, el valor de esta columna es el carácter inicial de la INSERTpalabra clave de operación (I). Si se especifica, esta columna generalmente indica que el origen S3 fue creado por DMS como un destino S3 durante una migración anterior.

En las versiones de DMS anteriores a la 3.4.2, esta columna no estaba presente en los datos fuente de S3 creados a partir de una carga completa de DMS anterior. Agregar esta columna a los datos de destino S3 permite que el formato de todas las filas escritas en el objetivo S3 sea coherente, ya sea que se escriban durante una carga completa o durante una carga CDC. Para obtener más información acerca de las opciones para el formateo de datos de destino de S3, consulte Indicar operaciones de base de datos de origen en datos de S3 migrados.

Para una columna de tipo NUMERIC, especifique la precisión y la escala. Precisión es el número total de dígitos de un número y escala es el número de dígitos situados a la derecha de la coma decimal. Utilice los elementos ColumnPrecision y ColumnScale para esto, tal y como se muestra a continuación.

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

Para una columna del tipo DATETIME con datos que contengan fracciones de segundo, especifique la escala. Escalaes el número de dígitos de las fracciones de segundo y puede oscilar entre 0 y 9. Usas elColumnScaleelemento para ello, como se muestra a continuación.

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

Si no especificas lo contrario,AWS DMSasumeColumnScalees cero y trunca las fracciones de segundo.

Uso de CDC con Amazon S3 como fuente deAWS DMS

Una vez que AWS DMS realiza una carga de datos completa, tiene la opción de replicar los cambios de datos en el punto de enlace de destino. Para ello, cargue los archivos de captura de datos de cambios (archivos CDC) a su bucket de Amazon S3.AWS DMSlee estos archivos de CDC al cargarlos y, a continuación, aplica los cambios en el punto final de destino.

Las archivos CDC se denominan de la forma siguiente:

CDC00001.csv CDC00002.csv CDC00003.csv ...
nota

Para poder replicar archivos de CDC correctamente en la carpeta de datos de cambios, cárguelos por orden léxico (secuencial). Por ejemplo, cargue el archivo CDC00002.csv antes que el archivo CDC00003.csv. De lo contrario, CDC00002.csv se omitirá y no se replicará si lo carga después de CDC00003.csv. Sin embargo, el archivo CDC00004.csv sí se replicará correctamente si se carga después de CDC00003.csv.

Para indicar dóndeAWS DMSpuede encontrar los archivos, especificar elcdcPathparámetro. Prosiguiendo con el ejemplo anterior, si establece cdcPath en changedata, entonces AWS DMS leerá los archivos de CDC en la ruta siguiente.

s3://mybucket/changedata

Si configurascdcPathachangedataybucketFolderamyFolder, entoncesAWS DMSlee los archivos de los CDC en la siguiente ruta.

s3://mybucket/myFolder/changedata

Los registros de un archivo CDC se formatean de la siguiente manera:

  • Operación: la operación de cambio que se va a realizar:INSERToI,UPDATEoU, oDELETEoD. Estos valores de palabras clave y caracteres no distinguen entre mayúsculas y minúsculas.

    nota

    En compatibleAWS DMSversiones,AWS DMSpuede identificar la operación a realizar para cada registro de carga de dos maneras.AWS DMSpuede hacerlo desde el valor de la palabra clave del registro (por ejemplo,INSERT) o a partir del carácter inicial de su palabra clave (por ejemplo,I). En versiones anteriores,AWS DMSreconoció la operación de carga solo a partir del valor completo de la palabra clave.

    En versiones anteriores deAWS DMS, el valor completo de la palabra clave se escribió para registrar los datos de los CDC. Además, las versiones anteriores escribían el valor de la operación en cualquier destino de S3 utilizando únicamente la palabra clave initial.

    Reconocer ambos formatos permiteAWS DMSpara gestionar la operación independientemente de cómo se escriba la columna de operaciones para crear los datos fuente de S3. Este enfoque admite el uso de datos de destino de S3 como origen para una migración posterior. Con este enfoque, no necesita cambiar el formato de ningún valor inicial de palabra clave que aparezca en la columna de operación de la fuente S3 posterior.

  • Nombre de la tabla: el nombre de la tabla de origen.

  • Nombre del esquema: el nombre del esquema de origen.

  • Datos: una o más columnas que representan los datos que se van a cambiar.

A continuación se muestra un ejemplo de un archivo CDC para una tabla con el nombre employee.

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

Requisitos previos para utilizar Amazon S3 como fuente paraAWS DMS

Para utilizar Amazon S3 como fuente deAWS DMS, su bucket S3 de origen debe estar en el mismoAWSLa región como instancia de replicación de DMS que migra sus datos. Además, elAWSla cuenta que utilice para la migración debe tener acceso de lectura al bucket de origen.

El rol de AWS Identity and Access Management (IAM) asignado a la cuenta de usuario utilizada para crear la tarea de migración debe tener el siguiente conjunto de permisos.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

ElAWS Identity and Access ManagementEl rol (IAM) asignado a la cuenta de usuario utilizada para crear la tarea de migración debe tener el siguiente conjunto de permisos si el control de versiones está habilitado en el bucket de Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Limitaciones al utilizar Amazon S3 como fuente deAWS DMS

Se aplican las siguientes limitaciones al utilizar Amazon S3 como fuente:

  • No habilites el control de versiones para S3. Si necesita el control de versiones de S3, utilice 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 prueba de punto final debido a un S3list-objecttiempo de espera de la llamada. Para crear una política de ciclo de vida para un bucket de S3, consulteAdministrar el ciclo de vida del almacenamiento. Para eliminar una versión de un objeto de S3, consulteEliminar versiones de objetos de un bucket con control de versiones habilitado.

  • Las versiones 3.4.7 y superiores admiten un bucket S3 habilitado para VPC (gateway VPC).

Configuración de endpoint para Amazon S3 como fuente deAWS DMS

Puede utilizar la configuración de los terminales para configurar la base de datos de origen de Amazon S3 de forma similar a utilizar atributos de conexión adicionales. Los parámetros se especifican al crear el extremo de origen mediante elAWS DMSconsola, o mediante elcreate-endpointcomando enAWS CLI, con el--s3-settings '{"EndpointSetting": "value", ...}'Sintaxis JSON.

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

Opción Descripción
BucketFolder

(Opcional) Nombre de carpeta en el bucket de S3. Si se proporciona este atributo, los archivos de datos de origen y los archivos CDC se leen desde la rutas3://myBucket/bucketFolder/schemaName/tableName/ys3://myBucket/bucketFolder/respectivamente. Si no se especifica este atributo, la ruta utilizada es schemaName/tableName/.

'{"BucketFolder": "sourceData"}'

BucketName

Nombre del bucket de S3.

'{"BucketName": "myBucket"}'

CdcPath La ubicación de los archivos de los CDC. Este atributo es obligatorio si una tarea captura datos de cambios; de lo contrario, es opcional. Si CdcPath está incluido, AWS DMS lee los archivos CDC desde esta ruta y replica los cambios de datos en el punto de enlace de destino. Para obtener más información, consulte Uso de CDC con Amazon S3 como fuente deAWS DMS.

'{"CdcPath": "changeData"}'

CsvDelimiter

Delimitador utilizado para separar columnas en los archivos de origen. El valor predeterminado es una coma. Ejemplo:

'{"CsvDelimiter": ","}'

CsvNullValue

Una cadena definida por el usuario queAWS DMStrata como nulo cuando se lee de la fuente. El valor predeterminado es una cadena vacía. Si no establece este parámetro,AWS DMStrata una cadena vacía como un valor nulo. Si establece este parámetro en una cadena como «\ N»,AWS DMStrata esta cadena como un valor nulo y trata las cadenas vacías como un valor de cadena vacío.

CsvRowDelimiter

Delimitador utilizado para separar filas en los archivos de origen. El valor predeterminado es una nueva línea (\n).

'{"CsvRowDelimiter": "\n"}'

IgnoreHeaderRows

Cuando este valor se establece en 1, AWS DMS omite el encabezado de la primera fila en un archivo .csv. Un valor de 1 habilita la característica, un valor de 0 deshabilita la característica.

El valor predeterminado es 0.

'{"IgnoreHeaderRows": 1}'

Rfc4180

Cuando este valor se establece entrueoy, cada comilla doble inicial debe ir seguida de una comilla doble al final. Este formato cumple con RFC 4180. Cuando este valor se establece en false o n, los literales de cadena se copian en el destino tal cual. En este caso, un delimitador (fila o columna) señala el final del campo. Por lo tanto, no puede utilizar un delimitador como parte de la cadena, ya que señala el final del valor.

El valor predeterminado es true.

Valores válidos: true, false, y, n

'{"Rfc4180": false}'

Tipos de datos de origen para Amazon S3

Migración de datos que utiliza Amazon S3 como fuente deAWS DMSnecesita mapear datos de Amazon S3 aAWS DMStipos de datos. Para obtener más información, consulte Definir tablas externas para Amazon S3 como fuente deAWS DMS.

Para obtener más información sobre cómo ver el tipo de datos que se asigna en el destino, consulte la sección del punto de enlace de destino que esté utilizando.

Para obtener más información sobre los tipos de datos de AWS DMS, consulte Tipos de datos para elAWS Database Migration Service.

Los siguientesAWS DMSlos tipos de datos se utilizan con Amazon S3 como fuente: