Как прочитать текстовый файл, хранящийся в хранилище Google, из облачной функции в узле - PullRequest
0 голосов
/ 02 апреля 2020

Я написал некоторый код node.js, который находится в источнике функции облака. Когда он запускается, я хочу прочитать текстовый файл из хранилища Google и обработать его.

Код работает нормально при локальном запуске, но по какой-то причине не работает при работе в облачной функции. Я ожидаю, что что-то будет записано в журналах консоли.

Я не вижу никаких ошибок, так как думал, что это может быть проблема с разрешениями (хотя, возможно, я искал не в том месте).

Любые идеи?

Ожидания и асин c были только потому, что я хотел, чтобы он дождался ответа, прежде чем продолжить, но, похоже, это тоже не повлияет на него.

  const fileName = 'testData.txt';
  const {Storage} = require('@google-cloud/storage');
  const storage = new Storage();
  const bucket = storage.bucket('my_bucket_name');
  const remoteFile = bucket.file(fileName);

  await remoteFile.download(async function(err, contents) {
       console.log("file err: "+err);  
       console.log("file data: "+contents);
  });

1 Ответ

0 голосов
/ 03 апреля 2020

Что вы можете сделать, это проверить, что учетная запись времени выполнения для функции имеет необходимые разрешения для доступа к корзине. Как правило, учетная запись времени выполнения - PROJECT_ID@appspot.gserviceaccount.com и добавьте по крайней мере Средство просмотра хранилища (вы можете проверить больше ролей здесь ).

Затем проверьте функцию еще раз. Если что-то идет не так, проверьте журналы функции.

РЕДАКТИРОВАТЬ

Не уверен, но, возможно, что-то с кодом. Я использовал следующее для проверки функции и отлично работает:

index. js:

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('bucket_name');
const fileName = 'test.txt';
const remoteFile = bucket.file(fileName);

exports.helloWorld = (req, res) => {

    console.log('Reading File');
    var archivo = remoteFile.createReadStream();

    console.log('Concat Data');
    var  buf = '';
    archivo.on('data', function(d) {
        buf += d;
    }).on('end', function() {
        console.log(buf);
        console.log("End");
        res.send(buf);
    });     
};

package. json:

{
    "name": "sample-http",
    "version": "0.0.1",
    "dependencies": {
        "@google-cloud/storage": "^4.7.0"
    }
}
...