This end-to-end AWS CloudFormation template creates a resource assignment, a backup plan, and a destination backup vault:
-
A backup vault named
CloudFormationTestBackupVault
. -
A backup plan named
CloudFormationTestBackupPlan
. This plan will run two contains two backup rules, both of which take backups daily at 12 noon UTC and retain them for 210 days. -
A resource selection named
BackupSelectionName
. -
-
The resource assignment backs up the following resources:
-
Any resource tagged with the key-value pair
backupplan:dsi-sandbox-daily
. -
Any resource tagged with the value
prod
or values beginning withprod/
.
-
-
The resource assignment does not back up the following resources:
-
Any RDS, Aurora, Neptune, or DocumentDB cluster.
-
Any resource tagged with the value
test
or values beginning withtest/
.
-
-
Description: "Template that creates Backup Selection and its dependencies"
Parameters:
BackupVaultName:
Type: String
Default: "CloudFormationTestBackupVault"
BackupPlanName:
Type: String
Default: "CloudFormationTestBackupPlan"
BackupSelectionName:
Type: String
Default: "CloudFormationTestBackupSelection"
BackupPlanTagValue:
Type: String
Default: "test-value-1"
RuleName1:
Type: String
Default: "TestRule1"
RuleName2:
Type: String
Default: "TestRule2"
ScheduleExpression:
Type: String
Default: "cron(0 12 * * ? *)"
StartWindowMinutes:
Type: Number
Default: 60
CompletionWindowMinutes:
Type: Number
Default: 120
RecoveryPointTagValue:
Type: String
Default: "test-recovery-point-value"
MoveToColdStorageAfterDays:
Type: Number
Default: 120
DeleteAfterDays:
Type: Number
Default: 210
Resources:
CloudFormationTestBackupVault:
Type: "AWS::Backup::BackupVault"
Properties:
BackupVaultName: !Ref BackupVaultName
BasicBackupPlan:
Type: "AWS::Backup::BackupPlan"
Properties:
BackupPlan:
BackupPlanName: !Ref BackupPlanName
BackupPlanRule:
- RuleName: !Ref RuleName1
TargetBackupVault: !Ref BackupVaultName
ScheduleExpression: !Ref ScheduleExpression
StartWindowMinutes: !Ref StartWindowMinutes
CompletionWindowMinutes: !Ref CompletionWindowMinutes
RecoveryPointTags:
test-recovery-point-key-1: !Ref RecoveryPointTagValue
Lifecycle:
MoveToColdStorageAfterDays: !Ref MoveToColdStorageAfterDays
DeleteAfterDays: !Ref DeleteAfterDays
- RuleName: !Ref RuleName2
TargetBackupVault: !Ref BackupVaultName
ScheduleExpression: !Ref ScheduleExpression
StartWindowMinutes: !Ref StartWindowMinutes
CompletionWindowMinutes: !Ref CompletionWindowMinutes
RecoveryPointTags:
test-recovery-point-key-1: !Ref RecoveryPointTagValue
Lifecycle:
MoveToColdStorageAfterDays: !Ref MoveToColdStorageAfterDays
DeleteAfterDays: !Ref DeleteAfterDays
BackupPlanTags:
test-key-1: !Ref BackupPlanTagValue
DependsOn: CloudFormationTestBackupVault
TestRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "backup.amazonaws.com"
Action:
- "sts:AssumeRole"
ManagedPolicyArns:
- !Sub "arn:${AWS::Partition}
:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
"
BasicBackupSelection:
Type: 'AWS::Backup::BackupSelection'
Properties:
BackupPlanId: !Ref BasicBackupPlan
BackupSelection:
SelectionName: !Ref BackupSelectionName
IamRoleArn: !GetAtt TestRole.Arn
ListOfTags:
- ConditionType: STRINGEQUALS
ConditionKey: backupplan
ConditionValue: dsi-sandbox-daily
NotResources:
- 'arn:aws:rds:*:*:cluster:*'
Conditions:
StringEquals:
- ConditionKey: 'aws:ResourceTag/path'
ConditionValue: prod
StringNotEquals:
- ConditionKey: 'aws:ResourceTag/path'
ConditionValue: test
StringLike:
- ConditionKey: 'aws:ResourceTag/path'
ConditionValue: prod/*
StringNotLike:
- ConditionKey: 'aws:ResourceTag/path'
ConditionValue: test/*