参数“--python-modules-installer-option”在 pythonshell Glue Jobs 中不起作用

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

我正在尝试进行与本文类似的设置:https://aws.amazon.com/blogs/big-data/simplify-and-optimize-python-package-management-for-aws-glue- pyspark-jobs-with-aws-codeartifact/

我想使用自定义安装一些软件包

--index-url <my-index-url>
。 为此,我在此处关注 Glue 作业文档:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html 根据指南,我应该向作业添加一个参数,如下所示:

--python-modules-installer-option
具有价值
--index-url <my-index-url>

然而,这个论点根本没有被采纳。日志没有显示任何使用此参数的迹象。

当我尝试从自定义索引安装某些内容时,它失败了,因为未选择参数。

即使尝试使用像

--upgrade
这样的简单值也不起作用。

但是,诸如

--additional-python-modules
之类的其他选项确实会被选中,当然,模块安装会通过Python环境设置的默认
pip3
索引而不是通过我设置的索引,如果我指定的包不在我的索引中。

重现此问题:

  • 转到 AWS Glue 作业
  • 使用“Python Shell 脚本编辑器”创建一个新的 Python 作业并选择样板代码选项(其中的代码与重现此问题无关)
  • 创建并选择合适的 AWS Glue IAM 角色来运行作业
  • 添加任何
    pip3
    有效选项作为作业参数,例如:
    Key: "--python-modules-installer-option"
    Value: "<valid-pip3-option>"

谢谢!

python-3.x amazon-web-services aws-glue aws-glue3.0
2个回答
2
投票

该标志和博客是 Glue ETl 的
对于 Shell,--additional-python-modules 的值直接传递给 pip,您可以直接在该值内指定选项(就像将参数传递给 pip 一样)


0
投票

在努力让它工作近 2 小时后,我想分享最终对我有用的东西。

注意:此答案专门针对 AWS Glue 中的 Python Shell 类型的作业。 Spark 作业需要稍微不同的方法。

@GonzaloHerreros 的答案基本上是所需要的,但这里有更多细节:

假设

  • 您已经向 CodeArtifact 发布了一个有效的 Python 包(例如,
    mypackage
  • 您的 CodeArtifact 存储库已适当设置权限,以允许 Glue 作业的 IAM 用户访问存储库并从中获取包。
  • 您的作业可以访问互联网(如果不能,下面描述的一般方法仍然有效,但您需要采取额外步骤为 CodeArtifact 设置 VPC 终端节点)

设置

您可以使用

--additional-python-modules
作业参数来指定您的包以及 CodeArtifact 存储库的 URL。 URL 必须包含身份验证所需的令牌。

URL 的形式为

https://aws:<codeartifact token>@<codeartifact domain>-<account ID>.d.codeartifact.<aws region>.amazonaws.com/pypi/<repository name>/simple

您可以从安装了 AWS CLI 的 shell 中使用此命令获取

<codeartifact token>

aws codeartifact get-authorization-token --domain-owner <account id> --domain <domain name> --query 'authorizationToken' --output text

所以最后你的

--additional-python-modules
的值看起来会像
mypackage --index-url=https://aws:eyJ2ZXIiOjEsImlzdSI6MTcw...@mydomain-999999999999.d.codeartifact.us-east-1.amazonaws.com/pypi/myrepo/simple

陷阱和痛点

  • 令牌非常长,如果您使用 AWS 控制台,UI 会告诉您(以红色字体)该参数只能是 256 个字符。只需忽略这一点并保存即可,它会占用整个内容。
  • 严格按照上述方式输入作业参数的值。
    /
     之后没有引号,没有尾随 
    simple
  • 令牌的有效期只有12小时,这真是一个痛苦。您可以使用 OP 链接到的文章中描述的步骤函数方法在运行作业之前设置令牌,但说实话,这也有点痛苦。
© www.soinside.com 2019 - 2024. All rights reserved.