Automating Backups of Your Route 53 Hosted Zone DNS Records https://www.aaronmedacco.com/blog/post/2017/01/03/automating-backups-of-your-route-53-hosted-zone-dns-records
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
var route53 = new AWS.Route53();
var lambda = new AWS.Lambda();
var params = {};
route53.listHostedZones(params, function(err, data){
if (err) {
console.log(err, err.stack);
}
else {
for (var i = 0; i < data.HostedZones.length; i++) {
var id = data.HostedZones[i].Id;
var name = data.HostedZones[i].Name;
var payload = { id:id, name:name };
var lambdaParams = {
FunctionName: "Your Lambda Function Name",
InvocationType: "Event",
Payload: JSON.stringify(payload)
};
lambda.invoke(lambdaParams, function(err, data) {
if (err) {
console.log(err, err.stack);
}
else {
console.log(data);
}
});
}
}
});
};
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones"
],
"Resource": [
"*"
]
},
{
"Action": [
"lambda:InvokeFunction"
],
"Effect": "Allow",
"Resource": "Your Lambda Function ARN"
}
]
}
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
var route53 = new AWS.Route53();
var id = event.id;
var name = event.name;
var recordParams = { HostedZoneId: id };
route53.listResourceRecordSets(recordParams, function(err, data){
if (err) {
console.log(err, err.stack);
}
else {
console.log(JSON.stringify(data));
var records = [];
for (var j = 0; j < data.ResourceRecordSets.length; j++){
records.push(data.ResourceRecordSets[j]);
}
var zone = { id:id, name:name, records:records };
uploadBackupToS3(zone);
}
});
};
var uploadBackupToS3 = function(data) {
var s3 = new AWS.S3();
var bucket = "Your Bucket Name";
var timeStamp = Date.now();
var key = data.name + "_" + data.id.replace(/\//g, '').replace("hostedzone", '') + "_backup_" + timeStamp;
key = key.replace(/[.]/g, "_");
var body = JSON.stringify(data);
var param = { Bucket: bucket, Key: key, Body: body, ContentType: "text/plain", StorageClass: "STANDARD_IA" };
s3.upload(param, function(err, data) {
if (err){
console.log(err, err.stack);
} else{
console.log("Route 53 backup successful.")
}
});
};
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListResourceRecordSets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"Your Bucket ARN"
]
}
]
}