AWS S3: il bucket che si sta tentando di accedere deve essere indirizzato utilizzando l’endpoint specificato

Sto cercando di eliminare i file di immagine caricati con la Ruby Gem di AWS-SDK-Core.

Ho il codice seguente:

require 'aws-sdk-core' def pull_picture(picture) Aws.config = { :access_key_id => ENV["AWS_ACCESS_KEY_ID"], :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"], :region => 'us-west-2' } s3 = Aws::S3::Client.new test = s3.get_object( :bucket => ENV["AWS_S3_BUCKET"], :key => picture.image_url.split('/')[-2], ) end 

Tuttavia, sto ottenendo il seguente errore:

Il bucket che si sta tentando di accedere deve essere indirizzato utilizzando l’endpoint specificato. Si prega di inviare tutte le richieste future a questo endpoint.

So che la regione è corretta perché se la cambio a us-east-1 , viene visualizzato il seguente errore:

La chiave specificata non esiste.

Cosa sto facendo di sbagliato qui?

Sembra probabile che questo secchio sia stato creato in una regione diversa, IE not us-west-2. È l’unica volta che ho visto “Il bucket che stai tentando di accedere deve essere indirizzato utilizzando l’endpoint specificato. Invia tutte le richieste future a questo endpoint.”

Lo standard americano è US us-east-1

Controlla la posizione del tuo secchio nella console, quindi usa questo come riferimento a quale endpoint usare: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Stavo affrontando un errore simile perché il bucket si trovava nella regione us-west-2 e il pattern URL aveva bucketname nel percorso. Una volta, ho cambiato il pattern URL per avere bucketname come sottodominio URL per prendere i file e ha funzionato.

Ad esempio, l’URL precedente era

 https://s3.amazonaws.com/bucketname/filePath/filename 

Poi l’ho sostituito come

 https://bucketname.s3.amazonaws.com/filePath/filename 

Per molti pacchetti di API S3 (recentemente ho avuto questo problema con il pacchetto npm s3 ) è ansible incorrere in problemi in cui si presume che la regione sia lo standard americano, e la ricerca per nome richiede la definizione esplicita dell’area se si sceglie di ospitare un bucket fuori da quella regione.

Per ppl che sta ancora affrontando questo problema, prova ad aggiungere s3_host come segue all’hash di configurazione

  :storage => :s3, :s3_credentials => {:access_key_id => access key, :secret_access_key => secret access key}, :bucket => bucket name here, :s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}. 

Questo ha risolto il problema per me.

Durante la creazione di S3Client è ansible specificare la mapping degli endpoint in una particolare regione. Se il valore predefinito di s3.amazonaws.com verrà creato bucket in us-east-1 ovvero North Virginia.

Maggiori dettagli sugli endpoint S3 e sulle regioni nei documenti AWS: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

Pertanto, accertarsi sempre dell’endpoint / regione durante la creazione di S3Client e accedere alle risorse S3 utilizzando lo stesso client nella stessa regione.

Se il bucket viene creato dalla console di AWS S3, quindi controllare la regione dalla console per quel bucket, quindi creare un client S3 in quella regione utilizzando i dettagli dell’endpoint menzionati nel collegamento precedente.

Ho ricevuto questo errore quando ho provato ad accedere a un bucket che non esisteva.

Ho erroneamente scambiato una variabile di percorso con la variabile del nome del bucket e quindi il nome del bucket aveva il valore del percorso del file. Quindi forse ricontrollare se il nome del bucket impostato sulla richiesta è corretto.