この記事は公開されてから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 :