diff --git a/modules/storage/aws-backup/README.md b/modules/storage/aws-backup/README.md index 692722c..aa2d575 100644 --- a/modules/storage/aws-backup/README.md +++ b/modules/storage/aws-backup/README.md @@ -1,4 +1,8 @@ +# aws-backup + +Module to configure AWSBackup service opt in and manage backup settings for typical workloads + ## Requirements No requirements. @@ -34,9 +38,10 @@ No modules. | daily-backup-cron | Daily backup rule cron expression | `string` | n/a | yes | | daily-backup-retention | Daily backup retention period | `number` | n/a | yes | | enable-monthly-backup | Enable monthly backup plan | `bool` | `false` | no | +| enable-vss | Enable VSS for Windows Ec2 | `bool` | `false` | no | | monthly-backup-cron | Monthly backup rule cron expression | `string` | `null` | no | | monthly-backup-retention | Monthly backup retention period | `number` | `null` | no | -| service-opt-in | n/a |
map(object({
enabled = bool
})) | {
"Aurora": {
"enabled": false
},
"DynamoDB": {
"enabled": true
},
"EBS": {
"enabled": false
},
"EC2": {
"enabled": true
},
"EFS": {
"enabled": true
},
"FSx": {
"enabled": false
},
"RDS": {
"enabled": true
},
"Redshift": {
"enabled": true
},
"S3": {
"enabled": false
},
"VirtualMachine": {
"enabled": false
}
} | no |
+| service-opt-in | If not specified, EC2, RDS, EFS, and S3 are enabled | `map(string)` | {
"Aurora": false,
"CloudFormation": false,
"DynamoDB": false,
"EBS": false,
"EC2": true,
"EFS": true,
"EKS": false,
"FSx": false,
"Neptune": false,
"RDS": true,
"Redshift": false,
"Redshift Serverless": false,
"S3": true,
"SAP HANA on Amazon EC2": false,
"Storage Gateway": false,
"VirtualMachine": false
} | no |
## Outputs
diff --git a/modules/storage/aws-backup/main.tf b/modules/storage/aws-backup/main.tf
index 1441c44..119cec2 100644
--- a/modules/storage/aws-backup/main.tf
+++ b/modules/storage/aws-backup/main.tf
@@ -1,63 +1,66 @@
-# build local data structure
+/**
+* # aws-backup
+*
+* Module to configure AWSBackup service opt in and manage backup settings for typical workloads
+ */
data "aws_caller_identity" "this" {}
locals {
backup-config = {
"Aurora" : {
- enabled = var.service-opt-in.Aurora.enabled
+ enabled = var.service-opt-in["Aurora"].enabled
arn-prefix = "arn:aws:rds:*:*:cluster:*"
}
"DynamoDB" : {
- enabled = var.service-opt-in.DynamoDB.enabled
+ enabled = var.service-opt-in["DynamoDB"].enabled
arn-prefix = "arn:aws:dynamodb:*:*:table/*"
}
"EBS" : {
- enabled = var.service-opt-in.EBS.enabled
+ enabled = var.service-opt-in["EBS"].enabled
arn-prefix = "arn:aws:ec2:*:*:volume/*"
}
"EC2" : {
- enabled = var.service-opt-in.EC2.enabled
+ enabled = var.service-opt-in["EC2"].enabled
arn-prefix = "arn:aws:ec2:*:*:instance/*"
}
"EFS" : {
- enabled = var.service-opt-in.EFS.enabled
+ enabled = var.service-opt-in["EFS"].enabled
arn-prefix = "arn:aws:elasticfilesystem:*:*:file-system/*"
}
"FSx" : {
- enabled = var.service-opt-in.FSx.enabled
+ enabled = var.service-opt-in["FSx"].enabled
arn-prefix = "arn:*:fsx:*"
}
"Redshift" : {
- enabled = var.service-opt-in.Redshift.enabled
+ enabled = var.service-opt-in["Redshift"].enabled
arn-prefix = "arn:aws:redshift:*:*:cluster:*"
}
"RDS" : {
- enabled = var.service-opt-in.RDS.enabled
+ enabled = var.service-opt-in["RDS"].enabled
arn-prefix = "arn:aws:rds:*:*:db:*"
}
- # this version can't handle space
- # "Storage Gateway" : {
- # enabled = var.opt-in-storagegateway
- # arn-prefix = "arn:aws:storagegateway:*:*:gateway/*"
- # }
+ "Storage Gateway" : {
+ enabled = var.service-opt-in["Storage Gateway"].enabled
+ arn-prefix = "arn:aws:storagegateway:*:*:gateway/*"
+ }
"VirtualMachine" : {
- enabled = var.service-opt-in.VirtualMachine.enabled
+ enabled = var.service-opt-in["VirtualMachine"].enabled
arn-prefix = "arn:aws:backup-gateway:*:*:vm/*"
}
"S3" : {
- enabled = var.service-opt-in.S3.enabled
+ enabled = var.service-opt-in["S3"].enabled
arn-prefix = "arn:aws:s3:::*"
}
"EKS" : {
- enabled = var.service-opt-in.EKS.enabled
+ enabled = var.service-opt-in["EKS"].enabled
arn-prefix = "arn:aws:eks:*:*:cluster/*"
}
"CloudFormation" : {
- enabled = var.service-opt-in.CloudFormation.enabled
+ enabled = var.service-opt-in["CloudFormation"].enabled
}
"Neptune" : {
- enabled = var.service-opt-in.Neptune.enabled
+ enabled = var.service-opt-in["Neptune"].enabled
}
"Redshift Serverless" : {
enabled = var.service-opt-in["Redshift Serverless"].enabled
@@ -82,7 +85,7 @@ resource "aws_backup_vault" "ab-vault" {
for k, v in local.backup-config : k
if v.enabled
])
- name = "BackupVault-${each.value}"
+ name = "BackupVault-${trimspace(each.value)}"
kms_key_arn = var.backup_kms_key
}
@@ -161,12 +164,15 @@ resource "aws_backup_plan" "ab-plan" {
}
}
- # advanced_backup_setting {
- # backup_options = {
- # WindowsVSS = "enabled"
- # }
- # resource_type = "EC2"
- # }
+ dynamic "advanced_backup_setting" {
+ for_each = var.enable-vss ? [1] : []
+ content {
+ backup_options = {
+ WindowsVSS = "enabled"
+ }
+ resource_type = "EC2"
+ }
+ }
}
#
resource "aws_iam_role" "ab-iam-role" {
diff --git a/modules/storage/aws-backup/variables.tf b/modules/storage/aws-backup/variables.tf
index ac15d9a..a72de2a 100644
--- a/modules/storage/aws-backup/variables.tf
+++ b/modules/storage/aws-backup/variables.tf
@@ -21,58 +21,25 @@ variable "monthly-backup-retention" {
}
variable "service-opt-in" {
- type = map(object({
- enabled = bool
- }))
+ type = map(string)
+ description = "If not specified, EC2, RDS, EFS, and S3 are enabled"
default = {
- "Aurora" : {
- enabled = false
- }
- "DynamoDB" : {
- enabled = true
- }
- "EBS" : {
- enabled = false
- }
- "EC2" : {
- enabled = true
- }
- "EFS" : {
- enabled = true
- }
- "FSx" : {
- enabled = false
- }
- "Redshift" : {
- enabled = true
- }
- "RDS" : {
- enabled = true
- }
- "VirtualMachine" : {
- enabled = false
- }
- "S3" : {
- enabled = false
- }
- "EKS" : {
- enabled = false
- }
- "CloudFormation" : {
- enabled = false
- }
- "Neptune" : {
- enabled = false
- }
- "Redshift Serverless" : {
- enabled = false
- }
- "SAP HANA on Amazon EC2" : {
- enabled = false
- }
- "Storage Gateway" : {
- enabled = false
- }
+ "Aurora" : false,
+ "DynamoDB" : false,
+ "EBS" : false,
+ "EC2" : true,
+ "EFS" : true,
+ "FSx" : false,
+ "Redshift" : false,
+ "RDS" : true,
+ "VirtualMachine" : false,
+ "S3" : true,
+ "EKS" : false,
+ "CloudFormation" : false,
+ "Neptune" : false,
+ "Redshift Serverless" : false,
+ "SAP HANA on Amazon EC2" : false,
+ "Storage Gateway" : false
}
}
@@ -86,4 +53,10 @@ variable "enable-monthly-backup" {
description = "Enable monthly backup plan"
type = bool
default = false
+}
+
+variable "enable-vss" {
+ type = bool
+ description = "Enable VSS for Windows Ec2"
+ default = false
}
\ No newline at end of file