AWS S3: il bucket a cui si sta tentando di accedere deve essere indirizzato utilizzando l'endpoint specificato


185

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

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, visualizzo il seguente errore:

Il bucket a cui si sta tentando di accedere deve essere indirizzato utilizzando l'endpoint specificato. Invia tutte le richieste future a questo endpoint.

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

La chiave specificata non esiste.

Cosa sto facendo di sbagliato qui?


6
Questo mi è successo quando ho accidentalmente specificato la regione sbagliata per il bucket specificato.
The Muffin Man,

Ciò potrebbe essere dovuto all'uso di un nome di regione AWS errato.
Dattatray,

Risposte:


311

Sembra probabile che questo bucket sia stato creato in una regione diversa, IE non us-west-2. È l'unica volta che vedo "Il bucket a cui stai tentando di accedere deve essere indirizzato utilizzando l'endpoint specificato. Invia tutte le richieste future a questo endpoint."

Lo standard americano è us-east-1


30
Non ci avrei mai pensato, ma ha funzionato per me! Nell'SDK AWS, la regione "US Standard" sembra essere AWSRegionUSEast1.
Nerrolken,

Stavo cercando una risposta su come impostare la regione. Grazie!
Sylar,

6
Se si utilizza il client Ruby, impostare ENV["AWS_REGION"]il valore corretto (ad es. "us-east-1") Per il bucket prima di inizializzare il client
Abe Voelker,

Cosa succede se è necessario utilizzare più di un bucket (ad es. Sviluppo / messa in scena / produzione ecc.)?
Ekta,

1
Ho avuto lo stesso problema in Java. La tua soluzione ha aiutato. Usano nomi strani in S3. Endpoint per regione, chiave per il nome dell'oggetto nel repository ...
Gangnus,

21

Controlla la posizione del bucket nella console, quindi utilizzala come riferimento all'endpoint da utilizzare: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region


2
Puoi spiegare come? Sostituisci region: 'us-west-1',con cosa?
Aamir Afridi,

@AamirAfridi dipende da quale SDK stai usando. Sto usando iOS SDK e nel provider di credenziali c'è un parametro in cui è possibile impostare la regione. L'ho impostato sulla regione che intendo utilizzare.
Jay Q.

Ho appena avuto un esempio simile, in cui ho ottimizzato la regione di un bucket, ma ho scelto di aggiornare il nome di dominio. La correzione consisteva nel sostituire il nome di dominio precedente con quello nuovo, come visto nel riferimento dell'endpoint nella console S3 per quel bucket. Esempio: ho sostituito https://s3.amazonaws.com/mybucket/myasset.jpgcon https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgper correggere quell'errore.
Fabien Haddadi,

19

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

Ad esempio, l'URL precedente era

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

Quindi l'ho sostituito come

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

Mettere il nome completo ha funzionato per me ad es. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json per il bucket che si trova nella zona di disponibilità di Singapore
Nilesh Gule,

1

Per molti pacchetti API S3 (di recente ho riscontrato questo problema con il pacchetto npm s3 ) è possibile riscontrare problemi in cui la regione è considerata standard USA e la ricerca per nome richiederà di definire esplicitamente la regione se si sceglie di ospitare un bucket al di fuori di quella regione.


1

Durante la creazione di S3Client è possibile specificare la mappatura dell'endpoint su una particolare area. Se il valore predefinito di s3.amazonaws.combucket verrà creato inus-east-1 North Virginia.

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

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

Se il bucket viene creato dalla console AWS S3, quindi controllare l'area dalla console per quel bucket, quindi creare un client S3 in quella regione utilizzando i dettagli dell'endpoint menzionati nel collegamento sopra.


1

Nessuna delle risposte sopra ha risolto il mio problema.

Le risposte di cui sopra sono probabilmente più probabilmente la causa del tuo problema, ma il mio problema era che stavo usando il nome bucket errato. Era un nome di bucket valido, non era il mio bucket.

Il bucket a cui mi riferivo era in una regione diversa dalla mia funzione lambda, quindi controlla il nome del tuo bucket!


1

Ho riscontrato questo problema durante l'utilizzo di un profilo AWS diverso. Ho visto l'errore quando stavo usando un account con autorizzazioni di amministratore, quindi la possibilità di problemi con le autorizzazioni sembrava improbabile.

È davvero una mia piccola sbirciatina che AWS sia così incline a emettere messaggi di errore che hanno una così piccola correlazione con le azioni richieste, dal punto di vista dell'utente.


0

Per i ppl che stanno 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}.

Ciò ha risolto il problema per me.


0

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

Ho erroneamente cambiato 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 ricontrolla, se il nome del bucket che hai impostato sulla tua richiesta è corretto.


0

Ho avuto lo stesso errore. Si è verificato quando il client s3 è stato creato con un endpoint diverso da quello impostato durante la creazione del bucket.

  • CODICE DI ERRORE - Il bucket è stato impostato con la regione EAST.

s3Client = Nuovo AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)

  • FIX

s3Client = Nuovo AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1 )


0

Ho affrontato lo stesso problema. Dopo molte lotte ho scoperto che il vero problema è con le dipendenze di com.amazonaws. Dopo aver aggiunto dipendenze questo errore è scomparso.


0

Vivo nel Regno Unito e continuavo a provare per la regione "us-west-2". Così reindirizzato a "eu-west-2". La regione corretta per S3 è 'eu-west-2'


0

Ciò si è verificato per me quando ho avuto un vincolo ip sorgente sul criterio utilizzato dall'utente (chiave di accesso / chiave segreta) per creare il bucket s3. Il mio IP era accurato, ma per qualche motivo non funzionava e ha dato questo errore.


0

Dopo una lunga ricerca, ho trovato una soluzione funzionante. Il problema era a causa dell'erroreregion-code .

di seguito è riportato un elenco di codici regionali, imposta quello appropriato e il tuo problema verrà risolto.

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1

È possibile trovare il codice regionale facendo clic sull'angolo destro del nome del bucket.

inserisci qui la descrizione dell'immagine

Per dettagli sulla modalità Fare clic su

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.