我的情况:我有一个 SQS 队列,其中有一组自动扩展的 EC2 工作器将来自队列的消息处理到不同区域的数据库中。
EC2 工作者隐含的网络需求:
- 访问公共互联网与 SQS 进行交互
- 访问公共互联网与不同区域的 dB 进行交互
- 限制未经请求的入站流量,因为这些不是 Web 服务器
网络选项(我所知道的):
- 将 EC2 Workers 放在没有弹性 IP 的私有子网中,并允许它们通过在公共子网中运行的 NAT 与互联网通信。
- 将 EC2 Workers 放在具有公共/弹性 IP 地址的公共子网中。将它们放在限制性安全组中,以禁止意外入站流量。将限制性 ACL 应用于子网以在子网级别禁止意外入站流量。
我看到过很多关于使用第一种方法进行 NAT 的建议,包括 AWS 自己的文档。但我没有看到任何关于第二种方法的建议。
NAT 似乎是一种昂贵的选择,并且很容易成为网络瓶颈,并且是单点故障。为什么经常推荐此选项?第二种方法是否存在我不知道的缺点或交易障碍?
这个问题类似但不相同。我也读过这stack overflow 上的线程。我还阅读了AWS VPC 用户指南。
答案1
许多配置需要共享单个公共 IP。它们需要 NAT。您的场景的网络流量全部由内部发起。(SQS 是轮询的。)对于这种类型的流量,提供 NAT 实例没有任何优势。