2014-11-04 15 views
7

durante lo sviluppo ho usato un secchio S3 in irlanda, che ha funzionato bene. Per la produzione voglio utilizzare la nuova posizione "Francoforte" di S3, ma a quanto pare la nuova regione di Francoforte usa il "SigV4" che rompe il mio script python.S3 usando boto e SigV4 - parametro host mancante

Quando si aggiunge il seguente blocco a ~/.boto, ottengo il seguente errore:

~/.boto:

[s3] 
use-sigv4 = True 

Errore:

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. 

Può qualcuno informi come specificare il parametro "host"? Non ho trovato questo parametro in una documentazione aws/boto.

+1

se si desidera utilizzare solo sigv4 per l'UE -centrale (molto brutto): 'os.environ ['S3_USE_SIGV4'] = 'True'' quindi dopo aver finito' del os.environ [' S3_USE_SIGV4 '] 'in modo da non dover fornire un' host 'per codice precedente. –

risposta

8

Here's the docs for your exact error, così come lo exact source code che sta creando il S3Connection (e, a sua volta, il tuo errore).

Nella creazione di S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs), è necessario passare un elemento aggiuntivo host=..., che dovrebbe essere una stringa semplice come 's3.amazonaws.com' o simile per la configurazione.

Soluzione:

È possibile aggiungere questo al tuo kwargs essere passato:

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

o chiamare manualmente come:

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

Grazie, sono riuscito a far funzionare lo script con il tuo esempio. Sai anche se esiste la possibilità di fornire il parametro host nel file di configurazione di boto? – fabs

+0

Dovresti fornire tu stesso il valore dal file boto.cfg. La funzione sembra estrarre un valore predefinito dalla configurazione, ma solo dopo che è già contrassegnato per produrre un errore. Quindi * dovrai * fornirgli l'istanziazione di 'S3Connection'. Ora, ciò può venire dalla configurazione, ma dipende da te farlo. – VooDooNOFX

Problemi correlati