【问题标题】:How to avoid the configuration error while using AWS API Gateway with VPC Link?使用带有 VPC Link 的 AWS API Gateway 时如何避免配置错误?
【发布时间】:2018-12-10 15:42:34
【问题描述】:

我已根据 AWS 文档使用网络负载均衡器 (NLB) 创建了 VPC 链接,并将其与 API Gateway 资源/方法一起附加。但是在访问“Invoke URL”时会抛出“Internal Server Error”,并在测试时显示此错误:“Execution failed due to configuration error: There was an internal error while execution your request”。

我遵循的程序:

1) 创建网络负载均衡器:

  • 负载平衡器方案:内部
  • 负载平衡器协议/端口:TCP / 80
  • 可用区:创建了 CIDR 为“10.0.0.0/16”的 VPC 和 CIDR 为“1XX.XX.0.0/16”的公共子网。
  • 目标组:协议/端口/目标类型 - TCP/80/实例
  • 没有目标注册。
  • 推出 NLB。

2) 使用新创建的 NLB 在 API Gateway 中创建 VPC 链接。

3) 创建新的 API:

4) 使用“部署 API”操作和新创建的阶段部署选定的 API。

5) 在“阶段变量”部分配置“vpcLinkId”。

现在,如果我点击“调用 URL”,网页会显示“{“message”:“内部服务器错误”}。

注意:如果我使用与“集成类型:HTTP”相同的 EC2 url,则“调用 URL”有效。同样不适用于 VPC 链接。

错误:

其他值得注意的点:

  1. 在具有安全策略的 EC2 实例中将允许所有 TCP 端口。
  2. EC2 实例使用 ECS / ECR(Docker 容器)启动。
  3. 从 API Gateway 阶段启用 Cloud Watch 日志,但它什么也没产生。

如果需要,我很乐意提供更多信息。

编辑 1

根据 JNY 的 (jny) 输入,我已将 API 网关端点更改为 NLB,并将我的 EC2 实例添加为 NLB 中的目标。我仍然面临同样的问题。下面的图片将显示我所做的所有配置。

负载平衡器配置:

负载均衡器目标组设置:

目标组端口设置:

  1. 这里我指定了 3000 作为端口来检查实例运行状况,因为我的应用程序(节点)侦听 3000 端口。
  2. 在安全策略中启用了端口号 80 和 3000。

API 网关设置:

  1. 最后我将端点 API 网关更改为 NLB

结果相同:

我仍然不确定我在这里犯了什么错误。

【问题讨论】:

  • 端点 url 应该是 NLB,而不是 ec2 实例。 NLB 应该配置 EC2 实例。
  • 谢谢@jny。我仍然有同样的问题。请检查相同的编辑描述。
  • 直接使用 curl 或 postman 调用 nlb url 会发生什么?
  • 当我直接调用NLB时,它显示站点无法访问页面。但现在问题解决了。主要问题在于 NLB、目标组、EC2、ECS 容器的端口号。我在单个端口上创建了所有内容并创建了 VPC 的新鲜内容。现在它按预期工作。感谢您的回复。 NLB 端点有很大帮助。如果您将其发布为答案。我会接受的。
  • 应该使用 NLB 中的什么属性?我尝试使用 dns 名称,每次点击 api-gateway 时都会收到 500 错误

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


【解决方案1】:

我也收到 500 Internal server error,然后我在 EC2 安全组中添加了入站规则并允许使用 VPC 子网的 CIDR 进行 HTTP,现在我可以使用 NLB 访问 API

【讨论】:

    【解决方案2】:

    您的 NLB 缺少对端口 80 的 EC2 实例(在其安全组中)的入站权限。但由于 NLB 没有作为安全组(但确实有永久 IP),您必须使用其 ip 并添加它直接发送到 EC2 实例的安全组。 您可以通过以下方式找到 NLB 的 IP:https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html#target-security-groups

    【讨论】:

    • 感谢@grira 的回答。就我而言,这是端口号不同的问题。为 NLB、EC2、ECS 等使用相同的端口后,问题得到解决...
    【解决方案3】:

    你做得对,但也许它会帮助别人:

    我的错误是在 api 网关中使用 HTTPS 作为端点 url。它必须是 HTTP。

    正确:

    http://myLoadBalancer.elb.us-east-1.amazonaws.com
    

    文本字段太短,无法显示整个网址,所以我没看到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2020-10-25
      • 2021-09-22
      • 1970-01-01
      • 2016-09-15
      • 2022-07-17
      • 2018-07-13
      相关资源
      最近更新 更多