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?
ruby-on-rails
ruby
amazon-web-services
amazon-s3
user3575214
fonte
fonte
Respostas:
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".
fonte
ENV["AWS_REGION"]
o valor correto (por exemplo"us-east-1"
) para o bucket antes de inicializar o cliente.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
fonte
region: 'us-west-1',
por quê?https://s3.amazonaws.com/mybucket/myasset.jpg
porhttps://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpg
para corrigir esse erro.Eu estava enfrentando um erro semelhante porque o bucket estava na região
us-west-2
e 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
Então eu substituí-lo como
fonte
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.
fonte
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.com
bucket, será criado ous-east-1
norte 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.
fonte
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!
fonte
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.
fonte
Para pessoas que ainda enfrentam esse problema, tente adicionar s3_host da seguinte forma ao hash de configuração
Isso corrigiu o problema para mim.
fonte
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.
fonte
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.
s3Client = Novo AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
s3Client = Novo AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1 )
fonte
Depois de muita luta, descobri que o problema real é com as dependências com.amazonaws. Depois de adicionar dependências, esse erro desapareceu.
fonte
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'
fonte
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.
fonte
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.
Você pode encontrar o código da região clicando no nome do bloco no canto direito.
Para detalhes do modo Clique em
fonte