从 AWS Lambda 函数连接到 ElastiCache 集群

Connect to ElastiCache cluster from AWS Lambda function

是否可以从 AWS Lambda 函数连接到 Redis ElastiCache 集群?

我不知道这是配置问题还是根本不可能。

PS:我在EC2实例上做了一个测试,可以连接到Redis节点。 Lambda函数和Redis节点也在同一个区域。


更新(2015 年 10 月 9 日):

Amazon 宣布了用于 AWS Lambda 函数的 VPC。 Details here

这意味着我们现在可以访问 VPC 安全组后面的 AWS 中的任何资源,包括 ElastiCache 和 RDS 机器。

更新(2016 年 2 月 11 日): Amazon 为 AWS Lambda 推出了 VPC。

https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-within-a-vpc-using-aws-lambda/

我遇到了同样的问题。我没有找到直接的解决方案,而是使用 Lambda 函数使用 socket.io 连接到 EC2 服务器,这非常简单并向该 EC2 服务器发出事件。

当 EC2 服务器收到事件时,它会执行必要的 Redis 任务(图像缩略图生成后的数据库清理)。

希望对您有所帮助!如果有人知道如何直接从 Lambda 连接到 ElastiCache,我仍然很想知道!

截至 2016 年 2 月,AWS 允许使用 lambda 函数连接到 Elasticache。参考Access Resources within a VPC using AWS Lambda. Here is a link how it works - Tutorial: Configuring a Lambda Function to Access Amazon ElastiCache in an Amazon VPC

由于以下原因,无法设置 HTTP 代理或 iptables:

Redis 调用不是 HTTP,不会由 HTTP 代理处理。 iptables(或与此相关的任何端口转发)要么不接受域名作为目的地,要么由于每次都需要 DNS 解析而效率极低。

最好和方便的方法是在 EC2 机器上安装 twemproxy 并通过它路由您的请求。作为奖励,您突然也部署了出色的分片策略。

我已经尝试将 lambda 连接到 memcached elasticache,它工作正常。 Redis应该也是可行的。

要记住几件事:

  1. Lambda 和 Elasticache 必须在同一个 VPC 中。
  2. 当 lambda 在 VPC 中为 运行 时,它将无法访问互联网(因此无法访问 public API)。为此需要 NAT 网关。

您可以使用 (Redislabs) 无需 VPC 即可连接的托管云解决方案。

云解决方案不会有 VPC 冷启动,但会有延迟开销,因为对托管 redis 的调用是通过 Internet 进行的。当 lambda 和 redis 部署在同一区域时,额外的延迟约为 20 毫秒。这对于我的用例来说是可管理的,我不需要担心 VPC。