Próbuję usunąć przesłane pliki graficzne za pomocą AWS-SDK-Core Ruby Gem.
Mam następujący kod:
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
Jednak pojawia się następujący błąd:
Wiadro, do którego próbujesz uzyskać dostęp, musi zostać zaadresowane przy użyciu określonego punktu końcowego. Wyślij wszystkie przyszłe żądania do tego punktu końcowego.
Wiem, że region jest poprawny, ponieważ jeśli go zmienię us-east-1
, pojawi się następujący błąd:
Podany klucz nie istnieje.
Co robię tutaj źle?
ruby-on-rails
ruby
amazon-web-services
amazon-s3
użytkownik3575214
źródło
źródło
Odpowiedzi:
Wydaje się prawdopodobne, że ten segment został utworzony w innym regionie, tj. IE nie us-west-2. To jedyny raz, kiedy widziałem: „Wiadro, do którego próbujesz uzyskać dostęp, musi zostać rozwiązane przy użyciu określonego punktu końcowego. Wyślij wszystkie przyszłe żądania do tego punktu końcowego”.
źródło
ENV["AWS_REGION"]
odpowiednią wartość (np."us-east-1"
) Dla segmentu przed zainicjowaniem klientaSprawdź lokalizację swojego segmentu w konsoli, a następnie użyj tego jako odniesienia do którego punktu końcowego użyć: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
źródło
region: 'us-west-1',
co?https://s3.amazonaws.com/mybucket/myasset.jpg
zhttps://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpg
aby naprawić ten błąd.us-west-2
Wystąpił podobny błąd, ponieważ segment był w regionie, a wzorzec adresu URL zawierał nazwę segmentu na ścieżce. Raz zmieniłem wzorzec adresu URL, aby nazwa wiadra była poddomeną adresu URL, aby pobrać pliki i zadziałało.Na przykład był poprzedni adres URL
Potem zastąpiłem to jako
źródło
W przypadku wielu pakietów API S3 (ostatnio miałem ten problem, pakiet npm s3 ) możesz napotkać problemy, w których zakłada się, że region jest standardem amerykańskim, a wyszukiwanie według nazwy będzie wymagało jawnego zdefiniowania regionu, jeśli zdecydujesz się na hostowanie segmentu poza tym regionem.
źródło
Podczas tworzenia S3Client można określić mapowanie punktu końcowego do określonego regionu. Jeśli domyślnie,
s3.amazonaws.com
zostanie utworzony segment, wus-east-1
którym znajduje się Północna Wirginia.Więcej szczegółów na temat punktów końcowych i regionów S3 w dokumentach AWS: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .
Tak więc zawsze upewnij się o punkcie końcowym / regionie podczas tworzenia S3Client i uzyskaj dostęp do zasobów S3 przy użyciu tego samego klienta w tym samym regionie.
Jeśli segment jest tworzony z konsoli AWS S3, sprawdź region z konsoli dla tego segmentu, a następnie utwórz klienta S3 w tym regionie, używając szczegółów punktu końcowego wspomnianych w powyższym łączu.
źródło
Żadna z powyższych odpowiedzi nie rozwiązała mojego problemu.
Powyższe odpowiedzi są prawdopodobnie bardziej prawdopodobną przyczyną Twojego problemu, ale mój problem polegał na tym, że użyłem niewłaściwej nazwy segmentu. To była prawidłowa nazwa wiadra, to po prostu nie było moje wiadro.
Wiadro, na które wskazałem, znajdowało się w innym regionie niż moja funkcja lambda, więc sprawdź nazwę swojego wiadra!
źródło
Dla ppl, którzy wciąż napotykają ten problem, spróbuj dodać s3_host w następujący sposób do skrótu konfiguracji
To rozwiązało problem.
źródło
Wystąpił ten błąd, gdy próbowałem uzyskać dostęp do nieistniejącego segmentu.
Przez pomyłkę zamieniłem zmienną ścieżki na zmienną nazwy segmentu, więc nazwa segmentu miała wartość ścieżki do pliku. Może więc dwukrotnie sprawdź, czy nazwa segmentu ustawiona na żądanie jest poprawna.
źródło
Miałem ten sam błąd. Wystąpiło to, gdy klient s3 został utworzony z innym punktem końcowym niż ten, który został skonfigurowany podczas tworzenia segmentu.
s3Client = Nowy AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
s3Client = Nowy AmazonS3Client (AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint. USEast1 )
źródło
Napotkałem ten sam problem. Po wielu zmaganiach odkryłem, że prawdziwy problem dotyczy zależności com.amazonaws. Po dodaniu zależności ten błąd zniknął.
źródło
Mieszkam w Wielkiej Brytanii. Próbowałem w regionie „us-west-2”. Przekierowano więc do „eu-west-2”. Prawidłowy region dla S3 to „eu-west-2”
źródło
Wystąpiło to dla mnie, gdy miałem źródłowe ograniczenie IP dotyczące zasad używanych przez użytkownika (klucz dostępu / klucz tajny) do tworzenia segmentu s3. Moje IP było dokładne - ale z jakiegoś powodu nie działało i dawało ten błąd.
źródło
Po długich poszukiwaniach znalazłem działające rozwiązanie. Problem był spowodowany błędem
region-code
.poniżej znajduje się lista kodów regionu, ustaw odpowiedni, a Twój problem zostanie rozwiązany.
Możesz znaleźć swój kod regionu po kliknięciu prawym przyciskiem myszy nazwę wiadra.
Aby wyświetlić szczegóły trybu Kliknij
źródło
Napotkałem ten problem podczas używania innego profilu AWS. Widziałem błąd, gdy korzystałem z konta z uprawnieniami administratora, więc możliwość problemów z uprawnieniami wydawała się mało prawdopodobna.
To naprawdę mój wkurzający zwierzak, że AWS jest tak podatna na wysyłanie komunikatów o błędach, które mają tak niewielką korelację z wymaganymi działaniami, z perspektywy użytkownika.
źródło