我正在尝试从lambda连接到我的RDS实例.我在本地写了lambda并在本地测试,一切都很好用.我部署到lambda,突然它不起作用.下面是我正在运行的代码,如果有帮助,我将通过kinesis流调用lambda.
'use strict';
exports.handler = (event, context, handlerCallback) => {
console.log('Recieved request for kinesis events!');
console.log(event);
console.log(context);
const connectionDetails = {
host: RDS_HOST,
port: 5432,
database: RDS_DATABASE,
user: RDS_USER,
password: RDS_PASSWORD
};
const db = require('pg-promise')({promiseLib: require('bluebird')})(connectionDetails);
db
.tx(function () {
console.log('Beginning query');
return this.query("SELECT 'foobar'")
.then(console.log)
.catch(console.log)
.finally(console.log);
})
.finally(() => handlerCallback());
};
Run Code Online (Sandbox Code Playgroud)
以下是来自云监视的日志,如果它有帮助:
START RequestId: *********-****-****-****-********* Version: $LATEST
2016-05-31T20:58:25.086Z *********-****-****-****-********* Recieved request for kinesis events!
2016-05-31T20:58:25.087Z *********-****-****-****-********* { Records: [ { kinesis: [Object], eventSource: 'aws:kinesis', eventVersion: '1.0', eventID: …Run Code Online (Sandbox Code Playgroud) javascript amazon-web-services amazon-rds amazon-kinesis aws-lambda
我正在尝试从AWS Lambda连接到Internet,我有一个带NAT网关的私有子网,但该功能仍无法连接到Internet ...
因此,我尝试使用我的AWS Lambda函数访问互联网。我已经尝试过Java和NodeJS 4,但都没有碰运气。
我有一个带有子网的私有VPC:10.0.10.0/24
如您所见,我已经在NAT网关中添加了一条规则:
我将AWS Lambda配置如下:
选择该子网(10.0.10.0)并使用对所有内容(入站和出站)都开放的安全组
但是,当我尝试从Internet下载某些内容时,lambda超时了:
'use strict';
console.log('Loading function');
var http = require("http");
exports.handler = (event, context, callback) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
console.log('value1 =', event.key1);
console.log('value2 =', event.key2);
console.log('value3 =', event.key3);
var options = {
host: 'www.virgilio.it',
port: 80,
path: '/'
};
http.get(options, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
callback(null, event.key1); // Echo back the first key …Run Code Online (Sandbox Code Playgroud) 我无法在生产中从Amazon Lambda成功连接到RDS。对于Amazon Lambda,我使用无服务器框架,可以离线执行sls,我可以从本地主机连接RDS,但在生产中,Amazon Lambda不能。
两者都在同一个VPC中,在同一个安全组中,该组具有所有流量入站访问权限,并且有一个指向Vpc的CIDR的规则。
我附加了以下权限:AmazonRDSFullAccess,AWSLambdaFullAccess,AmazonVPCFullAccess,AWSLambdaExecute和AWSLambdaVPCAccessExecutionRole。
感谢帮助。
我正在尝试使用Apollo-Server-Lambda等在AWS-Lambda上使用无服务器框架构建graphQL API .我需要使用一个不公开的PostgreSQL RDS实例.
我可以启动并运行lambda,并在不在VPC中时发回请求.我可以启动并运行Postgres RDS数据库并连接到PgAdmin(当处于公共可用模式时).
问题是,一旦我将RDS Postgres"非公开"并试图让所有这些片段一起说话我就失败了.
我尝试了很多不同的方法.
这经常被描绘成魔术.这是精彩的写作https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
我无法使用我的lambdas访问Postgres.所以我的第一个问题.
我是否需要一个NAT网关来为VPC中的lambdas传入(入口)api调用?我目前的理解是,也许我只需要一个NAT网关来为我的lambdas拨打其他api的电话,例如S3.它是否正确?
接下来.我为我的lambdas创建了一个安全组,并将此安全组添加到为RDS创建的安全组的入站列表中.我的理解是lambda应该如何获得RDS.我没有这么幸运.也许这与公共或非公共子网有关?也许这与我对NAT必要性的理解有关?
基本上我能够获得的唯一可见性是Lambdas在20或30秒后超时,这取决于我们在尝试私密连接到postgres时的限制.Cloudwatch日志不会透露任何其他信息
最后,就目前而言,一旦"不公开"将我的开发机器连接到Postgres的最佳方法是什么?我将我的机器IP列为入站TCP/IP到端口5432到RDS安全组中的postgres,但这似乎没有给我我希望的访问权限.我真的需要连接到VPC的VPN吗?什么是最简单的方法?
我已经完成了本教程,对Postgres进行了基本的修改https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html
我已阅读并考虑了此问题的答案以及更多 允许AWS Lambda访问RDS数据库
我已经有很多成功 - 使用无服务器框架的完全部署,在serverless.yml配置上有很多变化来尝试这些选项,否则我会展示一个我认为失败的特定的一个,但这更广泛地说我似乎无法准确掌握所有这些VPC,安全组,路由表等应该互动.
任何帮助非常感谢!
amazon-web-services amazon-rds amazon-vpc aws-lambda serverless-framework