Solicitação de uma exportação de tabela no DynamoDB - Amazon DynamoDB

Solicitação de uma exportação de tabela no DynamoDB

As exportações de tabela do DynamoDB permitem exportar dados de tabela para um bucket do Amazon S3, o que possibilita que você execute análises e consultas complexas nos dados usando outros serviços da AWS, como Athena, AWS Glue, Amazon SageMaker, Amazon EMR e AWS Lake Formation. Você pode solicitar uma exportação de tabela usando o AWS Management Console, a AWS CLI ou a API do DynamoDB.

nota

Buckets do Amazon S3 pagos pelo solicitante não são aceitos.

O DynamoDB comporta exportação completa e exportação incremental:

  • Nas exportações completas, é possível exportar um snapshot completo da tabela para o bucket do Amazon S3 em qualquer momento na janela de recuperação para um ponto no tempo (PITR).

  • Nas exportações incrementais, você pode exportar para o bucket do Amazon S3 dados da tabela do DynamoDB que foram alterados, atualizados ou excluídos entre um espaço de tempo especificado, dentro da janela de PITR.

Pré-requisitos

Habilitar a PITR

Para usar o recurso de exportação para o S3, você precisará habilitar a PITR na tabela. Para obter detalhes sobre como habilitar a PITR, consulte Recuperação para um ponto no tempo. Se você solicitar uma exportação para uma tabela que não tenha a PITR habilitada, a solicitação falhará com uma mensagem de exceção: “Ocorreu um erro (PointInTimeRecoveryUnavailableException) ao chamar a operação ExportTableToPointInTime: a recuperação para um ponto no tempo não é ativada para ‘my-dynamodb-table’ da tabela”.

Configurar permissões do S3

