AWS S3: O bucket que você está tentando acessar deve ser endereçado usando o terminal especificado

185

Estou tentando excluir arquivos de imagem carregados com o AWS-SDK-Core Ruby Gem.

Eu tenho o seguinte código:

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

No entanto, estou recebendo o seguinte erro:

O bucket que você está tentando acessar deve ser endereçado usando o terminal especificado. Envie todas as solicitações futuras para este endpoint.

Sei que a região está correta porque, se eu mudar para us-east-1, o seguinte erro será exibido:

A chave especificada não existe.

O que eu estou fazendo errado aqui?

user3575214
fonte
6
Isso aconteceu comigo quando especifiquei acidentalmente a região errada para o intervalo especificado.
The Muffin Man
Isso pode ser devido ao uso incorreto do nome da região da AWS.
Dattatray 22/02/19

Respostas:

311

Parece provável que este bucket tenha sido criado em uma região diferente, ou seja, não us-west-2. Essa é a única vez que vi "O depósito que você está tentando acessar deve ser endereçado usando o terminal especificado. Envie todas as solicitações futuras para esse terminal".

O padrão dos EUA é us-east-1

Marcus Walser
fonte
30
Nunca teria pensado nisso, mas funcionou para mim! No SDK da AWS, a região "US Standard" parece ser AWSRegionUSEast1.
Nerrolken 31/03
Estava procurando uma resposta sobre como definir a região. Obrigado!
Sylar
6
Se você estiver usando o cliente Ruby, defina ENV["AWS_REGION"]o valor correto (por exemplo "us-east-1") para o bucket antes de inicializar o cliente.
Abe Voelker
E se você precisar usar mais de um bucket (por exemplo, dev / staging / production etc)?
Yekta
1
Eu tive o mesmo problema em Java. Sua solução ajudou. Eles usam nomes estranhos no S3. Endpoint para a região, fundamental para o nome do objeto no repositório ...
Gangnus
21

Verifique a localização do seu balde no console e use-o como referência para qual terminal usar: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Jay Q.
fonte
2
Você pode explicar como? Substitua region: 'us-west-1',por quê?
Aamir Afridi
@AamirAfridi, depende de qual SDK você está usando. Estou usando o SDK do iOS e, no provedor de credenciais, há um parâmetro em que você pode definir a região. Eu defini isso na região que pretendo usar.
Jay Q.
Acabei de ter um exemplo semelhante, onde otimizei a região de um bucket, mas omiti a atualização do nome de domínio. A correção foi substituir o nome de domínio anterior pelo novo, conforme visto na referência do terminal no console S3 para esse bucket. Exemplo: substituí https://s3.amazonaws.com/mybucket/myasset.jpgpor https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgpara corrigir esse erro.
Fabien Haddadi
19

Eu estava enfrentando um erro semelhante porque o bucket estava na região us-west-2e o padrão de URL tinha o nome do bucket no caminho. Uma vez, mudei o padrão da URL para ter bucketname como subdomínio da URL para pegar os arquivos e funcionou.

Por exemplo, o URL anterior era

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

Então eu substituí-lo como

https://bucketname.s3.amazonaws.com/filePath/filename
prasun
fonte
Colocar o nome totalmente qualificado funcionou para mim, por exemplo. s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json para o balde que está em Singapura zona de disponibilidade
Nilesh Gule
1

Para muitos pacotes de API S3 (recentemente tive esse problema, o pacote npm s3 ), você pode encontrar problemas nos quais a região é considerada padrão dos EUA, e a pesquisa por nome exigirá que você defina explicitamente a região se optar por hospedar um bucket fora dessa região.

Duncan
fonte
1

Durante a criação do S3Client, você pode especificar o mapeamento do terminal para uma região específica. Se o padrão é o s3.amazonaws.combucket, será criado o us-east-1norte da Virgínia.

Mais detalhes sobre os pontos de extremidade e regiões do S3 nos documentos da AWS: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

Portanto, sempre verifique o ponto de extremidade / região ao criar o S3Client e acesse os recursos do S3 usando o mesmo cliente na mesma região.

Se o bucket for criado no AWS S3 Console, verifique a região no console para esse bucket e crie um S3 Client nessa região usando os detalhes do terminal mencionados no link acima.

Rathan
fonte
1

Nenhuma das respostas acima resolveu meu problema.

As respostas acima provavelmente são a causa do seu problema, mas meu problema foi que eu estava usando o nome do bloco errado. Era um nome de balde válido, simplesmente não era meu balde.

O balde para o qual estava apontando estava em uma região diferente que minha função lambda, portanto verifique o nome do seu balde!

Peter Grainger
fonte
1

Encontrei esse problema ao usar um perfil diferente da AWS. Vi o erro quando estava usando uma conta com permissões de administrador, portanto, a possibilidade de problemas de permissão parecia improvável.

É realmente uma insatisfação minha que a AWS esteja tão propensa a emitir mensagens de erro que tenham tão pouca correlação com as ações necessárias, da perspectiva do usuário.

kokociel
fonte
0

Para pessoas que ainda enfrentam esse problema, tente adicionar s3_host da seguinte forma ao hash de configuração

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

Isso corrigiu o problema para mim.

RamanSM
fonte
0

Eu recebi esse erro quando tentei acessar um bucket que não existia.

Mudei por engano uma variável de caminho com a variável de nome do bloco e, portanto, o nome do bloco tinha o valor do caminho do arquivo. Portanto, talvez verifique duas vezes se o nome do bloco que você definiu em sua solicitação está correto.

Sven Möhring
fonte
0

Eu tive o mesmo erro. Ocorreu quando o cliente s3 foi criado com um terminal diferente daquele que foi configurado durante a criação do bucket.

  • CÓDIGO DE ERRO - O bucket foi configurado com a região LESTE.

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

  • CONSERTAR

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

Tushar
fonte
0

Depois de muita luta, descobri que o problema real é com as dependências com.amazonaws. Depois de adicionar dependências, esse erro desapareceu.

Shridhar Acharya
fonte
0

Eu moro no Reino Unido e continuei tentando a região 'us-west-2'. Então, redirecionado para 'eu-west-2'. A região correta para S3 é 'eu-oeste-2'

dansek
fonte
0

Isso ocorreu para mim quando tive uma restrição de IP de origem na política que estava sendo usada pelo usuário (chave de acesso / chave secreta) para criar o bucket s3. Meu IP estava correto - mas, por algum motivo, não funcionou e deu esse erro.

CamHart
fonte
0

Após uma longa pesquisa, encontrei uma solução funcional. A questão foi por causa do errado region-code.

abaixo está a lista de códigos de região, defina o apropriado e seu problema será resolvido.

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

Você pode encontrar o código da região clicando no nome do bloco no canto direito.

insira a descrição da imagem aqui

Para detalhes do modo Clique em

Vikram Kodag
fonte