AWS S3: Der Bucket, auf den Sie zugreifen möchten, muss mit dem angegebenen Endpunkt adressiert werden

184

Ich versuche, hochgeladene Bilddateien mit dem AWS-SDK-Core Ruby Gem zu löschen.

Ich habe folgenden Code:

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

Ich erhalte jedoch den folgenden Fehler:

Der Bucket, auf den Sie zugreifen möchten, muss mit dem angegebenen Endpunkt adressiert werden. Bitte senden Sie alle zukünftigen Anfragen an diesen Endpunkt.

Ich weiß, dass die Region korrekt ist, denn wenn ich sie ändere, us-east-1wird der folgende Fehler angezeigt:

Der angegebene Schlüssel existiert nicht.

Was mache ich hier falsch?

user3575214
quelle
6
Dies ist mir passiert, als ich versehentlich den falschen Bereich für den angegebenen Bucket angegeben habe.
Der Muffin-Mann
Dies kann daran liegen, dass ein falscher AWS-Regionsname verwendet wird.
Dattatray

Antworten:

310

Es ist wahrscheinlich, dass dieser Bucket in einer anderen Region erstellt wurde, dh nicht in us-west-2. Dies ist das einzige Mal, dass ich gesehen habe: "Der Bucket, auf den Sie zugreifen möchten, muss mit dem angegebenen Endpunkt adressiert werden. Bitte senden Sie alle zukünftigen Anforderungen an diesen Endpunkt."

US Standard ist us-east-1

Marcus Walser
quelle
30
Daran hätte ich nie gedacht, aber es hat bei mir funktioniert! Im AWS SDK scheint die Region "US Standard" AWSRegionUSEast1 zu sein.
Nerrolken
War auf der Suche nach einer Antwort, wie man die Region einstellt. Vielen Dank!
Sylar
6
Wenn Sie den Ruby-Client verwenden, stellen Sie ENV["AWS_REGION"]den richtigen Wert (z. B. "us-east-1") für den Bucket ein, bevor Sie den Client initialisieren
Abe Voelker
Was ist, wenn Sie mehr als einen Bucket verwenden müssen (z. B. Entwickler / Staging / Produktion usw.)?
Yekta
1
Ich hatte das gleiche Problem in Java. Ihre Lösung hat geholfen. Sie verwenden seltsame Namen in S3. Endpunkt für Region, Schlüssel für Objektnamen im Repository ...
Gangnus
21

Überprüfen Sie Ihren Bucket-Speicherort in der Konsole und verwenden Sie diesen als Referenz für den zu verwendenden Endpunkt: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Jay Q.
quelle
2
Können Sie erklären, wie? Durch region: 'us-west-1',was ersetzen ?
Aamir Afridi
@AamirAfridi es hängt davon ab, welches SDK Sie verwenden. Ich verwende das iOS SDK und im Anbieter für Anmeldeinformationen gibt es einen Parameter, mit dem Sie die Region festlegen können. Ich habe das auf die Region eingestellt, die ich verwenden möchte.
Jay Q.
Ich hatte gerade ein ähnliches Beispiel, in dem ich den Bereich eines Buckets optimiert habe, aber ich habe mich verpflichtet, den Domainnamen zu aktualisieren. Das Update bestand darin, den vorherigen Domänennamen durch den neuen zu ersetzen, wie in der Endpunktreferenz in der S3-Konsole für diesen Bucket angegeben. Beispiel: Ich ersetzt https://s3.amazonaws.com/mybucket/myasset.jpgmit https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgdiesen Fehler zu beheben.
Fabien Haddadi
19

Ich hatte einen ähnlichen Fehler, weil sich der Bucket in der Region befand us-west-2und das URL-Muster den Bucket-Namen im Pfad hatte. Einmal habe ich das URL-Muster so geändert, dass Bucketname als URL-Subdomain zum Abrufen der Dateien verwendet wurde, und es hat funktioniert.

Zum Beispiel war vorherige URL

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

Dann habe ich es als ersetzt

https://bucketname.s3.amazonaws.com/filePath/filename
Prasun
quelle
Das Setzen des vollqualifizierten Namens hat bei mir funktioniert, z. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json für den Eimer, der sich in der Verfügbarkeitszone von Singapur befindet
Nilesh Gule
1

Bei vielen S3-API-Paketen (ich hatte kürzlich dieses Problem mit dem npm s3-Paket ) können Probleme auftreten, bei denen angenommen wird, dass die Region US-Standard ist. Bei der Suche nach Namen müssen Sie die Region explizit definieren, wenn Sie einen Bucket hosten möchten außerhalb dieser Region.

