передать учетные данные по умолчанию в BigQuery, используя Nodejs - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать новую таблицу в BigQuery. Я следовал этим инструкциям https://codelabs.developers.google.com/codelabs/cloud-bigquery-nodejs/index.html?index=..%2F..index#9 и правильно определил моего пользователя и роли.

Я создал проект узла, установил зависимости Google и получил следующий код:

 const {BigQuery} = require('@google-cloud/bigquery');
 const bigquery = new BigQuery({
   projectId: 'myproject-develop-3fcb6',
  private_key_id: "11111111111",
  client_email: "myuser-bigquery-sa@myproject-develop-3fcb6.iam.gserviceaccount.com",
  client_id: "212111112",
  });

Вот как я создаю свой набор данных и таблицу:

 module.exports = {
  createTable: ({ datasetId, tableId, schema, partitionBy}) => {
    const options = { schema };
    if (partitionBy) {
     options.timePartitioning = {
     field: partitionBy
   };
  }

  return new Promise((resolve, reject) => {
    resolve();
     bigquery
    .dataset(datasetId)
    .createTable(tableId, options)
    .then(results => resolve(results[0]))
    .catch(err => {
      handleError(err);
      reject(err);
    });
   });
  },
 };

Когда я запускаю свою функцию createTableFunction и передаю имя набора данных, имя таблицы, схему, я сразу получаю следующую ошибку

ERROR: Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.

Как передать учетные данные по умолчанию в BigQuery, чтобы я мог выполнять операции CRUD в node.js? Спасибо

1 Ответ

2 голосов
/ 10 февраля 2020

В упомянутом учебнике эта команда gcloud создает ключ. json:

   gcloud iam service-accounts keys create ~/key.json --iam-account  my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Затем вы можете использовать следующий код:

 // Create a BigQuery client explicitly using service account credentials.
 // by specifying the private key file.
 const {BigQuery} = require('@google-cloud/bigquery');

 const options = {
   keyFilename: 'path/to/key.json',
   projectId: 'my_project',
 };

const bigquery = new BigQuery(options);

Аутентификация с использованием файла ключа учетной записи службы

Я не знаю, где вы запускаете свой код, но в учебнике есть строка, в которой вы устанавливаете переменную env, поэтому вам не нужно проходить аутентификацию, используя ключ Файл. json в вашем коде:

   export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

Клиентские библиотеки GCP используют стратегию под названием Учетные данные приложения по умолчанию (AD C) для поиска учетных данных вашего приложения. Когда ваш код использует клиентскую библиотеку, стратегия проверяет ваши учетные данные в следующем порядке:

Сначала AD C проверяет, установлена ​​ли переменная среды GOOGLE_APPLICATION_CREDENTIALS. Если переменная задана, ADC использует файл учетной записи службы, на который указывает переменная. В следующем разделе описано, как установить переменную среды.

Если переменная среды не задана, AD C использует учетную запись службы по умолчанию, которая состоит из Compute Engine, Kubernetes Engine, Cloud Run, App Engine и Cloud. Функции обеспечивают приложения, работающие в этих службах.

Если AD C не может использовать ни один из указанных выше учетных данных, возникает ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...