无法将 Lambda 函数连接到 Aurora RDS

Can't connect Lambda function to Aurora RDS

我正在使用无服务器框架尝试让我的 lambda 函数将一些记录放入 'always on' Aurora RDS 实例中。到目前为止,在使用 mysql npm 包并尝试连接到 RDS 实例时,我遇到了连接超时问题。

这是我的 checked\tried:

serverless.yml:

service: myrds

provider:
  name: aws
  runtime: nodejs10.x
  stage: ${opt:stage, 'dev'}
  region: ${opt:region, 'us-east-2'}
  iamRoleStatements:
    - Effect: "Allow"
      Action: 
        - "ec2:CreateNetworkInterface"
        - "ec2:DescribeNetworkInterfaces"
        - "ec2:DeleteNetworkInterface"
      Resource: "*"
  - Effect: "Allow"
      Action:
        - "sqs:SendMessage"
        - "sqs:GetQueueUrl"
        - "sqs:ListQueues"
      Resource:
        Fn::GetAtt: 
          - RDSQueue
          - Arn 
    - Effect: "Allow"
      Action:
        - "sqs:SendMessage"
        - "sqs:GetQueueUrl"
        - "sqs:ListQueues"
      Resource:
        Fn::GetAtt: 
          - DeadLetterQueue
          - Arn 
 functions:
   consumer:
    handler: handler.consumer
    timeout: 20
    vpc:
    securityGroupIds:
      - sg-123456
    subnetIds:
      - subnet-11111
      - subnet-22222
      - subnet-33333
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - RDSQueue
              - Arn
    environment:
      NODE_ENV: ${opt:stage, 'dev'}
  resources:
    Resources:
      RDSQueue:
        Type: 'AWS::SQS::Queue'
        Properties:
          QueueName: "RDSQueue-${opt:stage, 'dev'}"
          RedrivePolicy:
            deadLetterTargetArn:
              "Fn::GetAtt":
                - DeadLetterQueue
                - Arn
            maxReceiveCount: 3
      DeadLetterQueue:
        Type: 'AWS::SQS::Queue'
        Properties:
          QueueName: "DeadLetterQueue-${opt:stage, 'dev'}"

我在这里错过了什么?从 SQS 队列触发时连接超时。

从 AWS Lambda 函数连接到 Amazon RDS 数据库时的典型配置是:

  • Lambda 函数连接到 VPC 中的私有子网
  • Lambda 函数 (Lambda-SG) 上的安全组,允许所有出站访问
  • RDS 数据库 (RDS-SG) 上的安全组,其入站规则允许来自 Lambda-SG
  • 的适当端口(例如 3306)上的流量

RDS-SG入站规则中具体引用Lambda-SG

如果Lambda函数也需要连接到Internet,那么VPC的public子网中就需要有一个NAT网关。