AWS Data Lifecycle: Automating EBS Snapshots with Terraform
The AWS Data Lifecycle Manager (DLM) is a powerful tool that helps automate the management of EBS snapshots. With DLM, you can create, retain, and delete backups without manual intervention, ensuring your data is protected while optimizing storage costs. By leveraging Terraform, you can set up these processes in a repeatable and scalable way.
In this guide, we’ll walk you through how to use AWS Data Lifecycle policies with Terraform to automate your EBS snapshot management. This will save you time, reduce human errors, and keep your data backed up automatically.

What is AWS Data Lifecycle Manager?
The AWS Data Lifecycle Manager (DLM) is designed to automate the creation and management of your EBS snapshots. By using DLM, you can ensure consistent data backups while eliminating manual tasks. DLM can be accessed via the EC2 dashboard under the Elastic Block Store section, where you can easily set up lifecycle policies for your volumes.
Key benefits of using AWS Data Lifecycle include:
- Automated snapshots that reduce manual work.
- Cost savings by automatically deleting outdated snapshots.
- Efficient management through simple lifecycle policies.
With ZippyOPS, you can take this a step further with expert consulting and managed services, including Cloud Automation and DataOps. Discover more about how we optimize infrastructure at ZippyOPS Cloud Solutions.
Setting Up AWS Data Lifecycle Policies with Terraform
Using Terraform to automate AWS Data Lifecycle policies gives you greater control and flexibility over your cloud infrastructure. Terraform allows you to define your AWS resources as code, making it easy to replicate and scale. In this section, we’ll show you how to set up an AWS Data Lifecycle policy with Terraform for automated EBS snapshots.
1. Create IAM Role and Policy for AWS Data Lifecycle
The first step is to create an IAM role and policy that grants the necessary permissions to manage snapshots. The IAM role allows AWS Data Lifecycle to perform tasks like creating and deleting snapshots, tagging resources, and describing volumes.
resource "aws_iam_role" "dlm_lifecycle_role" {
name = "dlm-lifecycle-role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "dlm.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
2. Attach IAM Policy to the Role
Next, create a policy to allow the IAM role to manage the lifecycle of EBS snapshots. This includes permissions to create, delete, and tag snapshots.
resource "aws_iam_role_policy" "dlm_lifecycle" {
name = "dlm-lifecycle-policy"
role = "${aws_iam_role.dlm_lifecycle_role.id}"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:*::snapshot/*"
}
]
}
EOF
}
3. Create AWS Data Lifecycle Policy
After the IAM role and policy are set up, you can create the AWS Data Lifecycle policy itself. This policy defines how often snapshots will be taken, how long they will be retained, and which volumes will be targeted.
Here’s the Terraform code to create a lifecycle policy for AWS Data Lifecycle management:
resource "aws_dlm_lifecycle_policy" "test_lifecyclerole" {
description = "DLM lifecycle policy"
execution_role_arn = "${aws_iam_role.dlm_lifecycle_role.arn}"
state = "ENABLED"
policy_details {
resource_types = ["VOLUME"]
schedule {
name = "2 weeks of daily snapshots"
create_rule {
interval = 24
interval_unit = "HOURS"
times = ["23:45"]
}
retain_rule {
count = 14
}
tags_to_add = {
SnapshotCreator = "DLM"
}
copy_tags = false
}
target_tags = {
Snapshot = "true"
}
}
}
This policy will ensure that snapshots are taken daily at 11:45 PM and that only the most recent 14 snapshots are retained. Older snapshots will be deleted automatically, helping reduce storage costs. The SnapshotCreator tag will be applied for identification purposes.
Running the Terraform Script
Now that you have the Terraform script, follow these steps to deploy it:
- Create a directory for your Terraform scripts (e.g.,
aws_lifecyclepolicy). - Create two
.tffiles:provider.tf: Define AWS provider and region.main.tf: Paste the above Terraform script.
- Initialize Terraform:
terraform init - Check the Terraform plan:
terraform plan
This command will show the resources that will be created. - Apply the Terraform configuration:
terraform apply
Confirm with “yes” to apply the changes.
Once applied, your AWS Data Lifecycle policy will be active. You can verify the policy in the AWS EC2 console.
Conclusion
Automating the management of EBS snapshots with AWS Data Lifecycle Manager and Terraform helps streamline your backup processes and optimize storage costs. By following this guide, you can implement a robust solution for automated snapshot creation and retention.
If you’re looking to optimize your cloud infrastructure further, ZippyOPS offers consulting and managed services in areas like DevOps, Cloud Automation, DataOps, and more. For custom solutions, contact us at sales@zippyops.com.



