
CDKでAWS Backupを使用してEC2のバックアップをしてみた。
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
概要
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 :













