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 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, je reçois 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 demandes futures à ce noeud final.

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

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

Que fais-je mal ici?

Il semble probable que ce seau a été créé dans une région différente, c.-à-d. Pas nous-ouest-2. C’est la seule fois que j’ai vu “Le compartiment auquel vous essayez d’accéder doit être adressé à l’aide du noeud final spécifié. Veuillez envoyer toutes les demandes futures à ce noeud final.”

La norme américaine est us-east-1

Vérifiez l’emplacement de votre compartiment dans la console, puis utilisez-le comme référence du noeud final à utiliser: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

J’étais confronté à une erreur similaire car le compartiment était dans la région us-west-2 et le modèle d’URL avait le nom du compartiment dans le chemin. Une fois, j’ai changé le modèle d’URL pour avoir bucketname comme sous-domaine d’URL pour récupérer les fichiers et cela a fonctionné.

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 

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 pour lesquels la région est considérée comme US Standard et la recherche par nom vous obligera à définir explicitement la région si vous choisissez d’héberger un compartiment. en dehors de cette région.

Pour les utilisateurs qui sont toujours confrontés à ce problème, essayez d’append s3_host comme suit au hash de configuration

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

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

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

Donc, assurez-vous toujours du point final / de la région lors de la création du 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 à partir de la console pour ce compartiment, puis créez un client S3 dans cette région à l’aide des détails de noeud final mentionnés dans le lien ci-dessus.

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

J’ai par erreur commuté une variable de chemin avec la variable de nom de compartiment et donc le nom de compartiment avait la valeur de chemin de fichier. Donc, peut-être double-vérifier si le nom du compartiment que vous avez défini sur votre demande est correct.