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

7 minuto de leitura
0

Quero carregar dados para o Amazon Aurora a partir do Amazon Simple Storage Service (Amazon S3). Ou quero baixar dados do Amazon Aurora e carregá-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 dos comandos a seguir:

  • 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:

  • Error Code: 1871. Missing Credentials
  • Incorrect Command: missing file/prefix/manifest keyword
  • Error code: 1045. Access denied error
  • Error code: 1815. Internal error: Unable to initialize
  • Error Code: 1871. S3 API returned error: Access Denied

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 do S3 e copie o ARN.

2.    Crie uma política do AWS Identity and Access Management (IAM) para o bucket do 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 similar à seguinte se 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 do Amazon Relational Database Service (Amazon RDS). Em seguida, anexe a ele a política do IAM que você criou.

A relação de confiança é similar ao seguinte:

{
  "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 um dos perfis 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 aws_default_s3_role para o valor do ARN do perfil do IAM.

5.    Anexe o perfil do IAM ao cluster de banco de dados que você criou. Para obter mais informações, consulte Associar uma função do IAM a um cluster de banco de dados do 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 declaração a seguir:

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

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

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

Observação: no Aurora MySQL versão 3, 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;

Error Code: 1871. Missing Credentials

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 da seção anterior para corrigir esse problema.
  • O ARN do perfil não estiver especificado e somente o nome do perfil estiver relacionado no grupo de parâmetros. Consulte a etapa 2 da seção anterior para resolver isso.

Incorrect Command: missing file/prefix/manifest keyword

Se você receber o erro "Incorrect Command: missing file/prefix/manifest keyword", isso significa que você não inseriu a palavra-chave correta para que o comando fosse executado com êxito. Para corrigir esse erro, digite a palavra-chave do comando.

Error code: 1045. Access denied error

Se você digitar um comando incorreto, poderá receber um erro como "1045: Access denied for user ''testsaveload'@'%';". Por exemplo, o comando a seguir foi escrito incorretamente:

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

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

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

Error code: 1815. Internal error: Unable to initialize

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 erro "Error code: 1815. Internal error: Unable to initialize".

  • Your file doesn't exist. Confirme se o arquivo existe no seu bucket do S3 e se o nome especificado no script corresponde ao nome do arquivo. Há 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 se certificar de ter definido as permissões corretas.
  • Pode ser que haja um erro de sintaxe no script LOAD. Examine o script LOAD e execute o comando novamente.
  • 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 de leitor.

Error Code: 1871. S3 API returned error: Access Denied

Você recebe o erro "Error code: 1871. S3 API returned error: Access denied" se tiver criptografia em seu bucket do S3. Ou pode receber esse erro se houver um arquivo criptografado dentro do seu bucket do S3. Se 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 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 a partir de um cluster de banco de dados do Amazon Aurora MySQL em arquivos de texto de um bucket do Amazon S3

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

AWS OFICIAL
AWS OFICIALAtualizada há um ano