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

时间:2019-01-11 16:45:41

标签: google-cloud-platform google-cloud-storage google-cloud-functions

我尝试部署一个存储触发的Cloud Function,尽管此过程通常对于相同组织中的许多项目以及类似的设置都可以正常工作,但是从昨天开始我就遇到了麻烦。

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

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

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

在这两个类别之间的设置中,我找不到其他任何显着差异,尤其是IAM和ACL,启用的API,并且我已经确保该功能始终与存储区在同一项目中创建触发资源。

使用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类项目中执行相同的操作,按预期成功。

使用Google Cloud Console时出错

Create function页上,

  1. 我选择Cloud Storage作为 Trigger
  2. 事件类型:`最终确定/创建*
  3. 作为存储桶,我选择一个默认存储桶,例如$API_PROJECT_ID.appspot.com
  4. 所有其他默认设置,包括建议的示例代码
  5. 保存

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

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

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

错误:未创建Cloud Storage服务帐户

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

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

您可能会猜到,我只会为类别A 中的项目获得200 OK和相应的Cloud Storage服务帐户名,而对于类别B中的所有项目,我都会得到503 / strong>我将看到此错误响应,代码为{ "error": { "errors": [ { "domain": "global", "reason": "backendError", "message": "Backend Error" } ], "code": 503, "message": "Backend Error" } }

$API_PROJECT_ID-input

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

更多信息并尝试解决

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

我不确定503错误,缺少服务帐户和部署失败(代码13)的问题是否相关。但是IIRC,GCF的存储触发器实际上基于Pub / Sub,并且需要使用服务帐户,如GCP控制台中 Storage> Settings

下的帮助文本所述:
  

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

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

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

  • 使用gsutil iam和GCP控制台比较了A类和B类项目之间的IAM
  • 使用gsutil acl比较A和B类项目之间的ACL
  • 通过API手动部署其他具有不同预定义Acl的测试桶
  • 删除存储桶$API_PROJECT_ID.appspot.com,然后在没有预定义的Acl的情况下再次部署
  • 使用了自动创建的默认项目存储桶,例如$API_PROJECT_ID-input
  • 为类别B中的项目更新了Cloud Deployment Manager的部署配置
  • 试图禁用和启用多个API,但不会对大多数API那样操作,以避免引起其他问题
  • 为类别B中的项目启用了Cloud Build API(有趣的是,直到那时,才将另一个Cloud Build服务帐户的继承的IAM权限引入了Storage Object Creator存储桶的IAM中)
  • 将{{1}}角色添加到默认服务帐户($API_PROJECT_ID@appspot.gserviceaccount.com)

1 个答案:

答案 0 :(得分:0)

我已经开了一个案子,后来GCP通知我这是一个普遍的问题,只影响了不到1%的项目。

  

截至2019年1月11日(星期五),我们已收到有关Google Cloud Pub / Sub问题的报告。我们将在2019年1月11日(星期五)美国/太平洋地区提供更多信息。

有关背景信息:Cloud Functions的存储桶触发器使用Cloud Pub / Sub。