Como faço para solucionar problemas ao integrar o Amazon RDS para Oracle com o Amazon S3?

7 minuto de leitura
0

Quero solucionar problemas e erros ao integrar o Amazon Relational Database Service (Amazon RDS) para Oracle com o Amazon Simple Storage Service (Amazon S3).

Breve descrição

Ao transferir arquivos entre uma instância de banco de dados Amazon RDS para Oracle e um bucket do Amazon S3, verifique as seguintes condições:

  • A instância de banco de dados e o bucket do S3 estão na mesma região da AWS.
  • A instância de banco de dados tem o acesso necessário ao bucket do S3.
  • A instância de banco de dados está associada a um grupo de opções que inclui a opção S3_INTEGRATION.
  • O upload de arquivos está partindo somente do objeto de diretório Oracle. Esse diretório pode ser criado pelo usuário ou um diretório DATA_PUMP_DIR.
  • Em caso de diretório criado pelo usuário, o usuário que está realizando o upload e o download deve ter os privilégios de leitura e gravação necessários. Para obter mais informações, consulte Como faço para gerenciar privilégios e funções de usuário na minha instância de banco de dados Amazon RDS for Oracle?
  • Se você estiver copiando dados em subdiretórios, especifique o nome do subdiretório ao usar os pacotes rdsadmin. Não é possível usar a opção S3_INTEGRATION para copiar subdiretórios.

Resolução

Certifique-se de que a instância de banco de dados tenha o acesso necessário ao bucket do S3

Verifique se sua instância de banco de dados tem uma função do AWS Identity and Access Management (IAM) com o mínimo de privilégios para fazer upload e download do S3:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, escolha Bancos de dados.
  3. Escolha a instância de banco de dados que você deseja verificar.
  4. Escolha a guia Conectividade e segurança.
  5. Role para baixo até a seção Gerenciar perfis do IAM para verificar se você tem um perfil do IAM ativo com os seguintes privilégios:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

Você também pode usar o comando describe-db-instances da AWS Command Line Interface (AWS CLI) para verificar se sua instância de banco de dados tem um perfil do IAM com esses privilégios mínimos:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Depois de verificar se o perfil do IAM existe, faça o seguinte, com base na sua descoberta:

  • Se o perfil do IAM existir, mas não tiver esses privilégios mínimos, modifique-o para incluir essas permissões.
  • Se você não tiver um perfil do IAM com as permissões necessárias, crie uma política do IAM. Conceda a essa política permissões para transferir os arquivos do bucket do S3 para o Amazon RDS. Ao criar a política do IAM, certifique-se de adicionar permissões de bucket aos buckets e permissões de objeto aos objetos.

