web-dev-qa-db-fra.com

AWS S3: le compartiment auquel vous tentez d'accéder doit être adressé à l'aide du noeud final spécifié

J'essaie de supprimer les fichiers d'image téléchargés avec AWS-SDK-Core Ruby Gem.

J'ai le code suivant:

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

Cependant, j'obtiens l'erreur suivante:

Le compartiment auquel vous tentez d'accéder doit être adressé à l'aide du noeud final spécifié. Veuillez envoyer toutes les futures demandes à ce noeud final.

Je sais que la région est correcte car si je la change en us-east-1, l'erreur suivante apparaît:

La clé spécifiée n'existe pas.

Qu'est-ce que je fais mal ici?

140
user3575214

Il semble probable que ce seau a été créé dans une autre région, IE, pas us-west-2. C'est la seule fois où j'ai vu "Le compartiment auquel vous tentez d'accéder doit être adressé à l'aide du terminal spécifié. Veuillez envoyer toutes les demandes futures à ce terminal."

US Standard est us-east-1

248
Marcus Walser

J'étais confronté à une erreur similaire car le compartiment était dans la région us-west-2 et le modèle d'URL avait un nom de compartiment dans le chemin. Une fois, j'ai changé le modèle d'URL pour que bucketname soit le sous-domaine de l'URL permettant de récupérer les fichiers.

Par exemple, l'URL précédente était

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

Puis je l'ai remplacé comme

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

Pour de nombreux packages d'API S3 (j'ai récemment eu ce problème avec le package npm s3 ), vous pouvez rencontrer des problèmes dans lesquels la région est supposée être la norme US. accueillir un seau en dehors de cette région.

0
Duncan

Pour les personnes qui sont toujours confrontées à ce problème, essayez d’ajouter s3_Host au hash de configuration comme suit:

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

Cela a résolu le problème pour moi.

0
RamanSM

J'ai eu cette erreur quand j'ai essayé d'accéder à un seau qui n'existait pas.

J'ai commuté par erreur une variable de chemin d'accès avec la variable de nom de compartiment et le nom de compartiment avait donc la valeur de chemin d'accès au fichier. Alors, vérifiez peut-être si le nom du compartiment que vous avez défini dans votre demande est correct.

0
Sven Möhring

J’ai fait face au même problème. Après beaucoup de difficultés, j’ai trouvé que le problème était les dépendances com.amazonaws.Après l’ajout des dépendances, cette erreur a disparu.

0
Shridhar Acharya

Aucune des réponses ci-dessus n'a résolu mon problème.

Les réponses ci-dessus sont probablement la cause de votre problème, mais mon problème était que j'utilisais le mauvais nom de compartiment. C'était un nom de seau valide, ce n'était tout simplement pas mon seau.

Le compartiment que je désignais se trouvait dans une région différente de celle de ma fonction lambda, alors vérifiez le nom de votre compartiment!

0
Peter Grainger

Lors de la création de S3Client, vous pouvez spécifier le mappage de point final vers une région particulière. Si la valeur par défaut est s3.amazonaws.com, le compartiment sera créé dans us-east-1 qui correspond à la Virginie du Nord. 

Plus de détails sur les points de terminaison S3 et les régions dans AWS docs: http://docs.aws.Amazon.com/general/latest/gr/rande.html#s3_region .

Par conséquent, assurez-vous toujours du point de terminaison/de la région lorsque vous créez le S3Client et accédez aux ressources S3 en utilisant le même client dans la même région.

Si le compartiment est créé à partir de la console AWS S3, vérifiez la région de la console pour ce compartiment, puis créez un client S3 dans cette région en utilisant les détails du noeud final mentionnés dans le lien ci-dessus. 

0
Rathan

J'ai eu la même erreur. Cela se produisait lorsque le client s3 avait été créé avec un point de terminaison différent de celui qui avait été configuré lors de la création du compartiment. 

  • ERROR CODE - Le compartiment a été configuré avec la région EST.

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

  • RÉPARER 

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

0
Tushar