É possível exportar os dados da tabela para qualquer bucket do Amazon S3 em que se tenha permissão para gravar. O bucket de destino não precisa estar na mesma região da AWS nem ter o mesmo proprietário que a tabela de origem. Sua política do AWS Identity and Access Management (IAM) precisa permitir que você realize ações do S3 (s3:AbortMultipartUpload, s3:PutObject es3:PutObjectAcl) e a ação de exportação do DynamoDB (dynamodb:ExportTableToPointInTime). Veja um exemplo de uma política que concederá permissões ao usuário para realizar exportações para um bucket do 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/*" } ] }

Se você precisar gravar em um bucket do S3 que esteja em outra conta ou não tiver permissões para gravar, o proprietário do bucket do S3 precisará adicionar uma política de bucket para permitir que você exporte do DynamoDB para esse bucket. Veja um exemplo de política no bucket do 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/*" } ] }

Revogar essas permissões enquanto uma exportação estiver em andamento resultará em arquivos parciais.

nota

Se a tabela ou o bucket para o qual você está exportando estiver criptografado com chaves gerenciadas pelo cliente, as políticas de chave do KMS deverão conceder ao DynamoDB permissão para usá-lo. Essa permissão é concedida por meio do usuário/perfil do IAM que aciona o trabalho de exportação. Para obter mais informações sobre criptografia, inclusive práticas recomendadas, consulte “Como o DynamoDB usa o AWS KMS” e “Usar uma chave do KMS personalizada”.

Solicitação de uma exportação usando o AWS Management Console

O exemplo a seguir demonstra como usar o console do DynamoDB para restaurar uma tabela existente chamada MusicCollection.

nota

Esse procedimento supõe que você habilitou a recuperação em um ponto anterior no tempo. Para habilitá-la para a tabela MusicCollection, na guia Overview (Visão geral) da tabela, na seção Table details (Detalhes da tabela), selecione Enable (Habilitar) para Point-in-time recovery (Recuperação em um ponto anterior no tempo).

Para solicitar uma exportação de tabela
  1. Faça login no AWS Management Console e abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/.

  2. No painel de navegação, no lado esquerdo do console, escolha Export to S3 (Exportar para o S3).

  3. Selecione o botão Exportar para o S3.

  4. Escolha uma tabela de origem e um bucket do S3 como destino. Se o bucket de destino pertencer à sua conta, você poderá usar o botão Browse S3 (Procurar no S3) para encontrá-lo. Caso contrário, insira o URL do bucket usando o s3://bucketname/prefix format.. O prefix é uma pasta opcional para ajudar a manter o bucket de destino organizado.

  5. Escolha Exportação completa ou Exportação incremental. A Exportação completa gera o snapshot completo da tabela tal como ela estava no momento especificado. A Exportação incremental gera as alterações feitas na tabela durante o período de exportação especificado. A saída é compactada de forma que contenha apenas o estado final do item do período de exportação. O item só aparecerá uma vez na exportação, mesmo que tenha várias atualizações no mesmo período de exportação.

    Full export
    1. Selecione o momento do qual você deseja exportar o snapshot completo da tabela. Isso pode ocorrer em qualquer momento dentro da janela de PITR. Você também pode selecionar Hora atual para exportar o snapshot mais recente.

    2. Com relação ao Formato de arquivo exportado, escolha entre DynamoDB JSON e Amazon Ion. Por padrão, sua tabela será exportada no formato JSON do DynamoDB a partir da hora restaurável mais recente na janela de recuperação em um ponto anterior no tempo e criptografada usando uma chave do Amazon S3 (SSE-S3). Você pode alterar essas configurações de exportação, se necessário.

      nota

      Se você optar por criptografar a exportação usando uma chave protegida pelo AWS Key Management Service (AWS KMS), a chave deverá estar na mesma região que o bucket do S3 de destino.

    Incremental export
    1. Selecione o Período de exportação em que você deseja que os dados incrementais sejam exportados. Escolha uma hora de início na janela de PITR. A duração do período de exportação deve ser de pelo menos 15 minutos e não superior a 24 horas. A hora de início do período de exportação é inclusiva e a hora de término é excludente.

    2. Escolha entre o Modo absoluto ou o Modo relativo.

      1. O Modo absoluto exportará dados incrementais de acordo com o período especificado.

      2. O modo relativo exportará dados incrementais de acordo com um período de exportação que é relativo ao tempo de envio do trabalho de exportação.

    3. Com relação ao Formato de arquivo exportado, escolha entre DynamoDB JSON e Amazon Ion. Por padrão, sua tabela será exportada no formato JSON do DynamoDB a partir da hora restaurável mais recente na janela de recuperação em um ponto anterior no tempo e criptografada usando uma chave do Amazon S3 (SSE-S3). Você pode alterar essas configurações de exportação, se necessário.

      nota

      Se você optar por criptografar a exportação usando uma chave protegida pelo AWS Key Management Service (AWS KMS), a chave deverá estar na mesma região que o bucket do S3 de destino.

    4. Em Exportar tipo de visualização, selecione Imagens novas e antigas ou Somente novas imagens. Imagem nova fornece o estado mais recente do item Imagem antiga fornece o estado do item imediatamente antes da “data e hora de início” especificadas A configuração padrão é Imagens novas e antigas. Para obter mais informações sobre imagens novas e imagens antigas, consulte Saída de exportação Incremental.

  6. Escolha Exportar para começar.

Os dados exportados não são consistentes do ponto de vista transacional. As operações de transação podem ser divididas entre duas saídas de exportação. Um subconjunto de itens pode ser modificado por uma operação de transação refletido na exportação, enquanto outro subconjunto de modificações na mesma transação não é refletido na mesma solicitação de exportação. No entanto, as exportações acabam sendo consistentes. Se uma transação for interrompida durante uma exportação, você terá a transação restante na próxima exportação contígua, sem duplicações. Os períodos usados para exportações são baseados em um relógio interno do sistema e podem variar em um minuto em relação ao relógio local da aplicação.

Obtenção de detalhes sobre exportações anteriores no AWS Management Console

É possível encontrar informações sobre tarefas de exportação realizadas no passado selecionando a seção Exportações para o S3 na barra de navegação lateral. Essa seção contém uma lista de todas as exportações que você criou nos últimos 90 dias. Selecione o ARN de uma tarefa listada na guia Exportações para recuperar informações sobre essa exportação, incluindo quaisquer configurações avançadas escolhidas. Observe que, embora os metadados da tarefa de exportação expirem após 90 dias e os trabalhos mais antigos não sejam mais encontrados nesta lista, os objetos no bucket do S3 permanecerão disponíveis enquanto suas políticas de bucket permitirem. O DynamoDB jamais exclui os objetos que ele cria no bucket do S3 durante uma exportação.

Solicitação de uma exportação usando o AWS CLI

O exemplo a seguir mostra como usar a AWS CLI para exportar uma tabela chamada MusicCollection para um bucket do S3 chamado ddb-export-musiccollection.

nota

Esse procedimento supõe que você habilitou a recuperação em um ponto anterior no tempo. Para habilitar esse recurso para a tabela MusicCollection, execute o seguinte comando.

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

O comando a seguir exporta o MusicCollection para um bucket do S3 chamado ddb-export-musiccollection-9012345678 com um prefixo de 2020-Nov. Os dados da tabela serão exportados no formato JSON do DynamoDB a partir da hora restaurável mais recente na janela de recuperação em um ponto anterior no tempo e serão criptografados usando uma chave do Amazon S3 (SSE-S3).

nota

Se solicitar uma exportação de tabela entre contas, inclua a opção --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

O comando a seguir executa uma exportação incremental fornecendo um novo --export-type e --incremental-export-specification. Substitua seus próprios valores por qualquer coisa em itálico. Os horários são especificados como segundos desde o epoch.

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

Se você optar por criptografar a exportação usando uma chave protegida pelo AWS Key Management Service (AWS KMS), a chave deverá estar na mesma região que o bucket do S3 de destino.

Obtenção de detalhes sobre exportações anteriores no AWS CLI

Você pode encontrar informações sobre solicitações de exportação que executou no passado usando o comando list-exports. Esse comando retorna uma lista de todas as exportações que você criou nos últimos 90 dias. Observe que, embora os metadados da tarefa de exportação expirem após 90 dias e os trabalhos mais antigos não sejam mais retornados pelo list-exports comando, os objetos em seu bucket do S3 permanecerão disponíveis enquanto suas políticas de bucket permitirem. O DynamoDB jamais exclui os objetos que ele cria no bucket do S3 durante uma exportação.

As exportações permanecem no status PENDING até serem concluídas com sucesso ou falha. Se forem bem-sucedidas, o status mudará para COMPLETED. Se falharem, o status mudará para FAILED com uma failure_message e um failure_reason.

No exemplo a seguir, usamos o parâmetro opcional table-arn para listar apenas as exportações de uma tabela específica.

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

Para recuperar informações detalhadas sobre uma tarefa de exportação específica, incluindo quaisquer configurações avançadas, use o comando describe-export.

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

Solicitar uma exportação usando o AWS SDK

Use esses trechos de código para solicitar uma exportação de tabela usando o AWS SDK de sua escolha.

Python

Exportação 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' )

Exportação 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' )

Obter detalhes sobre exportações anteriores no AWS SDK

Use esses trechos de código para obter detalhes sobre exportações de tabela anteriores usando o AWS SDK de sua escolha.

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', ) )

Descrever

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'] )