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-1
wird der folgende Fehler angezeigt:
Der angegebene Schlüssel existiert nicht.
Was mache ich hier falsch?
ruby-on-rails
ruby
amazon-web-services
amazon-s3
user3575214
quelle
quelle
Antworten:
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."
quelle
ENV["AWS_REGION"]
den richtigen Wert (z. B."us-east-1"
) für den Bucket ein, bevor Sie den Client initialisierenÜ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
quelle
region: 'us-west-1',
was ersetzen ?https://s3.amazonaws.com/mybucket/myasset.jpg
mithttps://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpg
diesen Fehler zu beheben.Ich hatte einen ähnlichen Fehler, weil sich der Bucket in der Region befand
us-west-2
und 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
Dann habe ich es als ersetzt
quelle
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.
quelle
Während der Erstellung von S3Client können Sie die Endpunktzuordnung zu einer bestimmten Region angeben. Wenn der Standardwert festgelegt
s3.amazonaws.com
ist, wird ein Bucket erstellt, inus-east-1
dem 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.
quelle
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!
quelle
Versuchen Sie für Personen, die immer noch mit diesem Problem konfrontiert sind, s3_host wie folgt zum Konfigurations-Hash hinzuzufügen
Dies hat das Problem für mich behoben.
quelle
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.
quelle
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.
s3Client = Neuer AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
s3Client = Neuer AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1 )
quelle
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.
quelle
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'
quelle
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.
quelle
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.
Sie finden Ihren Regionalcode durch Klicken auf den Bucket-Namen in der rechten Ecke.
Für Details zum Modus klicken Sie auf
quelle
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.
quelle