AWS Glue 作业安装 Python wheel 依赖于 --extra-py-files 中指定的另一个 wheel

AWS Glue Job to install Python wheel that depends on another wheel specified in --extra-py-files

我有一个从 Lambda 启动的 Glue 作业,该 Lambda 由 S3 put 事件触发。这个 Glue Job 有一些专有依赖项,当在本地使用它们时通常可以通过私人现场主机获得。

我认为这是要提及的重要一点: 其中一个轮子是另一个轮子的依赖项。

我已阅读有关 --extra-py-files--additional-python-modules 标志的文档。我已将相关的 wheel 文件放在 S3 存储桶中,并使用 --extra-py-files 标志按照有意义的顺序指定它们的位置...例如:

"--extra-py-files": 's3://<bucket>/path/to/<other-wheels-dependency>.whl, s3://<bucket>/path/to<wheel-with-the-dependency>'

第一个模块安装正常,我可以在作业日志中看到它已成功安装。但是当尝试安装第二个时,它似乎无法找到第一个轮子作为其依赖项。

Python 不是我的首选语言,这是我第一次尝试 Glue Job。但是我想知道,为什么它安装成功后找不到第一个包?

有一个关于当前用户无权写入 pip 缓存的警告,我觉得这可能是相关的。但我不确定。

相关警告:

WARNING: The directory '/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

安装错误如您所料:

ERROR: Could not find a version that satisfies the requirement <first wheel>>=1.0.5 (from <second-wheel>==1.0.5) (from versions: none)

ERROR: No matching distribution found for <first-wheel>>=1.0.5 (from <second-wheel>==1.0.5)

我不太确定我的选择是什么来完成这项工作。是否有一些选项可以添加到 pip install 命令,以便我可以仅指定 --extra-py-files 中的第二个包并为其提供其依赖项的 s3 位置。或者,我可以将两者打包在一个轮子中吗?

很难重现您的错误,我想说将所有内容打包在一个轮子中是最简单的事情。

记住几件事(或者更确切地说是陷阱):

  1. 胶水用python3.7
  2. 一些 python 包已经安装

此外,lambda 现在可以支持 python 3.9、容器映像和 10GB ram 下长达 15 分钟的运行时间。很多工作都可以在那里完成,避免胶水,我发现 AWS 中的这种服务记录很差而且很昂贵。

你看过this link for glue jobs with dependencies了吗?我发现它很有帮助。