2016-04-11 24 views
8

Tôi đang cố gắng POST một chuỗi json tới API Gateway và đến lượt nó có API Gateway gửi JSON tới máy chủ EC2.Cổng API AWS và Proxy dịch vụ EC2

Vấn đề của tôi là tôi không thể tìm thấy tài liệu hay từ Amazon về cách thực hiện việc này.

Khi tôi kiểm tra các thiết lập tôi có được điều này

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

Có nghĩa là rất ít đối với tôi. Tôi cho rằng đó là vấn đề với API Gateway khi gửi yêu cầu tới EC2 và nó không thể tạo ra lỗi này. Vì vậy, có lẽ tôi đang thiết lập Proxy dịch vụ AWS EC2 trong Cổng API không chính xác. Đó là khả năng bởi vì tôi không có ý tưởng những gì tôi phải đặt 'hành động' ngay bây giờ tôi có nó trỏ đến trường hợp EC2, chỉ gây ra tôi không thấy bất kỳ nơi nào khác để đưa thông tin đó.

này thực sự không nên là khó tôi đã thực hiện thành công điều này kết nối với Lambda và đã xem xét thông qua tất cả các tài liệu và tất cả những gì có thể tìm thấy là thế này: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources

Đó là chưa đầy hữu ích cho kịch bản này. Bất kỳ ý tưởng?

Trả lời

11

Tôi nghĩ bạn đã nhầm lẫn Proxy dịch vụ AWS và proxy dịch vụ HTTP.

API Gateway có thể chuyển tiếp cuộc gọi API để loại khác nhau của backends:
- một lambda chức năng
- một dịch vụ AWS (xem http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html cho một ví dụ)
- một API có sẵn, chạy trên AWS hoặc trên cơ sở (của bạn sử dụng trường hợp)

Khi xác định bạn API, hãy chắc chắn để xác định một động từ POST và chỉ URL Endpoint đến URL dụ EC2 của bạn

tôi chỉ cần thực hiện một thử nghiệm bằng cách sử dụng dịch vụ JSON POST sẵn trực tuyến tại http://gurujsonrpc.appspot.com/ và nó hoạt động như mong đợi.

Đây là xuất khẩu Swagger của API thử nghiệm của tôi.

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

Đúng là điều tôi đang bối rối. Cảm ơn. – wmfrancia

+0

@wmfrancia Vì vậy, các bạn có nói rằng, nếu tôi muốn sử dụng API Gateway để gọi một tệp PHP trên EC2 của tôi, tôi thực sự phải chọn "Loại tích hợp: ->" HTTP "và không phải" Dịch vụ AWS "? –

Các vấn đề liên quan