为什么在尝试获取云存储服务帐户时会看到"503后端错误"



我尝试部署一个存储触发的云功能,虽然这个过程通常适用于同一组织中的许多项目和类似的设置,但从昨天开始,我很难做到这一点。

我可以在多个组织的所有GCP项目中观察到以下模式

  • A类如果在昨天之前至少有一个存储触发功能已部署到项目中,我可以再次将相同的功能或新功能部署到该项目中,没有问题。

    • 这些项目有一个云存储服务帐户,如存储>设置下的GCP控制台所示,即$API_PROJECT_ID@gs-project-accounts.iam.gserviceaccount.com
    • 我可以从云存储API项目检索此帐户。serviceAccount:get
  • 类别B如果昨天之前没有将存储触发功能部署到项目中,无论我是通过Cloud Build部署功能,还是通过GCP控制台创建简单的bucket功能,我都无法部署存储触发功能,即使当我只是按原样使用UI建议的示例代码并链接到项目中的默认bucket时也是如此。

    • 这些项目没有云存储服务帐户,如存储>设置下的GCP控制台中所示
    • 我也无法从云存储API项目检索此帐户。serviceAccount:get,我将看到503 Backend Error

我在这两个类别之间的设置中找不到任何其他显著差异,特别是IAM和ACL,启用了API,我已经确保该函数始终与作为触发器资源的bucket在同一项目中创建。

使用gcloud functions deploy时出错

$是收回的名称

gcloud functions deploy $FUNCTION_NAME --region=us-central1 --source=https://source.developers.google.com/projects/$PROJECT_ID/repos/$REPO_NAME/moveable-aliases/$BRANCH_NAME/paths/$FUNCTION_NAME/src --trigger-resource=$API_PROJECT_ID-input --trigger-event=google.storage.object.finalize --timeout=540 --runtime=python37 --entry-point=main --memory=128MB --project=$API_PROJECT_ID --retry

将显示属于B类的项目的此错误。

ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Failed to configure trigger GCS Bucket: $API_PROJECT_ID-input

在A类项目中做同样的事情会像预期的那样成功。

使用谷歌云控制台时出错

在页面创建功能上,

  1. 我选择Cloud Storage作为触发器
  2. 事件类型:`Finalize/Create*
  3. 作为存储桶,我选择一个默认存储桶,例如$API_PROJECT_ID.appspot.com
  4. 默认情况下的所有其他内容,包括建议的示例代码
  5. 保存

对于B类的所有项目,部署都将失败,但对于A类的项目,部署成功。

UI中的部署状态消息显示以下错误:

Deployment failure:
Failed to configure trigger GCS Bucket: $API_PROJECT_ID

错误:未创建云存储服务帐户

然后,我开始比较设置,并注意到在GCP控制台的"云存储">"设置"下,只有类别A的项目具有云存储服务帐户。类别B的项目没有云存储服务帐户。因此,我尝试从API检索帐户:

https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get

正如您所猜测的,我将仅为类别A中的项目获得具有相应云存储服务帐户名称的200 OK,但对于类型B的所有项目,我将看到此错误响应,代码为503:

{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": 503,
"message": "Backend Error"
}
}

从昨天开始,我已经为许多不同的项目尝试了几次,但都没有改变。

进一步信息和解决尝试

我已遵循以下说明:https://cloud.google.com/storage/docs/getting-service-account使用此页面上的API资源管理器:https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get

我不能100%确定503错误、缺乏服务帐户和部署失败(代码13)的问题是否相关。但是IIRC,GCF的存储触发器实际上是基于Pub/Sub的,并且需要服务帐户,如GCP控制台中存储>设置下的帮助文本所述:

每个项目都有一个关联的云存储服务帐户。这用于执行某些后台操作:接收PubSub通知和加密/解密KMS加密的对象。

我也在这里阅读了有关此服务帐户的建议:https://cloud.google.com/storage/docs/projects#service-账户

我还尝试了以下解决方案:

  • 使用gsutil IAM和GCP控制台比较了A类和B类项目之间的IAM
  • 使用gsutil ACL比较A类和B类项目之间的ACL
  • 通过API其他具有不同预定义的测试桶手动部署
  • 删除了bucket$API_PROJECT_ID-input,并在没有预定义Acl的情况下再次部署
  • 使用了已自动创建的项目的默认存储桶,例如$API_PROJECT_ID.appspot.com
  • 为类别B中的项目更新了云部署管理器的部署配置
  • 尝试禁用和启用几个API,但为了避免引发其他问题,大多数API都不会这样做
  • 为类别B中的项目启用了云构建API(有趣的是,这只是在那时才将不同云构建服务帐户的继承IAM权限带入$API_PROJECT_ID-input存储桶的IAM中)
  • Storage Object Creator角色添加到默认服务帐户($API_PROJECT_ID@appspot.gserviceaccount.com)

我打开了一个案例,后来GCP支持部门通知我,这是一个影响不到1%项目的一般问题。

截至2019-01-11星期五17:48美国/太平洋地区,我们收到了一份关于谷歌云Pub/Sub问题的报告。我们将在2019-01-11星期五18:30之前提供更多信息。

背景信息:Cloud函数的bucket触发器使用Cloud Pub/Sub。

相关内容

  • 没有找到相关文章

最新更新