AWS CDKによる【AWS Backup】の構築

皆様こんにちは。
AWS CDKを利用してマルチAZ3層アーキテクチャ構築をしていきます。
この記事ではAWS Backupの作成を行います。

目次はこちら

1.AWS Backupとは

AWS Backupは、AWSが提供するフルマネージドのバックアップサービスです。以下の主要な機能を提供します

主な機能

  • 集中管理:

    • AWS Backupでは、AWSリソースのバックアップを一元的に管理できます。複数のAWSサービスのバックアップを統合して管理するためのダッシュボードが提供されています。
  • バックアップの自動化:

    • バックアッププランを作成し、スケジュールや保持ポリシーを設定することで、バックアップ作業を自動化できます。手動でのバックアップ作業が不要になります。
  • バックアップの復元:

    • バックアップからの復元が簡単に行えます。特定の時点に復元することが可能です。
  • セキュリティと暗号化:

    • バックアップデータはAWS KMS(Key Management Service)を使用して暗号化できます。バックアップデータに対するアクセス制御も強化されています。
  • 複数リージョンとアカウント間でのバックアップ:

    • バックアップデータを複数のリージョンやアカウントにコピーすることで、災害復旧(DR)やデータ保護の強化が可能です。
  • コンプライアンスと監査:

    • バックアップの操作や状態に関するログが記録され、監査やコンプライアンスの要件を満たすための情報が提供されます。

利用シーン

  • バックアップポリシーの定義:

    • 一貫したバックアップポリシーを組織全体で適用し、バックアップ戦略を標準化します。
  • 災害復旧(DR):

    • データの損失や障害から迅速に復元し、ビジネス継続性を確保します。
  • データ保護とセキュリティ:

    • データの整合性を保ちながら、セキュリティリスクを最小限に抑えます。

AWS Backupは、これらの機能を活用して、クラウド環境におけるバックアップと復元の効率性を高め、ビジネスの運用におけるリスクを低減します。
詳細は公式ドキュメントを参照ください。

2.目的

EC2インスタンスのバックアップを作成する。

3.構成図

4.全体構築ソースコード

        # バックアップボールトの作成
        backup_vault = backup.BackupVault(self, "BackupVault",
            backup_vault_name="kitaya-vault-backup"
        )
        Tags.of(backup_vault).add("Name", "kitaya-vault-backup")

        # バックアッププランの作成
        backup_plan = backup.BackupPlan(self, "BackupPlan",
            backup_plan_name="kitaya-backup-ec2"
        )

        # バックアッププランルールの追加
        backup_plan.add_rule(backup.BackupPlanRule(
            backup_vault=backup_vault,
            rule_name="DailyBackup",
            schedule_expression=events.Schedule.cron(hour="16", minute="0"),
            start_window=Duration.hours(1),
            completion_window=Duration.hours(24),
            delete_after=Duration.days(30)
        ))

        Tags.of(backup_plan).add("Name", "kitaya-backup-ec2")

        # バックアップ対象を設定
        backup_selection = backup.BackupSelection(self, "BackupSelection",
            backup_plan=backup_plan,
            resources=[
                backup.BackupResource.from_arn(f"arn:aws:ec2:{self.region}:{self.account}:instance/{instance_01.ref}"),
                backup.BackupResource.from_arn(f"arn:aws:ec2:{self.region}:{self.account}:instance/{instance_02.ref}")
            ]
        )

5.ソースコード詳細

5-1.バックアップボールトの作成

バックアップボールトを作成します。
バックアップボールトは、AWS Backupでのバックアップデータを保管するための場所です。

  • "backup.BackupVault"を使用
    論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。

プロパティは下記

