AWS Glue 可以通过 SFTP 连接到远程服务器吗?
Posted
技术标签:
【中文标题】AWS Glue 可以通过 SFTP 连接到远程服务器吗?【英文标题】:Can AWS Glue connect to a remote server via SFTP? 【发布时间】:2020-05-28 03:03:24 【问题描述】:我正在尝试使用 Python 3.7 通过 SFTP 建立从 AWS Glue 到远程服务器的连接。我尝试使用 pysftp 库来完成这项任务。
但是 pysftp 使用了一个名为 bcrypt 的库,其中包含 python 和 c 代码。截至目前,AWS Glue 仅支持文档中提到的纯 Python 库(以下链接)。
https://docs.aws.amazon.com/glue/latest/dg/console-custom-created.html
我得到的错误如下。
ImportError: 无法导入名称 '_bcrypt'
由于编译错误,我被困在这里。
因此,我尝试了使用 Scala 的 JSch java 库。那里编译成功,但出现以下异常。
com.jcraft.jsch.JSchException: java.net.UnknownHostException: [远程服务器主机名]
我们如何通过 SFTP 从 AWS Glue 连接到远程服务器?有可能吗?
我们如何为 Glue 作业配置出站规则(如果需要)?
【问题讨论】:
【参考方案1】:我知道这个问题发布已经有一段时间了,所以我想分享一些可以帮助您更轻松快速地从 sftp 获取数据的工具。因此,使用此工具https://github.com/aws-samples/aws-lambda-layer-builder 轻松获取层,您可以更快地制作一层 pysftp,并且不会出现那些烦人的错误(cffi,bycrypt)。
lambda 有 500 MB 的限制,因此如果您尝试提取大量文件,则 lambda 会因此而崩溃。要解决此问题,您必须将 EFS(弹性文件系统)附加到您的 lamdba https://docs.aws.amazon.com/lambda/latest/dg/services-efs.html
【讨论】:
【参考方案2】:我在这里为任何可能有帮助的人回答我自己的问题。
直接的答案是否定的。
我发现以下资源表明 AWS Glue 是 AWS 资源的 ETL 工具。
AWS Glue 使用其他 AWS 服务来编排您的 ETL(提取、 转换和加载)作业以构建数据仓库。
来源 - https://docs.aws.amazon.com/glue/latest/dg/how-it-works.html
Glue 仅适用于来自 JDBC 和 S3 (CSV) 数据源的 ETL。在 如果您希望从其他云应用程序加载数据,文件 Storage Base 等 Glue 将无法支持。
来源 - https://hevodata.com/blog/aws-glue-etl/
因此,为了实现我的工作,我使用 AWS Lambda 函数通过 SFTP 连接到远程服务器,选择所需文件并将它们放入 S3 存储桶中。 AWS Glue 作业现在可以从 S3 中挑选文件。
【讨论】:
请在这里触发 Lamba 的触发器。也可以请您发布示例代码,因为我被同样的错误 bcrypt 击中。 嗨@Yuva 我已经在特定的UTC 时间从cloudwatch 安排了lambda 触发器。我目前没有代码。回想起来,我使用 python 3.7 作为 lambda 函数,使用 pysftp 库作为 SFTP 连接。我能够在 Google 上轻松找到该库的一些代码示例。 pysftp 库作为层添加到 lambda 函数中。 正在寻找 pysftp 库来构建,但遇到了一些依赖问题,例如 cffi、bycrypt 等。正在调试它们。感谢您的回复 我在 EC2 中使用了一个 ubuntu 虚拟机来创建包含 pysftp 库的压缩 zip 文件来创建 lambda 层。我用了这个视频。这适用于 Pandas,但您可以按照与 pysftp 相同的步骤 - youtube.com/… 谢谢,是的,我使用 LINUX EC2 创建 pysftp 库以在 lambda 上运行,它运行良好。唯一要记住的一点是,我们必须对 lambda 和 EC2 实例使用相同的 python 版本。否则我们会 pysftp 依赖库发生冲突。以上是关于AWS Glue 可以通过 SFTP 连接到远程服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章
至少一个安全组必须打开所有入口端口。 AWS Glue 连接到 RDS
在 Heroku 上存储 SSH 密钥以通过 SFTP 将 Rails 应用程序连接到远程
AWS Glue Python-Shell:如何提供自己的库?