无法将 RDS 数据库连接到 Lambda 函数(使用无服务器框架)
Cannot connect RDS Database to a Lambda Function (Using serverless framework)
我想将我的 RDS 数据库 table 与我的 lambda 函数连接起来,为此,我创建了一个 lambda 函数并在 rds 中使用了 knex.js 和 postgres 数据库,我得到了 knex 对象,但我无法处理任何查询。
要提供有关服务的更多信息,
- RDS 数据库服务器安全组可以从任何地方访问
- 我在函数的serverless.yml文件里给了vpc
- lambda和rds的region不一样,不知道是不是问题
我的无服务器函数
- 注意:当我单独尝试时,这个 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
所以你能确定我的问题,为什么我不能用 lambda 函数连接我的 rds 数据库,并让我知道我做错了什么或遗漏了什么。
我觉得问题是RDS和Lambda在不同的region,也就是在不同的VPC,一个VPC不能跨越多个region。尽管您可以启用 Inter VPC Peering (https://aws.amazon.com/vpc/faqs/#Peering_Connections)。
考虑一下,当您在 VPC 中部署 lambda 函数时,只要您不将 NAT 网关附加到该函数,它就无法访问互联网 VPC/subnet。
如果 RDS 对世界开放(真的有必要吗??),您可以尝试在同一区域(不使用 VPC)部署并验证是否可行。
我想将我的 RDS 数据库 table 与我的 lambda 函数连接起来,为此,我创建了一个 lambda 函数并在 rds 中使用了 knex.js 和 postgres 数据库,我得到了 knex 对象,但我无法处理任何查询。
要提供有关服务的更多信息,
- RDS 数据库服务器安全组可以从任何地方访问
- 我在函数的serverless.yml文件里给了vpc
- lambda和rds的region不一样,不知道是不是问题
我的无服务器函数
- 注意:当我单独尝试时,这个 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
所以你能确定我的问题,为什么我不能用 lambda 函数连接我的 rds 数据库,并让我知道我做错了什么或遗漏了什么。
我觉得问题是RDS和Lambda在不同的region,也就是在不同的VPC,一个VPC不能跨越多个region。尽管您可以启用 Inter VPC Peering (https://aws.amazon.com/vpc/faqs/#Peering_Connections)。
考虑一下,当您在 VPC 中部署 lambda 函数时,只要您不将 NAT 网关附加到该函数,它就无法访问互联网 VPC/subnet。
如果 RDS 对世界开放(真的有必要吗??),您可以尝试在同一区域(不使用 VPC)部署并验证是否可行。