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