Como posso resolver os erros que recebo ao fazer upload ou baixar dados do Amazon Aurora para o Amazon S3?

7 minuto de leitura
0

Quero fazer upload de dados para o Amazon Aurora a partir do Amazon Simple Storage Service (Amazon S3). Ou eu quero baixar dados do Amazon Aurora e enviá-los para o Amazon S3.

Breve descrição

Carregue dados como um arquivo de texto entre o Amazon Aurora e o Amazon S3 usando um destes comandos:

  • SELECT INTO OUTFILE S3 - Carregue dados do Amazon Aurora para o Amazon S3
  • LOAD DATA FROM S3 - Carregue dados do Amazon S3 para o Amazon Aurora

Alguns dos erros comuns que você pode receber ao executar os comandos SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 incluem:

  • Código de erro: 1871. Credenciais ausentes
  • Comando incorreto: falta a palavra-chave arquivo/prefixo/manifesto
  • Código de erro: 1045. Erro de acesso negado
  • Código de erro: 1815. Erro interno: Não é possível inicializar
  • Código de erro: 1871. A API S3 retornou um erro: Acesso negado

Resolução

Execute o comando SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3

Execute os comandos SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 usando o Amazon Aurora:

1.    Crie um bucket S3 e copie o ARN.

2.    Crie uma política do AWS Identity and Access Management (IAM) para o bucket S3 com permissões. Especifique o ARN do bucket e, em seguida, conceda permissões aos objetos dentro do ARN do bucket.

Execute uma política personalizada semelhante à seguinte se você não estiver usando uma política Fulls3Access:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::<your_bucket_name>",
        "arn:aws:s3:::<your_bucket_name>/*"
      ]
    }
  ]
}
  1. Crie um perfil do IAM para o serviço Amazon Relational Database Service (Amazon RDS). Em seguida, anexe a política do IAM que você criou para isso.

A relação de confiança é assim:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4.    Crie um grupo de parâmetros de cluster de banco de dados personalizado para o Aurora.

Para o Aurora MySQL versão 1 ou 2:

Edite uma dessas funções aurora_select_into_s3_role ou aws_default_s3_role para o valor do ARN do perfil do IAM.

Para o Aurora MySQL versão 3:

Edite a função aws_default_s3_role para o valor do ARN da função IAM.

5.    Anexe o perfil do IAM ao cluster de banco de dados que você criou. Para obter mais informações, consulte Associar um perfil do IAM a um cluster de banco de dados Amazon Aurora MySQL.

6.    Faça login em seu cluster de banco de dados do Amazon Aurora.

7.    Crie um novo usuário executando o comando a seguir:

CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword';
show grants for 'testsaveload'@'%';

8.    Conceda permissões ao usuário executando o seguinte comando:

GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';

Para o Aurora MySQL versão 1 ou 2, use a seguinte declaração:

GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%';
GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';

Para o Aurora MySQL versão 3, use a seguinte declaração:

GRANT AWS_SELECT_S3_ACCESS TO 'testsaveload'@'%'
GRANT AWS_LOAD_S3_ACCESS TO 'testsaveload'@'%';

Observação: no Aurora MySQL versão 3, o activate_all_roles_on_login pode ser ativado usando o parâmetro de cluster de banco de dados. Isso ativa automaticamente todos os perfis quando um usuário se conecta a uma instância de banco de dados. Para obter mais informações, consulte Conceder privilégios para carregar dados no Amazon Aurora MySQL.

9.    Execute o comando SELECT INTO OUTFILE S3 ou LOAD DATA INTO S3:

SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';
LOAD DATA FROM S3 PREFIX 's3-us-east-1://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3001;
LOAD DATA FROM S3 's3-us-east-1://tests3saveloadaurora/prefix3.part_00000' INTO TABLE test3000;

Código de erro: 1871. Credenciais ausentes

SELECT * from test1.test2034 INTO OUTFILE S3 '"s3://tests3saveloadaurora/testfile1prefix.part_00000';
Error Code: 1871. S3 API returned error: Missing Credentials: Cannot instantiate S3 Client

Você pode receber esse erro se:

  • O anexo do perfil do IAM ao cluster de banco de dados estiver ausente. Consulte a etapa 5 na seção anterior para corrigir esse problema.
  • O ARN do perfil não está especificado e somente o nome do perfil está relacionado no grupo de parâmetros. Consulte a etapa 2 na seção anterior para resolver isso.

Comando incorreto: falta a palavra-chave arquivo/prefixo/manifesto

Se você receber o erro “Comando incorreto: arquivo/prefixo/palavra-chave manifesto ausente”, significa que você não inseriu a palavra-chave correta para que o comando seja executado com êxito. Para corrigir esse erro, digite a palavra-chave do comando.

Código de erro: 1045. Erro de acesso negado

Se você digitar um comando incorreto, poderá receber um erro como “1045: Acesso negado para o usuário “testsaveload'@'%';”. Por exemplo, esse comando foi escrito incorretamente:

SELECT * from test1.test2034 INTO OUTFILE 's3://tests3saveloadaurora/testfile1prefix.part_00000';

Certifique-se de que a palavra-chave S3 tenha sido inserida na consulta. Esse comando foi escrito corretamente:

SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';

Código de erro: 1815. Erro interno: Não é possível inicializar

LOAD DATA FROM S3 's3://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3000;
Error Code: 1815. Internal error: Unable to initialize S3Stream

Há vários motivos pelos quais você pode receber o “Código de erro: 1815. Erro interno: erro “Não foi possível inicializar”.

  • Seu arquivo não existe. Confirme se o arquivo existe no seu bucket do S3 e se o nome que você especificou no script corresponde ao nome do arquivo. A diferenciação entre maiúsculas e minúsculas. Confirme se o nome do bucket do S3, o nome da pasta e o nome do objeto correspondem exatamente ao que está especificado no comando de carga.
  • Você não tem as permissões apropriadas no nível de arquivo, pasta ou bucket. Revise a etapa 2 para verificar se você definiu as permissões corretas.
  • Você pode ter um erro de sintaxe no script LOAD. Revise seu script LOAD e execute novamente o comando.
  • O bucket do S3 e o cluster de banco de dados estão em regiões diferentes, e o caminho para o bucket do S3 não tem o valor da região. Para obter mais informações sobre as regiões da AWS, consulte Endpoints e cotas do Amazon S3.
  • A configuração de rede para as instâncias do leitor e do gravador é diferente. Para obter mais informações, consulte Usar o endpoint do leitor.

Código de erro: 1871. A API S3 retornou um erro: Acesso negado

Você recebe o “Código de erro: 1871. A API S3 retornou um erro: erro de “Acesso negado” se você tiver criptografia em seu bucket do S3. Ou você pode receber esse erro se houver um arquivo criptografado dentro do seu bucket do S3. Se o ServerSideEncryptionConfigurationExists não for falso, adicione kms:* à política que você anexou ao perfil do IAM usada para realizar a operação LOAD. Por exemplo, use o exemplo de política personalizada a seguir se você não estiver usando uma política Fulls3Access:

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

Informações relacionadas

Salvar dados de um cluster de banco de dados Amazon Aurora MySQL em arquivos de texto em um bucket do Amazon S3

Carregamento de dados em um cluster de banco de dados Amazon Aurora MySQL a partir de arquivos de texto em um bucket do Amazon S3

AWS OFICIAL
AWS OFICIALAtualizada há um ano