Solicitar una exportación de tabla en DynamoDB - Amazon DynamoDB

Solicitar una exportación de tabla en DynamoDB

La exportación de una tabla de DynamoDB le permite exportar datos de la tabla a un bucket de Amazon S3, habilitándolo a realizar análisis y consultas complejas sobre sus datos mediante otros servicios de AWS como Athena, AWS Glue, Amazon SageMaker, Amazon EMR y AWS Lake Formation. Puede solicitar la exportación de una tabla de DynamoDB mediante la AWS Management Console, la AWS CLI o la API de DynamoDB.

nota

No se admite el pago de buckets de Amazon S3 por parte del solicitante.

DynamoDB admite tanto la exportación completa como la exportación incremental:

  • Con las exportaciones completas, puede exportar una instantánea completa de su tabla desde cualquier momento dado dentro del periodo de recuperación en un momento dado (PITR) a su bucket de S3 de Amazon.

  • Con las exportaciones incrementales, puede exportar datos de su tabla de DynamoDB que se hayan modificado, actualizado o eliminado entre un periodo de tiempo especificado, dentro de su ventana PITR, a su bucket de S3 de Amazon.

Requisitos previos

Habilitar PITR

Para utilizar la característica de exportación a S3, debe activar PITR en su tabla. Para más detalles sobre cómo activar PITR, consulte Recuperación en un momento dado. Si solicita una exportación para una tabla que no tiene PITR activado, su solicitud no se realizará correctamente y aparecerá el mensaje de excepción: “An error occurred (PointInTimeRecoveryUnavailableException) when calling the ExportTableToPointInTime operation: Point in time recovery is not enabled for table 'my-dynamodb-table’”.

Configuración de permisos de S3

Puede exportar los datos de la tabla a cualquier bucket de Amazon S3 en el que tenga permiso para escribir. El bucket de destino no tiene por qué estar en la misma región de AWS o tener el mismo propietario que la tabla de origen. Su política de AWS Identity and Access Management (IAM) debe permitirle realizar acciones S3 (s3:AbortMultipartUpload, s3:PutObject ys3:PutObjectAcl ) y la acción de exportación DynamoDB (dynamodb:ExportTableToPointInTime). He aquí un ejemplo de una política de muestra que concederá a su usuario permisos para realizar exportaciones a un bucket de S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBExportAction", "Effect": "Allow", "Action": "dynamodb:ExportTableToPointInTime", "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Sid": "AllowWriteToDestinationBucket", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }

Si necesita escribir en un bucket de S3 que está en otra cuenta o en el que no tiene permisos de escritura, el propietario del bucket de S3 debe agregar una política de buckets para permitirle exportar desde DynamoDB a ese bucket. He aquí un ejemplo de política en el bucket de S3 de destino.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }

Revocar estos permisos mientras se lleva a cabo una exportación dará como resultado archivos parciales.

nota

Si la tabla o el bucket al que realiza la exportación está cifrado con claves administradas por el cliente, las políticas de esa clave KMS deben dar permiso a DynamoDB para que la utilice. Este permiso se concede a través del usuario o rol de IAM que desencadena el trabajo de exportación. Para obtener más información sobre el cifrado, incluidas las prácticas recomendadas, consulte ¿Cómo Amazon DynamoDB utiliza AWS KMS? y Using a custom KMS key (Cómo utilizar una clave KMS personalizada).

Solicitar una exportación mediante la AWS Management Console

En el siguiente ejemplo, se muestra cómo utilizar la consola de DynamoDB para exportar una tabla llamada MusicCollection.

nota

En este procedimiento se presupone que ha habilitado la recuperación a un momento dado. Para habilitar esta función en la tabla MusicCollection, dentro de la tabla, diríjase a la pestaña Overview (Información general) de la sección Table details (Detalles de la tabla) y seleccione la opción Enable (Habilitar) en Point-in-time recovery (Recuperación a un momento dado).

