CDKでAWS Backupを使用してEC2のバックアップをしてみた。
概要
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 :