2016-04-11 7 views
8

Я пытаюсь выполнить POST строку json для шлюза API и, в свою очередь, API Gateway отправляет JSON на сервер EC2.AWS API Gateway и прокси-сервер EC2

Моя проблема: я не могу найти хорошую документацию от Amazon о том, как это сделать.

Когда я проверить настройки я получаю эту

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

что означает очень мало для меня. Я предполагаю, что проблема с API Gateway пытается отправить запрос в EC2, и он не может так генерировать эту ошибку. Поэтому, возможно, я неправильно настроил прокси-сервер EC2 AWS в API-шлюзе. Скорее всего, потому, что я понятия не имею, что я должен установить «Действие» прямо сейчас, я указываю на экземпляр EC2, только потому, что не вижу другого места для размещения этой информации.

Это действительно не должно быть так сложно, я успешно делал это дело с подключением к Lambda и просмотрел всю документацию и все, что я могу найти это: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources

Что меньше, чем полезно для этого сценария. Есть идеи?

ответ

11

Я думаю, вы смутили прокси-сервер AWS и прокси-сервер HTTP-сервиса.

Шлюз API может пересылать API вызовы на другой тип движков:
- лямбда-функции
- AWS Service (см http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html для примера)
- существующий API, работающие на AWS или в помещениях (ваш использовать случай)

при определении вашего API, обязательно определить глагол POST и точку Конечной точки URL для вашего EC2 экземпляра URL

Я только что сделал тест с помощью службы JSON POST доступной в Интернете по адресу http://gurujsonrpc.appspot.com/ и это работает как и ожидалось.

Вот экспорт Swagger моего тестового 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

Да, это именно то, что я вводил в заблуждение. Благодарю. – wmfrancia

+0

@wmfrancia Итак, вы, ребята, говорите, что если я хочу использовать API Gateway для вызова файла PHP на моем EC2, мне действительно нужно выбрать «Тип интеграции: ->« HTTP », а не« Служба AWS »? –

Смежные вопросы