无服务器 GCP 功能部署

Serverless GCP Function deployment

我正在尝试使用无服务器节点模块部署 GCP Cloud Function。虽然我已按照网站上的说明进行操作,但我仍然面临以下错误。

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Compiling function "ProductVersion"...
Serverless: Uploading artifacts...
Serverless: Artifacts successfully uploaded...
Serverless: Updating deployment...
Serverless: Checking deployment update progress...
. 
 Error ---------------------------------------------------
 
  Error: Deployment failed: RESOURCE_ERROR
  
       {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Permission 'cloudfunctions.functions.create' denied on resource 'projects/123456/locations/us-central1/functions/demeter-dev-ProductVersion' (or resource may not exist).","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudfunctions.googleapis.com/v1/projects/123456/locations/us-central1/functions","httpMethod":"POST"}}
      at throwErrorIfDeploymentFails (/home/demo/workspace/demo/demeter/node_modules/serverless-google-cloudfunctions/shared/monitorDeployment.js:71:11)
      at provider.request.then (/home/demo/workspace/demo/demeter/node_modules/serverless-google-cloudfunctions/shared/monitorDeployment.js:42:17)
      at process._tickCallback (internal/process/next_tick.js:68:7)

我已经为我的 GCP 服务帐户配置了以下所需的权限,但它仍然无法正常工作。

1.Cloud 函数管理员

2.Cloud 函数开发者

3.Deployment 经理编辑

4.logging管理员

5.storage管理员

这是我的 serverless.yml 文件

service: demo

package:
  exclude:
    - node_modules/**
    - .gitignore
    - .git/**
    - .idea/**

plugins:
  - serverless-google-cloudfunctions
  - serverless-python-requirements
  - serverless-prune-plugin

provider:
  name: google
  runtime: python37
  project: 123456
  credentials: ./cred.json # path must be absolute

functions:
  ProductVersion:
    handler: get_pronto_app_version
    events:
      - http: path

谁能帮帮我

403 Forbidden 与正在部署该功能的用户或服务帐户有关。您至少需要 roles/cloudfunctions.developer 才能部署 Cloud Functions。

此外,您还必须为用户分配 Cloud Functions Runtime 服务帐户上的服务帐户用户 IAM 角色 (roles/iam.serviceAccountUser)。

参考:https://cloud.google.com/functions/docs/reference/iam/roles#additional-configuration

第三方应用程序使用ADC(应用程序默认凭证)。它可能是(按优先顺序):

  1. 服务帐户密钥文件,文件路径设置在GOOGLE_APPLICATION_CREDENTIALS环境变量中。
  2. 元数据服务器(仅适用于Google云环境)
  3. 众所周知的凭据存储位置。

1. 不是一个好的做法,我不推荐它。 2. 在你的工作站上是不可能的。 3. 最好:执行gcloud auth application-default login 创建凭据文件并重试。

它通过更改 serverless.yml 文件中的项目变量得到解决我提到的是数字 ID,但它期望我们在 GCP 仪表板上看到的项目的字母数字 ID。不知何故,它并没有抛出确切的错误,但在浪费了很多时间之后,它得到了解决。

project: myproject12

感谢大家回答这个问题。