我创建了一个AWS Lambda函数:
在本地,使用Node,我可以通过JDBC成功连接到Redshift实例,并执行查询。
var conString = "postgresql://USER_NAME:PASSWORD@JDBC_URL”;
var client = new pg.Client(conString);
client.connect(function(err) {
if(err) {
console.log('could not connect to redshift', err);
}
// omitted due to above error
但是,当我在AWS Lambda上执行该功能时(它包含在async#waterfall块中),AWS Cloudwatch日志告诉我,AWS Lambda函数在60秒后超时。
关于为什么我的功能无法连接的任何想法?
答案 0 :(得分:2)
我发现要么将Redshift安全组公开给所有来源,要么就是没有。因为Lambda函数不在固定地址甚至固定范围的IP地址上运行,这对用户完全透明(无AKA服务器)。
我刚看到亚马逊宣布新的Lambda功能,以支持VPC昨天。我想如果我们可以在VPC中运行Redshift集群,这可以解决问题。
答案 1 :(得分:0)
如果您使用的是无服务器框架v1.5.0,则应添加:
iamRoleStatements:
- Effect: Allow
Action:
- ec2:CreateNetworkInterface
Resource: '*'
- Effect: Allow
Action:
- ec2:DeleteNetworkInterface
- ec2:DescribeNetworkInterfaces
Resource: 'arn:aws:ec2:${self:provider.region}:*:network-interface/*'
还应将所有securityGroupIds添加到Inbounds Rules,如下所示:
更多信息:https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration