このページについて

AWS Backup for S3について考慮事項を確認し、Cross-Region backup(リージョン間コピー)を試してみました。

AWS Backup for S3について

AWS BackupでS3のバックアップを取ることができます。

AWS BackupS3 でデータを単独で、または他のアプリケーションと一緒に保存するアプリケーションの集中バックアップと復元をサポートしますAWSデータベース、ストレージ、およびコンピューティングのためのサービス。複数の 機能はS3バックアップで利用できます Backu...

S3バケット側で必要な設定

  • バージョニング有効
  • (リストア先バケットについて)ACL有効

バージョニングについて

バージョニングを設定していないバケットをバックアップしようとするとエラーになります。

また、バージョンにライフサイクルの有効期限を設定することも考慮が必要です。
設定していない場合、有効期限が切れていないバージョン全てをバックアップして保存するため、S3のコストが増加する恐れがあります。

ACLについて

ドキュメントでもACL有効について記載があるので、検証してみました。

Considerations:
Access Control Lists (ACLs) must be enabled in the destination bucket, or the job will fail otherwise. S3 buckets created through the AWS Backup console have ACLs disabled by default (note that restoring with the Create new bucket option will create a bucket with ACLs enabled). To enable ACLs, follow the instructions in Configuring ACLs page.
https://docs.aws.amazon.com/aws-backup/latest/devguide/restoring-s3.html

バックアップ

ACLの設定がなんだろうとバックアップはできました。

ACL無効 ACL有効(希望するバケット所有者) ACL有効(オブジェクトライター)
  • オンデマンドバックアップで検証。

リストア

リストア先は元のバケットではなく、別のバケットを指定して試しています。

Source/Destination ACL無効 ACL有効(希望するバケット所有者) ACL有効(オブジェクトライター)
ACL無効 ×
ACL有効(希望するバケット所有者) ×
ACL有効(オブジェクトライター) ×
  • 条件は全て以下に揃えてます。
    • バージョニング: 有効
    • パブリックアクセスをすべてブロック: 有効
    • デフォルト暗号化: 無効
    • オブジェクトロック: 無効

エラー内容

現状はDestinationBucket側はACLを有効にしないとジョブが失敗します。
エラー内容的には、バケットにオブジェクトを書き込んで、それをバケット所有者にするために bucket-owner-full-controlを必要としてるからかと思われます。

Cannot restore, as the BucketOwnershipControls of {DestinationBucket} do not allow the use of object ACLs.

Cross-Region backup(リージョン間コピー)について

AWS Backupを使用して、別リージョンにバックアップを取ることができます。
(S3については、2022年4月頃確認したらサポートされていませんでしたが、2022年10月時点ではサポートされています!)

Use AWS Backup to centralize and automate the backup of data across AWS services in the cloud and on premises.

バックアッププランにて、以下のように設定できます。
コピー先に別リージョンのボールトを指定します。

オンデマンドバックアップでやってみる

試しにオンデマンドバックアップをCross-Region backup(リージョン間コピー)してみます。
まずはS3のオンデマンドバックアップを取ります。

その後、バックアップボールトに取得された復旧ポイントをコピーします。

コピーする際、別リージョンのボールトをコピー先として指定します。

以上、簡単です。

AWS BackupのCFn

汎用的なAWS Backupの設定をCFnで作成しました。
日次、週次、月次のバックアップ設定を入れてます。
また、Cross-Region backup(リージョン間コピー)についてはコメントアウトしてます。

isseeeeey55/cfn-template/awsbackup.yaml
Lines 1 to 200 in main

AWSTemplateFormatVersion: 2010-09-09
Description: Generic AWS Backup Settings.

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Project Configuration
        Parameters:
          - SystemName
          - Env

      -
        Label:
          default: Backup Cron Configuration
        Parameters:
          - DailyBackupCron
          - WeeklyBackupCron
          - MonthlyBackupCron

      -
        Label:
          default: Backup Window Configuration
        Parameters:
          - StartWindowMinutes
          - CompletionWindowMinutes

      -
        Label:
          default: Backup Retention Configuration
        Parameters:
          - DailyBackupRetention
          - WeeklyBackupRetention
          - MonthlyBackupRetention

      # -
      #   Label:
      #     default: Copy Configuration
      #   Parameters:
      #     - DestinationVaultArn

