Я не сильный кодер, но пытаюсь создать функцию Lambda, используя node.js , который запускается через Lambda cron один раз в день, чтобы перемещать файлы из корзины S3 в «архивную» корзину.
Пробовал разные методы
sudo nodejs -e "console.log(require('./index').handler({}));"
Мой вывод с локальной машины:
Running MyApp
Source mybucket
Target mybucket-archive
Account test
undefined
Вот мой код:
var aws = require('./node_modules/aws-sdk');
var s3 = new aws.S3();
console.log('Running myapp');
console.log(JSON.stringify(context.invokedFunctionArn).split(':')[4]);
var AccountNumber = (JSON.stringify(context.invokedFunctionArn).split(':')[4]);
if(AccountNumber == '123456789000') { SourceBucket = 'mybucket-test'; } //test account
if(AccountNumber == '198765432101') { SourceBucket = 'mybucket-prod'; } //prod account
var targetBucket = SourceBucket+"-archive"
//Debug?
console.log("Source", SourceBucket);
console.log("Target", targetBucket);
console.log("Account", AccountNumber);
exports.handler = function () {
// var exec = require('child_process').exec;
const exec = require('child_process').exec;
exec("aws s3 mv s3://", +SourceBucket+ "/incoming/test/ s3://" +targetBucket+ "/incoming/test/ --recursive"), (err, stdout, stderr) => {
//exec(echo 'hello world'), (err, stdout, stderr) => {
if (err) {
// node couldn't execute the command
console.log(err);
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
}
};
Я ожидаю, что вызывается aws cli и перемещает файлы из основного сегмента в архивный.
Мы ожидаем, что в день будет загружаться только 10-20 небольших текстовых файлов размером 1 КБ, поэтому мы ожидаем, что это должно выполняться в соответствии с требованиями Lambda. Это должно выполняться через лямбда-крон, так как события s3 используются в других лямбдах.