【问题标题】:AWS Elasticache/Redis Access Outside of VPC?VPC 之外的 AWS Elasticache/Redis 访问?
【发布时间】:2021-09-22 00:36:11
【问题描述】:

我有一个 lambda,我想在我的 VPC 之外运行以避免 NAT 成本。它需要在 VPC 中访问的唯一服务是 Elasticache 实例。我无法在我的 lambda 和 Elasticache 之间创建 VPC 端点,所以我不确定如何在不将我的 lambda 放入 VPC 并通过 NAT 的情况下连接到它。

如何连接到 VPC 外部的 redis 实例?堡垒服务器?

【问题讨论】:

  • 如果您将 lambda 放入 VPC,为什么需要 NAT 来连接您的 EC?
  • @Marcin 我想在 VPC 之外运行 lambda 以避免 NAT。因为 EC 必须存在于 VPC 中,所以我不知道如何在不将 lambda 放入 VPC 的情况下将我的 lambda 连接到 EC
  • 将其放入 VPC 是正确的做法。您的 lambda 无需 NAT 即可与 VPC 中的 EC 交互。
  • @Marcin NAT 成本不是因为与 EC 的连接...... lambda 正在访问超出 vpc 的资源,它的成本为 $4.5k/mo。如果不需要连接到 EC,我可以简单地将其移出 VPC。
  • 如果您尝试通过某些堡垒通过 Internet 访问 EC,您将引入相当大的延迟。您是否考虑过 NAT 网关的替代方案?也许运行小型 NAT 实例(不是网关)会更好?

标签: amazon-web-services aws-lambda amazon-vpc amazon-elasticache


【解决方案1】:

我认为在您的情况下有 3 种可能的解决方案:

  1. 就像上面一位说的那样,在 EC2 上部署我们自己的 NAT 实例,而不是使用可能非常昂贵的 AWS NAT 网关。但是因为您需要自己设置/维护和扩展 NAT 实例。
  2. 在 VPC 的公共子网中的 EC2 中部署代理,即部署 Nginx 并将 proxy_pass 设置为 VPC 中的 ElastiCache 集群。这样,您在 VPC 外部的 lambda 可以为 ElastiCache 请求调用 Nginx 弹性 IP。但请考虑将 Network LB 放在 Nginx EC2 的 Auto Scaling 组之前以实现弹性。此解决方案的主要关注点是安全性,您的 nginx 安全组需要打开 0.0.0.0/0 以供 EC 访问(因为 VPC 外部的 lambda 具有不同的公共 IP,并且本身没有安全组),确保您启用传输中的加密和访问控制使用Redis 中的 AUTH 或 RBAC(例如,如果您的 EC 是 redis)
  3. 1 和 2 都涉及自己构建 EC2 实例,这会增加维护负担。我认为最好的解决方案是将您的 Lambda 函数分解为两个函数,一个处理 EC 调用(Lambda A),另一个处理 Internet API 调用(Lambda B),将 Lambda A 放在 VPC 中,而将 Lambda B 放在 VPC 之外,以及只需使用调用 API 从 A 调用 Lambda B,反之亦然。这应该是最好的解决方案,但涉及到更多的编码工作。

【讨论】:

  • 这很糟糕,但我们最终还是选择了#3。这似乎是最不坏的解决方案。未来我希望 AWS 提供某种公共 EC 访问或允许公共子网 lambda 访问互联网。
猜你喜欢
  • 1970-01-01
  • 2018-04-29
  • 2014-08-13
  • 1970-01-01
  • 2021-07-23
  • 2019-09-12
  • 1970-01-01
  • 2021-09-14
  • 2019-08-30
相关资源
最近更新 更多