使用するプロパティ 設定値 説明
backup_vault_name "kitaya-vault-backup" 作成するバックアップボールトの名前を指定
  • "Tags.of()"メソッドを使用してNameタグをつけます(書式は下記)
    Tags.of("リソース名").add("キー", "値")

  • ソースコード

        # バックアップボールトの作成
        backup_vault = backup.BackupVault(self, "BackupVault",
            backup_vault_name="kitaya-vault-backup"
        )
        Tags.of(backup_vault).add("Name", "kitaya-vault-backup")

5-2.バックアッププランの作成

バックアッププランを作成します。
バックアッププランは、バックアップルールを定義し、リソースのバックアップを管理するために使用されます。

  • "backup.BackupPlan"を使用してバックアッププランを作成
    論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。

プロパティは下記

使用するプロパティ 設定値 説明
backup_plan_name "kitaya-backup-ec2" 作成するバックアッププランの名前を指定
  • "add_rule()"メソッドを使用してバックアッププランにルールを追加します
    "リソース名".add_rule("ルールの内容")

  • "backup.BackupPlanRule"を使用してバックアッププランのルールを定義

プロパティは下記

使用するプロパティ 設定値 説明
backup_vault backup_vault バックアップを保存するバックアップボールトを指定します。
rule_name "DailyBackup" バックアッププランルールの名前です。
schedule_expression events.Schedule.cron(hour="16",minute="0") バックアップのスケジュールを指定します。毎日16時(UTC)に設定。
start_window Duration.hours(1) バックアップジョブの開始ウィンドウを指定します。1時間以内に開始されるよう指定。
completion_window Duration.hours(24) バックアップジョブの完了ウィンドウを指定します。24時間以内に完了されるよう指定。
delete_after Duration.days(30) バックアップデータの保存期間を指定します。30日経過後にデータが削除されるよう指定。
  • "Tags.of()"メソッドを使用してNameタグをつけます(書式は下記)
    Tags.of("リソース名").add("キー", "値")

  • ソースコード

        # バックアッププランの作成
        backup_plan = backup.BackupPlan(self, "BackupPlan",
            backup_plan_name="kitaya-backup-ec2"
        )

        # バックアッププランルールの追加
        backup_plan.add_rule(backup.BackupPlanRule(
            backup_vault=backup_vault,
            rule_name="DailyBackup",
            schedule_expression=events.Schedule.cron(hour="16", minute="0"),
            start_window=Duration.hours(1),
            completion_window=Duration.hours(24),
            delete_after=Duration.days(30)
        ))

        Tags.of(backup_plan).add("Name", "kitaya-backup-ec2")

5-3.バックアップ対象の設定

EC2インスタンス(1号機、2号機)をバックアッププランに追加し、これらのリソースに対してバックアップを適用するための設定を行っています。

  • "backup.BackupSelection"を使用して設定

プロパティは下記

使用するプロパティ 設定値 説明
backup_plan backup_plan どのバックアッププランにこのバックアップ選択を適用するかを指定します。ここでは、作成したバックアッププランを指定しています。
resource_type "下記にて説明" バックアップ対象として指定するリソースのリストです。ここでは、2つのEC2インスタンスのARNで指定しています。
  • "backup.BackupResource.from_arn"メソッドでリソースを指定(書式は下記)
    backup.BackupResource.from_arn(f"リソースタイプ:{リージョン}:{AWSアカウントID}:リソースID)

  • ソースコード

        # バックアップ対象を設定
        backup_selection = backup.BackupSelection(self, "BackupSelection",
            backup_plan=backup_plan,
            resources=[
                backup.BackupResource.from_arn(f"arn:aws:ec2:{self.region}:{self.account}:instance/{instance_01.ref}"),
                backup.BackupResource.from_arn(f"arn:aws:ec2:{self.region}:{self.account}:instance/{instance_02.ref}")
            ]
        )

6.検証

マネジメントコンソールでバックアップボールトを確認すると、以下のように正しくバックアップが取れていることが確認できました。

7.感想

スムーズに構築することができた。
AWS Backupの設定は初めて行ったのでいい勉強になった。

Last modified: 2024-08-14

Author