AWS Elasticache/Redis 在 VPC 之外访问?
AWS Elasticache/Redis Access Outside of VPC?
我有一个 lambda,我想 运行 在我的 VPC 之外以避免 NAT 成本。它需要在 VPC 中访问的唯一服务是 Elasticache 实例。我无法在我的 lambda 和 Elasticache 之间创建 VPC 端点,所以我不确定如何在不将我的 lambda 放入 VPC 并通过 NAT 的情况下连接到它。
如何连接VPC外的redis实例?堡垒服务器?
我认为在你的情况下有 3 种可能的解决方案:
- 就像上面一位人士所说的那样,在 EC2 上部署我们自己的 NAT 实例,而不是使用 AWS NAT 网关,后者可能非常昂贵。但是您当然需要自己设置/维护和扩展 NAT 实例。
- 在VPC的public子网的EC2中部署一个代理,说部署一个Nginx并设置proxy_pass到VPC中的ElastiCache集群。通过这种方式,您在 VPC 外部的 lambda 可以为 ElastiCache 请求调用 Nginx 弹性 IP。但是请考虑将 Network LB 放在 Nginx EC2 的自动缩放组前面以实现弹性。此解决方案的主要关注点是安全性,您的 nginx 安全组需要打开 0.0.0.0/0 以供 EC 访问(因为 VPC 外部的 lambda 具有不同的 public IP,并且本身没有安全组),确保启用传输中加密以及在 Redis 中使用 AUTH 或 RBAC 进行访问控制(例如,如果您的 EC 是 redis)
- 1和2都是自己搭建EC2实例,增加了维护负担。我认为最好的解决方案是将您的 Lambda 函数分解为两个函数,一个处理 EC 调用 (Lambda A),另一个处理互联网 API 调用 (Lambda B),将 Lambda A 放入 VPC,同时保留 Lambda B在 VPC 外部,只需使用 invoke API 从 A 调用 Lambda B,反之亦然。这应该是最好的解决方案,但在编码方面涉及更多工作。
我有一个 lambda,我想 运行 在我的 VPC 之外以避免 NAT 成本。它需要在 VPC 中访问的唯一服务是 Elasticache 实例。我无法在我的 lambda 和 Elasticache 之间创建 VPC 端点,所以我不确定如何在不将我的 lambda 放入 VPC 并通过 NAT 的情况下连接到它。
如何连接VPC外的redis实例?堡垒服务器?
我认为在你的情况下有 3 种可能的解决方案:
- 就像上面一位人士所说的那样,在 EC2 上部署我们自己的 NAT 实例,而不是使用 AWS NAT 网关,后者可能非常昂贵。但是您当然需要自己设置/维护和扩展 NAT 实例。
- 在VPC的public子网的EC2中部署一个代理,说部署一个Nginx并设置proxy_pass到VPC中的ElastiCache集群。通过这种方式,您在 VPC 外部的 lambda 可以为 ElastiCache 请求调用 Nginx 弹性 IP。但是请考虑将 Network LB 放在 Nginx EC2 的自动缩放组前面以实现弹性。此解决方案的主要关注点是安全性,您的 nginx 安全组需要打开 0.0.0.0/0 以供 EC 访问(因为 VPC 外部的 lambda 具有不同的 public IP,并且本身没有安全组),确保启用传输中加密以及在 Redis 中使用 AUTH 或 RBAC 进行访问控制(例如,如果您的 EC 是 redis)
- 1和2都是自己搭建EC2实例,增加了维护负担。我认为最好的解决方案是将您的 Lambda 函数分解为两个函数,一个处理 EC 调用 (Lambda A),另一个处理互联网 API 调用 (Lambda B),将 Lambda A 放入 VPC,同时保留 Lambda B在 VPC 外部,只需使用 invoke API 从 A 调用 Lambda B,反之亦然。这应该是最好的解决方案,但在编码方面涉及更多工作。