我在AWS上有一个lambda函数和一个RDS实例。我尝试了以下几种方法来连接它:
将它们放在同一个VPC、同一个安全组、同一个子网中。当我尝试从lambda函数连接到RDS实例(MariaDB)时,我得到了一个Error: connect ETIMEDOUT。我还为Lambda函数赋予了一个角色,该角色拥有完整的EC2、RDS、VPC和Lambda权限。
但是,如果我允许所有流量进入RDS实例安全组(我知道这很糟糕!)并将Lambda函数从VPC中移除后即可连接(验证凭证等是否正确)
编辑:我已经根据您的评论进行了更改,并包含了有关角色和安全组设置的额外信息。请看下面的屏幕截图。配置屏幕截图如下:
Lambda函数VPC设置:

RDS实例VPC设置:

安全组入站设置:

lambda函数角色:

发布于 2018-01-27 00:05:50
您是否已按照此URL中的说明配置了角色?
https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-create-iam-role.html
尝试按照https://docs.aws.amazon.com/lambda/latest/dg/vpc.html中的说明,在lambda函数中添加"--vpc-config SubnetIds=逗号分隔-vpc-子网ids,SecurityGroupIds=comma-separated-security-group-ids \“。
此外,RDS是公开的。你的设计需要这个吗?
发布于 2018-10-12 22:01:38
我在使用mysql npm包时遇到了类似的问题。在调试过程中,我尝试使用以下命令查看主机名解析为哪个ip地址:
const { lookup: lc } = require('dns');
const { promisify } = require('util');
const lookup = promisify(lc);
const { address } = await lookup('<my-hostname.com>');然后,我检查了IP地址是否在为RDS实例和子网指定的范围内,并且与可用区匹配。
问题是mysql可能试图从公共DNS解析主机名。因此,我没有传递主机名,而是将解析后的IP地址传递到mysql的初始化过程中,它就起作用了。
https://stackoverflow.com/questions/48458144
复制相似问题