#google-cloud-functions #google-cloud-build
#google-cloud-функции #google-cloud-build
Вопрос:
Как новичок в GCP и облачной функции, я следил за официальным руководством Google по развертыванию HelloWorld Node.js Облачная функция.
Cloud SDK находится в версии 366.0.0, и компоненты были обновлены.
При сборке (с использованием cloud_build_local или cloud build) развертывание завершается с ошибкой :
>ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: {"error":>>{"buildpackId":"","buildpackVersion":"","errorType":"OK","canonicalCode":"OK","errorId":"","errorMessage":""},"stats":[{"buildpackId":"google.utils.archive-source","buildpackVersion":"0.0.1","totalDurationMs":51,"userDurationMs":51},{"buildpackId":"google.nodejs.npm","buildpackVersion":"0.9.0","totalDurationMs":9223,"userDurationMs":9211},{"buildpackId":"google.nodejs.functions-framework","buildpackVersion":"0.9.3","totalDurationMs":2730,"userDurationMs":2679},{"buildpackId":"google.utils.label","buildpackVersion":"0.0.1","totalDurationMs":0,"userDurationMs":0}],"warnings":["*** Improve build performance by generating and committing package-lock.json."]}
При просмотре журналов облачной сборки в консоли :
>Step #1 - "build": ERROR: failed to export: failed to write image to the following tags: [eu.gcr.io/**myproject**/gcf/**europe-west1**/de6f32d4-69e9-4967-a008-6443bd39f1d9:helloHttp_version-1:
GET https://eu.gcr.io/v2/token?scope=repository:**myproject**/gcf/**europe-west1**/de6f32d4-69e9-4967-a008-6443bd39f1d9:push,pullamp;scope=repository:fn-img/buildpacks/nodejs16/run:pullamp;service=eu.gcr.io:
DENIED: Permission "_**artifactregistry.repositories.downloadArtifacts**_" denied on resource "projects/**fn-img**/locations/**europe**/repositories/eu.gcr.io" (or it may not exist)]
Вот роли, предоставленные учетной записи службы облачной сборки :
>ROLE
roles/appengine.appAdmin
roles/appengine.deployer
roles/artifactregistry.reader
roles/cloudbuild.builds.builder
roles/cloudbuild.workerPoolUser
roles/cloudfunctions.developer
roles/cloudkms.cryptoKeyDecrypter
roles/compute.instanceAdmin.v1
roles/container.developer
roles/iam.serviceAccountUser
roles/run.admin
roles/secretmanager.secretAccessor
roles/storage.admin
Сконфигурированный Docker creds:
> "credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud",
"europe-west1-docker.pkg.dev": "gcloud"
}
Список активированных API в проекте :
>gcloud services list --enabled
NAME TITLE
aiplatform.googleapis.com Vertex AI API
apigateway.googleapis.com API Gateway API
appengine.googleapis.com App Engine Admin API
artifactregistry.googleapis.com Artifact Registry API
bigquery.googleapis.com BigQuery API
bigquerystorage.googleapis.com BigQuery Storage API
cloudapis.googleapis.com Google Cloud APIs
cloudbuild.googleapis.com Cloud Build API
clouddebugger.googleapis.com Cloud Debugger API
cloudfunctions.googleapis.com Cloud Functions API
cloudkms.googleapis.com Cloud Key Management Service (KMS) API
cloudresourcemanager.googleapis.com Cloud Resource Manager API
cloudtrace.googleapis.com Cloud Trace API
compute.googleapis.com Compute Engine API
container.googleapis.com Kubernetes Engine API
containerregistry.googleapis.com Container Registry API
datastore.googleapis.com Cloud Datastore API
deploymentmanager.googleapis.com Cloud Deployment Manager V2 API
dns.googleapis.com Cloud DNS API
firebase.googleapis.com Firebase Management API
iam.googleapis.com Identity and Access Management (IAM) API
iamcredentials.googleapis.com IAM Service Account Credentials API
logging.googleapis.com Cloud Logging API
monitoring.googleapis.com Cloud Monitoring API
oslogin.googleapis.com Cloud OS Login API
pubsub.googleapis.com Cloud Pub/Sub API
run.googleapis.com Cloud Run Admin API
runtimeconfig.googleapis.com Cloud Runtime Configuration API
secretmanager.googleapis.com Secret Manager API
servicecontrol.googleapis.com Service Control API
servicemanagement.googleapis.com Service Management API
servicenetworking.googleapis.com Service Networking API
serviceusage.googleapis.com Service Usage API
source.googleapis.com Legacy Cloud Source Repositories API
spanner.googleapis.com Cloud Spanner API
sql-component.googleapis.com Cloud SQL
sqladmin.googleapis.com Cloud SQL Admin API
storage-api.googleapis.com Google Cloud Storage JSON API
storage-component.googleapis.com Cloud Storage
storage.googleapis.com Cloud Storage API
vpcaccess.googleapis.com Serverless VPC Access API`
Кроме того, переход из реестра контейнеров завершен (хотя я никогда не использовал реестр контейнеров)
Шаги для воспроизведения: следуя руководству:'( : /
Я чувствую, что просмотрел всю доступную документацию (я мог). Я даже расширил права учетной записи службы облачной сборки на хранение, артефакты и функции администратора… Я пробовал использовать другие собственные функции в других регионах…
Кто-нибудь знает, что я делаю не так?
Большое спасибо
Комментарии:
1. Можете ли вы поделиться тем, как вы развертываете облачную сборку?
2. Здравствуйте, конечно, важная вещь, которую я забыл упомянуть. Я также выполняю развертывание, следуя руководству: > функции gcloud развертывают helloGET —runtime nodejs16 —trigger-http —allow-не прошедший проверку подлинности Я также пробовал с альфа- и бета-компонентами. Спасибо за вашу помощь
3. Можете ли вы проверить, активировали ли вы API реестра артефактов (в меню API -> Каталог в консоли)?
4. Да, она активирована. Я обновил вопрос списком активированных сервисов. Кроме того, переход из реестра контейнеров завершен (хотя я никогда не использовал реестр контейнеров).
Ответ №1:
Похоже, что учебное пособие может быть устаревшим, поскольку переход от реестра контейнеров к хранилищу артефактов является обязательным. Решение можно найти в документации здесь.
Для развертывания облачных функций с хранилищем артефактов требуется :
- использование альфа- или бета-компонентов SDK ;
- указание целевого реестра артефактов с помощью флага —docker-repository (установка артефактов конфигурации / репозитория будет недостаточной).
В заключение, вместо выполнения команды, упомянутой в руководстве :
gcloud functions deploy helloGET --runtime nodejs16 --trigger-http --allow-unauthenticated
Я побежал :
gcloud beta functions deploy helloGET --runtime nodejs16 --trigger-http --allow-unauthenticated --region=europe-west1 __--docker-repository__=projects/myproject/locations/europe-west1/repositories/myrpreviouslycreatedrepo
И это сработало просто отлично.