尝试访问MySQL时AWS Python Lambda超时

时间:2019-09-18 19:03:53

标签: python mysql amazon-web-services aws-lambda amazon-vpc

我正在尝试通过以下方式访问我们的服务器MySQL数据库(不是AWS RDS):

def lambda_handler(event, context):
    try:
        conn = pymysql.connect("mySite.com", user="admin", passwd="pass",  connect_timeout=5)

我收到返回错误:

Response:
{
  "errorMessage": "xxxxxxxxxxxxxxxxxxxxxxxxx Task timed out after 3.00 seconds"
}

我已经使用AWSLambdaVPCAccessExecutionRoleWSLambdaRole设置了角色,并设置了具有子网和安全组的默认VPC网络:

Security group ID: sg-xxxxxxxx
Ports: All
Destination: 0.0.0.0/0  

有什么我要忘记的东西吗?我使用RDS对此进行了测试,并且能够连接到数据库,而当我尝试使用外部数据库时,它就超时了。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果数据库不在VPC中,则Lambda函数将无法访问它。在VPC内运行Lambda函数时,不会为Lambda函数分配公共IP地址。为了使它能够访问VPC之外的资源,Lambda函数必须位于私有子网中,并且具有到NAT网关的路由。

或者,如果不需要访问VPC内的资源,则只需将其从VPC中删除,即可访问Internet。

如果数据库位于EC2服务器上运行的VPC中,则您可能需要适当地打开分配给EC2服务器的安全组。