Amazon DynamoDB
Guia do desenvolvedor (Versão da API 2012-08-10)

Como exportar e importar dados do DynamoDB usando o AWS Data Pipeline

Você pode usar o AWS Data Pipeline para exportar dados de uma tabela do DynamoDB para um arquivo em um bucket do Amazon S3. Também pode usar o console para importar dados do Amazon S3 para uma tabela do DynamoDB, na mesma região da AWS ou em uma região diferente.

A capacidade de exportar e importar dados é útil em muitos cenários. Por exemplo, suponha que você queira manter um conjunto de dados de linha de base para fins de teste. É possível colocar os dados de linha de base em uma tabela do DynamoDB e exportá-los para o Amazon S3. Dessa forma, depois de executar um aplicativo que modificasse os dados de teste, você poderia "redefinir" o conjunto de dados, importando a linha de base do Amazon S3 de volta para a tabela do DynamoDB. Outro exemplo envolve a exclusão acidental de dados, ou até mesmo uma operação DeleteTable acidental. Nesses casos, seria possível restaurar os dados de um arquivo de exportação anterior no Amazon S3. Você até mesmo poderia copiar dados de uma tabela do DynamoDB em uma região da AWS, armazenar esses dados no Amazon S3 e depois importá-los do Amazon S3 para uma tabela do DynamoDB idêntica em uma segunda região. Dessa forma, os aplicativos na segunda região poderiam acessar o endpoint do DynamoDB mais próximo e trabalhar com suas próprias cópias dos dados, com latência de rede reduzida.

O diagrama a seguir mostra uma visão geral de como exportar e importador dados do DynamoDB usando o AWS Data Pipeline.

Para exportar uma tabela do DynamoDB, use o console do AWS Data Pipeline para criar um novo pipeline. O pipeline inicia um cluster Amazon EMR para realizar a exportação propriamente dita. O Amazon EMR lê os dados do DynamoDB e os grava em um arquivo de exportação em um bucket do Amazon S3.

O processo é semelhante para uma importação, com a diferença de que os dados são lidos do bucket do Amazon S3 e gravados na tabela do DynamoDB.

Importante

Ao exportar ou importar dados do DynamoDB, você contrairá custos adicionais pelos serviços subjacentes da AWS que são usados:

  • AWS Data Pipeline – gerencia o fluxo de trabalho de importação/exportação para você.

  • Amazon S3 – contém os dados que você exporta ou importa do/para o DynamoDB.

  • Amazon EMR – executa um cluster Hadoop gerenciado para realizar leituras e gravações entre o DynamoDB e o Amazon S3. A configuração de cluster é um nó principal da instância m3.xlarge e um nó core da instância m3.xlarge.

Para obter mais informações, consulte Definição de preço do AWS Data Pipeline, Definição de preço do Amazon EMR e Definição de preço do Amazon S3.

Pré-requisitos para exportar e importar dados

Ao usar o AWS Data Pipeline para exportar e importar dados, você deve especificar as ações que o pipeline tem permissão para realizar e quais recursos ele pode consumir. As ações e recursos permitidos são definidos usando funções do AWS Identity and Access Management (IAM).

Você também pode controlar o acesso criando políticas do IAM e anexando-as a usuários ou grupos do IAM. Essas políticas permitem que você especifique quais usuários estão autorizados a importar e exportar seus dados do DynamoDB.

Importante

O usuário do IAM que realiza as exportações e importações deve ter um Id de chave de acesso da AWS e uma chave secreta em estado ativo. Para obter mais informações, consulte Como administrar chaves de acesso para usuários do IAM no Guia do usuário do IAM.

Criar funções IAM para AWS Data Pipeline

Para usar o AWS Data Pipeline, as seguintes funções do IAM devem estar presentes na sua conta da AWS:

  • DataPipelineDefaultRole – as ações que o pipeline pode realizar em seu nome.

  • DataPipelineDefaultResourceRole – os recursos da AWS que o pipeline provisionará em seu nome. Para exportar e importar dados do DynamoDB, esses recursos incluem um cluster do Amazon EMR e as instâncias do Amazon EC2 associadas a esse cluster.

Se você nunca usou o AWS Data Pipeline antes, precisará criar DataPipelineDefaultRole e DataPipelineDefaultResourceRole por conta própria. Depois de criar essas funções, você poderá usá-las sempre que quiser para exportar ou importar dados do DynamoDB.

