代码之家  ›  专栏  ›  技术社区  ›  wendybear

通过lambda使用psycopg2连接到amazon rds

  •  1
  • wendybear  · 技术社区  · 6 年前

    import sys, boto3, logging, rds_config, psycopg2
    
    rds_host = "hostname"
    name = rds_config.db_username
    password = rds_config.db_password
    db_name = rds_config.db_name
    
    s3 = boto3.resource('s3')
    rds_client = boto3.client('rds',aws_access_key_id=Access_Key,aws_secret_access_key=Secret_Access_Key)
    instances = rds_client.describe_db_instances()
    print (instances)
    
    try:
        conn = psycopg2.connect(host=rds_host,
                            database=db_name,
                            user=name,
                            password=password)
        cur = conn.cursor()
    
    except:
        logger.error("ERROR: Unexpected error: Could not connect to Postgresql instance.")
        sys.exit()
    

    我相信我已经用boto3.client连接到RDS实例了,因为实例的信息是输出到屏幕的。

    但对于psycopg2来说,这是行不通的。
    我得到的不是logger.error,而是超时错误消息:

    Task timed out after 60.06 seconds
    

    此外: 我可以通过本地psql控制台或本地服务器上的python脚本连接到RDS。只有当我用aws lambda在线测试脚本时,它才不起作用

    2 回复  |  直到 6 年前
        1
  •  3
  •   Dunes    6 年前

    RDS文档建议,如果出现超时错误,并且主机和端口正确,则应检查DB所在的安全组是否允许网络访问。默认情况下,DB实例没有网络访问权限。

    看到了吗 Getting Started Controlling Access with Amazon RDS Security Groups

        2
  •  0
  •   Mandraenke    6 年前

    仔细检查您的安全组和专有网络设置,默认情况下拒绝访问,您需要显式启用它。