2015-07-24 18 views
11

Ich versuche, AWS API Gateway als Proxy vor einem Image-Service zu verwenden. Ich bin in der Lage, das Bild durchzukommen, aber es wird als ein großer Teil von ASCII angezeigt, weil Content-Type auf "application/json" eingestellt wird.Zurückgeben von Bildern über AWS API Gateway

Gibt es eine Möglichkeit, dem Gateway mitzuteilen, den Quell-Inhaltstyp NICHT zu ändern?

Ich möchte nur "Bild/JPEG", "Bild/Png", usw. durchkommen.

+0

Warum API-Gateway? Ihr Image-Service läuft in Lambda? Auch der Inhaltstyp "Quelle"? Vermutlich beziehen Sie sich auf die "Antwort". –

+0

Gibt es einen bestimmten Grund, dass das Bild von Lambda zurückgegeben werden muss? Eine Alternative wäre, dass die Lambda-Funktion das Bild in S3 hochlädt und eine Verknüpfung zu diesem Bild zurückgibt. – JaredHatfield

+0

@ Michael-sqlbot: Ich könnte einen Proxy mit etwas anderem hochwerfen, aber dann müsste ich es beibehalten. AWS kann vermutlich mit jeder Last umgehen, die ich darauf werfen könnte. Außerdem könnte das Caching nützlich sein. Die Notwendigkeit für einen Proxy in erster Linie ist Google-Suche Assets auf meiner Seite als von meinem Unternehmen anderen Service (SEO Typ sagt, dass sie denken, wir sind Scraping). Wir müssen die gleichen Assets verwenden, also möchte ich nur, dass sie so aussehen, als wären sie von einer anderen Adresse. Kein Lambda/Manipulation für dieses Ding benötigt, nur ein Proxy. Wenn Sie einen anderen Service empfehlen können, würde ich es überprüfen. – kjs3

Antwort

3

Ich entschuldige mich im Voraus für eine Antwort, die nicht direkt die Frage beantwortet, und stattdessen schlägt vor, dass Sie einen anderen Ansatz ... aber in der Frage und Kommentare und meine eigene Erfahrung mit dem, was ich glaube, zu übernehmen Wenn Sie eine ähnliche Anwendung verwenden, scheint es, als ob Sie das falsche Tool für das Problem verwenden oder zumindest ein Tool, das nicht die optimale Wahl innerhalb des AWS-Ökosystems ist.

Wenn Ihr Image-Dienst innerhalb von Amazon Lambda ausgeführt wird, wäre der Bedarf an API Gateway offensichtlich. Das fehlt mir, ich sehe es nicht.

Amazon CloudFront bietet das Abrufen von Inhalten von einem Back-End-Server, das Zwischenspeichern von Inhalten (an über 50 "Edge" -Standorten), die kostenlose Speicherung von zwischengespeicherten Inhalten und die Konfiguration von bis zu 100 verschiedenen Hostnamen zu einer einzelnen Cloudfront-Verteilung, zusätzlich zum Standard-Hostnamen xxxxxxxx.cloudfront.net. Es unterstützt auch SSL. Das scheint zu sein, was du versuchst, und dann einige.

Ich benutze es, ziemlich erfolgreich für genau das Szenario, das Sie beschreiben: "ein Proxy vor einem Image-Service." Genau das, was mein Image-Service und dein Image-Service tun können (mein Resizer kann die Quell-URL von fehlenden/nie zuvor angeforderten Bildern abrufen, abrufen und in der Größe verändern), aber im Grunde scheint es, als würden wir einen ähnlichen Zweck erfüllen .

Seltsamerweise ist die Preisstruktur von CloudFront in einigen Regionen (wie us-east-1 und us-west-2) so, dass es nicht nur kostengünstig ist, sondern in der Tat mit CloudFront fast $ 0,005 billiger sein kann als es nicht verwendet pro Gigabyte heruntergeladen.

In meinem Fall habe ich neben dem Back-End-Image-Service auch einen S3-Bucket mit einer einzigen Datei, die an einen einzelnen Pfad in der CloudFront-Distribution angehängt ist (als zweiten "benutzerdefinierten Ursprung"). zum alleinigen Zweck, /robots.txt zu servieren, um den direkten Zugriff auf meine Bilder durch brave Crawler zu kontrollieren. Dadurch kann die robots.txt-Datei getrennt vom Image-Service selbst verwaltet werden.

Wenn dies nicht Ihren Bedürfnissen entspricht, zögern Sie nicht zu kommentieren und ich werde diese Antwort klären oder zurückziehen.

+1

Ich zögere, dies als die "richtige" Antwort zu markieren, weil ich immer noch neugierig bin auf die Pflege von Content-Type mit AWS API Gateway, aber das war absolut hilfreich und ist, was ich getan habe. – kjs3

+0

@ kjs3 Ich bin froh, dass es geholfen hat, und ich mache dir überhaupt keine Vorwürfe. Fühlen Sie sich frei, um eine direktere Antwort zu halten. Ihre Frage ist interessant und vielleicht erhalten wir eine Antwort, die genauer darauf eingeht. Wenn ich die Möglichkeit habe, ausführlichere Tests mit dem AWS API Gateway durchzuführen, werde ich darüber berichten, was ich finde. –

5

Ich habe versucht, eine Zeichenfolge ohne Anführungszeichen zu formatieren formatiert und entdeckte die Integration Response-Funktionalität.Ich habe das selbst nicht versucht zu beheben, aber etwas in diese Richtung arbeiten soll:

  • Zur Methodenausführung Seite Ihrer Ressource,
  • Klick auf Integration Response
  • erweitert Methode Antwortstatus 200,
  • erweitern Mapping-Vorlagen,
  • Klick "application/json",
  • den Bleistift klicken Sie neben Output Pass-Through,
  • Änderung applicatio“ n/json "zu" image/png "

Ich hoffe, es funktioniert!

+1

Gerade versucht es funktioniert. @tgig Danke –

+0

Ich bin sehr misstrauisch auf diese Antwort. Andere Informationen deuten darauf hin, dass es NICHT möglich ist, binäre Daten über das API Gateway (zuverlässig) zurückzugeben. – Jason

1

@kjsc: wir endlich herausgefunden, wie diese Arbeit mit Base64-codierten Bilddaten auf eine andere Frage zu erhalten, die Sie hilfreich in Ihrer Lösung finden können:

AWS Gateway API base64Decode produces garbled binary?

Ihre Frage zu beantworten, erhalten Wenn der Content-Type als fest codierter Wert angezeigt wird, würden Sie zunächst in den Methodenantwortbildschirm gehen und einen Content-Type-Header und den gewünschten Inhaltstyp hinzufügen.

api gateway method response

Dann würden Sie die Integration Response-Bildschirm gehen und den Inhaltstyp auf den gewünschten Wert (image/jpeg in diesem Beispiel) gesetzt. Wickeln Sie "image/png" in einfache Anführungszeichen.

enter image description here