nota

Se você já usou o console do AWS Data Pipeline para criar um pipeline, DataPipelineDefaultRole e DataPipelineDefaultResourceRole foram criadas naquela ocasião. Nenhuma ação adicional será necessária, e você poderá pular essa seção e começar a criar pipelines usando o console do DynamoDB. Para obter mais informações, consulte Exportar dados do DynamoDB para o Amazon S3 e Como importar dados do Amazon S3 para o DynamoDB.

  1. Faça login no Console de gerenciamento da AWS e abra o console da IAM em https://console.aws.amazon.com/iam/.

  2. No painel do console do IAM, clique em Roles (Funções).

  3. Clique em Create Role (Criar função) e faça o seguinte:

    1. Na entidade confiável AWS Service (Serviço da AWS), escolha Data Pipeline.

    2. No painel Select your use case (Selecionar seu caso de uso), escolha Data Pipeline e, em seguida, escolha Next: Permissions (Próximo: permissões).

    3. Observe que a política AWSDataPipelineRole é automaticamente anexada. Selecione Next: Review (Próximo: análise).

    4. No campo Role name (Nome da função), digite DataPipelineDefaultRole para o nome da função e escolha Create role (Criar função).

  4. Clique em Create Role (Criar função) e faça o seguinte:

    1. Na entidade confiável AWS Service (Serviço da AWS), escolha Data Pipeline.

    2. No painel Select your use case (Selecionar seu caso de uso), escolha EC2 Role for Data Pipeline (Função do EC2 para Data Pipeline) e, em seguida, escolha Next: Permissions (Próximo: permissões).

    3. Observe que a política AmazonEC2RoleForDataPipelineRole é automaticamente anexada. Selecione Next: Review (Próximo: análise).

    4. No campo Role name (Nome da função), digite DataPipelineDefaultResourceRole para o nome da função e escolha Create role (Criar função).

Agora que você criou essas funções, pode começar a criar pipelines usando o console do DynamoDB. Para obter mais informações, consulte Exportar dados do DynamoDB para o Amazon S3 e Como importar dados do Amazon S3 para o DynamoDB.

Como conceder a usuários e grupos do IAM permissão para realizar tarefas de exportação e importação

Para permitir que outros usuários ou grupos do IAM exportem e importem seus dados de tabelas do DynamoDB, você pode criar uma política do IAM e anexá-la a usuários ou grupos designados. A política contém somente as permissões necessárias para executar essas tarefas.

Como conceder acesso completo usando uma política gerenciada da AWS

O procedimento a seguir descreve como anexar a política gerenciada da AWS AmazonDynamoDBFullAccesswithDataPipeline a um usuário do IAM. Essa política gerenciada fornece acesso completo a recursos do AWS Data Pipeline e do DynamoDB.

  1. Faça login no Console de gerenciamento da AWS e abra o console da IAM em https://console.aws.amazon.com/iam/.

  2. No painel do console do IAM, clique em Users (Usuários) e selecione o usuário que você deseja modificar.

  3. Na guia Permissions (Permissões), clique em Attach Policy (Anexar política).

  4. No painel Attach Policy (Anexar política), selecione AmazonDynamoDBFullAccesswithDataPipeline e clique em Attach Policy (Anexar política).

nota

É possível usar um procedimento semelhante para anexar essa política gerenciada a um grupo em vez de a um usuário.

Como restringir o acesso a determinadas tabelas do DynamoDB

Se quiser restringir o acesso para que um usuário só possa exportar ou importar um subconjunto das suas tabelas, você precisará criar um documento de política do IAM personalizado. É possível usar a política gerenciada da AWS AmazonDynamoDBFullAccesswithDataPipeline como ponto de partida para sua política personalizada e depois modificar esta última para que um usuário só possa trabalhar com as tabelas que você especificar.

