我想将我的RDS数据库表与lambda函数连接起来,为此,我创建了一个lambda函数并在rds中使用knex.js和postgres数据库,但得到了knex对象,但无法使用任何查询。
要提供有关服务的更多信息,
我的无服务器功能
module.exports.storeTransaction = async (event) => {
...
knex('Transactions')
.select('*')
.then(response => {
console.log('response is ');
console.log(response);
})
...
};
Serverless.yml文件
service: <service-name>
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: us-east-1
package:
exclude:
- node_modules/**
plugins:
- serverless-plugin-include-dependencies
functions:
storeEmail:
handler: handler.storeTransaction
vpc:
securityGroupIds:
- <security-group-id-of-rds>
subnetIds:
- <subnet-id-of-rds>
- <subnet-id-of-rds>
...
region:
- us-east-1a
events:
- http:
path: email/store
method: post
cors: true
因此,您能确定我为什么无法将rds db与lambda函数连接的问题,并让我知道我做错了什么或丢失了什么。
答案 0 :(得分:1)
我认为问题在于RDS和Lambda位于不同的区域,这意味着它们也位于不同的VPC中,因为VPC无法跨越多个区域。尽管可以启用Inter VPC对等(https://aws.amazon.com/vpc/faqs/#Peering_Connections)。
考虑一下,当您在VPC中部署Lambda函数时,只要您不将NAT网关连接到该VPC /子网,就无法访问Internet。
如果RDS向世界开放(真的需要吗?),您可以尝试在同一区域(没有VPC)进行部署,并验证其是否有效。