AWS Cloudformation to pick ScheduleExpression from the Mapping for regions

179 views Asked by At

How to pick the AWS backup SheduleExpression automatically based on the Region defined under Mappings Block in a CloudFormation template.

This means if i am deploying the stack in the eu-west-1 then it should automatically take sched3 and if deploying the stack in the ap-southeast-1 then it should pick the sched4.

My CloundFormation code block:

Mappings: 
  RegionMap: 
    us-east-1: 
      sched1: "cron(00 19 * * ? *)"
    us-west-1: 
      sched2: "cron(00 18 * * ? *)"
    eu-west-1: 
      sched3: "cron(00 17 * * ? *)"
    ap-southeast-1: 
      sched4: "cron(00 16 * * ? *)"
    ap-northeast-1: 
      sched5: "cron(00 15 * * ? *)"

  FSxBackupPlan:
    Type: "AWS::Backup::BackupPlan"
    Properties:
      BackupPlan:
        BackupPlanName: !Ref FsxBackupPlanName
        BackupPlanRule:
          -
            RuleName: !Ref FsxBackupRuleName
            TargetBackupVault: !Ref FSxBackupsVault
            StartWindowMinutes: 240
            ScheduleExpression: !FindInMap
              - RegionMap
              - !Ref 'AWS::Region'

Other way i am trying:

             ScheduleExpression: !FindInMap
                !If [sched1, !Ref "AWS::Region"] 

I am trying to understand above but not getting it as a newbie to aws cloudformation.

1

There are 1 answers

1
Paolo On BEST ANSWER

You are making your life more difficult than it should be by using the extra unnecessary key.

Instead, use:

Mappings: 
  RegionMap: 
    us-east-1: 
      sched: "cron(00 19 * * ? *)"
    us-west-1: 
      sched: "cron(00 18 * * ? *)"
    eu-west-1: 
      sched: "cron(00 17 * * ? *)"
    ap-southeast-1: 
      sched: "cron(00 16 * * ? *)"
    ap-northeast-1: 
      sched: "cron(00 15 * * ? *)"

and:

ScheduleExpression: !FindInMap
  - RegionMap
  - !Ref 'AWS::Region'
  - sched