Para solicitar una exportación de tabla
  1. Inicie sesión en la AWS Management Console y abra la consola de DynamoDB en https://console.aws.amazon.com/dynamodb/.

  2. En el panel de navegación del lado izquierdo de la consola, elija Exports to S3 (Exportación a S3).

  3. Seleccione el botón Exportar a S3.

  4. Elija una tabla de origen y un bucket de S3 de destino. Si el bucket de destino es propiedad de la cuenta, puede utilizar el botón Browse S3 (Examinar S3) para encontrarlo. En caso contrario, ingrese la URL del bucket con el comando s3://bucketname/prefix format.. El prefix es una carpeta opcional para ayudarle a mantener el bucket de destino organizado.

  5. Elija Exportación completa o Exportación incremental. Una exportación completa genera la instantánea completa de la tabla tal y como estaba en el momento que especifique. Una exportación incremental da salida a los cambios realizados en su tabla durante el periodo de exportación especificado. Su salida está compactada de tal manera que solo contiene el estado final del elemento del periodo de exportación. El elemento solo aparecerá una vez en la exportación aunque tenga varias actualizaciones en el mismo periodo de exportación.

    Full export
    1. Seleccione el momento a partir del cual desea exportar la instantánea de la tabla completa. Puede ser en cualquier momento dentro del periodo de PITR. También puede seleccionar Hora actual para exportar la última instantánea.

    2. Para Formato de archivo exportado, elija entre DynamoDB JSON y Amazon Ion. De forma predeterminada, la tabla se exportará en formato DynamoDB JSON a partir del último tiempo restaurable en la ventana de recuperación a un momento dado y se cifrará con una clave de Amazon S3 (SSE-S3). Puede modificar esta configuración de exportación si es necesario.

      nota

      Si elige cifrar la exportación usando una clave protegida por AWS Key Management Service (AWS KMS), la clave debe estar en la misma región que el bucket de S3 de destino.

    Incremental export
    1. Seleccione el periodo de exportación para el que desea exportar los datos incrementales. Seleccione una hora de inicio en el periodo de PITR. La duración del periodo de exportación debe ser de al menos 15 minutos y no debe superar las 24 horas. La hora de inicio del periodo de exportación es inclusiva y la hora de finalización es exclusiva.

    2. Elija entre Modo absoluto o Modo relativo.

      1. Modo absoluto exportará datos incrementales para el periodo de tiempo que especifique.

      2. Modo relativo exportará los datos incrementales durante un período de exportación relativo al tiempo de envío del trabajo de exportación.

    3. Para Formato de archivo exportado, elija entre DynamoDB JSON y Amazon Ion. De forma predeterminada, la tabla se exportará en formato DynamoDB JSON a partir del último tiempo restaurable en la ventana de recuperación a un momento dado y se cifrará con una clave de Amazon S3 (SSE-S3). Puede modificar esta configuración de exportación si es necesario.

      nota

      Si elige cifrar la exportación usando una clave protegida por AWS Key Management Service (AWS KMS), la clave debe estar en la misma región que el bucket de S3 de destino.

    4. Para Tipo de vista de exportación, seleccione Imágenes nuevas y antiguas o Solo imágenes nuevas. La nueva imagen proporciona el último estado del elemento. La imagen antigua proporciona el estado del elemento justo antes de la “fecha y hora de inicio” especificadas. La configuración predeterminada es Imágenes nuevas y antiguas. Para obtener más información sobre imágenes nuevas e imágenes antiguas, consulte Salida de exportación incremental.

  6. Seleccione Exportar para empezar.

Los datos exportados no son coherentes con las transacciones. Sus operaciones de transacción pueden dividirse en dos salidas de exportación. Una operación de transacción reflejada en la exportación puede modificar un subconjunto de elementos, mientras que otro subconjunto de modificaciones de la misma transacción no se refleja en la misma solicitud de exportación. No obstante, las exportaciones son finalmente coherentes. Si se interrumpe una transacción durante una exportación, tendrá la transacción restante en su siguiente exportación contigua, sin duplicados. Los periodos de tiempo utilizados para las exportaciones se basan en un reloj interno del sistema y pueden variar en un minuto del reloj local de su aplicación.

Obtención de detalles sobre exportaciones pasadas en la AWS Management Console

Puede encontrar información sobre las tareas de exportación que ha ejecutado en el pasado en la sección Exportaciones a S3 de la barra lateral de navegación. Esta sección contiene una lista de todas las exportaciones que ha creado en los últimos 90 días. Seleccione el ARN de una tarea enumerada en la pestaña Exportaciones para recuperar información sobre esa exportación, incluida la configuración avanzada que haya elegido. Tenga en cuenta que aunque los metadatos de la tarea de exportación vencen tras 90 días y los trabajos anteriores a eso ya no se encuentran en esta lista, los objetos de su bucket de S3 permanecen siempre que lo permitan las políticas de bucket. DynamoDB nunca elimina ninguno de los objetos que crea en su bucket de S3 durante una exportación.

Solicitar una exportación mediante la AWS CLI

En el siguiente ejemplo se muestra cómo utilizar la AWS CLI para exportar una tabla existente denominada MusicCollection a un bucket de S3 denominado ddb-export-musiccollection.

