使用无服务器框架将Lambda连接到Elasticache

时间:2016-10-04 14:17:34

标签: amazon-web-services redis aws-lambda serverless-framework

我正在尝试使用无服务器框架(v 0.5.6)从Lambda函数访问AWS Elasticache集群,而不会失去对Dynamodb的访问权限。我试过使用这个Gist没有运气。在Lambda函数内部,我做的第一件事就是连接到Redis实例,但我不断获得超时,我已经双重检查了CloudFormation输出变量及其在函数内部的可见性以及VPC的Lambda角色/策略,但仍然没有...我的避风港没有找到关于如何使用CloudFormation和Serverless创建VPC和安全组的任何指南,以便按照建议here创建公共和私有子网,NAT和Internet网关。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您必须将Lambda函数放在ElastiCache集群所在的VPC中。当然,一旦您这样做,Lambda函数只能访问VPC中存在的资源,因此它将无法再访问DynamoDB 。解决方案是向VPC添加NAT网关,这将允许Lambda函数访问VPC外部的资源。

我认为设置VPC和NAT网关不属于无服务器框架,但我不是该框架的专家。我建议通过AWS控制台手动配置或通过CloudFormation等方式进行配置,然后在无服务器框架配置中指定它需要使用的VPC。

答案 1 :(得分:2)

虽然没有正确记录,但您实际上可以直接在无服务器配置文件中配置VPC(请参阅link

版本0.5

define( 'YOUR_PLUGIN_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
require_once YOUR_PLUGIN_PATH . 'includes/admin-page.php'
require_once YOUR_PLUGIN_PATH . 'admin/classes.php'

版本1.0

# s-function.json

{
 "name": "hello",
 "runtime": "nodejs4.3",
 "handler": "handler.hello”,
 "endpoints": [],
 "events": [],
 "vpc": {
    "securityGroupIds": ["sg-123456"],
    "subnetIds": [
      "subnet-abc1",
      "subnet-abc2",
      "subnet-abc3",
    ]
  }
}