Существуют ли ограничения на размер файлов, загружаемых с помощью облачных функций, запускаемых облачным хранилищем? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть облачная функция, запускаемая корзиной хранения на google.storage.object.finalize. В этой функции я загружаю файл, который запускает функцию, и выполняю некоторые преобразования данных. Если размер этого файла ~ 5 КБ, функция выполняется должным образом. Если размер файла составляет ~ 200 МБ, обратный вызов file.download никогда не запускается, и Stackdriver не показывает ничего, кроме Function execution took 14 ms, finished with status: 'ok'.

. Я понимаю, что существует ограничение в 10 МБ для файлов, загружаемых через HTTP в функции, запускаемые по HTTP, но эта функциязапускается облачным хранилищемВ ответе на на этот вопрос говорится, что ограничение на 10 МБ не применяется к функциям, инициируемым памятью, поэтому я подозреваю возможную проблему тайм-аута.

Для этой функции установлено ограничение памяти 2 ГБ, 5минутное время ожидания, и все сегменты / функции находятся в одном регионе. Конечно, этого будет достаточно ресурсов для передачи и обработки файла размером 200 МБ (локальное профилирование показывает, что процесс завершается через несколько секунд, оставаясь при объеме памяти менее 512 МБ).

const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
const uploadBucket = storage.bucket("<bucket name>");

module.exports = (data, context) => {

    console.log('Getting file ref');  // Logged regardless of file size
    const file = uploadBucket.file(<file name>);

    file.download(function (err, buffer) {
        console.log('Starting file processing');
        // With a smaller file, this callback runs as expected.
        // With larger files, this code is never reached.
    });
};

Имею ли я неверное представление о доступной пропускной способностимежду функцией и корзиной хранения или это предлагает другую проблему?

1 Ответ

0 голосов
/ 06 ноября 2019

Мне удалось скопировать файл размером 286,15 МБ из исходной корзины в целевую корзину. Это моя облачная функция.

exports.helloGCSGeneric = (data, context) => {

var storage = require('@google-cloud/storage')();


const bucket = storage.bucket(data.bucket);
const file = bucket.file(data.name); // file has couple of lines of text

var anotherBucket = storage.bucket('destination_bucket');

 file.copy(anotherBucket, function(err, copiedFile, apiResponse) {
});

 // or you can use 
 var newLocation = 'gs://another-bucket/new_file';
 file.copy(newLocation).then(function(data) {
 var newFile = data[0];
 var apiResponse = data[1];
 });
};

Это мой файл package.json:

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

Я просто запускаю функцию:

gsutil cp filename  gs://source_bucket/

Согласнодокументирование Квоты и лимиты :

Максимальный размер для отдельных объектов, хранящихся в облачном хранилище, составляет 5 ТБ.

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