【问题标题】:AWS API Gateway and EC2 Service ProxyAWS API 网关和 EC2 服务代理
【发布时间】:2016-08-01 23:45:02
【问题描述】:

我正在尝试将 json 字符串发布到 API Gateway,然后让 API Gateway 将 JSON 发送到 EC2 服务器。

我的问题是我无法从亚马逊找到有关如何完成此任务的良好文档。

当我测试设置时,我得到了这个

"<?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 的问题,但它不能,因此它会生成此错误。所以也许我在 API Gateway 中错误地设置了 EC2 AWS 服务代理。这可能是因为我不知道我现在应该将“操作”设置为什么我让它指向 EC2 实例,只是因为我看不到任何其他地方可以放置该信息。

这真的不应该那么难我已经成功地完成了连接到 Lambda 的事情并查看了所有文档,我只能找到:http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-aws-proxy.html#getting-started-aws-proxy-add-resources

这对这种情况没有多大帮助。有什么想法吗?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-api-gateway


    【解决方案1】:

    我认为您混淆了 AWS 服务代理和 HTTP 服务代理。

    API Gateway 可以将 API 调用转发到不同类型的后端:
    - 一个 lambda 函数
    - AWS 服务(参见http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html 示例)
    - 在 AWS 或本地运行的现有 API(您的用例)

    在定义您的 API 时,请务必定义一个 POST 动词并将端点 URL 指向您的 EC2 实例 URL

    我刚刚使用http://gurujsonrpc.appspot.com/ 在线提供的 JSON POST 服务进行了测试,它按预期工作。

    这是我的测试 API 的 Swagger 导出。

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

    【讨论】:

    • 是的,这正是我所困惑的。谢谢。
    • @wmfrancia 那么,你们是说,如果我想使用 API Gateway 在我的 EC2 上调用 PHP 文件,我实际上必须选择“集成类型:->”HTTP”,并且不是“AWS 服务”?
    • @NinoŠkopac - 没错,“AWS 服务”是指 AWS S3 等内置服务。
    • @RichVel,这意味着如果我重新启动我的 ec2 实例,我需要手动将新 IP 插入 API 集成请求。有什么办法吗?
    • @Shakedk - 最好为此提出一个新问题,答案很可能包括创建一个映射到分配给 EC2 实例的弹性 IP 的域名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-10-17
    • 2016-04-24
    • 2019-07-03
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多