是否可以从AWS Lambda函数连接到Redis ElastiCache集群?
我无法弄清楚这是一个配置问题还是根本不可能 .
PS:我从EC2实例进行了测试,我可以连接到Redis节点 . 此外,Lambda函数和Redis节点位于同一区域 .
UPDATE (09 Oct 2015):
亚马逊宣布推出适用于AWS Lambda功能的VPC . Details here
这意味着我们现在可以访问VPC安全组后面的AWS中的任何资源,包括ElastiCache和RDS计算机 .
UPDATE (11 Feb 2016): 亚马逊为AWS Lambda推出了VPC .
https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-within-a-vpc-using-aws-lambda/
4 回答
截至2016年2月,AWS允许使用lambda函数连接到Elasticache . 请参阅Access Resources within a VPC using AWS Lambda . 这是一个如何工作的链接 - Tutorial: Configuring a Lambda Function to Access Amazon ElastiCache in an Amazon VPC
由于以下原因,设置HTTP代理或iptables不起作用:
Redis调用不是
HTTP
,并且不会由HTTP代理处理 .iptables
(或任何端口转发)将不会接受域名作为目的地,或者由于每次都需要DNS解析而效率极低 .最方便的方法是在EC2机器上安装twemproxy并通过它来路由您的请求 . 作为奖励,您突然也部署了一个梦幻般的分片策略 .
我遇到了同样的问题 . 我没有找到直接的解决方案,而是使用Lambda函数使用socket.io连接到EC2服务器,这非常简单,并向该EC2服务器发出事件 .
当EC2服务器收到事件时,它执行了必要的Redis任务(生成图像缩略图后的数据库清理) .
希望这可以帮助!如果有人发现如何直接从Lambda连接到ElastiCache,我仍然很想知道!
我尝试将lambda连接到memcached弹性包,它工作正常 . Redis也应该可行 .
要牢记几件事:
Lambda和Elasticache必须位于同一个VPC中 .
当lambda在VPC中运行时,它赢得了't have access to internet (so access to public APIs won' t工作) . NATGateway是必需的 .