Dan*_*aan 4 amazon-vpc amazon-redshift aws-lambda
我的Redshift群集位于私有VPC中.我在Node.js中写了以下AWS Lamba,它应该连接到Redshift(为这个问题打扮):
'use strict';
console.log('Loading function');
const pg = require('pg');
exports.handler = (event, context, callback) => {
var client = new pg.Client({
user: 'myuser',
database: 'mydatabase',
password: 'mypassword',
port: 5439,
host: 'myhost.eu-west-1.redshift.amazonaws.com'
});
// connect to our database
console.log('Connecting...');
client.connect(function (err) {
if (err) throw err;
console.log('CONNECTED!!!');
});
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,我一直在60.00秒后让任务超时.我在日志" 连接... "中看到,但从未" 连接!!! ".
我到目前为止采取的步骤是为了让它发挥作用:
那么,有没有人对我应该检查什么有任何建议?
*我应该补充一点,我不是网络专家,所以也许我在某个地方犯了错误.
超时可能是因为您的VPC中的lambda无法访问Internet以连接到您的群集(您似乎使用公共主机名进行连接).您的连接选项取决于您的群集配置.由于lambda函数和集群都在同一个VPC中,因此应使用集群的专用IP连接到它.在您的情况下,我认为简单地使用私有IP应该可以解决您的问题.
根据您的群集是否可公开访问,需要记住一些要点.
如果您的群集配置为不可公开访问,则可以使用专用IP从运行在VPC中的lambda 连接到群集,它应该可以正常工作.
如果VPC中有可公开访问的群集,并且您希望使用VPC内的专用IP地址连接到该群集,请确保以下VPC参数为true/yes:
如果不设置这些参数true,VPC内的连接将解析为EIP而不是私有IP,并且如果没有Internet访问(需要NAT网关或NAT实例),您的lambda将无法连接.
此外,这里的文档中的一个重要说明.
如果VPC中有现有的可公开访问的群集,则VPC内的连接将继续使用EIP连接到群集,即使设置了这些参数,直到您调整群集大小.任何新群集都将遵循在同一VPC内连接到可公开访问的群集时使用私有IP地址的新行为.