ApiGateway 通过运行 FastAPI 的负载均衡器控制 EC2 实例

0

【以下的问题经过翻译处理】 我有一个运行 fastapi (python) 的 EC2。这个 EC2 有一个公共 ip,它链接到我网站的一个子域。我可以通过此 http 链接使用 APIGateway 访问 api。但是,我想私下制作它,并有一个负载平衡器。我可以遵循的最佳方法和步骤是什么?在创建所有安全私有/公共事物时,我有疑问。

这个想法对吗?

1.在私有子网中创建一个EC2(是否也必须有一个私有VPC?)。在这个 EC2 中运行 Fastapi。 (疑惑:如果它是私有的,我如何连接到 EC2 来安装 fastapi?)这个 EC2 必须能够访问 RDS 实例。 2. 创建负载平衡器。我打算选择网络负载均衡器。我必须选择什么类型?面向互联网还是内部? 3. 创建 REST api 网关并连接到 AWS 服务。什么是“AWS 子域”?动作类型有什么区别?我应该扮演什么角色?我如何连接到特定的 EC2? FastApi 将所有内容发送到端口 80。 4.为了避免ddos攻击,使用EC2限制调用是否足够?

1 回答
0

【以下的回答经过翻译处理】 你好,

将 Amazon API Gateway 放置在您的负载均衡器前面,作为在 EC2 实例上运行的后端的入口门,这确实遵循了最佳实践。我了解到您想通过 API 网关安全私密地访问在 EC2 实例中运行的自定义 API 服务器。另一种理解是您想通过 API 网关调用 EC2 服务 API 操作(例如“AcceptReservedInstancesExchangeQuote”),但您需要一个复杂的实现来使用“AWS 服务”集成类型来支持它们,我认为这不是这里的要求。

**解决方案:**使用来自 API 网关的公共 REST API,通过 VPC 链接进行私有集成,来自 Elastic Load Balancing (ELB) 服务的私有网络负载均衡器 (NLB),VPC 至少有 2 个子网(1 个公共带有 NAT 网关和 1 个私有),以及一个运行您的自定义 API 服务器的 EC2 实例放置在私有子网内,路由通过放置在公共子网中的 NAT 网关指向 Internet。将 RDS 实例放在私有子网中。

参考:

  • 设置 API 网关私有集成:API 网关私有集成使得在 Amazon VPC 中公开您的 HTTP/HTTPS 资源以供 VPC 外部的客户端访问变得简单 -- <https://docs.aws.amazon.com/ apigateway/latest/developerguide/set-up-private-integration.html>
  • NAT 网关:您可以使用 NAT 网关,以便私有子网中的实例可以连接到 VPC 外部的服务,但外部服务无法启动与这些实例的连接 -- <https://docs.aws.amazon.com/vpc /latest/userguide/vpc-nat-gateway.html>

现在,来到你的最终问题清单:

  1. 将您的 EC2 实例放置在私有子网中,并带有通往 NAT 网关的路由,放置在具有 Internet 网关的公共子网中以访问 Internet。将 RDS 实例放在私有子网中。
  2. 内部国家图书馆。按照 https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-nlb-for-vpclink-using-console.html 中的说明进行操作
  3. 在 API 网关的 REST API 配置中,私有集成的集成请求部分,如果您使用集成类型“VPC 链接”,则配置选项是“VPC 链接”作为您需要创建的资源,以使 API 网关成为-NLB 连接,以及“端点 URL”,它是来自内部 NLB 的 DNS 名称(A 记录)或在您的 EC2 实例中运行的服务器的 DNS 名称。不要使用集成类型“AWS 服务”(因此,没有 AWS 子域)。
  4. 不要使用 EC2 实例来抵御 DDoS 攻击。改用 API 网关 -- https://docs.aws.amazon.com/whitepapers/latest/aws-best-practices-ddos-resiliency/protecting-api-endpoints-bp4.html 并通过 WebACL 利用 AWS WAF 来保护您的 REST API 端点——https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html

亲切的问候,

路易斯

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则