/ backup.tf
backup.tf
 1  /* Prod EBS Backups -----------------------------*/
 2  
 3  resource "aws_iam_role" "prod_snapshots" {
 4    name = "dap-ps-prod-snapshots-role"
 5  
 6    assume_role_policy = <<EOF
 7  {
 8    "Version": "2012-10-17",
 9    "Statement": [
10      {
11        "Action": "sts:AssumeRole",
12        "Principal": {
13          "Service": "dlm.amazonaws.com"
14        },
15        "Effect": "Allow",
16        "Sid": ""
17      }
18    ]
19  }
20  EOF
21  }
22  
23  resource "aws_iam_role_policy" "prod_snapshots" {
24    name = "dap-ps-prod-snapshots-policy"
25    role = aws_iam_role.prod_snapshots.id
26  
27    policy = <<EOF
28  {
29     "Version": "2012-10-17",
30     "Statement": [
31        {
32           "Effect": "Allow",
33           "Action": [
34              "ec2:CreateSnapshot",
35              "ec2:DeleteSnapshot",
36              "ec2:DescribeVolumes",
37              "ec2:DescribeSnapshots"
38           ],
39           "Resource": "*"
40        },
41        {
42           "Effect": "Allow",
43           "Action": [
44              "ec2:CreateTags"
45           ],
46           "Resource": "arn:aws:ec2:*::snapshot/*"
47        }
48     ]
49  }
50  EOF
51  }
52  
53  resource "aws_dlm_lifecycle_policy" "prod_snapshots" {
54    description        = "dap-ps prod DB DLM lifecycle policy"
55    execution_role_arn = aws_iam_role.prod_snapshots.arn
56    state              = "ENABLED"
57  
58    policy_details {
59      resource_types = ["VOLUME"]
60  
61      schedule {
62        name = "one week of daily snapshots"
63  
64        create_rule {
65          interval      = 24
66          interval_unit = "HOURS"
67          times         = ["23:45"]
68        }
69  
70        retain_rule {
71          count = 7
72        }
73  
74        tags_to_add = {
75          Source = "DLM lifecycle policy"
76        }
77  
78        copy_tags = true
79      }
80  
81      target_tags = {
82        Fleet = "db.prod"
83      }
84    }
85  }