2016-04-11 16 views
8

Ich versuche, eine JSON-Zeichenfolge an das API-Gateway zu senden, und API-Gateway wiederum sendet das JSON an einen EC2-Server.AWS-API-Gateway und EC2-Dienstproxy

Mein Problem ist, ich kann keine gute Dokumentation von Amazon finden, wie dies zu erreichen ist.

Wenn ich das Setup testen bekomme ich diese

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response><Errors><Error><Code>InvalidHttpRequest</Code><Message>The HTTP request is invalid. Reason: Unable to parse request</Message></Error></Errors><RequestID>1fa47f52-d75c-4ff8-8992-3eac11a79015</RequestID></Response>" 

, die sehr wenig für mich bedeutet. Ich nehme an, es ist ein Problem mit API-Gateway versucht, die Anfrage an EC2 zu senden, und es kann nicht so diesen Fehler generiert. Vielleicht richte ich den EC2 AWS Service Proxy im API Gateway falsch ein. Das ist wahrscheinlich, weil ich keine Ahnung habe, was ich "Aktion" einstellen soll. Ich habe es auf die EC2-Instanz gerichtet, nur weil ich keinen anderen Ort sehe, an den ich diese Information schreiben könnte.

Dies sollte wirklich nicht so schwer sein, die ich erfolgreich diese Sache getan haben, um Lambda verbinden und haben durch alle Unterlagen geschaut und alles, was ich finden kann, ist dies: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources

die für dieses Szenario weniger als hilfreich. Irgendwelche Ideen?

Antwort

11

Ich denke, Sie verwechselt AWS Service Proxy und HTTP-Service-Proxy.

API-Gateway-API-Aufrufe an verschiedene Arten von Backends weiterleiten kann:
- ein Lambda-Funktion
- ein AWS Service (http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html für ein Beispiel siehe)
- eine bestehende API, auf AWS oder auf dem Gelände läuft (Sie Use Case)

Wenn Sie API definieren, sollten Sie eine Postverb und richten Sie die Endpoint-URL zu Ihrer EC2-Instanz URL definieren

ich habe gerade einen Test, um den JSON POST-Dienst online verfügbar unter http://gurujsonrpc.appspot.com/ mit und es funktioniert wie erwartet.

Hier ist der Swagger-Export meiner Test-API.

{ 
    "swagger": "2.0", 
    "info": { 
    "version": "2016-04-11T20:46:13Z", 
    "title": "test" 
    }, 
    "host": "c22wfjg4d7.execute-api.eu-west-1.amazonaws.com", 
    "basePath": "/prod", 
    "schemes": [ 
    "https" 
    ], 
    "paths": { 
    "/": { 
     "post": { 
     "produces": [ 
      "application/json" 
     ], 
     "responses": { 
      "200": { 
      "description": "200 response", 
      "schema": { 
       "$ref": "#/definitions/Empty" 
      } 
      } 
     }, 
     "x-amazon-apigateway-integration": { 
      "responses": { 
      "default": { 
       "statusCode": "200" 
      } 
      }, 
      "uri": "http://gurujsonrpc.appspot.com/guru", 
      "httpMethod": "POST", 
      "type": "http" 
     } 
     } 
    } 
    }, 
    "definitions": { 
    "Empty": { 
     "type": "object" 
    } 
    } 
} 
+0

Ja das ist genau das, was ich verwirrt habe. Vielen Dank. – wmfrancia

+0

@wmfrancia Also, meinst du, wenn ich API-Gateway verwenden möchte, um eine PHP-Datei auf meinem EC2 aufzurufen, muss ich eigentlich "Integration Type: ->" HTTP "und nicht" AWS Service "wählen? –

Verwandte Themen