Duncan
quelle
1

Während der Erstellung von S3Client können Sie die Endpunktzuordnung zu einer bestimmten Region angeben. Wenn der Standardwert festgelegt s3.amazonaws.comist, wird ein Bucket erstellt, in us-east-1dem sich North Virginia befindet.

Weitere Informationen zu S3-Endpunkten und -Regionen in AWS-Dokumenten: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

Stellen Sie daher beim Erstellen des S3Client immer sicher, dass der Endpunkt / die Region vorhanden ist, und greifen Sie mit demselben Client in derselben Region auf S3-Ressourcen zu.

Wenn der Bucket über die AWS S3-Konsole erstellt wurde, überprüfen Sie die Region in der Konsole auf diesen Bucket und erstellen Sie einen S3-Client in dieser Region unter Verwendung der im obigen Link genannten Endpunktdetails.

Rathan
quelle
1

Keine der oben genannten Antworten hat mein Problem behoben.

Die obigen Antworten sind wahrscheinlich eher die Ursache Ihres Problems, aber mein Problem war, dass ich den falschen Bucket-Namen verwendet habe. Es war ein gültiger Eimername, es war einfach nicht mein Eimer.

Der Eimer, auf den ich zeigte, befand sich in einer anderen Region als meine Lambda-Funktion. Überprüfen Sie also Ihren Eimernamen!

Peter Grainger
quelle
0

Versuchen Sie für Personen, die immer noch mit diesem Problem konfrontiert sind, s3_host wie folgt zum Konfigurations-Hash hinzuzufügen

   :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}.

Dies hat das Problem für mich behoben.

RamanSM
quelle
0

Ich habe diesen Fehler erhalten, als ich versucht habe, auf einen nicht vorhandenen Bucket zuzugreifen.

Ich habe fälschlicherweise eine Pfadvariable durch die Bucket-Name-Variable ersetzt, sodass der Bucket-Name den Dateipfadwert hatte. Überprüfen Sie also möglicherweise noch einmal, ob der Bucket-Name, den Sie in Ihrer Anfrage festgelegt haben, korrekt ist.

Sven Möhring
quelle
0

Ich hatte den gleichen Fehler. Dies trat auf, wenn der s3-Client mit einem anderen Endpunkt als dem erstellt wurde, der beim Erstellen des Buckets eingerichtet wurde.

  • FEHLERCODE - Der Bucket wurde mit EAST Region eingerichtet.

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

  • FIX

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

Tushar
quelle
0

Ich hatte das gleiche Problem. Nach vielen Kämpfen stellte ich fest, dass das eigentliche Problem bei den Abhängigkeiten von com.amazonaws liegt. Nach dem Hinzufügen von Abhängigkeiten ist dieser Fehler verschwunden.

Shridhar Acharya
quelle
0

Ich lebe in Großbritannien und habe immer wieder versucht, die Region 'us-west-2' zu erreichen. Also umgeleitet zu 'eu-west-2'. Die richtige Region für S3 ist 'eu-west-2'

Dansek
quelle
0

Dies trat bei mir auf, als ich eine Quell-IP-Einschränkung für die Richtlinie hatte, die vom Benutzer (Zugriffsschlüssel / geheimer Schlüssel) zum Erstellen des s3-Buckets verwendet wurde. Meine IP war korrekt - aber aus irgendeinem Grund würde es nicht funktionieren und gab diesen Fehler.

CamHart
quelle
0

Nach langer Suche fand ich eine funktionierende Lösung. Das Problem war wegen des Falschen region-code.

Unten finden Sie eine Liste der Regionalcodes. Stellen Sie den entsprechenden Code ein, und Ihr Problem wird behoben.

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

Sie finden Ihren Regionalcode durch Klicken auf den Bucket-Namen in der rechten Ecke.

Geben Sie hier die Bildbeschreibung ein

Für Details zum Modus klicken Sie auf

Vikram Kodag
quelle
0

Dieses Problem ist bei der Verwendung eines anderen AWS-Profils aufgetreten. Ich habe den Fehler gesehen, als ich ein Konto mit Administratorrechten verwendet habe, sodass die Möglichkeit von Berechtigungsproblemen unwahrscheinlich war.

Es ist wirklich ein kleiner Ärger von mir, dass AWS so anfällig dafür ist, Fehlermeldungen auszugeben, die aus Anwendersicht so wenig mit den erforderlichen Aktionen korrelieren.

Kokociel
quelle