VPC 之外的 AWS Elasticache/Redis 访问?

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

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

stack overflow AWS Elasticache/Redis Access Outside of VPC?
原文答案
author avatar

接受的答案

我认为在您的情况下,有 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,反之亦然。这应该是最好的解决方案,但涉及到编码方面的更多工作。

答案:

作者头像

两个 lambda 函数的问题是调用另一个 lambda 函数仅用于发出缓存请求时的额外延迟。因为 lambda 调用至少需要额外的 10-20ms,这比 redis 请求花费的时间要长得多。

相关问题