我是Python的新手。我正在将Python代码部署到Google Cloud Run,并得到了一个错误。
这是终点站:
Deploying from source. To deploy a container use [--image]. See https://cloud.google.com/run/docs/deploying-source-code for more details.
Source code location (/Users/name/......):
Next time, use `gcloud run deploy --source .` to deploy the current directory.
Service name (google-cloud-run):
Please specify a region:
[1] asia-east1
......
Please enter your numeric choice: 27
To make this the default region, run `gcloud config set run/region us-central1`.
This command is equivalent to running `gcloud builds submit --tag [IMAGE] /Users/name/......` and `gcloud run deploy google-cloud-run --image [IMAGE]`
Allow unauthenticated invocations to [google-cloud-run] (y/N)? y
Building using Dockerfile and deploying container to Cloud Run service [google-cloud-run] in project [project-id] region [us-central1]
X Building and deploying new service... Building Container.
✓ Uploading sources...
- Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/bdaf9cea-3e87-46e4-81f8-33b2675808f8?proje
ct=1044629281917].
. Creating Revision...
. Routing traffic...
. Setting IAM Policy...
Deployment failed
ERROR: (gcloud.run.deploy) Build failed; check build logs for details它的看起来像是在构建容器中失败的。
当我检查我的日志时,错误是:denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/project-id/locations/us-central1/repositories/cloud-run-source-deploy" (or it may not exist)。
我的代码:
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "World")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))我的帐户角色:
如何纠正此错误?感谢有人能给我建议。提前谢谢你!
发布于 2022-09-21 12:23:19
这个快速入门解释了如何在云运行上部署Python。
正如这里在文档中提到的那样:
重要:此快速启动假设您在用于快速启动的项目中有所有者或编辑器角色。否则,请参阅下面所需的权限信息。 1:云运行部署权限 用户需要以下权限才能部署新的云运行服务或修订:项目级别上的run.services.create和run.services.update是必需的。run.services.get并不是严格要求的,但是为了读取创建的服务的状态,建议您这样做。通常通过角色/run.admin角色分配。 它可以在项目权限管理页面中更改。云运行时服务帐户的iam.serviceAccounts.actAs。默认情况下,这是PROJECT_NUMBER-compute@developer.gserviceaccount.com.权限通常是通过roles/iam.serviceAccountUser角色分配的。 2:云构建权限 对于IAM,Cloud中的每个API方法都要求发出API请求的身份具有使用资源的适当权限。 通过设置将角色授予主体(用户、组或服务帐户)的策略来授予权限。可以将多个角色授予同一资源上的主体。 3.:工件注册表权限 通过授予包含该权限的角色,授予身份和访问管理(IAM)权限。使用Artifact角色来控制对存储库的访问。您可以在项目或存储库级别授予权限。 虽然您可以使用所有者、编辑器和查看器的基本角色来授予对存储库的访问权,但是使用Artifact角色可以应用最小特权的安全原则,以便用户和服务帐户只具有所需的权限。
您可以引用这个文档,并确保您遵循了上述的4个步骤来验证到工件注册中心。
如果问题仍然存在,正如我所看到的,您已经创建了一个公共问题跟踪器,我们建议联系Google支持并提高票证并提供特定于项目的详细信息,以便该问题能够很容易地解决。
https://stackoverflow.com/questions/73796128
复制相似问题