首页 > 解决方案 > “错误:无法加载默认凭据。” 在 App Engine 生产环境中

问题描述

几周前我一直在 AppEngine 中使用 Datastore,并且在生产环境中没有这样的访问问题。今天下午 1 点 SGT,尽管我从未部署到生产环境,但我的服务突然返回 500 错误并显示此错误消息。

错误:无法加载默认凭据。浏览到https://cloud.google.com/docs/authentication/getting-started了解更多信息。

使用我的 GCP 的默认凭据访问 Datastore 时可能会发生此错误:

const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const [shop] = await datastore.get(
    datastore.key(['Shop', Number(phone)])
)

我的堆栈:

在 App Engine 仪表板中,作为随机解决方案,我更改为旧版本。然后,它突然开始工作。然后,我改回原来的版本。它也运作良好。有什么线索吗?

嫌疑人1:当时,我在当地工作。虽然我从未部署,但我执行了一些 GCP 命令。这些不应该影响生产

export GOOGLE_APPLICATION_CREDENTIALS="[我的本地凭证 json 文件]"

gcloud 配置设置项目 [项目名称]

标签: google-app-enginegoogle-cloud-platform

解决方案


似乎这个问题与 App Engine/Cloud Function 冷启动有关。在这种情况下,在初始化客户端库时,环境还没有加载凭据。

显然,它已在较新版本的客户端库中得到修复:https ://github.com/googleapis/gapic-generator-typescript/issues/287

但如果不是或者您不想升级@google-cloud/客户端库,建议的解决方法是:

const {Datastore} = require('@google-cloud/datastore');
let datastore;

// If you are using it in a request handler
exports.handler = async (req, res) {
  if (!datastore) {
    datastore = new Datastore();
  }
  const [shop] = await datastore.get(
    datastore.key(['Shop', Number(phone)])
  );
}

另请参阅:https ://github.com/googleapis/google-auth-library-nodejs/issues/798#issuecomment-591622283


推荐阅读