Skip to content

Commit

Permalink
Enable automatic backup of EBS volumes using DLM
Browse files Browse the repository at this point in the history
  • Loading branch information
sunu committed Nov 26, 2024
1 parent f141f6b commit 5c65729
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
86 changes: 86 additions & 0 deletions terraform/aws/data-lifecycle-manager.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# ref: https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-lifecycle.html
# Data Lifecycle Manager (DLM) is used to automate backup of EBS volumes.

resource "aws_iam_role" "dlm_lifecycle_role" {
name = "dlm-lifecycle-role"

assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "dlm.amazonaws.com"
}
}
]
})
}

# Attach required policy to the IAM role
resource "aws_iam_role_policy" "dlm_lifecycle" {
name = "dlm-lifecycle-policy"
role = aws_iam_role.dlm_lifecycle_role.id

policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
"ec2:CreateSnapshot",
"ec2:CreateSnapshots",
"ec2:DeleteSnapshot",
"ec2:DescribeVolumes",
"ec2:DescribeInstances",
"ec2:DescribeSnapshots"
]
Resource = "*"
},
{
Effect = "Allow"
Action = [
"ec2:CreateTags"
]
Resource = "arn:aws:ec2:*::snapshot/*"
}
]
})
}

# Create the DLM lifecycle policy for NFS home directories backup
resource "aws_dlm_lifecycle_policy" "nfs_backup" {
description = "DLM lifecycle policy for NFS home directories backup"
execution_role_arn = aws_iam_role.dlm_lifecycle_role.arn
state = "ENABLED"

policy_details {
resource_types = ["VOLUME"]

schedule {
name = "Daily backup"

create_rule {
interval = 24
interval_unit = "HOURS"
times = ["23:45"]
}

retain_rule {
count = 5 # Keep last 5 daily backups
}

tags_to_add = {
SnapshotCreator = "DLM"
Purpose = "NFS-Backup"
}

copy_tags = true
}

target_tags = {
NFSBackup = "true" # Tag to identify volumes to backup
}
}
}
1 change: 1 addition & 0 deletions terraform/aws/ebs-volumes.tf
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ resource "aws_ebs_volume" "nfs_home_dirs" {

tags = merge(each.value.tags, {
Name = each.value.name_suffix == null ? "hub-nfs-home-dirs" : "hub-nfs-home-dirs-${each.value.name_suffix}"
NFSBackup = "true" # Tag to identify volumes to backup by Data Lifecycle Manager (DLM)
})

lifecycle {
Expand Down

0 comments on commit 5c65729

Please sign in to comment.