无法从Lambda函数访问非公开访问的RDS/MYSQL
问题描述:
我有一个Lambda函数,它与RDS实例分配给相同的VPC和安全组。无法从Lambda函数访问非公开访问的RDS/MYSQL
安全组允许来自任何地方的所有入站/出站流量。
的lambda函数的执行角色有AWSLambdaVPCAccessExecutionRole,AmazonVPCFullAccess和AmazonRDSFullAccess。
由于某种原因,当我测试这个计划的事件时,我总是得到这个错误。
(2003年,“无法连接到MySQL服务器上的 '###。###。us-east-1.rds.amazonaws.com'([错误-3]临时名称解析失败)“)
据我可以告诉Lambda应该在相同的VPC访问对方。我正在使用一个简单的PYMSQL调用。
try:
conn = pymysql.connect(str(os.environ['rds_host']), user=str(os.environ['db_username']), passwd=str(os.environ['db_password']), db=str(os.environ['db_name']), connect_timeout=20)
except pymysql.MySQLError as e:
logger.error(e)
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
答
这是不工作的原因是因为子网我被分配lambda函数,所有公共(又名 - “自动分配公网IP”)wasset为是。我将其中一个子网设置为“否”,只使用那个.....它工作。
如果您希望您的Lambda在VPC内部运行,只需在私有子网中进行分配!