Exportação de dados de snapshot de banco de dados para o Amazon S3 para Amazon RDS - Amazon Relational Database Service

Exportação de dados de snapshot de banco de dados para o Amazon S3 para Amazon RDS

Você pode exportar dados de snapshots de banco de dados para um bucket do Amazon S3. O processo de exportação é executado em segundo plano e não afeta a performance do banco de dados ativo.

Quando você exporta um snapshot de banco de dados, o Amazon RDS extrai os dados do snapshot e os armazena em um bucket do Amazon S3. Os dados são armazenados em um formato Apache Parquet que é compactado e consistente.

Você pode exportar todos os tipos de snapshots de banco de dados, inclusive snapshots manuais, snapshots automatizados do sistema e snapshots criados pelo serviço AWS Backup. Por padrão, todos os dados no snapshot são exportados. No entanto, você pode optar por exportar conjuntos específicos de bancos de dados, esquemas ou tabelas.

Depois que os dados são exportados, você pode analisar os dados exportados diretamente por meio de ferramentas, como Amazon Athena ou Amazon Redshift Spectrum. Para ter mais informações sobre como usar o Athena para ler os dados do Parquet, consulte Parquet SerDe no Guia do usuário do Amazon Athena. Para ter mais informações sobre como usar o Redshift Spectrum para ler os dados do Parquet, consulte COPY de formatos de dados colunares no Guia do desenvolvedor de banco de dados do Amazon Redshift.

Consulte mais informações sobre como exportar snapshots de banco de dados para o Amazon S3 nos tópicos a seguir.

Visão geral da exportação de dados de snapshot

Use o seguinte processo para exportar dados de um snapshot de banco de dados para um bucket do Amazon S3. Para obter mais detalhes, consulte as seções a seguir.

  1. Identifique o snapshot a ser exportado.

    Use um snapshot existente, manual ou automatizado, ou crie um snapshot manual de uma instância de banco de dados ou um cluster de banco de dados multi-AZ.

  2. Configure o acesso ao bucket do Amazon S3.

    Um bucket é um contêiner de objetos ou arquivos do Amazon S3. Para fornecer informações para acesso a um bucket, execute as seguintes etapas:

    1. Identifique o bucket do S3 para o qual o snapshot deve ser exportado. O bucket do S3 deve estar na mesma região da AWS que o snapshot. Para ter mais informações, consulte Identificar o bucket do Amazon S3 para exportar.

    2. Crie uma função do AWS Identity and Access Management (IAM) que conceda à tarefa de exportação de snapshot acesso ao bucket do S3. Para ter mais informações, consulte Fornecer acesso a um bucket do Amazon S3 usando um perfil do IAM.

  3. Crie uma criptografia simétrica do AWS KMS key para a criptografia do lado do servidor. A chave do KMS é usada pela tarefa de exportação de snapshot para configurar a criptografia do lado do servidor do AWS KMS ao gravar dados de exportação no S3.

    A política de chave do KMS deve incluir as permissões kms:CreateGrant e kms:DescribeKey. Para ter mais informações sobre o uso de chaves do KMS no Amazon RDS, consulte Gerenciamento de AWS KMS key.

    Além disso, se você tiver uma instrução de negação na política de chaves do KMS, exclua explicitamente a entidade principal de serviço da AWS export.rds.amazonaws.com.

    Você pode utilizar uma chave do KMS na sua conta do AWS ou pode utilizar uma chave do KMS entre contas. Para ter mais informações, consulte Uso de um AWS KMS key entre contas para criptografar exportações do Amazon S3.

  4. Exporte o snapshot para o Amazon S3 usando o console ou o comando start-export-task da CLI. Para ter mais informações, consulte Exportar um snapshot de banco de dados para um bucket do Amazon S3.

  5. Para acessar os seus dados exportados no bucket do Amazon S3, consulte Como carregar, baixar e gerenciar objetos no Guia do usuário do Amazon Simple Storage Service.

Configurar o acesso a um bucket do Amazon S3

Para exportar dados de snapshot de banco de dados para um arquivo do Amazon S3, primeiro conceda permissão ao snapshot para acessar o bucket do Amazon S3. Crie um perfil do IAM para permitir que o serviço Amazon RDS grave no bucket do Amazon S3.

Identificar o bucket do Amazon S3 para exportar

