2015-07-24 16 views
11

Próbuję użyć bramy interfejsu AWS API jako serwera proxy przed usługą obrazu. Jestem w stanie uzyskać obrazek, ale jest wyświetlany jako duży fragment ASCII, ponieważ Content-Type ustawia się na "application/json".Zwracanie obrazów za pomocą bramy interfejsu AWS API

Czy istnieje sposób na poinformowanie bramy NIE, aby zmieniło źródło zawartości?

Chcę po prostu "image/jpeg", "image/png", itp.

+0

Dlaczego bramka API? Twoja usługa wizerunkowa działa w Lambda? Ponadto typ treści "źródło"? Przypuszczalnie odnosisz się do "odpowiedzi". –

+0

Czy istnieje szczególny powód, aby obraz został zwrócony przez firmę Lambda? Alternatywą byłoby, aby funkcja Lambda przesłała obraz do S3 i zwrócił link do tego obrazu. – JaredHatfield

+0

@ Michael-sqlbot: Mogę wymyślić proxy z czymś innym, ale wtedy będę musiał to utrzymać. AWS może prawdopodobnie poradzić sobie z każdym ładunkiem, który mógłbym na niego rzucić. Dodatkowo buforowanie może być przydatne. Potrzeba proxy to przede wszystkim zasoby wyszukiwania w serwisie google na mojej stronie, ponieważ od moich firm innych usług (facet SEO mówi, że myśli, że skrobanie). Musimy użyć tych samych zasobów, więc chcę, aby wyglądały tak, jakby pochodziły z innego adresu. Żadnych lambda/manipulacji potrzebnych do tego, tylko proxy. Jeśli możesz polecić inną usługę, sprawdziłbym to. – kjs3

Odpowiedz

3

Z góry przepraszam za udzielenie odpowiedzi, która nie odpowiada bezpośrednio na pytanie, a zamiast tego sugeruje przyjęcie innego podejścia ... ale opartego na pytaniu i komentarzach oraz moich własnych doświadczeń z tym, w co wierzę być podobną aplikacją, wygląda na to, że używasz niewłaściwego narzędzia do problemu lub przynajmniej narzędzia, które nie jest optymalnym wyborem w ekosystemie AWS.

Jeśli Twoja usługa wizerunkowa działała w Amazon Lambda, bardziej potrzebna byłaby bramka API. Nieobecny, nie widzę tego.

Amazon CloudFront zapewnia pobieranie treści z serwera zaplecza, buforowanie treści (w ponad 50 lokalizacjach "krawędzi" na całym świecie), brak opłat za przechowywanie treści w pamięci podręcznej i umożliwia skonfigurowanie do 100 różnych nazw hostów wskazujących do pojedynczej dystrybucji Cloudfront, oprócz domyślnej nazwy hosta xxxxxxxx.cloudfront.net. Obsługuje również protokół SSL. Wygląda na to, co próbujesz zrobić, a następnie niektóre.

Używam go z powodzeniem dla dokładnie opisanego scenariusza: "proxy przed usługą obrazu". Dokładnie to, co moja usługa wizerunkowa i twoja usługa obrazowania może być inna (moja to resizer, który może wyszukać źródłowy adres URL brakujących/nigdy wcześniej żądanych obrazów, pobierania i zmiany rozmiaru), ale zasadniczo wydaje się, że osiągamy podobny cel .

Co ciekawe, struktura cenowa CloudFront w niektórych regionach (takich jak my-east-1 i us-west-2) jest taka, że ​​jest nie tylko opłacalna, ale w rzeczywistości za pomocą CloudFront może być prawie 0,005 $ tańsza niż nieużywanie go na pobraną gigabajtę:.

W moim przypadku, oprócz usługi obrazu zaplecza, mam także wiadro S3 z pojedynczym plikiem, dołączonym do pojedynczej ścieżki w dystrybucji CloudFront (jako drugie "niestandardowe pochodzenie"), wyłącznie w celu serwowania /robots.txt, aby kontrolować bezpośredni dostęp do moich obrazów przez dobrze zachowane roboty. Dzięki temu plik robots.txt może być zarządzany niezależnie od samej usługi obrazu.

Jeśli to nie odpowiada Twoim potrzebom, możesz je skomentować, a ja wyjaśnię lub wycofam tę odpowiedź.

+1

Waham się oznaczyć to jako "poprawną" odpowiedź, ponieważ nadal jestem ciekawy, czy utrzymywać Content-Type z AWS API Gateway, ale to było absolutnie pomocne i właśnie to zrobiłem. – kjs3

+0

@ kjs3 Cieszę się, że pomogło, i wcale nie obwiniam cię. Nie krępuj się, by uzyskać bardziej bezpośrednią odpowiedź. Twoje pytanie jest interesujące i być może otrzymamy odpowiedź, która bardziej precyzyjnie je rozwiąże. Jeśli dostanę okazję do przeprowadzenia obszerniejszych testów w AWS API Gateway, opowiem o tym, co znajdę. –

5

Próbowałem sformatować ciąg znaków, który ma zostać zwrócony bez cytatów i odkryłem funkcję Integration Response.Nie próbowałem to naprawić sam, ale coś w tym kierunku powinno działać:

  • Przejdź do strony Execution Method swojego zasobu,
  • kliknięcie Integracji Response
  • poszerzyć Method Response statusu 200,
  • poszerzyć mapowania Szablony,
  • click "application/json",
  • kliknij ikonę ołówka obok wyjścia Passthrough,
  • zmiana „ZASTOSOWA n/json "to" image/png "

Mam nadzieję, że to działa!

+1

Po prostu próbowałem, że działa. @tgig Thanks –

+0

Jestem bardzo podejrzliwy wobec tej odpowiedzi. Inne informacje wydają się wskazywać, że NIE jest możliwe (niezawodnie) zwracanie danych binarnych za pośrednictwem bramki API. – Jason

1

@kjsc: w końcu zorientowali się, jak uzyskać tej pracy na stanowisko zastępcy pytanie z base64 zakodowane dane obrazu, które mogą być one pomocne w roztworze:

AWS Gateway API base64Decode produces garbled binary?

Aby odpowiedzieć na to pytanie, aby uzyskać typ zawartości, który ma zostać zakodowany jako wartość zakodowana, najpierw należy przejść do ekranu odpowiedzi na metodę i dodać nagłówek Content-Type i dowolny typ zawartości, który chcesz.

api gateway method response

Potem idziesz na ekranie Integracja Response i ustawić typ zawartości do żądanej wartości (image/png w tym przykładzie). Zawiń 'image/png' w pojedyncze cudzysłowy.

enter image description here

Powiązane problemy