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

时间:2016-12-01 22:16:28

标签: amazon-web-services lambda rds

我有一个Lambda函数,它被分配给与RDS实例相同的VPC和安全组。

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

Lambda函数的执行角色包含 AWSLambdaVPCAccessExecutionRole AmazonVPCFullAccess AmazonRDSFullAccess

出于某种原因,当我将其作为预定事件进行测试时,我总是会收到此错误。

(2003年,“无法连接到MySQL服务器'###。###。us-east-1.rds.amazonaws.com'([Errno -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")

1 个答案:

答案 0 :(得分:0)

这不起作用的原因是因为我正在分配Lambda函数的子网,其中所有公共(也称为“自动分配公共IP”)被设置为是。我将其中一个子网设置为“否”,只使用那个子网.....它有效。

如果您希望Lambda在VPC内部运行,只能在PRIVATE SUBNETS中分配!