从AWS Lambda函数连接到ElastiCache群集

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

我不知道这是一个configuration问题还是根本不可能。

PS:我从一个EC2实例做了testing,我可以连接到Redis节点。 此外,Lambda函数和Redis节点在相同的区域中。


更新(2015年10月9日):

亚马逊宣布VPC为AWS Lambdafunction。 详情在这里

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

更新(2016年2月11日):亚马逊推出VPC for AWS Lambda。

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

要扩展@ RohitChatterjee的评论,请参阅http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/GettingStarted.AuthorizeAccess.html上; AWS文档的完整引用。

所有ElastiCache群集只能从Amazon EC2实例访问,群集及其相关的Amazon EC2实例必须位于同一个Amazon Virtual Private Cloud(VPC)中, 如果您必须从Amazon EC2实例以外的某个位置访问ElastiCache群集在同一VPC中,作为解决方法,您可以在caching的VPC中设置一个或多个Amazon EC2主机,以充当外部代理 。设置主机会增加额外的networking跳跃或额外的安全套接字层(SSL)开销和成本,或者两者兼而有之,但是对于许多用例,这些成本很小,您必须授予代理Amazon EC2实例访问您的集群的权限。

因此,没有AWS Lambda无法直接连接到弹性caching集群。
您必须使用ec2作为代理。 你可以在你的一个实例上设置一个简单的HTTP_proxy,或者使用DNAT和SNAT进行端口转发,例如: https://serverfault.com/a/586553

build立一个HTTP代理或iptables将不会工作,原因如下:

Redis调用不是HTTP ,不会由HTTP代理处理。 iptables (或任何端口转发)将不会接受域名作为目的地或由于每次都需要DNSparsing度而效率非常低。

最好的和方便的方法是将twemproxy安装在EC2机器中,并通过它发送请求。 作为奖励,您突然部署了一个梦幻般的分片策略。

我遇到了同样的问题。 我没有find直接的解决scheme,而是使用Lambda函数连接到使用socket.io的EC2服务器,这很容易,并向该EC2服务器发送事件。

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

希望这可以帮助! 如果有人发现如何直接从Lambda连接到ElastiCache,我仍然很想知道!