【问题标题】:gcloud beta run deploy fails after sucessfully uploading image, fails to enable APIgcloud beta run deploy 成功上传图片后失败,无法启用 API
【发布时间】:2023-03-27 14:57:01
【问题描述】:

gcloud beta run deploy 以前可以运行,但现在出现错误:

$ gcloud beta run deploy $PROJECT --image $IMAGE_NAME --platform=managed --region us-central1 --project $PROJECT --add-cloudsql-instances $PROJECT-db
...
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ID                                    CREATE_TIME                DURATION  SOURCE                                                                                 IMAGES                                    STATUS
abcdefj-higj-lmnopquer-uvw-xyz  2019-06-29T13:59:07+00:00  1M4S      gs://$PROJECT_cloudbuild/source/XYZ123.96-aae829d50a2e43a29dce44d1f93bafbc.tgz  gcr.io/$PROJECT/$PROJECT (+1 more)  SUCCESS
API [sql-component.googleapis.com] not enabled on project 
[$PROJECT]. Would you like to enable and retry (this will take a 
few minutes)? (y/N)?  y

Enabling service [sql-component.googleapis.com] on project [$PROJECT]...
ERROR: (gcloud.beta.run.deploy) INVALID_ARGUMENT: Invalid operation name operations/noop.DONE_OPERATION, refers to an already DONE operation

我已从控制台检查了 API,Cloud SQL Admin 和 Cloud SQL API 均已启用。我也尝试禁用它们并再次运行部署命令,但无济于事。

更多信息:

  1. SQL Server 实例是同一项目的一部分。将 --add-cloudsql-instances 参数更改为连接名称 ($PROJECT:$REGION:$SQLNAME) 无效

  2. 手动启用服务器无效:gcloud services enable sql-component.googleapis.com --project XXX

  3. 去掉--add-cloudsql-instances参数,服务器部署成功。

  4. 这有效:gcloud sql connect $PROJECTDB --user=root --quiet # 注意:($PROJECTDB) 与上面的 --add-cloudsql-instances 参数相同

【问题讨论】:

  • 1) 您是否尝试从另一个项目添加 SQL Server 实例?如果是,您用于 Cloud Run 的服务帐号是否有权访问其他项目中的该 SQL 实例?默认情况下,Cloud Run 使用 Compute Engine 默认服务帐号。 2) 尝试手动启用该服务,因为 Cloud Run gcloud services enable sql-component.googleapis.com --project XXX 可能需要很长时间。 4) $PROJECT-db 的值是多少。它应该看起来像$PROJECT:$REGION:$GCP_SQL_NAME。示例:development-123456:us-central1:mysqldb
  • 1) 不,这是同一个项目 2) 哦,对了!该命令没有返回错误。但是 gcloud beta run deploy 仍然失败,并出现与以前相同的错误。 4)好的,我只有数据库的名称,将其更改为实例名称不起作用。
  • 用新的细节更新您的问题。您有服务帐户问题或 SQL 实例名称问题。尝试删除 --add-cloudsql-instances 命令行选项以确保您可以部署并且您的服务在 $PORT 上响应。一旦您知道这可行,请调试 Cloud SQL 问题。
  • 谢谢,已更新。因此,如果我省略 --add-cloudsql-instances,则部署步骤有效。您认为这是服务帐户问题吗?文档说如果未指定,云运行将使用默认服务帐户,并且该帐户已经具有编辑权限...
  • Cloud SQL 是否与 Cloud Run 位于同一区域?

标签: google-cloud-sql google-cloud-run


【解决方案1】:

使用 Cloud SQL 实例部署部署 Cloud Run 服务时,gcloud v253.0.0 中似乎有一个bug(需要登录 Gmail)。

当我降级到 gcloud v251.0.0 后,我摆脱了“API [sql-component.googleapis.com] 未启用”错误消息,并且能够再次使用 Cloud SQL 实例部署 Cloud Run 服务。

$ gcloud components update --version 251.0.0

2019 年 7 月 17 日更新:该问题已在 Cloud SDK 254.0.0 中得到修复。如果您现在升级到最新版本,使用 Cloud SQL 实例部署 Cloud Run 服务应该可以工作:

$ gcloud components update

【讨论】:

  • 可以确认:我通过谷歌搜索“sql-component.googleapis.com noop.DONE_OPERATION”找到了这个答案,在按照此处的说明进行操作后出现类似错误:cloud.google.com/run/docs/configuring/connect-cloudsql 通过从 253 降级到 251事情奏效了。
  • 也已确认:我遇到了同样的问题,并通过降级到 251.0.0 解决了这个问题,感谢@Martin
【解决方案2】:

对于这个问题有两个问题:

  1. 启用 API 服务。我建议在运行 Cloud Run deploy 之前启用服务,因为这可能需要比 Cloud Run 允许的时间更长的时间。先运行这个命令:gcloud services enable sql-component.googleapis.com
  2. Cloud SQL 连接名称不正确。指定正确的名称会有所帮助。

Cloud SQL 连接名称的格式为:$PROJECT:$REGION:$GCP_SQL_NAME。

示例:development-123456:us-central1:mysqldb

此命令将返回有关 Cloud SQL 实例的信息,包括连接名称:

gcloud sql instances describe <instance_name>

注意。 Cloud Run 有几个命令用于指定要附加的 Cloud SQL 实例。

--add-cloudsql-instances - 此选项附加指定的连接名称。

--set-cloudsql-instances - 此选项替换当前 Cloud SQL 连接名称。

如果您没有将新版本部署到 Cloud Run,则无需使用 --add-cloudsql-instances 选项,因为该值仍然存在。我更喜欢使用 --set-cloudsql-instances 选项来明确指定 Cloud SQL 实例。

Cloud Run 支持多个 Cloud SQL 实例。您可以添加多个连接名称。

【讨论】:

  • 谢谢!将--add 更改为--set 解决了我的问题!
猜你喜欢
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2020-12-29
  • 2015-02-01
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多