Comment puis-je résoudre les erreurs que j'ai reçues lors du chargement ou du téléchargement de données entre Amazon Aurora et Amazon S3 ?

Dernière mise à jour : 14/12/2020

Je souhaite télécharger des données sur Amazon Aurora à partir d'Amazon Simple Storage Service (Amazon S3)

-ou-

Je veux télécharger des données depuis Amazon Aurora et les charger sur Amazon S3.

Comment puis-je résoudre une erreur que j'ai reçue lors du téléchargement de données vers ou depuis Amazon Aurora vers Amazon S3 ?

Brève description

Pour charger des données sous forme de fichier texte depuis Amazon Aurora dans Amazon S3, exécutez la commande SELECT INTO OUTFILE S3 dans Amazon Aurora.

Pour charger des données sous forme de texte depuis Amazon S3 vers Amazon Aurora, exécutez la commande LOAD DATA FROM S3 dans 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é fichier/préfixe/manifeste manquant
  • Code d'erreur : 1045. Erreur d'accès refusé
  • Code d'erreur : 1815. Erreur interne : Impossible d'initialiser
  • Code d'erreur : 1871. L'API S3 a renvoyé une erreur : Accès refusé

Tout d'abord, suivez les étapes ci-dessous pour exécuter les commandes SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 à l'aide d'Amazon Aurora. Si vous obtenez une erreur, suivez les étapes de dépannage pour le code d'erreur que vous recevez.

Résolution

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

Pour exécuter les commandes SELECT INTO OUTFILE S3 ou LOAD DATA FROM S3 à l'aide d'Amazon Aurora, procédez comme suit :

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

2. Créez une stratégie IAM pour le compartiment S3 avec des autorisations. Spécifiez l'ARN du compartiment, puis accordez des autorisations aux objets du compartiment (ARN* du compartiment).

Exécutez une stratégie personnalisée similaire à celle ci-dessous si vous n'utilisez pas de stratégie 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>/*"
            ]
        }
    ]
}</your_bucket_name></your_bucket_name>

3. Créez un rôle IAM pour le service Amazon Relational Database Service (Amazon RDS), puis attachez la stratégie IAM que vous avez créée.

La relation de confiance ressemble à ceci :

{
  "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 DB personnalisé pour Aurora. Ensuite, modifiez le rôle aurora_select_into_s3_role ou aws_default_s3_role/aurora_load_from_s3_role ou aws_default_s3_role à la valeur de l'ARN du rôle IAM.

5. Attachez le rôle IAM au cluster DB que vous avez créé. Pour plus d'informations, consultez Association d'un rôle IAM à un cluster DB Amazon Aurora MySQL.

6. Connectez-vous à votre cluster DB 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 des autorisations à l'utilisateur en exécutant la commande suivante :

GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%’;
GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%’;
GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%’;

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;

Si vous obtenez des erreurs lors de l'exécution des commandes SELECT INTO OUTFILE S3 ou LOAD DATA INTO S3, suivez les étapes ci-dessous.

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

Vous pouvez recevoir l'erreur suivante si :

  • La pièce jointe du rôle IAM au cluster DB est manquante. Voir l'étape 5 ci-dessus pour résoudre ce problème.
  • L'ARN du rôle n'est pas spécifié et seul le nom du rôle est répertorié dans le groupe de paramètres. Voir l'étape 2 ci-dessus pour résoudre ce problème.
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

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

Si vous recevez l'erreur « Commande incorrecte : mot-clé fichier/préfixe/manifeste manquant », cela signifie que vous n'avez pas entré le mot-clé correct pour que la commande s'exécute correctement. Pour corriger cette erreur, entrez le mot-clé de la commande.

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

Vous pouvez recevoir une erreur comme « 1045 : Accès refusé pour l'utilisateur 'testsaveload'@'%'; » si vous entrez la commande de manière incorrecte. Par exemple, la commande ci-dessous est écrite de manière incorrecte :

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

Assurez-vous que le mot-clé S3 a été saisi dans la requête. La commande ci-dessous est écrite correctement :

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

Code d'erreur : 1815. Erreur interne : Impossible d'initialiser

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

Il y a un certain nombre de raisons pour lesquelles vous pouvez recevoir le « Code d'erreur : 1815. Erreur interne : impossible d'initialiser », notamment les suivantes :

  • Votre fichier n'existe pas. Vérifiez que le fichier existe dans votre compartiment S3 et que le nom que vous avez spécifié dans votre script correspond au nom du fichier. La sensibilité à la casse 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 LOAD.
  • Vous ne disposez pas des autorisations appropriées au niveau du fichier, du dossier ou du compartiment. Passez en revue l'étape 2 pour vous assurer que vous avez défini les autorisations correctes.
  • Il se peut que vous ayez une erreur de syntaxe dans le script LOAD. Vérifiez votre script LOAD, puis réexécutez la commande.
  • Le compartiment S3 et le cluster DB se trouvent dans différentes régions, et le chemin d'accès au compartiment S3 manque la valeur de la région. Pour plus d'informations sur les régions AWS, consultez les points de terminaison Amazon S3.
  • La configuration réseau pour les instances de lecture et d'écriture est différente. Pour plus d'informations, consultez la section Gestion des connexions Amazon Aurora.

Code d'erreur : 1871. L'API S3 a renvoyé une erreur : Accès refusé

Vous recevez l'erreur « Code d'erreur : 1871. L'API S3 a renvoyé une erreur : Accès refusé » si vous avez un chiffrement sur votre compartiment S3 ou s'il y a un fichier chiffré à l'intérieur de votre compartiment S3. Si ServerSideEncryptionConfigurationExists n'a pas la valeur false, ajoutez kms:* à la stratégie que vous avez attachée au rôle IAM utilisé pour effectuer l'opération LOAD. Par exemple, utilisez l'exemple de stratégie personnalisée ci-dessous si vous n'utilisez pas de stratégie 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>/*"
            ]
        }
    ]
}</your_bucket_name></your_bucket_name>