¿Cómo puedo solucionar los errores que se producen al cargar o descargar datos de Amazon Aurora a Amazon S3?

7 minutos de lectura
0

Quiero subir datos a Amazon Aurora desde Amazon Simple Storage Service (Amazon S3) o quiero descargar datos de Amazon Aurora y subirlos a Amazon S3.

Descripción breve

Puede cargar datos como un archivo de texto entre Amazon Aurora y Amazon S3 mediante uno de los siguientes comandos:

  • SELECT INTO OUTFILE S3: permite cargar datos de Amazon Aurora a Amazon S3
  • LOAD DATA FROM S3: permite cargar datos de Amazon S3 a Amazon Aurora

A continuación, figuran algunos de los errores más habituales que pueden producirse al ejecutar los comandos SELECT INTO OUTFILE S3 o LOAD DATA FROM S3:

  • 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

Resolución

Ejecución del comando SELECT INTO OUTFILE S3 o LOAD DATA FROM S3

Ejecute el comando SELECT INTO OUTFILE S3 o LOAD DATA FROM S3 mediante Amazon Aurora:

1.    Cree un bucket de S3 y copie el ARN.

2.    Cree una política de AWS Identity and Access Management (IAM) para el bucket de S3 con permisos. Especifique el ARN del bucket y, a continuación, otorgue permisos a los objetos del ARN del bucket.

En caso de no utilizar una política FullS3Access, ejecute una política personalizada similar a la siguiente:

{
  "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. Cree un rol de IAM para el servicio Amazon Relational Database Service (Amazon RDS). A continuación, adjunte la política de IAM que haya creado.

La relación de confianza es similar a la siguiente:

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

4.    Cree un grupo personalizado de parámetros de clúster de base de datos para Aurora.

Para las versiones 1 o 2 de Aurora MySQL:

Edite el rol aurora_select_into_s3_role o bien el rol aws_default_s3_role con el valor del ARN del rol de IAM.

Para la versión 3 de Aurora MySQL:

Edite el rol aws_default_s3_role con el valor del ARN del rol de IAM.

5.    Asocie el rol de IAM al clúster de base de datos que haya creado. Para obtener más información, consulte Asociación de un rol de IAM con un clúster de base de datos Amazon Aurora MySQL.

6.    Inicie sesión en el clúster de base de datos de Amazon Aurora.

7.    Cree un nuevo usuario ejecutando el siguiente comando:

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

8.    Otorgue permisos al usuario ejecutando el siguiente comando:

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

Para las versiones 1 o 2 de Aurora MySQL, utilice la siguiente instrucción:

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

Para la versión 3 de Aurora MySQL, utilice la siguiente instrucción:

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

Nota: En la versión 3 de Aurora MySQL, el elemento activate_all_roles_on_login puede activarse mediante el parámetro del clúster de base de datos. Esto activa automáticamente todos los roles cuando un usuario se conecte a una instancia de base de datos. Para obtener más información, consulte Concesión de privilegios para cargar datos en Amazon Aurora MySQL.

9.    Ejecute el comando SELECT INTO OUTFILE S3 o 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

Este error puede producirse en los siguientes casos:

  • Falta adjuntar el rol de IAM al clúster de base de datos. Consulte el paso 5 del apartado anterior para solucionar este problema.
  • El ARN del rol no se ha especificado, y solo el nombre del rol aparece en el grupo de parámetros. Consulte el paso 2 del apartado anterior para resolver este problema.

Incorrect Command: missing file/prefix/manifest keyword

Si se produce el error «Incorrect Command: missing file/prefix/manifest keyword», significa que no ha introducido la palabra clave adecuada para que el comando se ejecute correctamente. Para solucionar este error, introduzca la palabra clave del comando.

Error code: 1045. Access denied error

Si escribe un comando incorrecto, es posible que es produzca un error como «1045: Access denied for user ''testsaveload'@'%';». Por ejemplo, este comando está escrito incorrectamente:

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

Asegúrese de haber introducido la palabra clave S3 en la consulta. Este comando está escrito correctamente:

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

Hay varios motivos por los que puede producirse el error «Error code: 1815. Internal error: Unable to initialize».

  • El archivo no existe. Confirme que el archivo exista en el bucket de S3 y que el nombre que haya especificado en el script coincida con el del archivo. Preste atención a la distinción entre mayúsculas y minúsculas. Confirme que los nombres del bucket de S3, de la carpeta y del objeto coincidan exactamente con lo especificado en el comando load.
  • No tiene los permisos adecuados a nivel de archivo, carpeta o bucket. Revise el paso 2 para asegurarse de haber establecido los permisos correctos.
  • Es posible que haya un error de sintaxis en el script LOAD. Revise el script LOAD y, a continuación, vuelva a ejecutar el comando.
  • El clúster de base de datos y el bucket de S3 se encuentran en diferentes regiones, y no se ha indicado el valor de la región en la ruta del bucket de S3. Para obtener más información sobre las regiones de AWS, consulte Amazon S3 endpoints and quotas.
  • Las instancias del lector y del escritor presentan diferentes configuraciones de red. Para obtener más información, consulte Uso del punto de enlace del lector.

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

Se produce el error «Error code: 1871. S3 API returned error: Access Denied» si el bucket de S3 contiene cifrado. Este error también puede producirse en caso de haber un archivo cifrado en el bucket de S3. Si el estado de ServerSideEncryptionConfigurationExists no es falso, añada kms:* a la política que haya adjuntado al rol de IAM utilizado para llevar a cabo la operación LOAD. Por ejemplo, si no utiliza una política FULLS3Access, puede utilizar el siguiente ejemplo de política personalizada:

{
  "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>/*"
      ]
    }
  ]
}

Información relacionada

Grabación de datos desde un clúster de base de datos Amazon Aurora MySQL en archivos de texto de un bucket de Amazon S3

Carga de datos en un clúster de base de datos Amazon Aurora MySQL desde archivos de texto en un bucket de Amazon S3

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año