Скопируйте файл из GCS в AWS S3 с помощью Google Functions - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь скопировать файлы (файл 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 «завершен» и «успешно» печатается.

Не могли бы вы помочь мне решить эту проблему или предложить альтернативное решение?

Спасибо.

...