Por exemplo, suponha que você queira permitir que um usuário do IAM exporte e importe somente as tabelas Forum, Thread e Reply. Este procedimento descreve como criar uma política personalizada, para que um usuário possa trabalhar com essas tabelas, mas não com outras.

  1. Faça login no Console de gerenciamento da AWS e abra o console da IAM em https://console.aws.amazon.com/iam/.

  2. No painel do console do IAM, clique em Policies (Políticas) e, em seguida, clique em Create Policy (Criar política).

  3. No painel Create Policy (Criar política), acesse Copy an AWS Managed Policy (Copiar uma política gerenciada pela AWS) e clique em Select (Selecionar).

  4. No painel Copy an AWS Managed Policy (Copiar uma política gerenciada pela AWS), acesse AmazonDynamoDBFullAccesswithDataPipeline e clique em Select (Selecionar).

  5. No painel Review Policy (Revisar política), faça o seguinte:

    1. Reveja os valores autogerados de Policy Name (Nome da política) e Description (Descrição). Se desejar, você pode modificar esses valores.

    2. Na caixa de texto Policy Document (Documento da política), edite a política para restringir o acesso a tabelas específicas. Por padrão, a política permite todas as ações do DynamoDB em todas as suas tabelas:

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "dynamodb:*", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...

      Para restringir essa política, primeiro remova a seguinte linha:

      "dynamodb:*",

      Em seguida, construa uma nova Action que permita o acesso somente às tabelas Forum, Thread e Reply:

      { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] },

      nota

      Substitua us-west-2 pela região na qual suas tabelas do DynamoDB residem. Substitua 123456789012 pelo número da sua conta da AWS.

      Finalmente, adicione a nova Action ao documento de política:

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] }, { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...
  6. Quando estiver satisfeito com as configurações de política, clique em Create Policy (Criar política).

Depois de criar a política, você pode anexá-la a um usuário do IAM.

  1. No painel do console do IAM, clique em Users (Usuários) e selecione o usuário que você deseja modificar.

  2. Na guia Permissions (Permissões), clique em Attach Policy (Anexar política).

  3. No painel Attach Policy (Anexar política), selecione o nome da sua política e clique em Attach Policy (Anexar política).

nota

É possível usar um procedimento semelhante para anexar sua política a um grupo em vez de a um usuário.

Exportar dados do DynamoDB para o Amazon S3

Esta seção descreve como exportar dados de uma ou mais tabelas do DynamoDB para um bucket do Amazon S3. É necessário criar o bucket do Amazon S3 antes de realizar a exportação.

Importante

Se você nunca usou o AWS Data Pipeline antes, precisará configurar duas funções do IAM antes de seguir este procedimento. Para obter mais informações, consulte Criar funções IAM para AWS Data Pipeline.

  1. Sign in to the Console de gerenciamento da AWS and open the AWS Data Pipeline console at https://console.aws.amazon.com/datapipeline/.

  2. Se você ainda não tem pipelines na região atual da AWS, escolha Get started now (Começar a usar agora).

    Caso contrário, se você já tem pelo menos um pipeline, escolha Create new pipeline (Criar um novo pipeline).

  3. Na página Create Pipeline (Criar pipeline), faça o seguinte:

    1. No campo Name (Nome), digite um nome para seu pipeline. Por exemplo: MyDynamoDBExportPipeline.

    2. Para o parâmetro Source (Origem), selecione Build using a template (Criar usando um modelo). Na lista suspensa de modelos, escolha Export DynamoDB table to S3 (Exportar tabela do DynamoDB para o S3).

    3. No campo Source DynamoDB table name (Nome da tabela do DynamoDB de origem), digite o nome da tabela do DynamoDB que você deseja exportar.

    4. Na caixa de texto Output S3 Folder (Pasta de saída do S3), insira um URI do Amazon S3 no qual o arquivo da exportação será gravado. Por exemplo: s3://mybucket/exports

      O formato deste URI é s3://bucketname/folder, em que:

      • bucketname é o nome do bucket do Amazon S3.

      • folder é o nome de uma pasta nesse bucket. Se a pasta não existir, ela será criada automaticamente. Se você não especificar um nome para a pasta, um nome será atribuído para ela no formulário s3://bucketname/region/tablename.

    5. Na caixa de texto S3 location for logs (Local do S3 para registros em log), insira um URI do Amazon S3 no qual o arquivo de log da exportação será gravado. Por exemplo: s3://mybucket/logs/

      O formato do URI de S3 Log Folder (Pasta de logs do S3) é idêntico ao de Output S3 Folder (Pasta de saída do S3). O URI deve ser resolvido para uma pasta. Arquivos de log não podem ser gravados no nível superior do bucket do S3.

  4. Quando estiver satisfeito com as configurações, clique em Activate (Ativar).

Seu pipeline agora será criado; esse processo pode levar vários minutos para ser concluído. Você pode monitorar o progresso no console do AWS Data Pipeline.

Quando a exportação terminar, você poderá acessar o console do Amazon S3 para exibir o arquivo de exportação. O nome do arquivo de saída é um identificador valor sem extensão, como este exemplo: . O formato interno desse arquivo está descrito em Verificar o arquivo de exportação de dados, no Guia do desenvolvedor do AWS Data Pipeline.

Como importar dados do Amazon S3 para o DynamoDB

Esta seção supõe que você já tenha exportado dados de uma tabela do DynamoDB e que o arquivo de exportação tenha sido gravado no seu bucket do Amazon S3. O formato interno desse arquivo está descrito em Verificar o arquivo de exportação de dados, no Guia do desenvolvedor do AWS Data Pipeline. Este é o único formato de arquivo que o DynamoDB pode importar usando o AWS Data Pipeline.

Usaremos os termos tabela de origem para a tabela original da qual os dados foram exportados e tabela de destino para a tabela que receberá os dados importados. Você pode importar dados de um arquivo de exportação no Amazon S3, com as seguintes condições:

  • A tabela de destino já deve existir. (O processo de importação não criará a tabela para você.)

  • A tabela de destino deve ter o mesmo esquema de chaves da tabela de origem.

A tabela de destino não precisa estar vazia. No entanto, o processo de importação substituirá todos os itens de dados na tabela que tiverem as mesmas chaves que os itens no arquivo de exportação. Por exemplo, suponha que você tenha uma tabela Customer com uma chave de CustomerId e que existam apenas três itens na tabela (CustomerId 1, 2 e 3). Se o arquivo de exportação também contiver itens de dados para CustomerID 1, 2 e 3, os itens na tabela de destino serão substituídos por aqueles do arquivo de exportação. Se o arquivo de exportação também contiver um item de dados para CustomerId 4, esse item será adicionado à tabela.

A tabela de destino pode estar em uma região da AWS diferente. Por exemplo, suponha que você tenha uma tabela Customer na região Oeste dos EUA (Oregon) e exporte seus dados para o Amazon S3. Você poderia importar esses dados para uma tabela Customer idêntica na região UE (Irlanda). Esse processo é conhecido como exportação e importaçãoentre regiões. Para obter uma lista das regiões da AWS, acesse Regiões e endpoints, no documento AWS General Reference.

Observe que o Console de gerenciamento da AWS permite exportar várias tabelas de origem ao mesmo tempo. No entanto, você só pode importar uma tabela de cada vez.

  1. Sign in to the Console de gerenciamento da AWS and open the AWS Data Pipeline console at https://console.aws.amazon.com/datapipeline/.

  2. (Opcional) Se quiser realizar uma importação entre regiões, vá para o canto superior direito da janela e escolha a região de destino.

  3. Escolha Create new pipeline (Criar um novo pipeline).

  4. Na página Create Pipeline (Criar pipeline), faça o seguinte:

    1. No campo Name (Nome), digite um nome para seu pipeline. Por exemplo: MyDynamoDBImportPipeline.

    2. Para o parâmetro Source (Origem), selecione Build using a template (Criar usando um modelo). Na lista suspensa de modelos, escolha Import DynamoDB backup data from S3 (Importar dados de backup do DynamoDB do S3).

    3. Na caixa de texto Input S3 Folder (Pasta de entrada do S3), insira um URI do Amazon S3 no qual o arquivo da exportação pode ser encontrado. Por exemplo: s3://mybucket/exports

      O formato deste URI é s3://bucketname/folder, em que:

      • bucketname é o nome do bucket do Amazon S3.

      • folder é o nome da pasta que contém o arquivo de exportação.

      O trabalho de importação espera encontrar um arquivo na localização especificada do Amazon S3. O formato interno do arquivo está descrito em Verificar o arquivo de exportação de dados, no Guia do desenvolvedor do AWS Data Pipeline.

    4. No campo Target DynamoDB table name (Nome da tabela de destino do DynamoDB), digite o nome da tabela do DynamoDB para a qual você deseja importar os dados.

    5. Na caixa de texto S3 location for logs (Local do S3 para registros em log), insira um URI do Amazon S3 no qual o arquivo de log da importação será gravado. Por exemplo: s3://mybucket/logs/

      O formato do URI de S3 Log Folder (Pasta de logs do S3) é idêntico ao de Output S3 Folder (Pasta de saída do S3). O URI deve ser resolvido para uma pasta. Arquivos de log não podem ser gravados no nível superior do bucket do S3.

  5. Quando estiver satisfeito com as configurações, clique em Activate (Ativar).

Seu pipeline agora será criado; esse processo pode levar vários minutos para ser concluído. O trabalho de importação começará imediatamente após a criação do pipeline.

Solução de problemas

Esta seção abrange alguns modos de falha básicos e métodos de solução de problemas para exportações do DynamoDB.

Se ocorrer um erro durante uma exportação ou importação, o status do pipeline no console do AWS Data Pipeline será exibido como ERROR. Se isso acontecer, clique no nome do pipeline com falha para acessar sua página de detalhes. Isso mostrará detalhes sobre todas as etapas no pipeline, bem como o status de cada um. Em particular, examine qualquer rastreamento de pilha de execução que você visualizar.

Por fim, acesse o bucket do Amazon S3 e procure qualquer arquivo de exportação ou importação que estejam gravados lá.

Veja a seguir alguns problemas comuns que podem fazer com que um pipeline falhe, juntamente com ações corretivas. Para diagnosticar seu pipeline, compare os erros que você viu com os problemas observados abaixo.

  • Para uma importação, verifique se a tabela de destino já existe e tem o mesmo esquema de chave que a tabela de origem. Essas condições devem ser atendidas, ou a importação falhará.

  • Certifique-se de que o bucket do Amazon S3 especificado tenha sido criado e de ter permissões de leitura e gravação nele.

  • O pipeline pode ter excedido o tempo limite de execução. (Você definiu esse parâmetro quando criou o pipeline.) Por exemplo, você pode ter definido o tempo limite de execução para 1 hora, mas o trabalho de exportação pode ter exigido mais tempo do que isso. Tente excluir e depois recriar o pipeline, mas com um intervalo de tempo limite de execução mais longo dessa vez.

  • Atualize o arquivo manifesto se você estiver restaurando de um bucket do Amazon S3 que não é o bucket original do qual a exportação foi realizada (que contém uma cópia da exportação).

  • Talvez você não tenha as permissões corretas para realizar uma exportação ou importação. Para obter mais informações, consulte Pré-requisitos para exportar e importar dados.

  • Você pode ter atingido um limite de recursos na sua conta da AWS, como o número máximo de instâncias do Amazon EC2 ou o número máximo de pipeline do AWS Data Pipeline. Para obter mais informações, incluindo como solicitar o aumento desses limites, consulte Limites de serviço da AWS no documento AWS General Reference.

nota

Para obter mais detalhes sobre como solucionar problemas com um pipeline, acesse Solução de problemas no Guia do desenvolvedor do AWS Data Pipeline.

Modelos predefinidos para o AWS Data Pipeline e o DynamoDB

Se quiser ter uma compreensão mais profunda de como o AWS Data Pipeline funciona, consulte o Guia do desenvolvedor do AWS Data Pipeline. Este guia contém tutoriais passo a passo para criar e trabalhar com pipelines. Esses tutoriais podem ser usados como pontos de partida para você criar seus próprios pipelines. Convém ler o tutorial do DynamoDB, que fornece orientação pelas etapas necessárias para criar um pipeline de importação e exportação que você pode personalizar para os seus requisitos. Consulte Tutorial: Importação e exportação do Amazon DynamoDB usando AWS Data Pipeline no Guia do desenvolvedor do AWS Data Pipeline.

O AWS Data Pipeline oferece vários modelos para criar pipelines. Os seguintes modelos são relevantes para o DynamoDB.

Exportação de dados entre o DynamoDB e o Amazon S3

O console do AWS Data Pipeline fornece dois modelos predefinidos para a exportação de dados entre o DynamoDB e o Amazon S3. Para obter mais informações sobre esses modelos, consulte as seguintes seções do Guia do desenvolvedor do AWS Data Pipeline: