I am trying to deploy a python cloud function on GCP, using a python package pushed on the artifact registry of another project.
I followed the instructions off the google cloud documentation:
The service account that deploys the cloudbuild has the role: Artifact Registry Reader
The error in 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)
the requirements.txt
--extra-index-url https://us-west1-python.pkg.dev/my-project-id/package-name/simple/ package_name==0.1.5
the setup.py of the package
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"], )
the cloudbuild.yaml that deploys the function.
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'
I tried to run the pip install -r requirements.txt and it works locally If I remove the library import, the cloud function deploys and works. I also tried to switch to the –gen2 version of cloud functions, but without luck.
People seem to have similar issues: here with a different error.
Advertisement
Answer
I got the answer to this problem in another question, thanks @Edo Akse:
To grant access to the private library hosted on an artifact registry, you need to give the role Artifact Registry Reader to:
- The service account running the cloudbuild
- The default service account of the cloud build (in cate you ran the cloudbuild with a service account you specified yourself). This service account had the name:
<PROJECT-NUMBER>@cloudbuild.gserviceaccount.com
You can find the <PROJECT-NUMBER>
in the project settings.