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?


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


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


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

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.


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.


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!


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.


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.


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 )


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.


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'


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.


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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.