Я пытаюсь скопировать файлы (файл csv) из Google Cloud Storage в AWS S3 Bucket с помощью следующего кода:
/**
* Triggered from a change to a Cloud Storage bucket.
*
* @param {!Object} event Event payload.
* @param {!Object} context Metadata for the event.
*/
const AWS = require('aws-sdk');
const gcloud = require('google-cloud');
exports.helloGCS = (event, context) => {
const gcsEvent = event;
console.log(`Processing Bucket: ${gcsEvent.bucket}`);
console.log(`Processing file: ${gcsEvent.name}`);
//console.log(gcsEvent);
//console.log(JSON.stringify(gcsEvent));
// Fetch "environment" from Google Runtime Configuration
const awsBucketP = "bucket-name";
const awsAccessKeyP = "key";
const awsSecretKeyP = "secret-key";
const regionP = "eu-west-1"
Promise.all([ awsBucketP, awsAccessKeyP, awsSecretKeyP, regionP ]).then(values => {
AWS.config.credentials = new AWS.Credentials(values[1], values[2]);
var s3 = new AWS.S3({region: values[3], httpOptions: { timeout: 10 * 60 * 1000 } });
var bucket = gcloud.storage().bucket(gcsEvent.bucket);
var s3obj = new AWS.S3({params: {Bucket: values[0], Key: gcsEvent.name}});
var remoteReadStream = bucket.file(gcsEvent.name).createReadStream();
var data = '';
remoteReadStream
.on('data', function(d){
data += d;
})
.on('end', function(){
s3obj.upload({Body: data})
.on('httpUploadProgress', function(evt) {
console.log('Completed ' + (evt.loaded * 100 / evt.total).toFixed() + '% of upload'); })
.on('success', function(response) {
console.log("Success!");
})
.on('error', function(error, response) {
console.log("Error!".error);
})
.on('complete', function(response) {
console.log("Always!");
})
.send(function(err, data) { if(err) console.log(err); else console.log(`Upload file: ${gcsEvent.name}`); });
});
}).catch(function(e){console.log(e)});
};
Если размер файла меньше 5 МБ, он отправляется, но когда файл 30МБ нет. Более того, иногда файлы размером 5 МБ не отправляются.
Журналы функций Google Cloud сообщают, что все в порядке. Журнал console.log «завершен» и «успешно» печатается.
Не могли бы вы помочь мне решить эту проблему или предложить альтернативное решение?
Спасибо.