Se você ainda tiver problemas com as permissões do bucket, modifique o perfil do IAM para conceder acesso total ao bucket do S3:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/*",
        "arn:aws:s3:::example-bucket"
      ]
    }
  ]
}

Importante: isso modifica o perfil do IAM para conceder acesso total somente para o fim de testar se o problema resulta dos privilégios do IAM. Depois de resolver o problema, ajuste os privilégios personalizados conforme necessário.

Para fazer upload de arquivos para uma pasta específica no S3, use o parâmetro p_s3_prefix no procedimento rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Certifique-se de ter as permissões necessárias antes de fazer o upload dos arquivos.

Por exemplo: para fazer upload de arquivos para a pasta example-folder para o bucket do S3 example-bucket, anexe a seguinte política do IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::example-bucket/example-folder/*"
      ]
    }
  ]
}

Certifique-se de que a instância de banco de dados esteja associada a um grupo de opções que inclua a opção S3_INTEGRATION

Verifique se você tem um grupo de opções anexado à sua instância de banco de dados do RDS:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, escolha Bancos de dados.
  3. Escolha a instância de banco de dados que você deseja verificar.
  4. Escolha a guia Configuração.
  5. Observe o parâmetro de Grupos de opções.

Se esse grupo de opções não estiver no estado in_sync e você estiver adicionando a opção S3_INTEGRATION, a opção não será adicionada com êxito. Portanto, certifique-se de que o grupo de opções esteja no estado in_sync.

Para verificar se esse grupo de opções está no estado in_sync, execute o seguinte comando da AWS CLI:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

Se o grupo de opções não estiver no estado in_sync, escolha a guia Registros e eventos do seu banco de dados e, em seguida, role para baixo até a seção Eventos recentes. Identifique o componente que impede o estado in_sync do grupo de opções e remova-o do banco de dados.

Se o grupo de opções estiver em no estado in_sync, verifique se a opção S3_INTEGRATION foi incluída no grupo de opções. Para obter mais informações, consulte Listar as opções e configurações de opções de um grupo de opções. Se a opção S3_INTEGRATION não estiver incluída no grupo de opções, adicione-a. Para obter mais informações, consulte Adicionar a opção de integração do Amazon S3.

Observação: se a opção S3_INTEGRATION não for adicionada à sua instância de banco de dados, você receberá o erro ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier". Esse erro indica que os procedimentos necessários para upload e download não foram criados na instância de banco de dados.

Adicionar a opção S3_INTEGRATION ao Amazon RDS não resulta em inatividade do sistema. Se você quiser usar a opção Aplicar imediatamente, certifique-se de que não haja ações de manutenção pendentes. Se houver alguma ação pendente, ela entrará em vigor com a integração do Amazon S3. Para obter mais informações, consulte Manter uma instância de banco de dados.

Verifique se você está fazendo upload/download de arquivos somente do objeto de diretório Oracle criado pelo usuário ou do diretório DATA_PUMP_DIR

Não é possível acessar os arquivos do S3 diretamente na instância do banco de dados. Para acessar esses arquivos, você deve copiá-los para um diretório do host RDS. Para fazer upload ou download dos arquivos da instância de banco de dados para um bucket do S3, siga as seguintes etapas:

  1. Para copiar os arquivos de exportação no Amazon RDS para o S3, primeiro crie os arquivos de despejo. Para fazer isso, use o comando expdp ou a API dbms_datapump no diretório DATA_DUMP_DIR ou no diretório personalizado. Em seguida, use o procedimento rdsadmin.rdsadmin_s3_tasks.upload_to_s3 para carregar arquivos para o S3. Para obter informações sobre os parâmetros desse procedimento e exemplos de consultas para upload de arquivos, consulte Fazer upload de arquivos de uma instância de banco de dados Oracle para um bucket do Amazon S3.
  2. Use o procedimento rdsadmin. rdsadmin_s3_tasks.download_from_s3 para fazer download dos arquivos do bucket do S3 para a pasta DATA_PUMP_DIR ou qualquer diretório criado pelo usuário. Para obter informações sobre os parâmetros desse procedimento e ver exemplos de consultas para o download de arquivos, consulte Fazer download de arquivos de um bucket do Amazon S3 para uma instância de banco de dados Oracle.

Para monitorar o status da transferência de arquivos, visualize o registro gerado quando você executa o procedimento para fazer upload ou download dos pacotes rdsadmin:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, escolha Bancos de dados.
  3. Escolha a instância de banco de dados cujos registros você deseja visualizar.
  4. Escolha a guia Logs e eventos.
  5. Na seção Logs, insira a ID da tarefa retornada pelo procedimento no filtro de pesquisa.
  6. Selecione o arquivo retornado.
  7. Escolha Visualizar para ver os logs.
    -ou-
    Escolha Fazer download para baixar os logs.

Você também pode executar o comando a seguir para ler o arquivo de log gerado durante o processo de upload ou download:

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

Observação: substitua task-id pelo ID da tarefa retornada pelo procedimento.

Informações relacionadas

Integração com o Amazon S3

Por que minha instância de banco de dados do Amazon RDS para Oracle está usando mais armazenamento que o esperado?

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses