请求中的资源字段值无效
Invalid resource field value in the request
我正在使用 Go SDK @ cloud.google.com/go/firestore GoDoc here 调用 Firestore。它在 App Engine 上运行良好,但我最近向 Cloud 运行 添加了一项新服务。此新服务调用旧服务使用的相同代码,但该代码 - 适用于 App Engine - 在 Cloud 运行 上引发错误:rpc error: code = InvalidArgument desc = Invalid resource field value in the request
引发错误的特定代码行是:
snap, err := client.Collection(queryable.CollectionName()).Doc(queryable.GetFirestoreID()).Get(ctx)
if err != nil {
return fmt.Errorf("couldn't read document with id: %v error: %w", queryable.GetFirestoreID(), err)
}
其中 queryable 是一个接口,而 CollectionName() return 是一个常量字符串,所以这不是问题所在(此外,如果那是问题所在,它会 return 一个不同的错误)。
我用更多的文字包裹了错误信息,所以完整的错误信息可以让你了解堆栈:DoTaxDog: allDB.UpdateData: firestoreCRUD.ReadSchema: error in Firestore's ReadSchema: couldn't read document with id: AGPFiyoJdMAmurVNqHYxvKHEb error: rpc error: code = InvalidArgument desc = Invalid resource field value in the request.
allDB.UpdateData
函数在此代码和 App Engine 中的 运行 代码之间共享,因此出于所有意图和目的,我在 App Engine 上的代码是 运行 和我的代码'云 运行 上的 m 运行 相同。
部署信息
我在 Gitlab 中用这个部署:
deploy_run:
image: google/cloud-sdk
stage: deploy
only:
- master
script:
- echo $DEPLOY_KEY > /tmp/$CI_PIPELINE_ID.json
- gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
- gcloud builds submit --tag gcr.io/project-name/project-name --project project-name
- gcloud run deploy project-name --image gcr.io/project-name/project-name --platform managed --project project-name --region=us-central1 --allow-unauthenticated
尝试解决问题
- 我尝试重新运行 请求。没有骰子。
- 我检查了同一请求是否正在本地主机上运行。它正在本地主机上工作。
- 我检查了我是否能够在 App Engine 上发出请求(不是相同的请求,而是几乎相同的请求)。它仍在 App Engine 上工作。
- 我查看了 GoDoc。它不引用此错误。
- 我查看了 Google 云文档。他们似乎说这是一条通用错误消息。我找不到针对 Firestore 的此错误消息的具体参考。
- 我在网上搜索了答案。没有骰子。
基础设施检查
- App Engine 和 Cloud 运行 位于同一区域。
- 我认为两者都使用默认的 App Engine 服务帐户来处理请求,因为在 Cloud 运行 服务页面上它给了我一个安全警告:“Cloud 运行 service [censored ] 在 us-central1 中使用默认的 Compute Engine 服务帐户。默认情况下,此服务帐户具有广泛的 IAM 权限。"
- 我尝试使用不同的服务帐户重新部署(编辑和部署新修订 > 安全选项卡 > 更改服务帐户 > 单击“部署”)。我尝试了默认的应用引擎服务帐户和计算引擎服务帐户。在这两种情况下,调用服务都会导致此 post.
中的错误
我以前遇到过这个问题,但我不记得上次是怎么解决的所以我做这个post。
已修复!云运行不设GOOGLE_CLOUD_PROJECTenvironment variable。当我通过此 Go 代码初始化 Firestore 客户端时:firestore.NewClient(ctx, projectID, option.WithCredentials(credentials))
projectID
变量的值为空字符串。如果未设置 projectID 变量,Firestore 的 Go SDK 函数 NewClient
不会抛出错误。相反,你第一次发出请求时,它 returns 来自底层服务的 rpc 错误,这是我最初看到的:rpc error: code = InvalidArgument desc = Invalid resource field value in the request
为了解决这个问题,我将这段代码添加到我的 gcloud run deploy
命令中:--set-env-vars=GOOGLE_CLOUD_PROJECT=project-name
感谢向我询问有关代码本身的更多详细信息的评论者!
[更新] 我打开了一个 Issue in Github and fixed it in a PR which was accepted。此问题已关闭,不应再次出现。
我正在使用 Go SDK @ cloud.google.com/go/firestore GoDoc here 调用 Firestore。它在 App Engine 上运行良好,但我最近向 Cloud 运行 添加了一项新服务。此新服务调用旧服务使用的相同代码,但该代码 - 适用于 App Engine - 在 Cloud 运行 上引发错误:rpc error: code = InvalidArgument desc = Invalid resource field value in the request
引发错误的特定代码行是:
snap, err := client.Collection(queryable.CollectionName()).Doc(queryable.GetFirestoreID()).Get(ctx)
if err != nil {
return fmt.Errorf("couldn't read document with id: %v error: %w", queryable.GetFirestoreID(), err)
}
其中 queryable 是一个接口,而 CollectionName() return 是一个常量字符串,所以这不是问题所在(此外,如果那是问题所在,它会 return 一个不同的错误)。
我用更多的文字包裹了错误信息,所以完整的错误信息可以让你了解堆栈:DoTaxDog: allDB.UpdateData: firestoreCRUD.ReadSchema: error in Firestore's ReadSchema: couldn't read document with id: AGPFiyoJdMAmurVNqHYxvKHEb error: rpc error: code = InvalidArgument desc = Invalid resource field value in the request.
allDB.UpdateData
函数在此代码和 App Engine 中的 运行 代码之间共享,因此出于所有意图和目的,我在 App Engine 上的代码是 运行 和我的代码'云 运行 上的 m 运行 相同。
部署信息
我在 Gitlab 中用这个部署:
deploy_run:
image: google/cloud-sdk
stage: deploy
only:
- master
script:
- echo $DEPLOY_KEY > /tmp/$CI_PIPELINE_ID.json
- gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
- gcloud builds submit --tag gcr.io/project-name/project-name --project project-name
- gcloud run deploy project-name --image gcr.io/project-name/project-name --platform managed --project project-name --region=us-central1 --allow-unauthenticated
尝试解决问题
- 我尝试重新运行 请求。没有骰子。
- 我检查了同一请求是否正在本地主机上运行。它正在本地主机上工作。
- 我检查了我是否能够在 App Engine 上发出请求(不是相同的请求,而是几乎相同的请求)。它仍在 App Engine 上工作。
- 我查看了 GoDoc。它不引用此错误。
- 我查看了 Google 云文档。他们似乎说这是一条通用错误消息。我找不到针对 Firestore 的此错误消息的具体参考。
- 我在网上搜索了答案。没有骰子。
基础设施检查
- App Engine 和 Cloud 运行 位于同一区域。
- 我认为两者都使用默认的 App Engine 服务帐户来处理请求,因为在 Cloud 运行 服务页面上它给了我一个安全警告:“Cloud 运行 service [censored ] 在 us-central1 中使用默认的 Compute Engine 服务帐户。默认情况下,此服务帐户具有广泛的 IAM 权限。"
- 我尝试使用不同的服务帐户重新部署(编辑和部署新修订 > 安全选项卡 > 更改服务帐户 > 单击“部署”)。我尝试了默认的应用引擎服务帐户和计算引擎服务帐户。在这两种情况下,调用服务都会导致此 post. 中的错误
我以前遇到过这个问题,但我不记得上次是怎么解决的所以我做这个post。
已修复!云运行不设GOOGLE_CLOUD_PROJECTenvironment variable。当我通过此 Go 代码初始化 Firestore 客户端时:firestore.NewClient(ctx, projectID, option.WithCredentials(credentials))
projectID
变量的值为空字符串。如果未设置 projectID 变量,Firestore 的 Go SDK 函数 NewClient
不会抛出错误。相反,你第一次发出请求时,它 returns 来自底层服务的 rpc 错误,这是我最初看到的:rpc error: code = InvalidArgument desc = Invalid resource field value in the request
为了解决这个问题,我将这段代码添加到我的 gcloud run deploy
命令中:--set-env-vars=GOOGLE_CLOUD_PROJECT=project-name
感谢向我询问有关代码本身的更多详细信息的评论者!
[更新] 我打开了一个 Issue in Github and fixed it in a PR which was accepted。此问题已关闭,不应再次出现。