Skip to content

Commit 0dbda49

Browse files
Merge pull request #968 from NHSDigital/feature/kabo5-NRL-853-tiered-backups
NRL-853 set up DynamoDB tiered backup plan
2 parents a343037 + f99aeff commit 0dbda49

File tree

3 files changed

+53
-25
lines changed

3 files changed

+53
-25
lines changed

terraform/account-wide-infrastructure/dev/aws-backup.tf

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,12 @@ module "source" {
109109
"compliance_resource_types" : [
110110
"S3"
111111
],
112-
"enable" = true,
112+
"enable" : true,
113113
"rules" : [
114114
{
115-
"copy_action" : {
116-
"delete_after" : 4
117-
},
115+
"copy_action" : [{
116+
"delete_after" : 4,
117+
}],
118118
"lifecycle" : {
119119
"delete_after" : 2
120120
},
@@ -132,14 +132,39 @@ module "source" {
132132
"enable" : true,
133133
"rules" : [
134134
{
135-
"copy_action" : {
136-
"delete_after" : 4
137-
},
135+
"name" : "daily",
136+
"schedule" : "cron(0 0 * * ? *)",
137+
"copy_action" : [{
138+
"delete_after" : 4,
139+
}],
140+
138141
"lifecycle" : {
139142
"delete_after" : 2
140-
},
141-
"name" : "daily_kept_for_2_days",
142-
"schedule" : "cron(0 0 * * ? *)"
143+
}
144+
},
145+
{
146+
"name" : "monthly"
147+
"schedule" : "cron(30 0 ? * 4#1)" # first Thursday each month from 00:30
148+
"copy_action" : [{
149+
"cold_storage_after" : 3,
150+
"delete_after" : 100 # ensures there will always be min 3
151+
}],
152+
"lifecycle" : {
153+
"delete_after" : 2
154+
}
155+
156+
},
157+
{
158+
"name" : "weekly" # overlaps with monthly
159+
"schedule" : "cron(30 0 ? * 4)" # every Thursday from 00:30 to precede releases
160+
"copy_action" : [{
161+
"cold_storage_after" : 14 # ensures 2 warm including one from previous release
162+
"delete_after" : 105
163+
}],
164+
"lifecycle" : {
165+
"delete_after" : 2
166+
}
167+
143168
}
144169
],
145170
"selection_tag" : "NHSE-Enable-DDB-Backup"

terraform/account-wide-infrastructure/modules/backup-source/backup_plan.tf

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ resource "aws_backup_plan" "default" {
1111
rule_name = rule.value.name
1212
target_vault_name = aws_backup_vault.main.name
1313
schedule = rule.value.schedule
14-
enable_continuous_backup = rule.value.enable_continuous_backup != null ? rule.value.enable_continuous_backup : null
14+
enable_continuous_backup = rule.value.enable_continuous_backup
1515
lifecycle {
16-
delete_after = rule.value.lifecycle.delete_after != null ? rule.value.lifecycle.delete_after : null
17-
cold_storage_after = rule.value.lifecycle.cold_storage_after != null ? rule.value.lifecycle.cold_storage_after : null
16+
delete_after = rule.value.lifecycle.delete_after
17+
cold_storage_after = rule.value.lifecycle.cold_storage_after
1818
}
1919
dynamic "copy_action" {
20-
for_each = rule.value.copy_action != null ? rule.value.copy_action : {}
20+
for_each = rule.value.copy_action
2121
content {
2222
lifecycle {
23-
delete_after = copy_action.value
23+
delete_after = copy_action.value.delete_after
2424
}
2525
destination_vault_arn = var.backup_copy_vault_arn
2626
}
@@ -44,14 +44,15 @@ resource "aws_backup_plan" "dynamodb" {
4444
target_vault_name = aws_backup_vault.main.name
4545
schedule = rule.value.schedule
4646
lifecycle {
47-
delete_after = rule.value.lifecycle.delete_after != null ? rule.value.lifecycle.delete_after : null
48-
cold_storage_after = rule.value.lifecycle.cold_storage_after != null ? rule.value.lifecycle.cold_storage_after : null
47+
delete_after = rule.value.lifecycle.delete_after
48+
cold_storage_after = rule.value.lifecycle.cold_storage_after
4949
}
5050
dynamic "copy_action" {
51-
for_each = rule.value.copy_action != null ? rule.value.copy_action : {}
51+
for_each = rule.value.copy_action
5252
content {
5353
lifecycle {
54-
delete_after = copy_action.value
54+
delete_after = copy_action.value.delete_after
55+
cold_storage_after = copy_action.value.cold_storage_after
5556
}
5657
destination_vault_arn = var.backup_copy_vault_arn
5758
}

terraform/account-wide-infrastructure/modules/backup-source/variables.tf

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ variable "backup_plan_config" {
8686
delete_after = optional(number)
8787
cold_storage_after = optional(number)
8888
})
89-
copy_action = optional(object({
90-
delete_after = optional(number)
91-
}))
89+
copy_action = optional(list(object({
90+
delete_after = optional(number)
91+
cold_storage_after = optional(number)
92+
})))
9293
}))
9394
})
9495
}
@@ -106,9 +107,10 @@ variable "backup_plan_config_dynamodb" {
106107
delete_after = number
107108
cold_storage_after = optional(number)
108109
})
109-
copy_action = optional(object({
110-
delete_after = optional(number)
111-
}))
110+
copy_action = optional(list(object({
111+
delete_after = optional(number)
112+
cold_storage_after = optional(number)
113+
})))
112114
})))
113115
})
114116

0 commit comments

Comments
 (0)