2017-07-24 3 views
0

J'utilise la bibliothèque odo pour transférer un pandas dataframe à S3. Cependant, je reçois l'erreur suivante:ODO ne peut pas accéder à S3 avec S3ResponseError: 403 Interdit

import pandas as pd 
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"]) 
odo(df,'s3://path_to_s3_folder') 
S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Anonymous access is forbidden for this operation</Message><RequestId>F5958774D56AD29E</RequestId><HostId>zOH8JOxpSgB5Scgc/YrtHO1+e9lXoKAF89IhRSeAiSoGHAJxyjXKBVFIYETeO4gSLZOUgXmwKLM=</HostId></Error> 

Maintenant, j'ai la configuration des informations d'identification AWS correctement que je peux voir dans mon dossier ~/.aws/credentials

cat credentials 
[default] 
aws_access_key_id = XXXXX 
aws_secret_access_key = XXXXXXXXXX 

Aws cli fonctionne correctement pour moi et je peux courir aws ls et cp commandes correctement (je suppose que cela signifie que j'ai les autorisations requises).

aws s3 ls s3://path_to_s3 

également boto3 est en mesure d'accéder à des ressources s3 et ne donne pas une erreur.

import boto3 
s3 = boto3.resource('s3') 
for bucket in s3.buckets.all(): 
    print(bucket.name) 

Qu'est-ce qui pourrait être faux/manquant dans la configuration?

+0

Il semble ODO parler seulement de Boto, non boto3, installez boto modules et essayez à nouveau https://github.com/blaze/odo – mootmoot

+0

@mootmoot Oui cela a fonctionné. Le problème était en cours boto et boto3 obtient des informations d'identification. –

Répondre

1

Veuillez installer boto. Après avoir fait une vérification rapide sur pandas odo source, le code utilise uniquement le module boto, il ne supporte pas boto3.

0

Comme indiqué par @mootmoot, odo utilise boto et pas boto3.

boto3 peut obtenir aws informations d'identification de ~/.aws/credentials comme indiqué here. Toutefois, pour boto vous devez variable d'environnement d'installation comme indiqué here

Il suffit d'ajouter,

$ export AWS_ACCESS_KEY_ID=XXXXX 
$ export AWS_SECRET_ACCESS_KEY=XXXXXXXXXX