Ich verwende Boto, um zu versuchen, einen Bucket in Amazon S3 zu erhalten, aber es gibt eine Bad Request zurück, wenn ich get_bucket () für einige Buckets verwende. Ich beginne mich zu fragen, ob das ein Bug mit Boto ist, da ich den Bucket mit get_all_buckets () bekommen kann.
%Vor%Dies scheint ein Problem zu sein, selbst wenn ich mich mit dem gleichen Benutzerkonto anmelde, in dem ich die Zugriffsberechtigungen verwende, und es in der AWS-Konsole erstellen.
Irgendeine Idee, warum das passieren könnte?
Stellt sich heraus, das Problem ist wegen der Region (ich war Frankfurt). Zwei Möglichkeiten, damit umzugehen:
Geben Sie Frankfurt auf (@andpei weist darauf hin, dass Probleme damit aktuell gemeldet werden ) und Erstelle den Bucket in einer anderen Region neu.
Geben Sie die Region beim Verbinden mit dem Parameter 'host' an (danke @Siddarth):
%Vor%Sie können den entsprechenden Regionshost hier finden.
Eine allgemeine und einfache Lösung, die keine Änderung der Region oder Einstellung eines bestimmten Hosts beinhaltet, finden Sie unter Ссылка . Nach einiger Bearbeitung:
Die Frankfurter AWS-Region (anscheinend auch Irland und CN) unterstützt nur der V4-Signaturalgorithmus. (...)
In der Boto-Dokumentation können Sie entweder
[s3] use-sigv4 = True
hinzufügen zu Ihrer~/.boto
-Datei oder legen Sie dieos.environ
-Liste zum Einschließen fest S3_USE_SIG_V4:os.environ['S3_USE_SIGV4'] = 'True'
.
Fügen Sie einen s3-Bucket-Host einer Boto-Verbindung hinzu
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, host=AWS_HOST)
Ich musste eine Kombination aus EOL und Seddonyms Antworten verwenden - zuerst habe ich angegeben, dass ich Sigv4 mit folgendem verwenden möchte:
%Vor%Dann musste ich beim Verbinden mit dem Bucket den Host angeben, was etwas albern schien, aber hier geht es:
%Vor%Beachten Sie, dass dies nur für Frankfurt
gilt