【问题标题】:AWS Python Lambda timeout when trying to access MySQL尝试访问 MySQL 时 AWS Python Lambda 超时
【发布时间】:2019-09-19 03:31:44
【问题描述】:

我正在尝试通过以下方式访问我们的服务器 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 对此进行了测试,并且能够连接到数据库,只是当我尝试使用外部数据库时它会超时。

【问题讨论】:

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


    【解决方案1】:

    如果数据库不在 VPC 中,则 Lambda 函数将无权访问它。当您在 VPC 内运行 Lambda 函数时,不会为 Lambda 函数分配公共 IP 地址。要授予它访问 VPC 外部资源的权限,Lambda 函数必须位于私有子网中,并具有到 NAT 网关的路由。

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

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

    【讨论】:

    • 我最初是在没有 VPC 的情况下运行的,但是为了使用我添加的 RDS 进行测试,删除 VPC 后我仍然收到超时错误。还有其他想法吗?我不需要访问 RDS 我需要访问远程数据库。
    • 您的数据库服务器是否真的可以从 Internet 访问?在这一点上,这听起来像是数据库端的网络问题。
    • 嘿,马克,对不起,我被赶上了。我可以使用公钥/私钥通过 SSH 访问服务器,因此我认为它不可访问,并且我认为如果找不到或丢失凭据,这只会引发连接错误,所以可以你还有什么建议吗?
    • 通过 SSH 访问服务器并不意味着服务器前面的防火墙允许直接连接到数据库。您需要测试从 Internet 连接到数据库,例如通过笔记本电脑上的某些软件,以验证它是否可以访问。
    • 非常感谢,最后一个问题是我需要为 IAM 策略添加什么吗?我只有AWSLambdaBasicExecutionRole 权限策略。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2020-12-11
    • 2019-08-14
    • 1970-01-01
    • 2022-01-20
    • 2020-03-09
    • 2015-12-07
    相关资源
    最近更新 更多