2016-07-28 14 views
2

Wie ich eine Mock-Integration in API-Gateway erstellen Sie eine Anfrage zu nehmen:AWS API Gateway: Verwenden Mock Integration zu umleiten

/products/{product}/bigFile.zip?platform={platform}&version={version} 

Und antwortet mit einer Umleitung zu:

http://xyz.cloudfront.net/{product}/{platform}/{version}.zip 

I habe versucht, die Anforderungs- und Antwortzuordnungsvorlagen zu ändern, aber ich bin mir nicht sicher, wie sie miteinander verbunden sind, da die AWS-Dokumentation zu Scheinintegrationen recht spärlich ist. Ich kann den HTTP-Statuscode ändern, aber ich kann den Location-Header basierend auf den Abfrageparametern nicht auffüllen.

Der breitere Kontext (falls ich das XY-Problem begangen habe) ist, dass ich eine API mit AWS API Gateway erstelle. Einer der API-Endpunkte bedient große Dateien, die das 10-Sekunden-Antwortzeitlimit des API-Gateways nicht erfüllen. Daher möchte ich zu einem anderen CDN-Link umleiten.

+0

Das Timeout für das API-Gateway beträgt nicht mehr 10 Sekunden, es wurde auf 29 Sekunden erhöht (unter der 30 Sekunden CloudFront-Zeitüberschreitung) –

Antwort

1

Denken Sie bei MOCK-Integrationen an die Integrationsanforderungsvorlage, die den Statuscode (z. B. {"statusCode": 200}) als Mock-Statuscode für das Back-End definiert. Abgesehen von diesem Aspekt sind die anderen Komponenten identisch. Sie müssen eine Methodenantwort für den Statuscode redirect 3xx definieren und alle Header einschließen, die Sie in der Antwort senden möchten. Anschließend können Sie auf der Seite "Integrationsantwort" die Werte für die Header als statische Werte in einfachen Anführungszeichen definieren. Also das wäre, wo Sie die Location-Header definieren mit dem, was der Umleitungs-URL ist, wie ‚https://other.endpoint.com

Edit: Umgehung mit der Funktion Lambda Echo

Lambda-Funktion einrichten zu Nutzlast Echo. Karte als nächstes die Abfragezeichenfolgeflag auf die Anfrage Körper wie so:

Vorlage:

{ 
    "q": $input.params('foo') 
} 

die Lambda-Funktion echos der gleichen Nutzlast Unter der Annahme zurück, würden Sie die Header-Mapping Quelle in der Integration WarteSet wie:

integration.response.body.q 
+0

Ich habe die Methodenanforderung und die Antwort richtig eingerichtet, aber es ist die Integrationsantwort I ' Ich habe Probleme mit. Ich kann keinen statischen Wert für den Header verwenden, wie Sie vorgeschlagen haben, da ich den Pfad im Header basierend auf den Anforderungsabfragezeichenfolgen festlegen möchte. Um meine Frage zu klären, kann ich einige Variablen in der Integrationsanforderungsvorlage festlegen und auf sie im Integrationsantwortheader zugreifen? – Eric

+0

Leider können Sie Anfrageparameter derzeit nicht direkt auf Antwortparameter abbilden. Wenn Sie keine MOCK-Integration verwenden, können Sie das Problem umgehen, indem Sie den querystring-Parameter über das Back-End wiederholen und dann den Wert aus der Antwortnutzlast dem Antwortheader zuordnen. Ich werde dies unserem Backlog hinzufügen, um das Mapping direkt zu untersuchen. Andernfalls, wenn Sie eine einfache Lambda-Funktion einrichten, um den Parameter wiederzugeben, können Sie die Funktionalität erreichen. –

+0

irgendein Update auf diesem @JackKohn? – anarnold