CDKでAWS Backupを使用してEC2のバックアップをしてみた。

2022.05.15

概要

AWS Backup はAWS のサービス、クラウド内、およびオンプレミス間で簡単に一元化およびデータ保護を自動化できます。Backupで1 つの場所でリソースのアクティビティを監視できます。バックアッププランを作成して、バックアップ要件を定義できます。バックアップは、バックアッププランに基づいてリソースを自動的にバックアップします。Backup でタグを付けるだけで AWS リソースにバックアッププランを適用できます。

この記事では、CDKでAWS Backupを使用してEC2のバックアップをしてみました。タグベースのバックアッププランの選択を使用してEC2のバックアップを作成してみました。

 

やってみた

EC2の作成

  • この設定で EC2インスタンスを作成しておきます。
    • AMI : Amazon Linux 2 AMI
    • インスタンスタイプ : t2.micro
    • サブネット:パブリックサブネット
    • タグ :
      • Key : ec2-backup
      • Value : true
    • Security Group :
      •  Inbound :SSH

 

CDKアプリの作成

CDKをインストールする

  • 次のコマンドを使用してCDKをインストールしておきます。
npm install aws-cdk-lib

 

CDKアプリを作成する

  • 新しいディレクトリを作成しておきます。
  • CDKは、プロジェクトディレクトリの名前に基づいてソースファイルとクラスに名前を付けます。
#create new directory
mkdir backup
cd backup

 

  • cdk initコマンドを使用してアプリを初期化しておきます。
cdk init --language typescript

 

AWS サービスの作成

  • 新しいファイル [lib/index.ts] を作成して、作成する必要のあるAWSサービスを定義しておきます。
  • ファイルに次のAWSサービスを定義しておきます。
      • Backup Vault : バックアップボールト名でバックアップボールトを定義しておきます。
      • IAM Role : 次の設定でIAMロールを定義しておきます。
        • Service Principal : backup.amazonaws.com
        • ポリシー  :
          • AWSBackupServiceRolePolicyForBackup
          • AWSBackupServiceRolePolicyForRestores.
      • Backup Plan : ライフサイクルとスケジュール式でバックアッププランを定義しておきます。バックアップルール名を指定しておきます。
      • Backup Plan Selection : 次の設定でバックアッププランセレクションを定義しておきます。
        • Role ARN : 前のステップで作成されたIAMロールのArn。
        • List of Tags: EC2タグを指定しておきます。

 

import { Construct } from 'constructs';
import { StackProps} from 'aws-cdk-lib';
import { CfnBackupVault, CfnBackupPlan, CfnBackupSelection } from 'aws-cdk-lib/aws-backup';
import { Role, ServicePrincipal, ManagedPolicy} from 'aws-cdk-lib/aws-iam';

export class backupStack extends Construct {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id);

    //Create Backup vault
    const Vault = new CfnBackupVault(this, "Backup-vault", {
        backupVaultName: "backup-vault",
      });
     
   //Create an IAM role  
    const BackupRole = new Role(this, "backup-role", {
      assumedBy: new ServicePrincipal('backup.amazonaws.com'),
      managedPolicies: [
        ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSBackupServiceRolePolicyForBackup'),
        ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSBackupServiceRolePolicyForRestores'),
      ],
    });

    //Create a backup plan
    const backupPlan = new CfnBackupPlan(this, "backup-plan", {
      backupPlan: {
        backupPlanName: "Backup-plan",
        backupPlanRule: [
          {
            ruleName: "backup-rule",
            targetBackupVault: Vault.attrBackupVaultName,
            lifecycle: {
              deleteAfterDays: 7
            }, 
            scheduleExpression: 'cron(0 16 ? * * *)',
          }
        ]
      }
    });  
    
    //Create backup plan selection  
    const BackupPlanSelection = new CfnBackupSelection(this, "backup-selection", {
      backupPlanId: backupPlan.attrBackupPlanId,
      backupSelection: {
        iamRoleArn: BackupRole.roleArn,
        selectionName: "backup-selection",
        listOfTags: [{
          conditionKey: 'ec2-backup',
          conditionType: 'STRINGEQUALS',
          conditionValue: 'true',
        }],
      }
    });
  }
}

 

アプリにサービスを追加する

  • /lib/cloudwatch-dashboard-stack.ts ファイルに次のコードを追加しておきます。
#Import the Index file created in the previous step
import * as bs from '../lib/index';
new bs.backupStack(this, 'backup');

 

CDK Deploy

  • Deploy する前に、環境をブートストラップする必要があります。
  • 次のコマンドを実行して、AWS環境をブートストラップしておきます。
cdk bootstrap

 

  • CDKを展開しておきます。
cdk deploy

 

リソースの確認する

コンソールでは、リソースが作成されていることを確認できます。

Backup Vault

 

Backup Plan

 

Backup Rule

 

Backup Selection

 

  • コンソールでは、バックアップの最後の実行時間を確認できます。

 

まとめ

AWS CDKでAWS Backupを使用してEC2のバックアップをしてみました。EFS、RDSなどの他のストレージサービスのバックアップをすることができます。

Reference : 

AWS Backup

Backup Vault using CDK

Backup Plan using CDK

Backup Selection using CDK