无法从Lambda函数访问非公开访问的RDS/MYSQL

问题描述:

我有一个Lambda函数,它与RDS实例分配给相同的VPC和安全组。无法从Lambda函数访问非公开访问的RDS/MYSQL

安全组允许来自任何地方的所有入站/出站流量。

的lambda函数的执行角色有AWSLambdaVPCAccessExecutionRoleAmazonVPCFullAccessAmazonRDSFullAccess

由于某种原因,当我测试这个计划的事件时,我总是得到这个错误。

(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内部运行,只需在私有子网中进行分配!