2017-06-08 169 views
0

几个小时前,我们的应用程序启动失败谷歌云功能的数据存储连接问题

Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. 
at (/user_code/node_modules/@google-cloud/datastore/node_modules/grpc/src/node/src/client.js:442) 

据我所知客户端库使用应用程序默认凭据的方法的情况下,如果没有权限,文件传递到数据库连接实例,或者没有env。指定的变量。我们没有在远程Google Cloud Functions执行环境中使用这些文件中的任何文件。

const db = new require("@google-cloud/datastore")(); 

而且我知道我没有看到任何其他方式并生成凭证文件并在db初始化期间显式传递它。

const db = new require("@google-cloud/datastore")({ 
    keyFilename: "./configs/db_key.json" 
}); 

如果有人知道这种行为的原因 - 请分享。

+1

谷歌云功能仍处于测试阶段,所以这可能是一个服务中断问题。如果您的问题在24小时后仍然存在,请考虑通过Google问题跟踪器报告问题。 –

回答

0

与Google支持人员对话后,我们发现了几件事情。

  1. 几周后我再次检查并且Application Default Credentials在GCF中再次开始工作。
  2. 支持建议像我一样使用额外的服务帐户。此外,文件中还包含此警告。

注意:创建默认服务帐户时的具体行为,以及他们如何在你的项目中显示,因为它们被设计成由谷歌计算引擎和谷歌应用程序引擎可用于在将来可能会改变,所以建议您不要依赖这些默认帐户的存在供您使用。建议您使用IAM API,Cloud Platform Console或gcloud工具明确创建其他服务帐户,以便长期使用。 Source

因此,看起来最好对应用程序中使用的每个模块和服务使用显式键。此外,这里是链接到service account best practices