Identifique o bucket do Amazon S3 para o qual exportar o snapshot de banco de dados. Use um bucket do S3 existente ou crie um novo bucket do S3.

nota

O bucket do S3 para o qual exportar deve estar na mesma região da AWS que o snapshot.

Para ter mais informações sobre como trabalhar com buckets do Amazon S3, consulte o seguinte no Guia do usuário do Amazon Simple Storage Service:

Fornecer acesso a um bucket do Amazon S3 usando um perfil do IAM

Antes de exportar dados de snapshot de banco de dados para o Amazon S3, forneça permissões de acesso de gravação ao bucket do Amazon S3 às tarefas de exportação.

Para conceder essa permissão, crie uma política do IAM que forneça acesso ao bucket e, depois, crie um perfil do IAM e anexe a política ao perfil. Posteriormente, você atribui o perfil do IAM à tarefa de exportação de snapshot.

Importante

Se você planeja usar o AWS Management Console para exportar o snapshot, poderá optar por criar a política do IAM e a função automaticamente ao exportar o snapshot. Para obter instruções, consulte Exportar um snapshot de banco de dados para um bucket do Amazon S3.

Como fornecer acesso ao Amazon S3 às tarefas de snapshot de banco de dados
  1. Crie uma política do IAM. Essa política fornece as permissões de bucket e objeto que permitem que sua tarefa de exportação de snapshot acesse o Amazon S3.

    Nessa política, inclua as seguintes ações necessárias para permitir a transferência de arquivos do Amazon RDS para um bucket do S3:

    • s3:PutObject*

    • s3:GetObject*

    • s3:ListBucket

    • s3:DeleteObject*

    • s3:GetBucketLocation

    Na política, inclua os recursos a seguir para identificar o bucket do S3 e os objetos no bucket. A lista de recursos a seguir mostra o formato do nome de recurso da Amazon (ARN) para acessar o Amazon S3.

    • arn:aws:s3:::amzn-s3-demo-bucket

    • arn:aws:s3:::amzn-s3-demo-bucket/*

    Para ter mais informações sobre como criar uma política do IAM para o Amazon RDS, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM. Consulte também Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente no Guia do usuário do IAM.

    O comando da AWS CLI a seguir cria uma política do IAM denominada ExportPolicy com essas opções. Ele concede acesso a um bucket denominado amzn-s3-demo-bucket.

    nota

    Depois de criar a política, anote o ARN da política. O ARN será necessário para uma etapa posterior, quando você anexar a política a um perfil do IAM.

    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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. Crie um perfil do IAM para que o Amazon RDS possa assumir esse perfil do IAM em seu nome a fim de acessar os buckets do Amazon S3. Para ter mais informações, consulte Criar um perfil para delegar permissões a um usuário do IAM no Guia do usuário do IAM.

    O exemplo a seguir mostra como usar o comando da AWS CLI para criar uma função chamada 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. Anexe a política do IAM que você criou ao perfil do IAM que você criou.

    O seguinte comando da AWS CLI anexa a política criada anteriormente à função chamada rds-s3-export-role. Substitua your-policy-arn pelo ARN da política que você anotou em uma etapa anterior.

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

Utilizar um bucket do Amazon S3 entre contas

É possível utilizar buckets do Amazon S3 entre contas da AWS. Para utilizar um bucket entre contas, adicione uma política de bucket para permitir o acesso ao perfil do IAM que você está utilizando para as exportações do S3. Para ter mais informações, consulte Exemplo 2: proprietário do bucket concedendo permissões para o bucket entre contas.

Vincule uma política de bucket ao bucket, como mostra o exemplo a seguir.

{ "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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }

Uso de um AWS KMS key entre contas para criptografar exportações do Amazon S3

Você pode utilizar um AWS KMS key entre contas para criptografar exportações do Amazon S3. Primeiro, você adiciona uma política de chaves à conta local e depois adiciona políticas do IAM na conta externa. Para ter mais informações, consulte o tópico sobre como Permitir que usuários de outras contas utilizem uma chave do KMS.

Para utilizar uma chave do KMS entre contas
  1. Adicione uma política de chaves à conta local.

    O exemplo a seguir concede a ExampleRole e ExampleUser na conta externa 444455556666 permissões na conta 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. Adicione políticas do IAM à conta externa.

    O seguinte exemplo de política do IAM permite que a entidade principal use a chave do KMS na conta 123456789012 para operações criptográficas. Para conceder essa permissão a ExampleRole e ExampleUser na conta 444455556666, vincule a política a eles nessa conta.

    { "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" }

Exportar um snapshot de banco de dados para um bucket do Amazon S3

Você pode ter até cinco tarefas de exportação de snapshot de banco de dados simultâneas em andamento por Conta da AWS.

nota

A exportação de snapshots do RDS pode levar um tempo, dependendo do tipo e do tamanho do banco de dados. A tarefa de exportação primeiro restaura e escala todo o banco de dados antes de extrair os dados para o Amazon S3. O andamento da tarefa durante essa fase é exibido como Starting (Iniciando). Quando a tarefa muda para a exportação de dados para o S3, o andamento é exibido como In progress (Em andamento).

O tempo necessário para que a exportação seja concluída depende dos dados armazenados no banco de dados. Por exemplo, tabelas com chaves primárias numéricas bem distribuída ou colunas de índice serão exportadas de maneira mais rápida. Tabelas sem uma coluna adequada para particionamento e tabelas com somente um índice em uma coluna baseada em string demorarão mais. Esse tempo de exportação mais demorado ocorre porque a exportação utiliza um processo de thread único mais lento.

Você pode exportar um snapshot de banco de dados para o Amazon S3 usando o AWS Management Console, a AWS CLI ou a API do RDS. Para exportar um snapshot de banco de dados para um bucket do Amazon S3 entre contas, use a AWS CLI ou a API do RDS.

Se você usar uma função do Lambda para exportar um snapshot, adicione a ação kms:DescribeKey à política da função do Lambda. Para ter mais informações, consulte Permissões doAWS Lambda.

A opção de console Export to Amazon S3 (Exportar para o Amazon S3) é exibido somente para snapshots que podem ser exportados para o Amazon S3. Um snapshot pode não estar disponível para exportação devido aos seguintes motivos:

  • O mecanismo de banco de dados não tem suporte para exportação do S3.

  • A versão do mecanismo de banco de dados não é aceita para exportação do S3.

  • A exportação do S3 não é aceita na região da AWS onde o snapshot foi criado.

Para exportar um snapshot de banco de dados
  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Snapshots.

  3. Nas guias, escolha o tipo de snapshot que deseja exportar.

  4. Na lista de snapshots, escolha o snapshot que deseja exportar.

  5. Em Actions (Ações), escolha Export to Amazon S3 (Exportar para o Amazon S3).

    A janela Export to Amazon S3 (Exportar para o Amazon S3) é exibida.

  6. Em Export identifier (Identificador de exportação), insira um nome para identificar a tarefa de exportação. Esse valor também é usado para o nome do arquivo criado no bucket do S3.

  7. Escolha os dados a serem exportados:

    • Escolha All (Tudo) para exportar todos os dados do snapshot.

    • Escolha Partial (Parcial) para exportar partes específicas do snapshot. Para identificar quais partes do snapshot exportar, insira um ou mais bancos de dados, esquemas ou tabelas para Identifiers (Identificadores), separados por espaços.

      Use o formato a seguir:

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

      Por exemplo:

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. Em S3 bucket (Bucket do S3), escolha o bucket para o qual exportar.

    Para atribuir os dados exportados a um caminho de pasta no bucket do S3, insira o caminho opcional para o S3 prefix (Prefixo do S3).

  9. Em IAM role (Perfil do IAM), escolha um perfil que conceda a você acesso de gravação ao bucket do S3 escolhido ou crie um novo perfil.

    • Se você criou um perfil seguindo as etapas em Fornecer acesso a um bucket do Amazon S3 usando um perfil do IAM, escolha esse perfil.

    • Se você não criou um perfil que conceda acesso de gravação ao bucket do S3 escolhido, selecione Create a new role (Criar um perfil) para criar o perfil automaticamente. Depois, insira um nome para o perfil em Nome do perfil do IAM.

  10. Em AWS KMS key, insira o ARN da chave a ser usada para criptografar os dados exportados.

  11. Escolha Export to Amazon S3 (Exportar para o Amazon S3).

Para exportar um snapshot de banco de dados para o Amazon S3 usando a AWS CLI, use o comando start-export-task com as seguintes opções necessárias:

  • --export-task-identifier

  • --source-arn

  • --s3-bucket-name

  • --iam-role-arn

  • --kms-key-id

Nos exemplos a seguir, a tarefa de exportação do snapshot é denominada my_snapshot_export, que exporta um snapshot para um bucket do S3 chamado amzn-s3-demo-bucket.

Para Linux, macOS ou 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 amzn-s3-demo-bucket \ --iam-role-arn iam-role \ --kms-key-id my-key

Para 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 amzn-s3-demo-bucket ^ --iam-role-arn iam-role ^ --kms-key-id my-key

Segue um exemplo de saída.

{ "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 fornecer um caminho de pasta no bucket do S3 para a exportação do snapshot, inclua a opção --s3-prefix no comando start-export-task.

Para exportar um snapshot de banco de dados para o Amazon S3, usando a API do Amazon RDS, use a operação StartExportTask com os seguintes parâmetros necessários:

  • ExportTaskIdentifier

  • SourceArn

  • S3BucketName

  • IamRoleArn

  • KmsKeyId

Disponibilidade de região e versão

A disponibilidade e a compatibilidade de recursos variam entre versões específicas de cada mecanismo de banco de dados e entre Regiões da AWS. Para ter mais informações sobre a disponibilidade de versões e regiões para a exportação de snapshots para o S3, consulte Regiões e mecanismos de banco de dados compatíveis com a exportação de snapshots para o S3 no Amazon RDS.

Limitações

A exportação de dados de snapshots de banco de dados para o Amazon S3 apresenta as seguintes limitações:

  • Você não pode executar várias tarefas de exportação para o mesmo snapshot de banco de dados simultaneamente. Isso se aplica a exportações totais e parciais.

  • Não há suporte para a exportação de snapshots de bancos de dados que usam armazenamento magnético.

  • As exportações para o S3 não são compatíveis com prefixos do S3 contendo dois pontos (:).

  • Os seguintes caracteres no caminho do arquivo do S3 são convertidos em sublinhados (_) durante a exportação:

    \ ` " (space)
  • Se um banco de dados, esquema ou tabela tiver caracteres em seu nome diferentes dos a seguir, a exportação parcial não será aceita. No entanto, você pode exportar o snapshot de banco de dados inteiro.

    • Letras latinas (A–Z)

    • Dígitos (0–9)

    • Símbolo do dólar ($)

    • Sublinhado (_)

  • Espaços ( ) e alguns caracteres não são compatíveis em nomes de colunas de tabelas de banco de dados. As tabelas com os seguintes caracteres em nomes de colunas são ignoradas durante a exportação:

    , ; { } ( ) \n \t = (space)
  • As tabelas com barras (/) em seus nomes são ignoradas durante a exportação.

  • As tabelas temporárias e não registradas do RDS para PostgreSQL são ignoradas durante a exportação.

  • Se os dados contiverem um objeto grande, como um BLOB ou um CLOB, com tamanho próximo ou superior a 500 MB, ocorrerá uma falha na exportação.

  • Se uma tabela contiver uma linha grande próxima ou maior que 2 GB, a tabela será ignorada durante a exportação.

  • Em relação a exportações parciais, a lista ExportOnly tem um tamanho máximo de 200 KB.

  • É altamente recomendável que você use um nome exclusivo para cada tarefa de exportação. Se você não usar um nome de tarefa exclusivo, poderá receber a seguinte mensagem de erro:

    ExportTaskAlreadyExistsFault: An error occurred (ExportTaskAlreadyExists) when calling the StartExportTask operation: The export task with the ID xxxxx already exists [ExportTaskAlreadyExistsFault: ocorreu um erro (ExportTaskAlreadyExists) ao chamar a operação StartExportTask: a tarefa de exportação com o ID xxxxx já existe].

  • Você pode excluir um snapshot enquanto exporta seus dados para o S3, mas ainda é cobrado pelo armazenamento desse snapshot até que a tarefa de exportação seja concluída.

  • Não é possível restaurar dados de snapshots exportados do S3 para uma nova instância de banco de dados nem importar dados de snapshots do S3 para uma instância de banco de dados existente.

  • Você pode ter até cinco tarefas de exportação de snapshot de banco de dados simultâneas em andamento por Conta da AWS.

  • Para exportar um snapshot de banco de dados para um bucket do Amazon S3 entre contas, você deve usar a AWS CLI ou a API do RDS.