2017-06-14 7 views
1

Ich versuche, eine bestimmte S3-Datei von einem Server mit Python Boto zu downloaden und bekomme "403 verboten" und "Zugriff verweigert" Fehlermeldungen. Es besagt, dass der Fehler in Zeile 24 auftritt (Befehl get_contents). Ich habe es mit und ohne die "aws s3 cp" am Anfang des Quelldateipfads probiert, habe die gleiche Fehlermeldung beide Male erhalten. Mein Code ist unten, jeder Rat wäre hilfreich. Python S3 Amazon Code mit 'Zugriff verweigert' Fehler

# 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) 

Antwort

0

AWS ist sehr vage mit den Fehlern, die es ausgibt. Dies ist beabsichtigt, aber es hilft definitiv nicht beim Debuggen. Sie erhalten einen Zugriff verweigert Fehler, da der Quelldateiname, den Sie verwenden, nicht der richtige Pfad für die Datei ist.

aws s3 cp 

Dies ist der CLI-Befehl einer oder mehr Dateien von einer Quelle zu einem Ziel zu kopieren (entweder mit einer s3 bucket wird). Dies sollte nicht Teil des Quelldateinamens sein.

s3://... 

Dieser Präfix zu dem Eimer Namen angehängt ist, die zeigt, dass der Pfad zu einem S3-Objekt bezieht, ist dies jedoch nicht notwendig in dem Quellnamen Dateipfad, wenn boto3 verwenden.

Um eine s3-Datei mit boto3 herunterladen, führen Sie die folgenden Schritte aus:

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') 

Dokumentation für diesen Befehl finden Sie hier: https://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html

Im Allgemeinen boto3 (und andere AWS SDK) sind einfach Wrappers um AWS API-Anfragen. Sie können auch den aws cli wie ich bereits erwähnt verwenden, um eine Datei von s3 herunterzuladen. Dieser Befehl wäre:

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

Vielen Dank! Ich habe alles auf das geändert, was Sie gesagt haben, jetzt bekomme ich einen Fehler, der "botocore.exceptions.DataNotFoundError" sagt. Bedeutet das, dass es keinen Zugriff auf den Ordner erhält? – deathrow821

+0

@ deathrow821 Ich habe diesen Fehler nie zuvor gesehen, aber eine schnelle Suche führt mich zu der Annahme, dass es ein Fehler mit Ihrer Version von boto3 https://github.com/boto/boto3/issues/849 sein könnte – PrestonM

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

Dies hat ein Schlüssel wie somefolder/somekey oder somekey als String sein.

Sie stellen eine path oder command zur Verfügung.

Verwandte Themen