无法将私有 python 依赖项添加到云函数
Cannot add private python dependency to cloud function
我正在尝试在 GCP 上部署一个 python 云函数,使用一个 python 包推送到另一个项目的工件注册表。
我按照说明操作了off the google cloud documentation:
部署cloudbuild的服务账号有作用:Artifact RegistryReader
cloudbuild中的错误:
CESTERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: Looking in indexes: https://pypi.org/simple, https://us-west1-python.pkg.dev/my-project-id/package-name/simple/
ERROR: Could not find a version that satisfies the requirement package_name==0.1.5 (from versions: none)
requirements.txt
--extra-index-url https://us-west1-python.pkg.dev/my-project-id/package-name/simple/
package_name==0.1.5
包的setup.py
from distutils.core import setup
setup(
name="package_name",
version="0.1.5",
description="Python package",
author="Benjamin BRETON",
author_email="john.doe@gmail.com",
url="",
packages=["src/package_name"],
)
部署函数的cloudbuild.yaml
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- gcloud
- functions
- deploy
- ${_SERVICE_NAME}
- --region=${_REGION}
- --source=${_REPOSITORY_PATH}
- --trigger-http
- --allow-unauthenticated
- --runtime=python39
- --memory=128MB
- --entry-point=${_ENTRY_POINT}
- --service-account=${_SERVICE_ACCOUNT}
- --set-env-vars=OUTPUT_BUCKET_NAME=${_OUTPUT_BUCKET_NAME}, URL_BUCKET_NAME=${_URL_BUCKET_NAME}
options:
logging: 'CLOUD_LOGGING_ONLY'
我尝试 运行 pip install -r requirements.txt 它在本地运行
如果我删除库导入,云函数将部署并运行。
我也尝试切换到 --gen2 版本的云函数,但没有成功。
人们似乎有类似的问题:here 有不同的错误。
我成功复制了您提供的示例代码。我通过在 requirements.txt 中将 package_name
版本更改为 0.1
解决了这个问题,因为没有找到 package_name==0.1.5
的匹配分布。代码应该是:
package_name==0.1
此外,我还更新 gcloud
组件并通过 运行 安装 beta
命令如下:
gcloud components update
gcloud components install beta
如果您有任何疑问或需要说明,请告诉我。
我在另一个问题中得到了这个问题的答案,谢谢:
要获得 运行t 访问托管在工件注册表上的私有库,您需要将角色 Artifact Registry Reader 授予:
- 服务帐号运行cloudbuild
- 云构建的默认服务帐户(为您运行云构建提供您自己指定的服务帐户)。此服务帐户的名称为:
<PROJECT-NUMBER>@cloudbuild.gserviceaccount.com
您可以在项目设置中找到<PROJECT-NUMBER>
。
我正在尝试在 GCP 上部署一个 python 云函数,使用一个 python 包推送到另一个项目的工件注册表。
我按照说明操作了off the google cloud documentation:
部署cloudbuild的服务账号有作用:Artifact RegistryReader
cloudbuild中的错误:
CESTERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: Looking in indexes: https://pypi.org/simple, https://us-west1-python.pkg.dev/my-project-id/package-name/simple/
ERROR: Could not find a version that satisfies the requirement package_name==0.1.5 (from versions: none)
requirements.txt
--extra-index-url https://us-west1-python.pkg.dev/my-project-id/package-name/simple/
package_name==0.1.5
包的setup.py
from distutils.core import setup
setup(
name="package_name",
version="0.1.5",
description="Python package",
author="Benjamin BRETON",
author_email="john.doe@gmail.com",
url="",
packages=["src/package_name"],
)
部署函数的cloudbuild.yaml
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- gcloud
- functions
- deploy
- ${_SERVICE_NAME}
- --region=${_REGION}
- --source=${_REPOSITORY_PATH}
- --trigger-http
- --allow-unauthenticated
- --runtime=python39
- --memory=128MB
- --entry-point=${_ENTRY_POINT}
- --service-account=${_SERVICE_ACCOUNT}
- --set-env-vars=OUTPUT_BUCKET_NAME=${_OUTPUT_BUCKET_NAME}, URL_BUCKET_NAME=${_URL_BUCKET_NAME}
options:
logging: 'CLOUD_LOGGING_ONLY'
我尝试 运行 pip install -r requirements.txt 它在本地运行 如果我删除库导入,云函数将部署并运行。 我也尝试切换到 --gen2 版本的云函数,但没有成功。
人们似乎有类似的问题:here 有不同的错误。
我成功复制了您提供的示例代码。我通过在 requirements.txt 中将 package_name
版本更改为 0.1
解决了这个问题,因为没有找到 package_name==0.1.5
的匹配分布。代码应该是:
package_name==0.1
此外,我还更新 gcloud
组件并通过 运行 安装 beta
命令如下:
gcloud components update
gcloud components install beta
如果您有任何疑问或需要说明,请告诉我。
我在另一个问题中得到了这个问题的答案,谢谢
要获得 运行t 访问托管在工件注册表上的私有库,您需要将角色 Artifact Registry Reader 授予:
- 服务帐号运行cloudbuild
- 云构建的默认服务帐户(为您运行云构建提供您自己指定的服务帐户)。此服务帐户的名称为:
<PROJECT-NUMBER>@cloudbuild.gserviceaccount.com
您可以在项目设置中找到<PROJECT-NUMBER>
。