Ho un problema con l'utilizzo di Python-Boto SDK per i bucket S3 per la regione Frankfurt. Secondo Amazon link questa regione supporterà solo V4. Questo document spiega come aggiungere il supporto V4 per Boto SDK. Ho aggiunto una nuova sezione:Utilizzo di boto per i bucket AWS S3 per Signature V4
if not boto.config.get('s3', 'use-sigv4'):
boto.config.add_section('s3')
boto.config.set('s3', 'use-sigv4', 'True')
e nuova connessione poi ho creato e ottenuto tutti i secchi:
connection = S3Connection(accesskey, secretkey, host=S3Connection.DefaultHost)
buckets = connection.get_all_buckets()
funziona benissimo, ma poi ho trovato a tutti i tasti per il mio secchio:
for bucket in buckets:
bucket.get_all_keys()
ed ho ottenuto il seguente:
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>
Perché si è verificato? Dopo che ho collegato alla regione e ha ottenuto tutti i dati necessari:
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()
Come posso risolvere il problema in modo corretto?
Cosa succede se si apportano effettivamente le modifiche nel file di configurazione di boto anziché cercare di farlo a livello di programmazione? – garnaat
Sì, l'ho provato prima, ma ho ottenuto lo stesso risultato. Che differenza dovrebbe avere il tuo approccio? – Oleg
Probabilmente nessuno, ma si modifica solo il valore della configurazione in memoria nel proprio ambiente. Se un'altra configurazione è stata creata da qualche altra parte, non otterrebbe gli aggiornamenti perché leggerà la configurazione direttamente dal file di configurazione. Mi chiedevo solo se questo avrebbe fatto la differenza. – garnaat