无法将RDS数据库连接到Lambda函数(使用无服务器框架)

时间:2019-05-03 11:14:00

标签: amazon-web-services aws-lambda amazon-rds serverless-framework amazon-vpc

我想将我的RDS数据库表与lambda函数连接起来,为此,我创建了一个lambda函数并在rds中使用knex.js和postgres数据库,但得到了knex对象,但无法使用任何查询。

要提供有关服务的更多信息,

  • 可以从任何地方访问RDS数据库服务器安全组
  • 我已在该函数的serverless.yml文件中提供了vpc。
  • lambda和rds的区域不同,但是不确定是否是问题所在。

我的无服务器功能

  • 注意:当我单独尝试此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函数连接的问题,并让我知道我做错了什么或丢失了什么。

1 个答案:

答案 0 :(得分:1)

我认为问题在于RDS和Lambda位于不同的区域,这意味着它们也位于不同的VPC中,因为VPC无法跨越多个区域。尽管可以启用Inter VPC对等(https://aws.amazon.com/vpc/faqs/#Peering_Connections)。

考虑一下,当您在VPC中部署Lambda函数时,只要您不将NAT网关连接到该VPC /子网,就无法访​​问Internet。

如果RDS向世界开放(真的需要吗?),您可以尝试在同一区域(没有VPC)进行部署,并验证其是否有效。