汎用的に使えるAWS BackupのCfnテンプレートが欲しかったので作った

自分用の備忘録として作ったものです。
2020.04.23

DA事業本部のsutoです。

特定のタグがついたリソースに対して定期バックアップの設定がしたかったので、Cloudformationテンプレートをささっと作ってみました。

要件

  • AWS Backupのボールト、プラン、ルール、リソース割り当てを新規作成
  • 日本時間のAM4時に日次バックアップを取得
  • 復旧ポイントが作成されてから削除されるまでの日数は14日とする

テンプレート

要件を踏まえたCloudformationテンプレートは以下となります。

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Backup Setting
Parameters:
  MyBackupName:
    Description: Backup plan name
    Type: String
    Default: ''
  Cron:
    Description: Time to do backup(cron)
    Type: String
    Default: cron(0 18 * * ? *)
  TagKey:
    Description: TagKey for backup
    Type: String
    Default: ''
  TagValue:
    Description: TagValue for backup
    Type: String
    Default: ''
Resources:
  BackupVault:
    Type: "AWS::Backup::BackupVault"
    Properties:
      BackupVaultName: !Sub ${MyBackupName}-vault

  BackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties: 
      BackupPlan: 
        BackupPlanName: !Ref MyBackupName
        BackupPlanRule: 
          - RuleName: !Sub ${MyBackupName}-rule
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: !Ref Cron
            CompletionWindowMinutes: 300
            StartWindowMinutes: 60
            Lifecycle:
              DeleteAfterDays: 14

  BackupSelection:
    Type: AWS::Backup::BackupSelection
    Properties:
      BackupPlanId: !Ref BackupPlan
      BackupSelection:
        SelectionName: !Ref MyBackupName
        IamRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/AWSBackupDefaultServiceRole"
        ListOfTags:
         -
           ConditionType: "STRINGEQUALS"
           ConditionKey: !Ref TagKey
           ConditionValue: !Ref TagValue

(参考)cron式の書き方はこちら

※2020/7/7 追記:上記テンプレートはIAMロール「AWSBackupDefaultServiceRole」を既に作成されていなければバックアップが作動しないので、バージョンアップ版としてIAMロールもまとめて作成するテンプレートを別の記事で掲載しました。

実際にやってみた

以下画面のようにパラメータを入力して実行しました。

結果、しっかりとバックアップ設定ができていました。

あとは入力したタグをバックアップしたいリソースに付与すればOKですね。

まとめ

なるべくテンプレート実行時の入力パラメータが少なくなるように意識して作成しました(面倒くさがり)。手動だといろいろ設定の手間が多いAWS Backupだからこそテンプレート化のメリットは大きいと思います。

タイトルの「汎用的な」と言うことで、よくある定期バックアップ設定のためのテンプレート作りを目指しましたので少しでもお役に立てばと思います。