能否将AWS CodeArtifact PyPi仓库配置用于AWS MWAA?

4

AWS MWAA是由AWS提供的相对较新的服务,用于管理Apache Airflow的工作流。在配置MWAA环境时,可以提供自定义requirements.txt文件,用于在该环境中安装其他Python软件包。

在我所在的公司中,我们使用AWS CodeArtifact作为自定义PyPi软件包存储库,我们在其中上传私有Python软件包。我们想要在Airflow DAGs中使用其中一些软件包,因此我想知道MWAA环境能否以某种方式配置,以使用来自CodeArtifact的PyPi存储库?

或者是否有任何方法可以在MWAA环境中安装自定义Python软件包(不在公共PyPi中)?


请参考以下内容:https://docs.aws.amazon.com/mwaa/latest/userguide/best-practices-dependencies.html,我看到有一个部分可以添加托管的URL,这个URL可以是您的CodeArtifact注册表URL。 - Eman
谢谢。然而,它无法工作,因为唯一支持的身份验证方法是基本身份验证(用户名、密码),例如:--index-url=https://${AIRFLOW__FOO_USER}:${AIRFLOW__FOO_PASS}@my.privatepypi.com。CodeArtifact使用令牌作为密码,每12小时必须更新一次。 - Peter Jakubčo
2个回答

2

没有尝试,但应该可以工作:

# aws codeartifact login --tool pip --domain **--repository **
# awk '/index-url/ {print "-i "$3}' ~/.config/pip/pip.conf  > requirements.txt
# echo <my python package> >> requirements.txt

它可以被用作普通的需求文件:
# pip3 install -r requirements.txt 
Looking in indexes: https://aws:****

请注意,CodeArtifact令牌最长在12小时内过期。您可以创建一个定期任务来重新生成此文件...

谢谢您的回答。是的,这可能有效,但我希望有一种不需要重复工作的解决方案。 - Peter Jakubčo
我已经尝试过了,这个方法是有效的。然而,如果你在私密模式下运行MWAA Airflow Web Server,它似乎无法访问任何URL,甚至你本地的CodeArtifact PyPi仓库的URL也无法使用(超时)。在公开模式下,它将正常工作。 - undefined
补充我的先前回答,我想知道为什么我们需要在Airflow Web服务器上安装requirements.txt中的任何软件包呢?除非我们想要安装任何Airflow UI插件,否则我认为我们不需要在Web服务器上安装任何额外的软件包。另一方面,对于调度器和工作节点,我们绝对需要安装这些软件包,但我怀疑Web服务器是否需要它们。因此,在使用MWAA时,如果Web服务器部署在“私有模式”下,我们可能可以忽略Web服务器本身上requirements.txt安装错误。 - undefined

1

虽然有点晚,但AWS确实提供了一个示例仓库来满足您的要求。该示例使用AWS CDK Python设置VPC端点到Codeartifacts和您的私有VPC。虽然Python Lambda版本是3.7(已弃用),但您可以将其更新为Python 3.10(最新版本)并更新AWS CDK Python版本而不会出现任何问题。我最近也使用了这个仓库,并且我的私有MWAA成功地使用了codeartifact。您还可以根据需要更新S3存储桶和路径。

https://github.com/aws-samples/amazon-mwaa-examples/blob/main/usecases/mwaa-with-codeartifact/README.md

安装aws-cdk Nodejs
yarn add --global aws-cdk

npx cdk deploy CodeArtifactStack LambdaCronStack # Require LTS nodejs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接