web-dev-qa-db-fra.com

Amazon Aurora 1.8 Charger des données à partir de S3 - Impossible d'instancier le client S3

Avec la dernière mise à jour d'Aurora (1.8), la commande LOAD DATA FROM S3 a été introduite. Quelqu'un at-il obtenu cela au travail? Après la mise à niveau vers la version 1.8, j'ai suivi le guide d'installationIcipour créer le rôle permettant d'autoriser l'accès de RDS à S3. 

Après avoir redémarré le serveur et essayé d’exécuter la commande 

LOAD DATA FROM S3 PREFIX 's3://<bucket_name>/prefix' INTO TABLE table_name

dans SQL Workbench/J, j'obtiens les erreurs:

Warnings:
S3 API returned error: Missing Credentials: Cannot instantiate S3 Client
S3 API returned error: Failed to instantiate S3 Client
Internal error: Unable to initialize S3Stream

Des étapes supplémentaires sont-elles nécessaires? Puis-je seulement exécuter cela à partir du SDK? Je ne vois pas cela mentionné nulle part dans les documents

7
aarbor

J'ai eu le même problème. J'ai essayé d'ajouter AmazonS3FullAccess au rôle IAM que mes instances RDS utilisaient ... pas de joie.

Après avoir fouillé, je suis allé dans la console RDS, dans Clusters. Sélectionnez mon cluster Aurora et cliquez sur Gérer les rôles IAM. Cela m'a donné une liste déroulante, j'ai sélectionné le rôle IAM (le même que celui utilisé par les instances individuelles).

Une fois que j'ai fait cela, tout allait bien et la charge de données était agréable et rapide.

Donc, il y a (pour nous) 5 étapes/composants:

1) La stratégie de compartiment et de compartiment S3 permettant à un utilisateur de télécharger l'objet

{
    "Version": "2012-10-17",
    "Id": "Policy1453918146601",
    "Statement": [
        {
            "Sid": "Stmt1453917898368",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account id>:<user/group/role>/<IAM User/Group/Role>"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<bucket name>/*"
        }
    ]
}

Le "principal" serait le type d'utilisateur, de groupe ou de rôle IAM qui téléchargerait les fichiers de données dans le compartiment afin que l'instance RDS puisse importer les données.

2) La politique IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1486490368000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket name>/*"
            ]
        }
    ]
}

C'est assez simple avec le générateur de règles.

3) Créez le rôle IAM:

Ce rôle doit être affecté à la stratégie IAM ci-dessus. Vous pouvez probablement aussi créer une stratégie en ligne si vous n'utilisez pas cette stratégie pour d'autres rôles ultérieurs, mais j'aime bien l'idée de disposer d'une stratégie définie que je pourrai consulter ultérieurement si besoin est.

4) Configurez un groupe de paramètres que votre cluster/instances utilisera pour définir la valeur aws_default_s3_role sur l'ARN du rôle à partir de # 3 ci-dessus.

5) Configurez le cluster Aurora en accédant aux clusters, en sélectionnant votre cluster, en sélectionnant Gérer les rôles IAM et en définissant le rôle IAM pour votre cluster DB.

Au moins pour moi, ces étapes ont fonctionné comme un charme.

J'espère que cela pourra aider!

24
Dan Carrington

Après toutes les suggestions ci-dessus, pour la dernière étape, j'ai dû ajouter un point de terminaison VPC à S3. Après cela, tout a commencé à fonctionner.

3
utdrmac

J'avais connu plusieurs fois cette erreur pourrait se produire.

  1. L'erreur a été générée après un certain temps d'utilisation de 'LOAD' sql (environ 220 secondes), ce qui constitue un délai d'attente suspect. Enfin, j’ai trouvé que le groupe de sous-réseaux de mon RDS n’avait qu’un sortant, à l’exception de celui vers S3. En ajoutant la règle sortante peut résoudre ce problème.

  2. L'erreur a été renvoyée immédiatement (0.2s). Je chargeais avec succès les données de S3 auparavant, mais soudainement avec une modification de l'URL S3, cette erreur s'est produite à nouveau. J'utilisais une mauvaise URL S3. Parce que je voulais utiliser le préfixe S3 au lieu du fichier. Vérifiez la syntaxe 'Load' pour que votre SQL soit correct.

0
Willie Z

J'ai contacté l'équipe Amazon Aurora et celle-ci a confirmé l'existence de cas Edge avec certains serveurs présentant ce problème. Ils déploient actuellement un correctif pour résoudre le problème, mais dans l’intervalle, ils l’appliquent manuellement à mon cluster.

0
aarbor

Vous devez associer la stratégie AmazonS3ReadOnlyAccess ou AmazonS3FullAccess au rôle que vous avez configuré dans IAM. Cette étape n'était pas incluse dans le guide d'installation. 

Accédez à IAM -> Rôles dans la console AWS, sélectionnez le rôle que vous utilisez, cliquez sur "joindre la stratégie", faites défiler les stratégies S3 et choisissez-en une.

0
Ray

Pour moi, il me manquait l'étape d'ajouter le rôle RDS créé à mon compartiment S3. Une fois que je l'ai ajouté, cela a fonctionné instantanément.

0
Rajesh Goel