2017-06-14 1 views
1

J'essaie de télécharger un fichier S3 spécifique d'un serveur en utilisant Python Boto et je reçois les messages d'erreur "403 Interdit" et "Accès refusé". Il indique que l'erreur se produit à la ligne 24 (commande get_contents). Je l'ai essayé avec et sans "aws s3 cp" au début du chemin du fichier source, a reçu le même message d'erreur à la fois. Mon code est ci-dessous, tout conseil serait utile.Python S3 Code Amazon avec 'accès refusé' Erreur

# Code to append csv: 
import csv 
import boto 
from boto.s3.key import Key 

keyId ="key" 
sKeyId="secretkey" 
srcFileName="aws s3 cp s3://...." 
destFileName="C:\\Users...." 
bucketName="bucket00001" 
conn = boto.connect_s3(keyId,sKeyId) 
bucket = conn.get_bucket(bucketName, validate = False) 

#Get the Key object of the given key, in the bucket 
k = Key(bucket, srcFileName) 
#Get the contents of the key into a file 
k.get_contents_to_filename(destFileName) 

Répondre

0

AWS est très vague avec les erreurs qu'il génère. C'est intentionnel, mais cela n'aide certainement pas au débogage. Vous recevez une erreur Access Denied parce que le nom de fichier source que vous utilisez n'est pas le chemin d'accès correct pour le fichier.

aws s3 cp 

Ceci est la commande CLI pour copier un ou plusieurs fichiers à partir d'une source vers une destination (soit étant un seau à s3). Cela ne devrait pas être en dehors du nom du fichier source.

s3://... 

Ce préfixe est ajouté à votre nom de seau qui indique que le chemin fait référence à un objet s3, cependant, ce n'est pas nécessaire dans votre nom de chemin du fichier source lors de l'utilisation boto3.

Pour télécharger un fichier s3 à l'aide boto3, procédez comme suit:

import boto3 

BUCKET_NAME = 'my-bucket' # does not include s3:// 
KEY = 'image.jpg' # the file you want to download 

s3 = boto3.resource('s3') 
s3.Bucket(BUCKET_NAME).download_file(KEY, 'image.jpg') 

Documentation pour cette commande se trouve ici: https://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html

En général, boto3 (et tout autre SAPN SDK) sont simplement encapsule autour des demandes AWS api. Vous pouvez également utiliser l'aws cli comme je l'ai mentionné plus tôt pour télécharger un fichier de s3. Cette commande serait:

aws s3 cp s3://my-bucket/my-file.jpg C:\location\my-file.jpg 
+0

Merci! J'ai tout changé à ce que vous avez dit, maintenant je reçois une erreur qui dit "botocore.exceptions.DataNotFoundError". Cela signifie-t-il qu'il n'a pas accès au dossier? – deathrow821

+0

@ deathrow821 Je n'ai jamais rencontré cette erreur avant, mais une recherche rapide me conduit à croire que ce pourrait être une erreur avec votre version de boto3 https://github.com/boto/boto3/issues/849 – PrestonM

0
srcFileName="aws s3 cp s3://...." 

Ce doit être une clé comme somefolder/somekey ou somekey sous forme de chaîne. Vous fournissez un path ou un command.