Exportación de datos de instantáneas de bases de datos a Amazon S3 - Amazon Relational Database Service

Exportación de datos de instantáneas de bases de datos a Amazon S3

Puede exportar datos de instantáneas de bases de datos a un bucket de Amazon S3. El proceso de exportación se ejecuta en segundo plano y no afecta al rendimiento de la instancia de la base de datos activa.

Al exportar una instantánea de base de datos, Amazon RDS extrae los datos de la instantánea y los almacena en un bucket de Amazon S3. Los datos se almacenan en formato Apache Parquet comprimido y consistente.

Puede exportar todos los tipos de instantáneas de base de datos, como instantáneas manuales, instantáneas del sistema automatizadas o instantáneas creadas por el servicio de AWS Backup. De forma predeterminada, se exportan todos los datos de la instantánea. Sin embargo, también puede optar por exportar conjuntos específicos de bases de datos, esquemas o tablas.

Después de exportar los datos, puede analizar los datos exportados directamente con herramientas como Amazon Athena o Amazon Redshift Spectrum. Para obtener más información sobre cómo utilizar Athena para leer los datos de Parquet, consulte Parquet SerDe en Guía del usuario de Amazon Athena. Para obtener más información sobre cómo utilizar Redshift Spectrum para leer datos de Parquet, vea Uso de COPY con formatos de datos de columnas en la Guía para desarrolladores de bases de datos Amazon Redshift.

Disponibilidad en regiones y versiones

La disponibilidad y compatibilidad de las características varía según las versiones específicas de cada motor de base de datos y entre Regiones de AWS. Para obtener más información sobre la disponibilidad en versiones y regiones de la exportación de instantáneas a S3, consulte Exportación de instantáneas a S3.

Limitaciones

