Google Cloud的服务帐户不起作用

时间:2020-03-17 13:47:13

标签: google-cloud-platform google-cloud-storage google-auth-library

我正在尝试通过在本地计算机上创建服务帐户来与Google Cloud和服务API通信。我在Mac OS上

我正在关注这篇文章

https://cloud.google.com/docs/authentication/production

我已经在本地终端会话中设置了“ GOOGLE_APPLICATION_CREDENTIALS”环境变量。

它指向通过Google云控制台创建的服务帐户的密钥文件。

但是运行下面的node js程序会给我错误

    // Imports the Google Cloud client library.
const {Storage} = require('@google-cloud/storage');

// Instantiates a client. If you don't specify credentials when constructing
// the client, the client library will look for credentials in the
// environment.
const storage = new Storage();

try {
  // Makes an authenticated API request.
  const results = await storage.getBuckets();

  const [buckets] = results;

  console.log('Buckets:');
  buckets.forEach(bucket => {
    console.log(bucket.name);
  });
} catch (err) {
  console.error('ERROR:', err);
}

错误是

    const results = await storage.getBuckets();
                        ^^^^^^^

SyntaxError: Unexpected identifier

读取凭证时似乎是错误的,因为无法实例化存储对象。

最好的问候

Saurav

1 个答案:

答案 0 :(得分:1)

您必须在await函数中使用async。假设您创建了一个具有必要权限(Storage Admin)的服务帐户,并导出了env变量GOOGLE_APPLICATION_CREDENTIALS,那么这是对我有用的代码:


   'use strict';

const authCloudImplicit = async () => {
  // [START auth_cloud_implicit]
  // Imports the Google Cloud client library.
  const {Storage} = require('@google-cloud/storage');

  // Instantiates a client. If you don't specify credentials when constructing
  // the client, the client library will look for credentials in the
  // environment.
  const storage = new Storage();

  try {
    // Makes an authenticated API request.
    const results = await storage.getBuckets();

    const [buckets] = results;

    console.log('Buckets:');
    buckets.forEach(bucket => {
      console.log(bucket.name);
    });
  } catch (err) {
    console.error('ERROR:', err);
  }
  // [END auth_cloud_implicit]
};

const a = authCloudImplicit();