Comment résoudre les erreurs que je reçois lors du chargement ou du téléchargement de données entre Amazon Aurora et Amazon S3 ?

Lecture de 7 minute(s)
0

Je souhaite charger des données sur Amazon Aurora depuis Amazon Simple Storage Service (Amazon S3). Ou bien : je souhaite télécharger des données depuis Amazon Aurora, puis les charger sur Amazon S3.

Brève description

Utilisez l’une des commandes suivantes pour charger les données sous forme de fichier texte entre Amazon Aurora et Amazon S3 :

  • SELECT INTO OUTFILE S3 : permet de charger des données depuis Amazon Aurora vers Amazon S3
  • LOAD DATA FROM S3 : permet de charger des données depuis Amazon S3 vers Amazon Aurora

Voici quelques-unes des erreurs courantes que vous pouvez recevoir lors de l’exécution des commandes SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 :

  • Code d’erreur : 1871. Informations d’identification manquantes.
  • Commande incorrecte : mot-clé de manifeste/fichier/préfixe manquant.
  • Code d’erreur : 1045. Erreur d’accès refusé.
  • Code d’erreur : 1815. Erreur interne : Initialisation impossible.
  • Code d’erreur : 1871. L’API S3 a renvoyé l’erreur suivante : Accès refusé.

Résolution

Exécution de la commande SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3

Exécutez la commande SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 à l’aide d’Amazon Aurora :

1.    Créez un compartiment S3 et copiez l’ARN.

2.    Créez une politique Gestion des identités et des accès AWS (AWS IAM) pour le compartiment S3 avec les autorisations nécessaires. Spécifiez l’ARN du compartiment, puis accordez les autorisations aux objets qu’il contient.

Exécutez une politique personnalisée semblable à la suivante si vous n’utilisez pas de politique 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. Créez un rôle IAM pour le service Amazon Relational Database Service (Amazon RDS). Attachez ensuite à celui-ci la politique IAM que vous avez créée.

La relation de confiance se présente comme suit :

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

4.    Créez un groupe de paramètres de cluster de base de données personnalisé pour Aurora.

Pour Aurora MySQL version 1 ou 2 :

Modifiez soit le rôle aurora_select_into_s3_role ou le rôle aws_default_s3_role en lui attribuant la valeur de l’ARN du rôle IAM.

Pour Aurora MySQL version 3 :

Modifiez le rôle aws_default_s3_role en lui attribuant la valeur de l’ARN du rôle IAM.

5.    Attachez le rôle IAM au cluster de base de données que vous avez créé. Pour en savoir plus, consultez la page Association d’un rôle IAM à un cluster de bases de données Amazon Aurora MySQL.

6.    Connectez-vous à votre cluster de bases de données Amazon Aurora.

7.    Créez un nouvel utilisateur en exécutant la commande suivante :

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

8.    Accordez les autorisations nécessaires à l’utilisateur en exécutant la commande suivante :

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

Pour Aurora MySQL version 1 ou 2, utilisez l’instruction suivante :

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

Pour Aurora MySQL version 3, utilisez l’instruction suivante :

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

Remarque : dans MySQL Aurora version 3, l’option activate_all_roles_on_login peut être activée à l’aide du paramètre de cluster de base de données. Tous les rôles sont ainsi automatiquement activés lorsqu’un utilisateur se connecte à une instance de base de données. Pour en savoir plus, consultez la page Octroi de privilèges permettant de charger des données dans Amazon Aurora MySQL.

9.    Exécutez la commande 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;

Code d’erreur : 1871. Informations d’identification manquantes.

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

Ce message d’erreur peut survenir si :

  • Le rôle IAM associé au cluster de base de données est manquant. Reportez-vous à l’étape 5 de la section précédente pour résoudre ce problème.
  • L’ARN du rôle n’est pas précisé et seul le nom du rôle figure dans le groupe de paramètres. Reportez-vous à l’étape 2 de la section précédente pour résoudre ce problème.

Commande incorrecte : mot-clé de manifeste/fichier/préfixe manquant.

Si vous recevez le message d’erreur « Commande incorrecte : mot-clé de manifeste/fichier/préfixe manquant », cela signifie que vous n’avez pas saisi le mot-clé approprié pour que la commande puisse s’exécuter correctement. Pour corriger cette erreur, saisissez le mot-clé adapté à la commande.

Code d’erreur : 1045. Erreur d’accès refusé.

Si votre commande n’est pas saisie correctement, vous pouvez recevoir une erreur de type « 1045 : Accès refusé pour l’utilisateur ‘‘testsaveload'@'%';’’ ». Voici un exemple de commande incorrecte :

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

Assurez-vous que le mot-clé S3 est bien inclus dans la requête. Voici un exemple de commande correcte :

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

Code d’erreur : 1815. Erreur interne : Initialisation impossible.

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

Plusieurs raisons peuvent expliquer l’apparition de l’erreur « Code d’erreur : 1815. Erreur interne : Initialisation impossible. »

  • Votre fichier n’existe pas. Vérifiez que le fichier existe bien dans votre compartiment S3 et que le nom que vous avez spécifié dans votre script correspond au nom du fichier. La distinction majuscules/minuscules est importante. Vérifiez que le nom du compartiment S3, le nom du dossier et le nom de l’objet correspondent exactement à ce qui est spécifié dans la commande de chargement.
  • Vous ne disposez pas des autorisations appropriées au niveau du fichier, du dossier ou du compartiment. Reportez-vous à l’étape 2 pour vérifier que vous avez défini les autorisations appropriées.
  • Le script LOAD peut comporter une erreur de syntaxe. Vérifiez votre script LOAD, puis exécutez de nouveau la commande.
  • Le compartiment S3 et le cluster de base de données se trouvent dans des régions différentes, et le chemin d’accès au compartiment S3 ne contient pas la valeur de la région. Consultez la page Points de terminaison et quotas Amazon S3 pour en savoir plus sur les régions AWS.
  • Les instances de lecture et d’écriture présentent une configuration réseau différente. Pour en savoir plus, consultez la page Utilisation du point de terminaison du lecteur.

Code d’erreur : 1871. L’API S3 a renvoyé l’erreur suivante : Accès refusé.

Vous recevez l’erreur « Code d’erreur : 1871. L’API S3 a renvoyé l’erreur suivante : Accès refusé » si votre compartiment S3 est chiffré. Vous pouvez également recevoir cette erreur s’il existe un fichier chiffré dans votre compartiment S3. Si le paramètre ServerSideEncryptionConfigurationExists n’est pas défini sur False, ajoutez kms:* à la politique que vous avez attachée au rôle IAM utilisé pour effectuer l’opération LOAD. Vous pouvez par exemple utiliser l’exemple de politique personnalisée suivant si vous n’utilisez pas de politique 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>/*"
      ]
    }
  ]
}

Informations connexes

Enregistrement de données d’un cluster de base de données Amazon Aurora MySQL dans des fichiers texte stockés dans un compartiment Amazon S3

Chargement de données dans un cluster de base de données Amazon Aurora MySQL à partir de fichiers texte situés dans un compartiment Amazon S3

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an