Como solucionar problemas ao integrar o Amazon RDS for Oracle ao Amazon S3?

Data da última atualização: 29/10/2021

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

Breve descrição

Ao transferir arquivos entre uma instância de banco de dados do Amazon RDS for Oracle e um bucket do Amazon S3, confirme se:

  • A instância de banco de dados e o bucket do S3 estão na mesma região 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.
  • Você está carregando arquivos apenas do diretório de objeto da Oracle. Esse diretório pode ser um diretório criado pelo usuário ou um diretório DATA_PUMP_DIR.
  • Se você estiver usando um diretório criado pelo usuário, o usuário que estiver realizando o upload e o download deverá ter os privilégios de leitura e gravação necessários no diretório. Para obter mais informações, consulte Conceder privilégios ao usuário no banco de dados de origem.
  • Se você estiver copiando dados dentro de subdiretórios, especifique o nome do subdiretório explicitamente ao usar os pacotes rdsadmin. Você não pode copiar subdiretórios usando a opção S3_INTEGRATION.

Resolução

Confirme se a instância de banco de dados tem o acesso necessário ao bucket do S3

Para verificar 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, faça o seguinte:

  1. Abra o console do Amazon RDS.
  2. No painel de navegação, selecione Bancos de dados.
  3. Selecione a instância de banco de dados que você deseja verificar.
  4. Selecione a aba Conectividade e segurança.
  5. Role para baixo até a seção Gerenciar funções do IAM para verificar se você tem uma função do IAM ativa 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 uma função do IAM com estes mínimos privilégios:

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, use a versão mais recente da AWS CLI.

Depois de verificar se a função do IAM existe, siga um destes procedimentos com base na sua descoberta:

  • Se a função do IAM existir, mas não tiver esses mínimos privilégios, modifique a função para incluir essas permissões.
  • Se você não tiver uma função do IAM com as permissões necessárias, crie uma política do IAM com as permissões necessárias para transferir os arquivos do bucket do S3 para o Amazon RDS. Para obter mais informações, consulte Pré-requisitos para integração do Amazon RDS for Oracle com o Amazon S3. Adicione permissões de nível de bucket a buckets e permissões de nível de objeto a objetos ao criar a política do IAM.

Se o problema com as permissões de bucket ainda persistir, modifique a função 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: a função do IAM é modificada para conceder acesso total somente para testar se o problema é causado devido a privilégios do IAM. Depois que o problema for resolvido, ajuste os privilégios personalizados conforme necessário.

Para carregar arquivos para uma pasta específica no S3, use o parâmetro p_s3_prefix no procedimento rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Tenha as permissões necessárias antes de carregar os arquivos.

Por exemplo, para carregar arquivos para a pasta example-folder para o bucket de exemplo do bucket do S3, 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/*"
            ]
        }
    ]
}

Confirme se a instância de banco de dados está associada a um grupo de opções que inclua a opção S3_INTEGRATION

Para verificar se você tem um grupo de opções anexado à sua instância de banco de dados do RDS, faça o seguinte:

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

Se esse grupo de opções não estiver no estado válido e você estiver tentando adicionar a opção S3_INTEGRATION, ela não será adicionada com êxito. Portanto, o grupo de opções deve estar no estado válido.

Para verificar se esse grupo de opções está em um estado válido, 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 válido, clique na guia Logs e eventos em seu banco de dados e role para baixo até a seção Eventos recentes. Identifique o componente que torna o grupo de opções inválido e remova esse componente do banco de dados.

Se o grupo de opções estiver no estado válido, confirme se a opção S3_INTEGRATION está incluída no grupo de opções. Para obter mais informações, consulte Listar as opções e as configurações de opções para um grupo de opções. Se a opção S3_INTEGRATION não estiver incluída no grupo de opções, adicione a opção. 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 fazer upload e download não são criados na instância de banco de dados.

Adicionar a opção S3_INTEGRATION ao Amazon RDS não resulta em tempo de inatividade. Se você planeja usar a opção Aplicar imediatamente, confirme se não há ações de manutenção pendentes. Se houver alguma ação pendente, essas ações serão aplicadas junto com a integração do S3. Para obter mais informações, consulte Manutenção de uma instância de banco de dados.

Confirme se você está carregando/baixando arquivos somente do objeto de diretório Oracle criado pelo usuário ou do diretório DATA_PUMP_DIR

Você não pode acessar os arquivos do S3 diretamente na instância do banco de dados. Para acessar esses arquivos, você deve copiar os arquivos para um diretório no host do RDS para acessá-lo. Para fazer upload/download de arquivos da instância de banco de dados para um bucket do S3, faça o seguinte:

  1. Para copiar os arquivos de exportação no Amazon RDS para o S3, crie os arquivos de despejo usando o comando expdp ou a API dbms_datapump no DATA_DUMP_DIR ou no diretório personalizado. Em seguida, use o procedimento rdsadmin.rdsadmin_s3_tasks.upload_to_s3 para fazer upload dos arquivos para o S3. Para obter informações sobre os parâmetros desse procedimento e exemplos de consultas para upload de arquivos, consulte Carregar arquivos de uma instância de banco de dados da Oracle para um bucket do Amazon S3.
  2. Use o procedimento rdsadmin.rdsadmin_s3_tasks.download_from_s3 para baixar 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 exemplos de consultas para arquivos de download, consulte Baixar arquivos de um bucket do Amazon S3 para uma instância de banco de dados da Oracle.

Para monitorar o status da transferência de arquivos, visualize o log gerado quando você executa o procedimento para carregar ou baixar os pacotes rdsadmin. Para visualizar esses registros, faça o seguinte:

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

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

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

Observação: Substitua o task-id pelo ID da tarefa retornado pelo procedimento.