Я загружаю несколько файлов 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}`);
});
});
});
}