AWS HTTP API 网关连接到 ALB returns 503
AWS HTTP API Gateway connected to ALB returns 503
我目前的解决方案:
我的应用程序由两个部署到 ECS 的独立 services/containers 组成。这些服务位于 Virtual Private Cloud (VPC) 内,并且为了公开我创建的 EC2 Application Load Balancer 应用程序,它运行完美,我可以通过 Load Balancer URL 轻松访问该应用程序。
我要实现的目标:
目前我正在尝试创建一个 API 网关 linked 到上面提到的负载均衡器,以通过 API 网关而不是负载均衡器访问应用程序。
我是怎么做到的
我找到了一个 AWS 教程,它基本上完成了我想做的事情,所以我一步一步 with this tutorial
- 已创建 Http API 网关
- 已创建 VPC-LINK(连接到所有可能的子网和所有可能的安全组以防万一)
- 创建了一条路线
ANY /{proxy+}
基本上可以捕捉到所有东西
- 创建了与该路由的集成(我在其中选择了上述负载均衡器作为目标服务)。
一切都是一步一步来的,和教程一样,但不幸的是最后一步我应该看到我的网页我看到了ERROR: 503 {"message":"Service Unavailable"}
我还做了什么来解决这个问题:
- 添加了 Api 网关日志,但我在那里没有收到任何有趣的信息,只是如下所示的原始数据:
{
"requestId": "PgELwjAyjoEEPgQ=",
"ip": "185.244.96.51",
"requestTime": "24/Mar/2022:18:09:40 +0000",
"httpMethod": "GET",
"routeKey": "ANY /{proxy+}",
"status": "503",
"protocol": "HTTP/1.1",
"responseLength": "33"
}
- 使用不同的负载均衡器侦听器(443 或 80)。
- 使用不同的安全组(尝试使用与 ALB 相同的安全组,或使用所有可能的安全组)
问题是,我在这里缺少什么?
我猜问题出在VPC link和负载均衡器之间的连接上,但老实说我不知道如何检查和验证它。我一步一步地点击了所有的东西,在很多地方都有单选选项,所以我真的很困惑我在哪里可能犯了错误。这是基础设施的说明性照片和我猜测问题可能出在哪里(但它仍然是一个猜测。
我唯一能想到的是,为什么?认真地说,APIGW 不提供任何超过 ALB 的额外价值。如果您已经在使用 ALB,那么最简单、成本最低且最好的做法是将您的 route53 DNS 指向 ALB 并完成。
在任何情况下 VPC-link 永远不会工作,APIGW 不能与内部 VPC 一起工作,并且 VPC-link 要求客户端与服务在同一个 VPC 中。由于 VPC-link 在 VPC 内部,而 HTTP API 在外部,这当然会导致问题,特别是“我找不到那个依赖项”,其中 503 是预期的状态代码。
如果出于某些荒谬的原因您仍想将 APIGW 与 ALB 一起使用,您可以将 APIGW 直接指向 ALB DNS,然后完成。但同样,这会带来负面价值,并且会花费额外的金钱和性能,从而对您的用户、开发人员和您的公司钱包产生全面的负面影响。
我目前的解决方案: 我的应用程序由两个部署到 ECS 的独立 services/containers 组成。这些服务位于 Virtual Private Cloud (VPC) 内,并且为了公开我创建的 EC2 Application Load Balancer 应用程序,它运行完美,我可以通过 Load Balancer URL 轻松访问该应用程序。
我要实现的目标: 目前我正在尝试创建一个 API 网关 linked 到上面提到的负载均衡器,以通过 API 网关而不是负载均衡器访问应用程序。
我是怎么做到的 我找到了一个 AWS 教程,它基本上完成了我想做的事情,所以我一步一步 with this tutorial
- 已创建 Http API 网关
- 已创建 VPC-LINK(连接到所有可能的子网和所有可能的安全组以防万一)
- 创建了一条路线
ANY /{proxy+}
基本上可以捕捉到所有东西 - 创建了与该路由的集成(我在其中选择了上述负载均衡器作为目标服务)。
一切都是一步一步来的,和教程一样,但不幸的是最后一步我应该看到我的网页我看到了ERROR: 503 {"message":"Service Unavailable"}
我还做了什么来解决这个问题:
- 添加了 Api 网关日志,但我在那里没有收到任何有趣的信息,只是如下所示的原始数据:
{
"requestId": "PgELwjAyjoEEPgQ=",
"ip": "185.244.96.51",
"requestTime": "24/Mar/2022:18:09:40 +0000",
"httpMethod": "GET",
"routeKey": "ANY /{proxy+}",
"status": "503",
"protocol": "HTTP/1.1",
"responseLength": "33"
}
- 使用不同的负载均衡器侦听器(443 或 80)。
- 使用不同的安全组(尝试使用与 ALB 相同的安全组,或使用所有可能的安全组)
问题是,我在这里缺少什么?
我猜问题出在VPC link和负载均衡器之间的连接上,但老实说我不知道如何检查和验证它。我一步一步地点击了所有的东西,在很多地方都有单选选项,所以我真的很困惑我在哪里可能犯了错误。这是基础设施的说明性照片和我猜测问题可能出在哪里(但它仍然是一个猜测。
我唯一能想到的是,为什么?认真地说,APIGW 不提供任何超过 ALB 的额外价值。如果您已经在使用 ALB,那么最简单、成本最低且最好的做法是将您的 route53 DNS 指向 ALB 并完成。
在任何情况下 VPC-link 永远不会工作,APIGW 不能与内部 VPC 一起工作,并且 VPC-link 要求客户端与服务在同一个 VPC 中。由于 VPC-link 在 VPC 内部,而 HTTP API 在外部,这当然会导致问题,特别是“我找不到那个依赖项”,其中 503 是预期的状态代码。
如果出于某些荒谬的原因您仍想将 APIGW 与 ALB 一起使用,您可以将 APIGW 直接指向 ALB DNS,然后完成。但同样,这会带来负面价值,并且会花费额外的金钱和性能,从而对您的用户、开发人员和您的公司钱包产生全面的负面影响。