AWS S3: le compartiment auquel vous essayez d'accéder doit être adressé à l'aide du point de terminaison spécifié


185

J'essaie de supprimer les fichiers image téléchargés avec l'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 essayez d'accéder doit être adressé à l'aide du point de terminaison spécifié. Veuillez envoyer toutes les demandes futures à ce point de terminaison.

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 de mal ici?


6
Cela m'est arrivé lorsque j'ai accidentellement spécifié la mauvaise région pour le compartiment spécifié.
The Muffin Man

Cela peut être dû à un nom de région AWS incorrect.
Dattatray

Réponses:


311

Il semble probable que ce bucket ait été créé dans une région différente, c'est-à-dire pas us-west-2. C'est la seule fois que j'ai vu "Le compartiment auquel vous tentez d'accéder doit être adressé à l'aide du point de terminaison spécifié. Veuillez envoyer toutes les demandes futures à ce point de terminaison."

La norme américaine est us-east-1


30
Je n'aurais jamais pensé à cela, mais cela a fonctionné pour moi! Dans AWS SDK, la région "US Standard" semble être AWSRegionUSEast1.
Nerrolken

Cherchait une réponse sur la façon de définir la région. Merci!
Sylar

6
Si vous utilisez le client Ruby, définissez ENV["AWS_REGION"]la valeur correcte (par exemple "us-east-1") pour le compartiment avant d'initialiser le client
Abe Voelker

Que faire si vous devez utiliser plus d'un compartiment (par exemple, dev / staging / production, etc.)?
yekta

1
J'ai eu le même problème en Java. Votre solution a aidé. Ils utilisent des noms étranges dans S3. Endpoint for region, key for object name in the repository ...
Gangnus

21

Vérifiez l'emplacement de votre bucket dans la console, puis utilisez-le comme référence au point de terminaison à utiliser: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region


2
Pouvez-vous expliquer comment? Remplacer region: 'us-west-1',par quoi?
Aamir Afridi

@AamirAfridi cela dépend du SDK que vous utilisez. J'utilise le SDK iOS et dans le fournisseur d'informations d'identification, il existe un paramètre dans lequel vous pouvez définir la région. Je l'ai défini sur la région que j'ai l'intention d'utiliser.
Jay Q.

Je viens d'avoir un exemple similaire, où j'ai optimisé la région d'un seau, mais je me suis engagé à mettre à jour le nom de domaine. Le correctif consistait à remplacer le nom de domaine précédent par le nouveau, comme indiqué dans la référence de point de terminaison dans la console S3 pour ce compartiment. Exemple: j'ai remplacé https://s3.amazonaws.com/mybucket/myasset.jpgpar https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgpour corriger cette erreur.
Fabien Haddadi

19

Je faisais face à une erreur similaire car le seau était dans la région us-west-2et le modèle d'URL avait le nom du seau dans le chemin. Une fois, j'ai changé le modèle d'URL pour avoir le nom de bucket 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

Mettre le nom complet a fonctionné pour moi par exemple. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json pour le seau qui se trouve dans la zone de disponibilité de Singapour
Nilesh Gule

1

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 où la région est supposée être la norme américaine, 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.


1

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

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

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


1

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 seau que je désignais était dans une région différente de celle de ma fonction lambda, alors vérifiez le nom de votre seau!


1

J'ai rencontré ce problème lors de l'utilisation d'un profil AWS différent. J'ai vu l'erreur lorsque j'utilisais un compte avec des autorisations d'administrateur, donc la possibilité de problèmes d'autorisations semblait peu probable.

C'est vraiment ma bête noire qu'AWS soit si encline à émettre des messages d'erreur qui ont si peu de corrélation avec les actions requises, du point de vue de l'utilisateur.


0

Pour les personnes qui sont toujours confrontées à ce problème, essayez d'ajouter s3_host comme suit au hachage 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.


0

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

J'ai changé par erreur une variable de chemin avec la variable de nom de compartiment et donc le nom de compartiment avait la valeur de chemin de fichier. Alors peut-être revérifiez si le nom du bucket que vous avez défini sur votre demande est correct.


0

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

  • CODE D'ERREUR - Le compartiment a été configuré avec la région EAST.

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

  • RÉPARER

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


0

J'ai rencontré le même problème.Après beaucoup de difficultés, j'ai trouvé que le vrai problème était lié aux dépendances com.amazonaws.Après avoir ajouté des dépendances, cette erreur a disparu.


0

Je vis au Royaume-Uni, je continuais d'essayer pour la région «us-west-2». Donc redirigé vers «eu-west-2». La région correcte pour S3 est 'eu-west-2'


0

Cela s'est produit pour moi lorsque j'avais une contrainte IP source sur la politique utilisée par l'utilisateur (clé d'accès / clé secrète) pour créer le compartiment s3. Mon adresse IP était exacte - mais pour une raison quelconque, cela ne fonctionnait pas et a donné cette erreur.


0

Après une longue recherche, j'ai trouvé une solution de travail. Le problème était à cause du mal region-code.

ci-dessous se trouve la liste des codes de région, définissez celui qui convient et votre problème sera résolu.

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

Vous pouvez trouver votre code de région en cliquant sur le nom du bucket dans le coin droit.

entrez la description de l'image ici

Pour plus de détails sur le mode, cliquez sur

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.