代码之家  ›  专栏  ›  技术社区  ›  Yu Chen little_birdie

AWS Lambda Snowflake Python连接器挂起尝试连接

  •  0
  • Yu Chen little_birdie  · 技术社区  · 4 年前

    我有一个小的AWS Lambda函数,如下所示:

    它从SSM参数存储中获取连接到Snowflake的凭据,然后调用 snowflake.connector.connect . 它的目的显然是从我的雪花数据仓库中获取数据。但是,代码挂起并且永远不会完成 snowflake.connector.connect连接 打电话。

    • 为了测试和开发,我将我的安全组设置为允许所有端口上的所有入站和出站流量。
    • 0.0.0.0/0 到NAT网关实例。在我的代码里,我 print(requests.get('http://216.58.192.142')) 只是为了证明我确实有互联网连接。
    • 我有许多不适合Lambdas的200mbdeploy包的大型依赖项,因此我将依赖项装载在一个EFS文件系统中 /mnt/efs 路径,我加上 /mnt/efs/python 给我的 PYTHONPATH 在我开始导入那些依赖项之前。
    import boto3
    import snowflake.connector
    print("Getting snowflake creds")
    session = boto3.session.Session()
    ssm = session.client("ssm")
    obj = ssm.get_parameter(Name="snowflake", WithDecryption=True)
    sf_creds = json.loads(obj.get("Parameter").get("Value"))
    
    def get_data(event, context):
        print(requests.get('http://216.58.192.142'))
        print("Executing")
        print("got parameter, connecting")
        con = snowflake.connector.connect(
            user=sf_creds["USER"],
            password=sf_creds["PASSWORD"],
            account=sf_creds["ACCOUNT"],
            ocsp_response_cache_filename="/tmp/ocsp_response_cache"
        )
        print("connected")
    

    当我在MacBook上本地运行同样的代码时,我能够在一两秒钟内快速连接。我的 snowflake-python-connector 版本为 2.3.2 .

    然而,无论我尝试多久,我的 connect 方法在AWS Lambda函数中执行时进行传递。我真的不知道发生了什么事。

    我已经证实了

    • AWS Lambda函数连接到互联网(它接收 [200 OK] requests.get 电话)。
    • 安全组尽可能地允许(允许所有端口上的所有入站和出站流量)

    真的,我不知道为什么会发生这种情况,特别是考虑到代码在我的本地机器上运行良好-有人能给我指出正确的方向吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Anastaia    4 年前

    Lambda可以响应200,但是日志中可能存在异常。查看这个lambda的CloudWatch日志。