#node.js #google-cloud-platform #google-bigquery
#node.js #google-облачная платформа #google-bigquery
Вопрос:
У меня есть node.js приложение, которое выполняет запись в таблицу в BigQuery. Большую часть времени это работает нормально, но иногда я получаю ошибку 401 «Недопустимые учетные данные».
Я использую учетную запись службы.
const BigQuery = require('@google-cloud/bigquery');
let bigQuery;
new BigQuery({ keyFilename: __dirname '/big_query.json', projectId: config.google.project_id_prod });
const insertToBigQuery = (dataSet, table, object) => {
return new Promise((resolve, reject) => {
if (config.releaseType === config.releaseTypeEnum.DEVELOPMENT || config.releaseType === config.releaseTypeEnum.STAGING) {
logger.info(`Insert started to BigQuery. Dataset - ${dataSet} Table - ${table}`);
}
bigQuery.dataset(dataSet).table(table).insert(object, { ignoreUnknownValues: false })
.then(() => {
resolve({ insertedWithError: false });
})
.catch(err => {
bigQuery.dataset(dataSet).table(table).insert(object, { ignoreUnknownValues: true })
.then(() => {
resolve({ insertedWithError: true, err: JSON.stringify(err) });
})
.catch(err => {
reject(`ERROR: ${JSON.stringify(err)}`);
});
});
});
};
В большинстве случаев этот код работает. Иногда я получаю ошибку 401 «Недопустимые учетные данные»
Комментарии:
1. Случайно ли какие-либо ошибки зарегистрированы в каком-либо из журналов Stackdriver?
2. Я вижу следующую ошибку: { «code»: 401, «errors»: [ { «message»: «Недопустимые учетные данные», «domain»: «global», «reason»: «authError», «location»: «Authorization», «LocationType»: «header» } ], «message»: «Запрос содержал недопустимые учетные данные для аутентификации. Ожидается токен доступа OAuth 2, файл cookie для входа или другие действительные учетные данные для аутентификации. Смотрите developers.google.com/identity/sign-in/web/devconsole-project . — Недопустимые учетные данные»}
3. Как выполняется это приложение? Откуда вы это запускаете? Если вы немедленно запустите ее повторно, сработает ли она затем? Существуют ли какие-либо шаблоны при сбое? Как выполняется аутентификация с помощью GCP?
4. Он запускается как микросервис внутри Kubernetes. Поведение прерывистое
5. Настроили ли вы аутентификацию, как описано здесь … cloud.google.com/docs/authentication/getting-started Мне приходит в голову странная мысль… у вас есть несколько модулей, на которых размещена эта служба? Это реплицируется? Если да, то возможно ли, что причиной недетерминированного поведения является то, что один из модулей «болен», и когда балансировщик нагрузки выбирает этот модуль (недетерминированно), именно тогда мы видим проблему?