Lambda 函数上的雪花 SQL Alchemy

问题描述 投票:0回答:1

您好,正在构建一个与 Snowflake 交互的应用程序,并且需要利用 SQLAlchemy create_engine 与 Snowflake 交互。问题是当我导入 SQLAlchemy、Snowflake.Connector 和 Snowflake.sqlalchemy 时,我不断遇到一些问题。

当包含所有三个库时,我收到以下错误: 无法导入模块 Snowflake-sqlalchemy。

删除 Snowflake-Aqlalchemy 时出现以下错误: 无法将雪花识别为 SQLAlchemy 的方言。

当我在本地运行时,一切正常。

有谁知道我应该使用什么版本以及让它发挥作用的最佳方法是什么?

amazon-web-services aws-lambda sqlalchemy snowflake-cloud-data-platform
1个回答
0
投票

假设您正在构建一个部署包(虚拟环境的 .zip),您必须在 Amazon Linux 2 OS 计算机上(或在运行 AL2 的 Docker 容器中)构建该包。如果您查看导入错误周围的日志并看到有关

gcc
development headers
的内容,则几乎可以肯定这就是问题所在。

最简单的方法就是启动一个运行 amazonlinux 的快速 docker 容器,将您的需求文件复制到那里,像平常一样构建部署包,然后将输出复制到您可以从开发计算机访问的卷。然后像平常一样上传部署包。我发现了一篇中等帖子,在这里更详细地描述了类似的过程 - https://medium.com/simform-engineering/creating-lambda-layers-made-easy-with-docker-a-developers-guide-3bcfcf32d7c3

许多数据库连接器包都是这样的——它们依赖于底层构建的非 python 库来与数据库通信。如果您认为将从多个 lambda 函数连接到 Snowflake,那么在您的帐户中构建 lambda 层并使用它而不是部署包是有意义的。层基本上是可重用的依赖项集,您可以将其应用于 lambda 函数,并且可以混合和匹配层(因此,如果您需要 pandas 和雪花作为 lambda,您可以将雪花和 pandas 层添加到该函数中,无需制作一个专门用于该功能的新函数)。 lambda 层的 AWS 文档:https://docs.aws.amazon.com/lambda/latest/dg/python-layers.html

如果您不想打扰 docker,您始终可以启动运行 amazon linux 的(小型)ec2 实例,粘贴您的requirements.txt,在那里构建包,然后通过 ssh 将其复制回本地计算机。如果您定期重建应用程序,这会有点烦人,但目前还可以。最终,您可能会发现值得通过 GitHub Actions 等自动化工具或存储库中的 bash 脚本来自动化一些部署包的构建。我将从 bash 脚本开始部署 lambda,因为大多数 CI/CD 工具最终都会运行一些 bash 命令

© www.soinside.com 2019 - 2024. All rights reserved.