【发布时间】:2018-07-25 11:02:52
【问题描述】:
我尝试使用 lambda 函数自动备份 AWS ec2 实例并触发 cloudwatch 事件。我正在使用免费层级服务。
我已安排每 5 分钟备份一次,但是,在第一次备份(即 AMI 创建)之后,不再创建 AMI。
我们可以为同一个实例创建多个 AMI 吗? 下面是使用的 lambda 函数。
问候 莫妮卡
var aws = require('aws-sdk');
aws.config.region = 'us-east-1';
var ec2 = new aws.EC2();
var now = new Date();
var date = now.toISOString().substring(0, 10);
var hours = now.getHours() ;
var minutes = now.getMinutes() ;
exports.handler = function(event, context) {
var instanceparams = {
Filters: [{
Name: 'tag:Backup',
Values: [
'yes'
]
}]
};
ec2.describeInstances(instanceparams, function(err, data) {
if (err) console.log(err, err.stack);
else {
for (var i in data.Reservations) {
for (var j in data.Reservations[i].Instances) {
var instanceid = data.Reservations[i].Instances[j].InstanceId;
var nametag = data.Reservations[i].Instances[j].Tags;
for (var k in data.Reservations[i].Instances[j].Tags) {
if (data.Reservations[i].Instances[j].Tags[k].Key == 'Name') {
var name = data.Reservations[i].Instances[j].Tags[k].Value;
}
}
console.log("Creating AMIs of the Instance: ", name);
var imageparams = {
InstanceId: instanceid,
Name: name + "_" + date + "_" + hours + "-" + minutes,
NoReboot: true
};
ec2.createImage(imageparams, function(err, data) {
if (err) console.log(err, err.stack);
else {
var image = data.ImageId;
console.log(image);
var tagparams = {
Resources: [image],
Tags: [{
Key: 'DeleteOn',
Value: 'yes'
}]
};
ec2.createTags(tagparams, function(err, data) {
if (err) console.log(err, err.stack);
else console.log("Tags added to the created AMIs");
});
}
});
}
}
}
});
};
【问题讨论】:
-
第一个问题:您为什么希望每 5 分钟创建一次 AMI?您的应用程序是否将数据存储在服务器上?通常建议使用数据库或 S3 等数据存储来存储数据。第二个问题:你知道 Lambda 函数每 5 分钟执行一次吗?如果是这样,您可以在 CloudWatch Logs 中看到该函数的哪些错误或信息性消息?
-
创建 AMI 也需要相当多的时间和存储空间。我宁愿每 5 分钟创建一次实例的incremental snapshots,然后在需要时从快照手动创建一个 AMI。
-
@JohnRotenstein 我正在尝试自动化备份过程,因此我正在检查此功能以每 5 分钟运行一次。但它只创建 1 个备份,然后不会。即使我尝试手动运行该功能两次。它只创建一个备份,然后第二次给出错误,说该图像已在使用中。 (InvalidAMIName.Duplicate:AMI 名称 AMIBackup_2018-02-18_14-55 已被 AMI ami-aff6ecd5 使用)
-
@SanchitAnand ...我希望每天创建一个备份并在 5 天后删除它.. 这样我在过去 5 天里只有 AMI。快照会起到同样的作用吗?
标签: amazon-web-services amazon-ec2 aws-lambda amazon-cloudwatch