我正在尝试通过以下方式访问我们的服务器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"
}
我已经使用AWSLambdaVPCAccessExecutionRole
和WSLambdaRole
设置了角色,并设置了具有子网和安全组的默认VPC网络:
Security group ID: sg-xxxxxxxx
Ports: All
Destination: 0.0.0.0/0
有什么我要忘记的东西吗?我使用RDS对此进行了测试,并且能够连接到数据库,而当我尝试使用外部数据库时,它就超时了。
答案 0 :(得分:1)
如果数据库不在VPC中,则Lambda函数将无法访问它。在VPC内运行Lambda函数时,不会为Lambda函数分配公共IP地址。为了使它能够访问VPC之外的资源,Lambda函数必须位于私有子网中,并且具有到NAT网关的路由。
或者,如果不需要访问VPC内的资源,则只需将其从VPC中删除,即可访问Internet。
如果数据库位于EC2服务器上运行的VPC中,则您可能需要适当地打开分配给EC2服务器的安全组。