无法将 Lambda 函数连接到 Aurora RDS



我正在使用无服务器框架来尝试让我的lambda函数将一些记录扔到"始终在线"的Aurora RDS实例中。到目前为止,我在使用 mysql npm 包并尝试连接到 RDS 实例时遇到了连接超时。

这是我检查\尝试过的:

  • 将 lambda 函数放在 VPC 中的无服务器 .yml 中
  • 在 YML 中包含与该 VPC 关联的 3 个子网
  • 在 servless.yml 中指定安全组
  • 已检查该服务组中是否存在允许访问服务组本身的 Aurora 路由规则
  • 添加了 EC2 弹性接口 IAM 角色语句

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 数据库时的典型配置为:

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

也就是说,RDS-SG在入站规则中专门引用Lambda-SG

如果 Lambda 函数还需要连接到互联网,则 VPC 的公有子网中需要有一个 NAT 网关。

相关内容

  • 没有找到相关文章

最新更新