场景:文本文件快照ID。txt位于S3存储桶中。我正在尝试创建一个每天运行的Lambda函数(Cron),该函数将使用AWS CLI拍摄卷的快照,然后将该快照ID保存到S3中的文本文件中。下次创建另一个快照时,新的快照ID将保存到S3中的同一个文本文件中。文本文件是快照ID的占位符,当它达到阈值时,它将删除顶部快照ID,并在末尾添加新快照ID(FIFO管道)。
对于不使用AWS lambda的人,我的问题是,向变量追加文本并返回包含新行的新变量的最快方式是什么。
对于了解Lambda的人来说,这是AWS Lambda的基本代码,我使用fs。appendFile,但是如何使用从s3.getObject()获得的文件并最终将其传递给s3.putObject()?
编辑:这是我的进步:
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
var fs = require('fs');
exports.handler = function(event, context) {
//console.log('Received event:', JSON.stringify(event, null, 2));
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
console.log(err);
var message = "Error getting object " + key + " from bucket " + bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
context.fail(message);
} else {
// fs.appendFile('snapshot-ids.txt', 'snap-001', function (err) {
// if (err) throw err;
// console.log('The "data to append" was appended to file!');
// });
console.log(params_new);
console.log('CONTENT TYPE getObject:', data.ContentType);
// context.succeed(data.Body.toString('ascii'));
}
});
var params_new = {
Bucket: bucket,
Key: key,
Body: 'snap-002'
};
s3.putObject(params_new, function(err, data) {
console.log('put here');
if (err) {
console.log(err);
var message = "Error getting object " + key + " from bucket " + bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
context.fail(message);
} else {
console.log('CONTENT TYPE putObject:', data.ContentType);
context.succeed(data.ContentType);
}
});
};
到目前为止,我注意到了您的代码中的一些事情。。。
>
在s3.getObject完成并且您拥有s3中的文件之前,您不能调用s3.putObject。
您没有处理文件系统,因为您从s3.getObject获取数据。
考虑到这些事情,我修改了您的代码(我还没有尝试过,但它应该会让您朝着正确的方向前进):
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
//console.log('Received event:', JSON.stringify(event, null, 2));
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
console.log(err);
var message = "Error getting object " + key + " from bucket " + bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
context.fail(message);
} else {
console.log(params_new);
console.log('CONTENT TYPE getObject:', data.ContentType);
// convert body(file contents) to a string so we can append
var body = data.Body.toString('utf-8');
// append data
body += 'snap-001\n';
var params_new = {
Bucket: bucket,
Key: key,
Body: body
};
//NOTE this call is now nested in the s3.getObject call so it doesn't happen until the response comes back
s3.putObject(params_new, function(err, data) {
console.log('put here');
if (err) {
console.log(err);
var message = "Error getting object " + key + " from bucket " + bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
context.fail(message);
} else {
console.log('CONTENT TYPE putObject:', data.ContentType);
context.succeed(data.ContentType);
}
});
}
});
};
另一个需要记住的是,如果你有超过一个这个Lambda同时运行,它们很可能会相互践踏。听起来你只需要每天安排一次,所以这没什么大不了的,但值得一提。
问题内容: 在Linux中将文本附加到文件的最简单方法是什么? 我看了这个问题,但是可接受的答案使用了一个附加程序(),我相信应该有一个更简单的方法或类似方法。 问题答案: cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn’t
问题内容: 我正在使用Python打开文本文档: 我想将字符串变量的值替换为文本文档。有人可以让我知道怎么做吗? 问题答案: 如果使用上下文管理器,则将自动为你关闭文件 如果你使用的是Python2.6或更高版本,则最好使用 对于python2.7及更高版本,你可以使用代替 在Python3中,该函数有一个可选参数 Python3.6引入了f字符串作为另一种选择
问题内容: 我将日志保存到sdcard上的.txt文件中,但是一旦保存了两行,它就会覆盖它并重新开始? 这是我的代码: 在恢复中挂载/ data后,/ sdcard和/ data / media / 0中的日志文件会显示完整的日志历史记录,但在设备开机时不会显示完整的日志历史记录 问题答案: 这是完成的方式。以下示例代码在单击提交按钮后将详细信息保存到文件中: 希望这可以帮助 :)
问题内容: 如何附加这个HTML字符串 到具有DOM中ID的DIV ? (顺便说一句是不可接受的。) 问题答案: 使用(如果可用),否则使用某种后备。当前所有浏览器均支持 insertAdjacentHTML 。
本文向大家介绍iOS 在Swift中附加属性字符串和粗体文本,包括了iOS 在Swift中附加属性字符串和粗体文本的使用技巧和注意事项,需要的朋友参考一下 示例 结果看起来像: 值是:用户输入的内容
我有一个程序,它总是将相同的文件附加到GMAIL(撰写 它所做的是: 在Android 6.0之前,它一直工作良好。现在,我在尝试使用它时收到以下错误: 无法附加空文件 Astro文件共享给我同样的错误(可能是旧版本)。 但是,我安装了ES File Explorer,当我执行相同的例程并选择该文件时,我会收到一个对话框,其中显示: 将文件作为 普通Android方式(适用于彩信、Gmail等)