nota

En este procedimiento se presupone que ha habilitado la recuperación a un momento dado. Para habilitarlo en la tabla MusicCollection, ejecute el siguiente comando.

aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
Full export

El siguiente comando exporta la MusicCollection a un bucket de S3 denominado ddb-export-musiccollection-9012345678 con un prefijo de 2020-Nov. Los datos de la tabla se exportarán en formato DynamoDB JSON de un tiempo específico dentro la ventana de recuperación a un momento dado y se cifrará con una clave de Amazon S3 (SSE-S3).

nota

Si solicita una exportación de tablas entre cuentas, asegúrese de incluir la opción --s3-bucket-owner.

aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \ --s3-bucket ddb-export-musiccollection-9012345678 \ --s3-prefix 2020-Nov \ --export-format DYNAMODB_JSON \ --export-time 1604632434 \ --s3-bucket-owner 9012345678 \ --s3-sse-algorithm AES256
Incremental export

El siguiente comando realiza una exportación incremental proporcionando un archivo nuevo --export-type y --incremental-export-specification. Sustituya lo que aparece en cursiva por sus propios valores. Los tiempos se especifican en segundos desde el tiempo Unix.

aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:REGION:ACCOUNT:table/TABLENAME \ --s3-bucket BUCKET --s3-prefix PREFIX \ --incremental-export-specification ExportFromTime=1693569600,ExportToTime=1693656000,ExportViewType=NEW_AND_OLD_IMAGES \ --export-type INCREMENTAL_EXPORT
nota

Si elige cifrar la exportación usando una clave protegida por AWS Key Management Service (AWS KMS), la clave debe estar en la misma región que el bucket de S3 de destino.

Obtención de detalles sobre exportaciones pasadas en la AWS CLI

Puede encontrar información acerca de las solicitudes de exportación que ha ejecutado en el pasado mediante el comando list-exports. Este comando devuelve una lista de todas las exportaciones que ha creado en los últimos 90 días. Tenga en cuenta que aunque los metadatos de la tarea de exportación vencen después de 90 días y los trabajos anteriores a eso ya no se regresan por medio del comando list-exports, los objetos de su bucket de S3 permanecen siempre que lo permitan las políticas de bucket. DynamoDB nunca elimina ninguno de los objetos que crea en su bucket de S3 durante una exportación.

Las exportaciones tienen un estado de PENDING hasta que se realizan o no correctamente. Si se realizan correctamente, el estado cambia a COMPLETED. Si no se realizan correctamente, el estado cambia a FAILED con un failure_message y una failure_reason.

En el siguiente ejemplo, utilizamos el parámetro opcional table-arn para enumerar solo las exportaciones de una tabla específica.

aws dynamodb list-exports \ --table-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog

Para recuperar información detallada sobre una tarea de exportación específica, incluyendo la configuración avanzada, utilice el comando describe-export.

aws dynamodb describe-export \ --export-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4

Solicitud de exportación mediante el SDK de AWS

Utilice estos fragmentos de código para solicitar una exportación de tablas mediante el SDK de AWS de su elección.

Python

Exportación completa

import boto3 from datetime import datetime # remove endpoint_url for real use client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/export_table_to_point_in_time.html client.export_table_to_point_in_time( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', ExportTime=datetime(2023, 9, 20, 12, 0, 0), S3Bucket='bucket', S3Prefix='prefix', S3SseAlgorithm='AES256', ExportFormat='DYNAMODB_JSON' )

Exportación incremental

import boto3 from datetime import datetime client = boto3.client('dynamodb') client.export_table_to_point_in_time( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', IncrementalExportSpecification={ 'ExportFromTime': datetime(2023, 9, 20, 12, 0, 0), 'ExportToTime': datetime(2023, 9, 20, 13, 0, 0), 'ExportViewType': 'NEW_AND_OLD_IMAGES' }, ExportType='INCREMENTAL_EXPORT', S3Bucket='bucket', S3Prefix='prefix', S3SseAlgorithm='AES256', ExportFormat='DYNAMODB_JSON' )

Obtención de detalles sobre exportaciones pasadas mediante el SDK de AWS

Utilice estos fragmentos de código para obtener detalles sobre las exportaciones de tablas anteriores mediante el SDK de AWS de su elección.

Python

Lista

import boto3 client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/list_exports.html print( client.list_exports( TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE', ) )

Describir

import boto3 client = boto3.client('dynamodb') # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_export.html print( client.describe_export( ExportArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE/export/01695353076000-06e2188f', )['ExportDescription'] )