2014-11-04 21 views
7

przy opracowywaniu użyłem wiadra S3 w Irlandii, które działało dobrze. Do produkcji chcę użyć nowej lokalizacji "S3" we Frankfurcie, ale najwidoczniej nowy region Frankfurcki używa "SigV4", który przerywa mój skrypt Pythona.S3 przy użyciu boto i SigV4 - brak parametru hosta

Dodając następujący blok do ~/.boto, pojawia się następujący błąd:

~/.boto:

[s3] 
use-sigv4 = True 

Błąd:

File "/usr/lib/python2.6/site-packages/boto/__init__.py", line 141, in connect_s3 
return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs) 
File "/usr/lib/python2.6/site-packages/boto/s3/connection.py", line 196, in __init__ 
"When using SigV4, you must specify a 'host' parameter." 
boto.s3.connection.HostRequiredError: BotoClientError: When using SigV4, 
you must specify a 'host' parameter. 

Może ktoś proszę powiedz jak określić parametr "host"? Nie mogłem znaleźć tego parametru w dokumentacji aws/boto.

+1

jeśli chcesz używać tylko sigv4 dla UE -centralny (bardzo brzydki): 'os.environ ['S3_USE_SIGV4'] = 'True'' następnie po zakończeniu' del os.environ [' S3_USE_SIGV4 '] ', więc nie musisz podawać' hosta 'dla starszego kodu. –

Odpowiedz

8

Here's the docs for your exact error, a także exact source code, który tworzy S3Connection (z kolei twój błąd).

Podczas tworzenia S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs) należy przekazać dodatkowy element host=..., który powinien być prostym ciągiem, takim jak 's3.amazonaws.com' lub podobnym elementem konfiguracji.

Rozwiązanie:

Można dodać do swojej kwargs są przekazywane:

kwargs.update({'host': 's3.amazonaws.com'}) 

lub zadzwoń ręcznie jak:

S3Connection(aws_access_key_id, aws_secret_access_key, host='s3.amazonaws.com', **kwargs) 
+0

Dziękuję, udało mi się uzyskać skrypt pracy z twoim przykładem. Czy wiesz również, czy istnieje możliwość podania parametru hosta w pliku konfiguracyjnym boto? – fabs

+0

Trzeba samemu podać wartość z pliku boto.cfg. Wydaje się, że funkcja pobiera domyślną wartość z konfiguracji, ale dopiero po tym, jak została już oflagowana, aby wygenerować błąd. Więc będziesz * mieć *, aby zapewnić to w tworzeniu "S3Connection". Teraz może pochodzić z konfiguracji, ale od Ciebie zależy, czy to zrobisz. – VooDooNOFX

Powiązane problemy