【问题标题】:Snowflake Connector for Python - Doesn't work in Lambda Function适用于 Python 的雪花连接器 - 在 Lambda 函数中不起作用
【发布时间】:2021-12-10 21:20:39
【问题描述】:

更新 - 我已经解决了“无法找到雪花连接器”的问题,但现在看来,当我构建 Lambda 函数时,一些依赖项(连接器所依赖的)无法解决,即使我可以在我的虚拟环境中看到它们。

运行 PythonPipBuilder:ResolveDependencies

构建失败错误:PythonPipBuilder:ResolveDependencies - {cffi==1.15.0(wheel), cryptography==3.4.8(wheel)} SAM Build 有 失败:命令没有成功退出,退出代码:1 170 有 failed: 命令没有成功退出,退出代码:1

任何想法为什么当它可以解析我的虚拟环境中的其他模块时无法解析这两个?

原始问题 - 我在 Pycharm 工作并尝试从 lambda 连接到雪花。我已经在项目的虚拟环境中安装了雪花连接器。我有其他包可以从同一个 lambda 访问而不会出现问题。当我尝试使用这个时,我得到了这个错误,表明它找不到包。

{“errorMessage”:“无法导入模块‘app’:没有命名模块 '雪花.连接器'; 'snowflake' 不是包", "errorType": "Runtime.ImportModuleError", "stackTrace": []}

 import snowflake.connector
 import os

 def lambda_handler(event, context):       
        # Gets the version
        ctx = snowflake.connector.connect(
            user='my-user',
            account='my-account',
            password="my-password",
            authenticator='externalbrowser',
            warehouse="my-warehouse",
            database="my-database",
            schema="my-schema"
        )
        cs = ctx.cursor()
        try:
            cs.execute("SELECT current_version()")
            one_row = cs.fetchone()
            print(one_row[0])
        finally:
            cs.close()
        ctx.close()

我尝试将 python 文件添加到项目的根目录并尝试相同的代码,它能够毫无问题地连接,因此告诉我雪花连接器已正确安装,而 lambda 只是找不到那个包。

谁能帮我解决这个问题?

【问题讨论】:

  • this 有帮助吗?
  • 我不确定。不是为了部署吗?我在使用虚拟环境时在本地计算机上开发时遇到此错误。不过,它确实提供了一些值得探索的东西。

标签: python aws-lambda aws-sam aws-sam-cli snowflake-connector


【解决方案1】:

确保您的 requirements.txt 文件包含您要安装的依赖项

snowflake-connector-python

保持其余代码不变

import snowflake.connector
import os

 def lambda_handler(event, context):       
        # Gets the version
        ctx = snowflake.connector.connect(
            user='my-user',
            account='my-account',
            password="my-password",
            authenticator='externalbrowser',
            warehouse="my-warehouse",
            database="my-database",
            schema="my-schema"
        )
        cs = ctx.cursor()
        try:
            cs.execute("SELECT current_version()")
            one_row = cs.fetchone()
            print(one_row[0])
        finally:
            cs.close()
        ctx.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多