Exportar datos de instantáneas de base de datos a Amazon S3 tiene las siguientes limitaciones:

  • No puede ejecutar varias tareas de exportación para la misma instantánea de base de datos simultáneamente. Esto es cierto para las exportaciones completas y parciales.

  • No se admite la exportación de instantáneas de instancias de base de datos que utilizan almacenamiento magnético.

  • Las exportaciones a S3 no admiten prefijos S3 que contengan dos puntos (:).

  • Los siguientes caracteres en la ruta del archivo S3 se convierten en guiones bajos (_) durante la exportación:

    \ ` " (space)
  • Si una base de datos, esquema o tabla tiene caracteres en su nombre distintos del siguiente, no se admite la exportación parcial. Sin embargo, puede exportar toda la instantánea de base de datos.

    • Letras latinas (A–Z)

    • Dígitos (0–9)

    • Símbolo de dólar ($)

    • Guion bajo (_)

  • No se admiten espacios ( ) ni determinados caracteres en los nombres de columna de las tablas de bases de datos. Las tablas con los siguientes caracteres en los nombres de columna se omiten durante la exportación:

    , ; { } ( ) \n \t = (space)
  • Las tablas con barras diagonales (/) en el nombre se omiten durante la exportación.

  • Las tablas temporales y no registradas de RDS para PostgreSQL se omiten durante la exportación.

  • Si los datos contienen un objeto grande, como un BLOB o CLOB, cercano o superior a 500 MB, se producirá un error en la exportación.

  • Si una tabla contiene una fila grande cercana o superior a 2 GB, la tabla se omite durante la exportación.

  • Es muy recomendable que utilice un nombre exclusivo para cada tarea de exportación. Si no utiliza un nombre de tarea exclusivo, es posible que aparezca el siguiente mensaje de error como el que sigue:

    exportTaskAlreadyExistsFault: Se ha producido un error (exportTaskAlReadyExists) al llamar a la operación StartExportTask: la tarea de exportación con ID xxxxx ya existe.

  • Puede eliminar una instantánea mientras exporta los datos a S3, pero se le seguirán cobrando los costes de almacenamiento de esa instantánea hasta que se complete la tarea de exportación.

  • No puede restaurar los datos de instantáneas exportados de S3 a una nueva instancia de base de datos.

Información general acerca de la exportación de datos de instantáneas

Utilice el siguiente proceso para exportar datos de instantáneas de base de datos a un bucket de Amazon S3. Para obtener más detalles, consulte las siguientes secciones.

  1. Identifique la instantánea que desee exportar.

    Utilice una instantánea automática o manual ya existente, o bien cree una instantánea manual de una instancia de base de datos.

  2. Configure el acceso al bucket de Amazon S3.

    Un bucket es un contenedor de objetos o archivos de Amazon S3. Para proporcionar la información necesario para obtener acceso a un bucket, siga los siguientes pasos:

    1. Identifique el bucket de S3 al que se va a exportar la instantánea. El bucket de S3 debe estar en la misma región de AWS que la instantánea. Para obtener más información, consulte Identificación del bucket de Amazon S3 para exportación.

    2. Cree un rol de AWS Identity and Access Management (IAM) que conceda a la tarea de exportación de instantáneas acceso al bucket de S3. Para obtener más información, consulte Proporcionar acceso a un bucket de Amazon S3 mediante un rol de IAM.

  3. Cree una AWS KMS key de cifrado simétrica para el cifrado del lado del servidor. La tarea de exportación de instantáneas utiliza la clave de KMS para configurar el cifrado del lado del servidor de AWS KMS al escribir los datos de exportación en S3.

    La política de clave KMS debe incluir los permisos kms:CreateGrant y kms:DescribeKey. Para obtener más información acerca del uso de claves KMS en Amazon RDS, consulte Administración de AWS KMS key.

    Además, si tiene una instrucción deny en la política de claves KMS, asegúrese de excluir explícitamente la entidad principal del servicio de AWS export.rds.amazonaws.com.

    Puede utilizar una clave de KMS en su cuenta de AWS o puede utilizar una clave KMS en diversas cuentas. Para obtener más información, consulte Uso de una AWS KMS key en diversas cuentas para cifrar las exportaciones de Amazon S3.

  4. Exporte la instantánea a Amazon S3 mediante la consola o el comando start-export-task de la CLI. Para obtener más información, consulte Exportación de una instantánea de base de datos a un bucket de Amazon S3.

  5. Para obtener acceso a los datos exportados al bucket de Amazon S3, consulte Carga, descarga y administración de objetos en la Guía del usuario de Amazon Simple Storage Service.

Configuración del acceso a un bucket de Amazon S3

Para exportar los datos de una instantánea de base de datos a un archivo de Amazon S3, primero debe conceder permiso a la instantánea para obtener acceso al bucket de Amazon S3. Luego cree un rol de IAM para permitir que el servicio de Amazon RDS escriba en el bucket de Amazon S3.

Identificación del bucket de Amazon S3 para exportación

Identifique el bucket de Amazon S3 al que se exportará la instantánea de base de datos. Utilice un bucket de S3 ya existente, o bien cree un bucket S3 nuevo.

nota

El bucket de S3 al que se realizará la exportación debe estar en la misma región de AWS que la instantánea.

Para obtener más información acerca de cómo trabajar con buckets de Amazon S3, consulte lo siguiente en Guía del usuario de Amazon Simple Storage Service:

Proporcionar acceso a un bucket de Amazon S3 mediante un rol de IAM

Antes de exportar datos de instantáneas de bases de datos a Amazon S3, conceda a las tareas de exportación de instantáneas permiso de acceso de escritura al bucket de Amazon S3.

Para conceder este permiso, cree una política de IAM que proporcione acceso al bucket y cree un rol de IAM y adjunte la política al rol. Más adelante, asignará el rol de IAM a la tarea de exportación de instantáneas.

importante

Si prevé utilizar la AWS Management Console para exportar la instantánea, puede elegir crear la política de IAM y el rol automáticamente al exportar la instantánea. Para obtener instrucciones, consulte Exportación de una instantánea de base de datos a un bucket de Amazon S3.

Para dar a las tareas de instantáneas de base de datos acceso a Amazon S3
  1. Cree una política de IAM. Esta política proporciona los permisos de bucket y objeto que permiten a la tarea de exportación de instantáneas obtener acceso a Amazon S3.

    En la política, incluya las siguientes acciones obligatorias para permitir transferir archivos desde Amazon RDS a un bucket de S3:

    • s3:PutObject*

    • s3:GetObject*

    • s3:ListBucket

    • s3:DeleteObject*

    • s3:GetBucketLocation

    En la política, incluya los siguientes recursos para identificar el bucket de S3 y los objetos incluidos en él. En la siguiente lista de recursos se muestra el formato de nombre de recurso de Amazon (ARN) para obtener acceso a Amazon S3.

    • arn:aws:s3:::your-s3-bucket

    • arn:aws:s3:::your-s3-bucket/*

    Para obtener más información sobre cómo crear una política de IAM para Amazon RDS, consulte Creación y uso de una política de IAM para el acceso a bases de datos de IAM. Consulte también el Tutorial: Crear y asociar su primera política administrada por el cliente en la Guía del usuario de IAM.

    El siguiente comando de la AWS CLI crea una política de IAM denominada ExportPolicy con estas opciones. Otorga acceso a un bucket llamado your-s3-bucket.

    nota

    Después de crear la política, apunte el ARN de esta. Cuando asocia la política a un rol de IAM, necesita el ARN para realizar un paso posterior.

    aws iam create-policy --policy-name ExportPolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-s3-bucket", "arn:aws:s3:::your-s3-bucket/*" ] } ] }'
  2. Cree un rol de IAM que Amazon RDS pueda asumir en su nombre para acceder a sus buckets de Amazon S3. Para obtener más información, vea Crear un rol para delegar permisos a un IAM usuario en Guía del usuario de IAM.

    En el siguiente ejemplo se muestra cómo se usa el comando de la AWS CLI para crear un rol denominado rds-s3-export-role.

    aws iam create-role --role-name rds-s3-export-role --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. Asocie la política de IAM que creó al rol de IAM creado.

    El siguiente comando de la AWS CLI asocia la política creada anteriormente al rol denominado rds-s3-export-role. Sustituya your-policy-arn por el ARN de la política que ha apuntado en el paso anterior.

    aws iam attach-role-policy --policy-arn your-policy-arn --role-name rds-s3-export-role

Uso de un bucket de Amazon S3 en diversas cuentas

Puede utilizar buckets de Amazon S3 en cuentas de AWS. Para utilizar un bucket en diversas cuentas, agregue una política de bucket para permitir el acceso al rol de IAM que está utilizando para las exportaciones de S3. Para obtener más información, consulte el Ejemplo 2: Propietario del bucket que concede permisos de bucket en diversas cuentas.

  • Adjunte una política de bucket a su bucket, como se muestra en el siguiente ejemplo.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/Admin" }, "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::mycrossaccountbucket", "arn:aws:s3:::mycrossaccountbucket/*" ] } ] }

Uso de una AWS KMS key en diversas cuentas para cifrar las exportaciones de Amazon S3

Puede utilizar una AWS KMS key en diversas cuentas para cifrar las exportaciones de Amazon S3. En primer lugar, agregue una política de claves a la cuenta local y, a continuación, agregue las políticas de IAM en la cuenta externa. Para obtener más información, consulte Allowing users in other accounts to use a KMS key (Permitir que los usuarios de otras cuentas utilicen una clave KMS).

Para utilizar una clave KMS en diversas cuentas
  1. Agregue una política de claves a la cuenta local.

    El siguiente ejemplo proporciona ExampleRole y ExampleUser en la cuenta externa 444455556666 permisos en la cuenta local 123456789012.

    { "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole", "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "*" }
  2. Agregar políticas de IAM a la cuenta externa.

    La siguiente política de IAM de ejemplo permite a la entidad principal utilizar la clave KMS en la cuenta 123456789012 para operaciones criptográficas. Para conceder este permiso a ExampleRole y ExampleUser de la cuenta 444455556666, adjunte la política en esa cuenta.

    { "Sid": "Allow use of KMS key in account 123456789012", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

Exportación de una instantánea de base de datos a un bucket de Amazon S3

Puede tener hasta cinco tareas de exportación de instantáneas de base de datos en curso por Cuenta de AWS.

nota

La exportación de instantáneas de RDS puede tardar un tiempo en función del tipo y tamaño de la base de datos. La tarea de exportación primero restaura y escala toda la base de datos antes de extraer los datos a Amazon S3. El progreso de la tarea durante esta fase se muestra como Starting (Iniciándose). Cuando la tarea cambia a exportar datos a S3, el progreso se muestra como In progress (En curso).

El tiempo que tarda la exportación en completarse depende de los datos almacenados en la base de datos. Por ejemplo, las tablas con columnas de índice o claves primarias numéricas bien distribuidas se exportarán más rápido. Las tablas que no contienen una columna adecuada para la partición y las tablas con un solo índice en una columna basada en cadenas tardarán más tiempo. Este tiempo de exportación más prolongado se produce porque la exportación utiliza un proceso de subproceso único más lento.

Puede exportar una instantánea de base de datos a Amazon S3 mediante la AWS Management Console, la AWS CLI o la API de RDS.

Si utiliza una función Lambda para exportar una instantánea, agregue la acción kms:DescribeKey a la política de la función Lambda. Para obtener más información, consulte Permisos de AWS Lambda.

La opción de la consola Export to Amazon S3 (Exportar a Amazon S3) solo aparece para las instantáneas que se pueden exportar a Amazon S3. Es posible que una instantánea no esté disponible para la exportación debido a las siguientes razones:

  • El motor de base de datos no es compatible con la exportación de S3.

  • La versión de la instancia de base de datos no es compatible con la exportación de S3.

  • La exportación de S3 no se admite en la región de AWS donde se creó la instantánea.

Para exportar una instantánea de base de datos
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, elija Snapshots (Instantáneas).

  3. En las pestañas, elija el tipo de instantánea que desee exportar.

  4. En la lista de instantáneas, elija la instantánea que desee exportar.

  5. En Actions (Acciones), seleccione Export to Amazon S3 (Exportar a Amazon S3).

    Se visualizará la ventana Export to Amazon S3 (Exportar a Amazon S3).

  6. En Export Identifier (Identificador de exportación), escriba un nombre para identificar la tarea de exportación. Este valor también se utiliza para el nombre del archivo creado en el bucket de S3.

  7. Elija los datos que desea exportar:

    • Seleccione All (Todo) para exportar todos los datos de la instantánea.

    • Seleccione Partial (Parcial) para exportar partes específicas de la instantánea. Para identificar qué partes de la instantánea exportar, introduzca una o más bases de datos, esquemas o tablas para Identifiers (Identificadores), separadas por espacios.

      Use el siguiente formato:

      database[.schema][.table] database2[.schema2][.table2] ... databasen[.scheman][.tablen]

      Por ejemplo:

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. Para el S3 bucket (Bucket de S3), elija el bucket al que desee realizar la exportación.

    Para asignar los datos exportados a la ruta de una carpeta en el bucket de S3, escriba la ruta opcional para el S3 prefix (Prefijo de S3).

  9. Para el rol de IAM, elija un rol que le conceda acceso de escritura al bucket de S3 elegido o cree un nuevo rol.

    • Si ha creado un rol siguiendo los pasos indicados en Proporcionar acceso a un bucket de Amazon S3 mediante un rol de IAM, elija dicho rol.

    • Si no ha creado un rol que le conceda acceso de escritura al bucket de S3 elegido, elija Create a new role (Crear un nuevo rol) para crear el rol automáticamente. A continuación, escriba un nombre para el rol en el IAM role name (Nombre del rol de IAM).

  10. En AWS KMS key, ingrese el ARN de la clave que debe utilizarse para cifrar los datos exportados.

  11. Elija Export to Amazon S3 (Exportar a Amazon S3).

Para exportar una instantánea de base de datos a Amazon S3 mediante la AWS CLI, ejecute el comando start-export-task con las siguientes opciones obligatorias:

  • --export-task-identifier

  • --source-arn

  • --s3-bucket-name

  • --iam-role-arn

  • --kms-key-id

En los siguientes ejemplos, la tarea de exportación de instantáneas se denomina my_snapshot_export, y exporta una instantánea a un bucket de S3 denominado my_export_bucket.

Para Linux, macOS o Unix:

aws rds start-export-task \ --export-task-identifier my-snapshot-export \ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \ --s3-bucket-name my-export-bucket \ --iam-role-arn iam-role \ --kms-key-id my-key

En Windows:

aws rds start-export-task ^ --export-task-identifier my-snapshot-export ^ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^ --s3-bucket-name my-export-bucket ^ --iam-role-arn iam-role ^ --kms-key-id my-key

A continuación, se muestra un resultado de ejemplo.

{ "Status": "STARTING", "IamRoleArn": "iam-role", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "my-export-bucket", "PercentProgress": 0, "KmsKeyId": "my-key", "ExportTaskIdentifier": "my-snapshot-export", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name" }

Para proporcionar la ruta de una carpeta del bucket S3 para la exportación de instantáneas, incluya la opción --s3-prefix en el comando start-export-task.

Para exportar una instantánea de base de datos a Amazon S3 con la API de Amazon RDS, ejecute la operación StartExportTask con los siguientes parámetros obligatorios:

  • ExportTaskIdentifier

  • SourceArn

  • S3BucketName

  • IamRoleArn

  • KmsKeyId

Monitoreo de las exportaciones de instantáneas

Puede monitorear las exportaciones de instantáneas de bases de datos mediante AWS Management Console, la AWS CLI o la API de RDS.

Para monitorear las exportaciones de instantáneas de bases de datos
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, elija Snapshots (Instantáneas).

  3. Para ver la lista de exportaciones de instantáneas, seleccione la pestaña Exports in Amazon S3 (Exportaciones en Amazon S3).

  4. Para ver información acerca de la exportación de una instantánea específica, elija la tarea de exportación.

Para monitorear exportaciones de instantáneas de bases de datos mediante la AWS CLI, ejecute el comando describe-export-tasks .

En el ejemplo siguiente se muestra cómo mostrar la información actual acerca de todas las exportaciones de instantáneas.

aws rds describe-export-tasks { "ExportTasks": [ { "Status": "CANCELED", "TaskEndTime": "2019-11-01T17:36:46.961Z", "S3Prefix": "something", "ExportTime": "2019-10-24T20:23:48.364Z", "S3Bucket": "examplebucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "anewtest", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-25T19:10:58.885Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:parameter-groups-test" }, { "Status": "COMPLETE", "TaskEndTime": "2019-10-31T21:37:28.312Z", "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}", "S3Prefix": "", "ExportTime": "2019-10-31T06:44:53.452Z", "S3Bucket": "examplebucket1", "PercentProgress": 100, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "thursday-events-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 263, "TaskStartTime": "2019-10-31T20:58:06.998Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-31-06-44" }, { "Status": "FAILED", "TaskEndTime": "2019-10-31T02:12:36.409Z", "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.", "S3Prefix": "", "ExportTime": "2019-10-30T06:45:04.526Z", "S3Bucket": "examplebucket2", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "wednesday-afternoon-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-30T22:43:40.034Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-30-06-45" } ] }

Para mostrar información sobre una exportación de instantáneas específica, incluya la opción --export-task-identifier con el comando describe-export-tasks. Para filtrar la salida, incluya la opción --Filters. Para obtener más opciones, consulte el comando describe-export-tasks.

Para mostrar información sobre las exportaciones de instantáneas de bases de datos mediante la API de Amazon RDS, ejecute la operación DescribeExportTasks.

Para realizar un seguimiento del flujo de trabajo de exportación o para iniciar otro flujo de trabajo, puede suscribirse a temas de Amazon Simple Notification Service. Para obtener más información sobre Amazon SNS, consulte Uso de notificaciones de eventos de Amazon RDS.

Cancelación de una tarea de exportación de instantáneas

Puede cancelar una tarea de exportación de instantáneas de bases de datos mediante AWS Management Console, la AWS CLI o la API de RDS.

nota

La cancelación de una tarea de exportación de instantáneas no elimina los datos exportados a Amazon S3. Para obtener información acerca de cómo eliminar los datos mediante la consola, consulte ¿Cómo se eliminan objetos de un bucket de S3? Para eliminar los datos mediante la CLI, ejecute el comando delete-object.

Para cancelar una tarea de exportación de una instantánea
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, elija Snapshots (Instantáneas).

  3. Seleccione la pestaña Exports in Amazon S3 (Exportaciones en Amazon S3).

  4. Elija la tarea de exportación de instantáneas que desee cancelar.

  5. Elija Cancel.

  6. Seleccione Cancel export task (Cancelar tarea de exportación) en la página de confirmación.

Para cancelar una tarea de exportación de instantáneas mediante la AWS CLI, ejecute el comando cancel-export-task . El comando requiere la opción --export-task-identifier.

aws rds cancel-export-task --export-task-identifier my_export { "Status": "CANCELING", "S3Prefix": "", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "examplebucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "my_export", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:export-example-1" }

Para cancelar una tarea de exportación de instantáneas mediante la API de Amazon RDS, ejecute la operación CancelExportTask con el parámetro ExportTaskIdentifier.

Mensajes de error para tareas de exportación de Amazon S3

En la tabla siguiente se describen los mensajes que se devuelven cuando se producen errores en las tareas de exportación de Amazon S3.

Mensaje de error Descripción
Se ha producido un error interno desconocido.

La tarea no se pudo completar debido a un error, excepción o falla desconocidos.

Ocurrió un error interno desconocido al escribir los metadatos de la tarea de exportación en el bucket de S3 [nombre del bucket].

La tarea no se pudo completar debido a un error, excepción o falla desconocidos.

La exportación de RDS no pudo escribir los metadatos de la tarea de exportación porque no puede asumir el rol de IAM [ARN de rol].

La tarea de exportación asume el rol de IAM para validar si está permitido escribir metadatos en el bucket de S3. Si la tarea no puede asumir su rol de IAM, muestra un error.

La exportación de RDS no pudo escribir los metadatos de la tarea de exportación en el bucket de S3 [nombre del bucket] que utiliza el rol de IAM [ARN de rol] con la clave KMS [ID de clave]. Código de error: [código de error]

Faltan uno o más permisos, por lo que la tarea de exportación no puede acceder al bucket de S3. Este mensaje de error aparece cuando se recibe uno de los siguientes códigos de error:

  • AWSSecurityTokenServiceException con el código de error AccessDenied

  • AmazonS3Exception con el código de error NoSuchBucket, AccessDenied, KMS.KMSInvalidStateException, 403 Forbidden, o KMS.DisabledException

Estos códigos de error indican que la configuración del rol de IAM, el bucket de S3 o la clave KMS es incorrecta.

El rol de IAM [ARN de rol] no está autorizado para llamar a [acción de S3] en el bucket de S3 [nombre del bucket]. Revise sus permisos y vuelva a intentar la exportación.

La política de IAM está mal configurada. Falta el permiso para la acción específica de S3 en el bucket de S3, que provoca que falle la tarea de exportación.

Error en la verificación de claves KMS Verifique las credenciales de la clave KMS e inténtelo de nuevo. Error en la verificación de credenciales de la clave KMS.
Error en la verificación de credenciales de S3. Verifique los permisos de su bucket de S3 y de la política de IAM. Error en la verificación de credenciales de S3.
El bucket de S3 [nombre del bucket] no es válido. O no se encuentra en la Región de AWS actual o no existe. Revise el nombre del bucket de S3 e intente hacer la exportación de nuevo. El bucket de S3 no es válido.
El bucket de S3 [nombre del bucket] no se encuentra en la Región de AWS actual. Revise el nombre del bucket de S3 e intente hacer la exportación de nuevo. El bucket de S3 está en la Región de AWS equivocada.

Solución de problemas de errores de permisos de PostgreSQL

Al exportar bases de datos PostgreSQL a Amazon S3, es posible que vea un error PERMISSIONS_DO_NOT_EXIST que indica que se omitieron ciertas tablas. Esto suele deberse a que el superusuario, que se especifica al crear la instancia de base de datos, no tiene permisos para acceder a dichas tablas.

Para corregir este error, ejecute el siguiente comando:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name

Para obtener más información sobre los privilegios de superusuario, consulte Privilegios de la cuenta de usuario maestro.

Convención de nomenclatura de archivos

Los datos exportados para tablas específicas se almacenan en el formato base_prefix/files, donde el prefijo base es el siguiente:

export_identifier/database_name/schema_name.table_name/

Por ejemplo:

export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/

Hay dos convenciones para la forma en que se denominan los archivos.

  • Convención actual:

    batch_index/part-partition_index-random_uuid.format-based_extension

    El índice de lote es un número secuencial que representa un lote de datos leídos desde la tabla. Si no podemos dividir su tabla en pequeños fragmentos para exportarlos en paralelo, habrá varios índices de lote. Lo mismo ocurre si la tabla está dividida en varias tablas. Habrá varios índices de lote, uno para cada una de las particiones de la tabla principal.

    Si podemos dividir su tabla en pequeños fragmentos para que se lean en paralelo, solo estará la carpeta de índices de lote 1.

    Dentro de la carpeta de índices de lote, habrá uno o varios archivos Parquet que contienen los datos de la tabla. El prefijo del nombre de archivo Parquet es part-partition_index. Si la tabla está particionada, habrá varios archivos que comiencen por el índice de partición 00000.

    Puede haber huecos en la secuencia del índice de partición. Esto sucede porque cada partición se obtiene de una consulta por rangos de la tabla. Si no hay datos en el rango de esa partición, se omite ese número secuencial.

    Por ejemplo, supongamos que la columna id es la clave principal de la tabla y que sus valores mínimo y máximo son 100 y 1000. Al intentar exportar esta tabla con nueve particiones, la leemos con consultas paralelas como las siguientes:

    SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300

    Esto debería generar nueve archivos, del part-00000-random_uuid.gz.parquet al part-00008-random_uuid.gz.parquet. Sin embargo, si no hay filas con ID entre 200 y 350, una de las particiones completadas estará vacía y no se creará ningún archivo para ella. En el ejemplo anterior, no se crea part-00001-random_uuid.gz.parquet.

  • Convención anterior:

    part-partition_index-random_uuid.format-based_extension

    Es igual a la convención actual, pero sin el prefijo batch_index, por ejemplo:

    part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet

La convención de nomenclatura de archivos está sujeta a cambios. Por lo tanto, cuando lea tablas de destino, recomendamos que lea todo lo que hay dentro del prefijo base de la tabla.

Conversión de datos al exportar a un bucket de Amazon S3

Cuando exporta una instantánea de base de datos a un bucket de Amazon S3, Amazon RDS convierte los datos al formato Parquet, y exporta y almacena los datos en dicho formato. Para obtener más información sobre Parquet, consulte el sitio web de Apache Parquet.

Parquet almacena todos los datos como uno de los siguientes tipos primitivos:

  • BOOLEANO

  • INT32

  • INT64

  • INT96

  • FLOAT

  • DOUBLE

  • BYTE_ARRAY: matriz de bytes de longitud variable, también conocida como binario.

  • FIXED_LEN_BYTE_ARRAY. matriz de bytes de longitud fija utilizada cuando los valores tienen un tamaño constante.

Los tipos de datos Parquet son pocos para reducir la complejidad de leer y escribir el formato. Parquet proporciona tipos lógicos para ampliar los tipos primitivos. Un tipo lógico se implementa como una anotación con los datos en un campo de metadatos LogicalType. La anotación de tipo lógico explica cómo interpretar el tipo primitivo.

Cuando el tipo lógico STRING anota un tipo BYTE_ARRAY, indica que la matriz de bytes debe interpretarse como una cadena de caracteres codificada UTF-8. Cuando se complete la tarea de exportación, Amazon RDS le notificará si se ha producido alguna conversión de cadena. Los datos subyacentes exportados siempre son los mismos que los datos del origen. Sin embargo, debido a la diferencia de codificación en UTF-8, algunos caracteres pueden parecer diferentes a los del origen cuando se leen en herramientas como Athena.

Para obtener más información, consulte Definiciones de tipos lógicos de Parquet en la documentación de Parquet.

Mapeo del tipo de datos MySQL y MariaDB con Parquet

En la siguiente tabla se muestra el mapeo de los tipos de datos MySQL y MariaDB con los tipos de datos Parquet cuando los datos se convierten y se exportan a Amazon S3.

Tipo de datos de origen Tipo primitivo de Parquet Anotación de tipo lógico Notas de conversión
Tipos de datos numéricos
BIGINT INT64
BIGINT UNSIGNED FIXED_LEN_BYTE_ARRAY(9) DECIMAL(20,0) Parquet solo admite tipos firmados, por lo que el mapeo requiere un byte adicional (8 más 1) para almacenar el tipo BIGINT_UNSIGNED.
BIT BYTE_ARRAY
DECIMAL INT32 DECIMAL (p,s) Si el valor de origen es inferior a 231, se almacena como INT32.
INT64 DECIMAL (p,s) Si el valor de origen es 231 o superior, pero inferior a 263, se almacena como INT64.
FIXED_LEN_BYTE_ARRAY(N) DECIMAL (p,s) Si el valor de origen es 263 o superior, se almacena como FIXED_LEN_BYTE_ARRAY(N).
BYTE_ARRAY STRING Parquet no admite una precisión decimal superior a 38. El valor decimal se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
DOUBLE DOUBLE
FLOAT DOUBLE
INT INT32
INT UNSIGNED INT64
MEDIUMINT INT32
MEDIUMINT UNSIGNED INT64
NUMERIC INT32 DECIMAL (p,s)

Si el valor de origen es inferior a 231, se almacena como INT32.

INT64 DECIMAL (p,s) Si el valor de origen es 231 o superior, pero inferior a 263, se almacena como INT64.
FIXED_LEN_ARRAY(N) DECIMAL (p,s) Si el valor de origen es 263 o superior, se almacena como FIXED_LEN_BYTE_ARRAY(N).
BYTE_ARRAY STRING Parquet no admite una precisión numérica superior a 38. Este valor numérico se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
SMALLINT INT32
SMALLINT UNSIGNED INT32
TINYINT INT32
TINYINT UNSIGNED INT32
Tipos de datos de cadena
BINARY BYTE_ARRAY
BLOB BYTE_ARRAY
CHAR BYTE_ARRAY
ENUM BYTE_ARRAY STRING
LINESTRING BYTE_ARRAY
LONGBLOB BYTE_ARRAY
LONGTEXT BYTE_ARRAY STRING
MEDIUMBLOB BYTE_ARRAY
MEDIUMTEXT BYTE_ARRAY STRING
MULTILINESTRING BYTE_ARRAY
SET BYTE_ARRAY STRING
TEXT BYTE_ARRAY STRING
TINYBLOB BYTE_ARRAY
TINYTEXT BYTE_ARRAY STRING
VARBINARY BYTE_ARRAY
VARCHAR BYTE_ARRAY STRING
Tipos de datos de fecha y hora
FECHA BYTE_ARRAY STRING Una fecha se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.
DATETIME INT64 TIMESTAMP_MICROS
TIME BYTE_ARRAY STRING Un tipo TIME se convierte en una cadena en un BYTE_ARRAY y se codifica como UTF8.
TIMESTAMP INT64 TIMESTAMP_MICROS
YEAR INT32
Tipos de datos geométricos
GEOMETRY BYTE_ARRAY
GEOMETRYCOLLECTION BYTE_ARRAY
MULTIPOINT BYTE_ARRAY
MULTIPOLYGON BYTE_ARRAY
POINT BYTE_ARRAY
POLYGON BYTE_ARRAY
Tipos de datos de JSON
JSON BYTE_ARRAY STRING

Mapeo de tipos de datos PostgreSQL con Parquet

En la tabla siguiente se muestra el mapeo de los tipos de datos PostgreSQL con los tipos de datos Parquet cuando los datos se convierten y se exportan a Amazon S3.

Tipos de datos de PostgreSQL Tipo primitivo de Parquet Anotación de tipo lógico Notas de mapeo
Tipos de datos numéricos
BIGINT INT64
BIGSERIAL INT64
DECIMAL BYTE_ARRAY STRING Un tipo DECIMAL se convierte en una cadena en un tipo BYTE_ARRAY y se codifica como UTF8.

Esta conversión se realiza para evitar complicaciones debidas a la precisión de los datos y los valores de datos que no son un número (NaN).

DOUBLE PRECISION DOUBLE
INTEGER INT32
MONEY BYTE_ARRAY STRING
REAL FLOAT
SERIAL INT32
SMALLINT INT32 INT_16
SMALLSERIAL INT32 INT_16
Tipos de datos de cadena y relacionados
ARRAY BYTE_ARRAY STRING

Una matriz se convierte en una cadena y se codifica como BINARY (UTF8).

Esta conversión se realiza para evitar complicaciones debido a la precisión de los datos, valores de datos que no son un número (NaN) y valores de datos de tiempo.

BIT BYTE_ARRAY STRING
BIT VARYING BYTE_ARRAY STRING
BYTEA BINARY
CHAR BYTE_ARRAY STRING
CHAR(N) BYTE_ARRAY STRING
ENUM BYTE_ARRAY STRING
NAME BYTE_ARRAY STRING
TEXT BYTE_ARRAY STRING
TEXT SEARCH BYTE_ARRAY STRING
VARCHAR(N) BYTE_ARRAY STRING
XML BYTE_ARRAY STRING
Tipos de datos de fecha y hora
FECHA BYTE_ARRAY STRING
INTERVAL BYTE_ARRAY STRING
TIME BYTE_ARRAY STRING
TIME WITH TIME ZONE BYTE_ARRAY STRING
TIMESTAMP BYTE_ARRAY STRING
TIMESTAMP WITH TIME ZONE BYTE_ARRAY STRING
Tipos de datos geométricos
BOX BYTE_ARRAY STRING
CIRCLE BYTE_ARRAY STRING
LINE BYTE_ARRAY STRING
LINESEGMENT BYTE_ARRAY STRING
PATH BYTE_ARRAY STRING
POINT BYTE_ARRAY STRING
POLYGON BYTE_ARRAY STRING
Tipos de datos JSON
JSON BYTE_ARRAY STRING
JSONB BYTE_ARRAY STRING
Otros tipos de datos
BOOLEANO BOOLEANO
CIDR BYTE_ARRAY STRING Tipo de datos de red
COMPOSITE BYTE_ARRAY STRING
DOMAIN BYTE_ARRAY STRING
INET BYTE_ARRAY STRING Tipo de datos de red
MACADDR BYTE_ARRAY STRING
OBJECT IDENTIFIER N/A
PG_LSN BYTE_ARRAY STRING
RANGE BYTE_ARRAY STRING
UUID BYTE_ARRAY STRING