Parameters:
  SystemName:
    Description: Please enter the SystemName
    Type: String
    Default: sample

  Env:
    Description: Please enter the Env
    Type: String
    Default: test

  DailyBackupCron:
    Description: DailyBackup Time(cron)
    Type: String
    Default: cron(0 18 * * ? *)

  WeeklyBackupCron:
    Description: WeeklyBackup Time(cron)
    Type: String
    Default: cron(0 18 ? * FRI *)

  MonthlyBackupCron:
    Description: MonthlyBackup Time(cron)
    Type: String
    Default: cron(0 18 1 * ? *)

  StartWindowMinutes:
    Description: Minutes Until Backup Job Starts
    Type: String
    Default: 480

  CompletionWindowMinutes:
    Description: Minutes until backup job completes successfully
    Type: String
    Default: 1440

  DailyBackupRetention:
    Description: DailyBackup retention period
    Type: String
    Default: 4

  WeeklyBackupRetention:
    Description: WeeklyBackup retention period
    Type: String
    Default: 14

  MonthlyBackupRetention:
    Description: MonthlyBackup retention period
    Type: String
    Default: 62

  # DestinationVaultArn:
  #   Description: Destination backup vault arn
  #   Type: String
  #   Default: arn:aws:backup:ap-northeast-3:XXXXXXXXXXXX:backup-vault:sample-backup-vault

Resources:
  BackupVault:
    Type: "AWS::Backup::BackupVault"
    Properties:
      BackupVaultName: !Sub ${SystemName}-${Env}-vault
      BackupVaultTags:
        Name: !Sub ${SystemName}-${Env}-vault
        System: !Sub ${SystemName}
        Env: !Sub ${Env}

  DailyBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan:
        BackupPlanName: !Sub ${SystemName}-${Env}-daily-plan
        BackupPlanRule:
          - RuleName: daily-rule
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: !Ref DailyBackupCron
            StartWindowMinutes: !Ref StartWindowMinutes
            CompletionWindowMinutes: !Ref CompletionWindowMinutes
            RecoveryPointTags:
              System: !Sub ${SystemName}
              Env: !Sub ${Env}
            Lifecycle:
              DeleteAfterDays: !Ref DailyBackupRetention
            # CopyActions:
            #   - DestinationBackupVaultArn: !Ref DestinationVaultArn
      BackupPlanTags:
        Name: !Sub ${SystemName}-${Env}-daily-plan
        System: !Sub ${SystemName}
        Env: !Sub ${Env}

  DailyBackupSelection:
    Type: AWS::Backup::BackupSelection
    Properties:
      BackupPlanId: !Ref DailyBackupPlan
      BackupSelection:
        SelectionName: assign-by-tag
        IamRoleArn: !GetAtt AWSBackupRole.Arn
        ListOfTags:
          -
            ConditionType: STRINGEQUALS
            ConditionKey: DailyBackup
            ConditionValue: true

  WeeklyBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan:
        BackupPlanName: !Sub ${SystemName}-${Env}-weekly-plan
        BackupPlanRule:
          - RuleName: weekly-rule
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: !Ref WeeklyBackupCron
            StartWindowMinutes: !Ref StartWindowMinutes
            CompletionWindowMinutes: !Ref CompletionWindowMinutes
            RecoveryPointTags:
              System: !Sub ${SystemName}
              Env: !Sub ${Env}
            Lifecycle:
              DeleteAfterDays: !Ref WeeklyBackupRetention
            # CopyActions:
            #   - DestinationBackupVaultArn: !Ref DestinationVaultArn
      BackupPlanTags:
        Name: !Sub ${SystemName}-${Env}-weekly-plan
        System: !Sub ${SystemName}
        Env: !Sub ${Env}

  WeeklyBackupSelection:
    Type: AWS::Backup::BackupSelection
    Properties:
      BackupPlanId: !Ref WeeklyBackupPlan
      BackupSelection:
        SelectionName: assign-by-tag
        IamRoleArn: !GetAtt AWSBackupRole.Arn
        ListOfTags:
          -
            ConditionType: STRINGEQUALS
            ConditionKey: WeeklyBackup
            ConditionValue: true

  MonthlyBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan:
        BackupPlanName: !Sub ${SystemName}-${Env}-monthly-plan
        BackupPlanRule:
          - RuleName: monthly-rule
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: !Ref MonthlyBackupCron
            StartWindowMinutes: !Ref StartWindowMinutes
            CompletionWindowMinutes: !Ref CompletionWindowMinutes
            RecoveryPointTags:
              System: !Sub ${SystemName}
              Env: !Sub ${Env}
            Lifecycle:
              DeleteAfterDays: !Ref MonthlyBackupRetention
            # CopyActions:
            #   - DestinationBackupVaultArn: !Ref DestinationVaultArn
      BackupPlanTags:
        Name: !Sub ${SystemName}-${Env}-monthly-plan

元記事はこちら

AWS Backup for S3でCross-Region backup
著者:Issei Matsuki


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://www.iret.co.jp/contact/service/form/