AWS S3 Ошибка RequestTimeTooSkewed при загрузке нескольких файлов - PullRequest
0 голосов
/ 27 марта 2020

Я загружаю несколько файлов HTML и PNG в определенной структуре каталогов в мой AWS S3 контейнер. Код, который я написал для загрузки этих файлов, до сих пор работал отлично.

В последнее время я сталкиваюсь со многими ошибками «RequestTimeTooSkewed», поскольку процесс загрузки приближается к завершению. Также предоставляется сообщение «Разница между временем запроса и текущим временем слишком велика».

Следует отметить, что я ежедневно загружаю все больше и больше файлов PNG при каждом выполнении. Например, я загружал около 500 файлов PNG. На следующий день я могу загрузить 700 файлов PNG. Сейчас я загружаю около 2500 PNG-файлов за исполнение.

Я понимаю, что эта проблема возникает, когда время сервера AWS S3 не соответствует машине, на которой выполняется сценарий загрузки. Я проверил время моей машины по времени сервера и обнаружил, что оба времени практически идентичны.

Мне интересно, не являются ли загружаемые файлы узкими местами, и им изначально дается более раннее время, чем когда начинается фактическая загрузка.

Если у кого-то есть идея, почему происходят эти ошибки, я хотел бы услышать объяснение. Спасибо !!

Вот код, ответственный за загрузку на AWS S3:

let fs = require('fs');
let rimraf = require('rimraf');
let directory = 'reporting/reports/';
let aws = require('aws-sdk');

let date;
let screenshotFolder = [];
let OSFolder = [];
let hubFolder = [];

aws.config.update({
    accessKeyId: '***',
    secretAccessKey: '***',
    region: 'us-west-2'
});

let s3 = new aws.S3({
    apiVersion: "2006-03-01",
});

fs.readdirSync(directory).forEach(file => {
    date = file;
});

directory = directory + date + "/";

fs.readdirSync(directory).forEach(file => {
    if (file === ".DS_Store") {
        rimraf.sync(file);
    }
});

if (fs.existsSync(directory + "screenshots/")) {
    fs.readdirSync(directory + "screenshots/").forEach(file => {
        screenshotFolder.push(file);
    });

    for (let i = 0; i < screenshotFolder.length; ++i) {
        let fileStream = fs.createReadStream(directory + "screenshots/" + screenshotFolder[i]);
        fileStream.on('error', function (err) {
            console.log("ERROR: ", err);
        });
        s3.upload({
            Bucket: 'Reporting',
            Key: "Reporting/" + date + "/screenshots/" + screenshotFolder[i],
            Body: fileStream,
            ACL: 'public-read'
        }, function (err, data) {
            if (err) {
                console.log("Screenshot Error: ", err);
            }
            if (data) {
                console.log("Screenshot Success: ", data.Location);
            }
        }).on('httpUploadProgress', event => {
            console.log(`Screenshot Uploaded ${event.loaded} out of ${event.total}`);
        });
    }
}

if (fs.existsSync(directory + "hub/")) {
    fs.readdirSync(directory + "hub/").forEach(file => {
        hubFolder.push(file);
    });

    for (let i = 0; i < hubFolder.length; ++i) {
        let fileStream = fs.createReadStream(directory + "hub/" + hubFolder[i]);
        fileStream.on('error', function (err) {
            console.log("ERROR: ", err);
        });
        s3.upload({
            Bucket: 'Reporting',
            Key: "Reporting/" + date + "/hub/" + hubFolder[i],
            Body: fileStream,
            ACL: 'public-read',
            ContentType: 'text/html'
        }, function (err, data) {
            if (err) {
                console.log("Hub Error: ", err);
            }
            if (data) {
                console.log("Hub Success: ", data.Location);
            }
        }).on('httpUploadProgress', event => {
            console.log(`Hub Uploaded ${event.loaded} out of ${event.total}`);
        });
    }
}

fs.readdirSync(directory).forEach(file => {
    if (file !== "screenshots"  && file !== "hub" && file !== ".DS_Store") {
        OSFolder.push(file);
    }
});

for (let i = 0; i < OSFolder.length; ++i) {
    fs.readdirSync(directory + OSFolder[i]).forEach(file => {
        fs.readdirSync(directory + OSFolder[i] + "/" + file).forEach(html => {
            let fileStream = fs.createReadStream(directory + OSFolder[i] + "/" + file + "/" + html);
            fileStream.on('error', function (err) {
                console.log("OS ERROR: ", err);
            });
            s3.upload({
                Bucket: 'Reporting',
                Key: "Reporting/" + date + "/" + OSFolder[i] + "/" + file + "/" + html,
                Body: fileStream,
                ACL: 'public-read',
                ContentType: 'text/html'
            }, function (err, data) {
                if (err) {
                    console.log("OS Error: ", err);
                }
                if (data) {
                    console.log("OS Success: ", data.Location);
                }
            }).on('httpUploadProgress', event => {
                console.log(`OS Uploaded ${event.loaded} out of ${event.total}`);
            });
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...