2016-04-11 11 views
8

Sto provando a inviare POST una stringa json al gateway API e, a sua volta, il gateway API invia il server JSON a un server EC2.Gateway API AWS e proxy servizio EC2

Il mio problema è che non riesco a trovare una buona documentazione da Amazon su come farlo.

volta ho testare il setup ottengo questo

"<?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>" 

Il che significa molto poco per me. Presumo che sia un problema con API Gateway che tenta di inviare la richiesta a EC2 e non può quindi generare questo errore. Quindi forse sto configurando il proxy del servizio AWS EC2 nel gateway API in modo errato. Che è probabile perché non ho idea di cosa dovrei impostare 'Azione' in questo momento, lo faccio puntando all'istanza EC2, solo perché non vedo nessun altro posto dove mettere quelle informazioni.

Questo in realtà non dovrebbe essere così difficile che ho fatto con successo questo cosa il collegamento a Lambda e ho guardato tutta la documentazione e tutto quello che posso trovare è questo: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources

che è meno utile per questo scenario. Qualche idea?

risposta

11

Penso che tu abbia confuso il proxy del servizio AWS e il proxy del servizio HTTP.

API Gateway può inoltrare chiamate API al diverso tipo di backend:
- funzione di un lambda
- un servizio di AWS (vedi http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html per un esempio)
- un'API esistente, in esecuzione su AWS o nei locali (la tua utilizzare caso)

Quando si definisce si API, essere sicuri di definire un verbo POST e puntare l'Endpoint URL al tuo EC2 esempio URL

ho appena fatto un test utilizzando il servizio JSON POST disponibile online all'indirizzo http://gurujsonrpc.appspot.com/ e funziona come previsto.

Ecco l'esportazione Swagger della mia API di test.

{ 
    "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

Sì, è esattamente ciò che mi ha confuso. Grazie. – wmfrancia

+0

@wmfrancia Quindi, state dicendo che, se voglio usare il gateway API per richiamare un file PHP sul mio EC2, devo effettivamente scegliere "Tipo di integrazione: ->" HTTP ", e non" Servizio AWS "? –

Problemi correlati