Mam problem z używaniem Python-Boto SDK dla S3 Buckets dla regionu Frankfurt. Według Amazon link region ten obsługuje tylko V4. W tym dokumencie wyjaśnia się, jak dodać obsługę V4 do Boto SDK. Dodałem nowy dział:Używanie boto do AWS S3 Wiadra do Signature V4
if not boto.config.get('s3', 'use-sigv4'):
boto.config.add_section('s3')
boto.config.set('s3', 'use-sigv4', 'True')
a potem stworzyły nowe połączenie i dostał wszystkie chwytaki:
connection = S3Connection(accesskey, secretkey, host=S3Connection.DefaultHost)
buckets = connection.get_all_buckets()
to działa dobrze, ale potem starałem się uzyskać wszystkie klucze do mojego wiadra:
for bucket in buckets:
bucket.get_all_keys()
i mam następujące:
S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-central-1'</Message><Region>eu-central-1</Region>
Dlaczego to się stało? Potem podłączony do regionu i mam wszystkie potrzebne dane:
region_con = boto.s3.connect_to_region('eu-central-1', aws_access_key_id=accesskey, aws_secret_access_key=secretkey)
bucket = region_con.get_bucket(bucket.name)
bucket.get_all_keys()
Jak mogę naprawić to poprawnie?
Co stanie się, jeśli faktycznie dokonasz zmiany w pliku konfiguracyjnym boto zamiast próbować zrobić to programowo? – garnaat
Tak, próbowałem już wcześniej, ale otrzymałem ten sam rezultat. Jaką różnicę powinno przyjąć Twoje podejście? – Oleg
Prawdopodobnie tylko zmieniasz wartość konfiguracji w pamięci w swoim środowisku. Jeśli inna konfiguracja była tworzona gdzie indziej, to nie otrzymywałaby aktualizacji, ponieważ odczytałaby config bezpośrednio z pliku konfiguracyjnego. Zastanawiałem się, czy to by coś zmieniło. – garnaat