有没有在 GCP Composer Airflow 上安装私有依赖的成功案例?

xia*_*ong 5 pip airflow google-cloud-composer

背景资料

通常在容器环境中,我可以轻松地安装我的私有依赖项,requirements.txt如下所示:

--index-url https://user:pass@some_repo.jfrog.io/some_repo/api/pypi/pypi/simple

some-private-lib
Run Code Online (Sandbox Code Playgroud)

该软件包"some-private-lib"是我想安装的那个。

问题

在 GCP Composer 环境中,我尝试使用 GCloud 命令 ( gcloud composer environments update ENV_NAME --update-pypi-packages-from-file ./requirements.txt --location LOCATION),但它抱怨requirements.txt不遵循 PEP-508 中定义的格式。然后我找到了这个关于如何从私有仓库安装依赖项的官方指南,但它不是很清楚。按照指南中的说明,我创建了一个pip.conf包含以下内容的文件:

[global]
extra-index-url=https://user:pass@some_repo.jfrog.io/some_repo/api/pypi/pypi/simple
Run Code Online (Sandbox Code Playgroud)

然后把它放到我的环境中的GCS斗:gs://us-central1-xxxx-bucket/config/pip/pip.conf

现在我gcloud composer environments update ENV_NAME --update-pypi-packages-from-file ./requirements.txt --location LOCATION再次运行命令 ( ),requirements.txt只包含一行:some-private-lib。它因一个非常不透明的错误而失败:failed: Failed to install PyPI packages.

我做错了什么?还有其他可用的解决方法吗?谢谢!

小智 0

您可以通过查看与您的 Composer 实例关联的 GKE 集群的工作负载来进一步调试。

当您安装新包时,它会在集群中生成作业,为新的 Web 服务器、调度程序和工作进程构建和部署容器。如果您查看这些作业的日志,您可以看到它尝试运行时发生的情况pip install。如果无法访问您的私人存储库,日志将指出这一点。

我遇到的一个问题确实会返回您提到的一般错误:构建映像的作业将因包依赖项冲突而失败。如果存在这样的冲突,它将继续重试该作业,直到整个过程超时。

更具体地说,我传递给作曲家的需求文件如下所示:

...
requests==2.22.0
...
my-private-lib==0.1
Run Code Online (Sandbox Code Playgroud)

my-private-lib 的要求文件如下所示:

...
requests==2.23.0
Run Code Online (Sandbox Code Playgroud)

我最终通过使用版本范围而不是特定版本在我的私有库中指定版本要求来解决这个问题。

同样,如果您的问题是由上述问题引起的,则会在作业日志中指出。