AWS Backup(CloudFormation)でEBSのバックアップをとりたい

2022.12.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、シマです。
前回、前々回に引き続き、AWS BackupにおけるCloudFormationのバックアップについてです。
本記事は3つ目になります。

※1つ目の記事は以下です。

※2つ目の記事は以下です。

続・ちょっとした疑問

AWS BackupでCloudFormationのバックアップを取得した場合には、以下の仕様があります。

AWS Backup でサポートされている CloudFormation スタック内のすべてのリソースは、サービスオプトイン設定で無効に設定されていても、バックアップジョブに含まれます。

つまり、以下のようにCloudFormation以外を無効にしても
CloudFormationで展開し、利用しているリソースで
AWS Backupに対応しているリソースタイプはすべて自動で取得されます。

・・と思っていました。

というのも、VPCとEC2を作成する単純なテンプレートについて、
AWS Backupでバックアップをとってみたところ、
CloudFormationとEC2のバックアップが取得されました。
EC2を使用するためにEBSも使用しているはずなので、
バックアップにEBSが含まれていないことに疑問が生じたので確認してみることにしました。

いきなり結論

テンプレートファイルの記載方法で取得されるリソースタイプが変動するようです。
そのため、AWS BackupでCloudFormationのバックアップをとる場合は
そこも考慮した上で、テンプレートファイルを記載する必要があります。

やってみたこと

スタックの作成とバックアップ取得(パターン1)

CloudFormationを使用してEC2を作成します。
ネットワーク設定(VPC,SG等)も含めて作成していますが
本件に関係ある「AWS::EC2::Instance」のみ抜粋して以下に記載します。

EC2:
  Type: AWS::EC2::Instance
  Properties:
    ImageId: ami-072bfb8ae2c884cc4
    KeyName: !Ref KeyName
    InstanceType: t3.micro
    BlockDeviceMappings:
    - DeviceName: /dev/sdb
      Ebs:
        VolumeType: "gp3"
        VolumeSize: "10"
        DeleteOnTermination: "false"
    NetworkInterfaces:
    - AssociatePublicIpAddress: "true"
      DeviceIndex: "0"
      SubnetId: !Ref SNTESTPUB
      GroupSet:
      - !Ref SGTESTBASTION
    Tags:
    - Key: Name
      Value: EC2-TEST

「BlockDeviceMappings」にて、2つ目のストレージをアタッチしています。
このスタックについて、AWS Backupでバックアップを取得すると、
以下のようにバックアップが取得されました。

  • EC2
  • CloudFormation
    ※一番上のコンポジットは組み合わせを表していて、AWSリソースとは異なるので検討対象から除外します

スタックの作成とバックアップ取得(パターン2)

先ほどのテンプレートを以下のように修正し、
別のスタックとして作成します。

EC2:
  Type: AWS::EC2::Instance
  Properties:
    ImageId: ami-072bfb8ae2c884cc4
    KeyName: !Ref KeyName
    InstanceType: t3.micro

    NetworkInterfaces:
      - AssociatePublicIpAddress: "true"
        DeviceIndex: "0"
        SubnetId: !Ref SNTESTPUB
        GroupSet:
          - !Ref SGTESTBASTION
    Tags:
        - Key: Name
          Value: EC2-TEST

EBS1:
  Type: AWS::EC2::Volume
  Properties:
    AvailabilityZone: !Ref AZ
    Size: "10"
    VolumeType: "gp3"

EBS1Attachment:
  Type: AWS::EC2::VolumeAttachment
  Properties:
    Device: !Sub "/dev/sdb"
    InstanceId: !Ref EC2
    VolumeId: !Ref EBS1

「AWS::EC2::Instance」で2つ目のストレージをアタッチする記載を削除し、
「AWS::EC2::Volume」でEBSを作成し、「AWS::EC2::VolumeAttachment」でEC2にEBSをアタッチする方法に変更しました。

このスタックについて、AWS Backupでバックアップを取得すると、
以下のようにバックアップが取得されました。

  • CloudFormation
  • EC2
  • EBS

ちなみに、上記で取得されるEBSバックアップの対象はテンプレート内でEBS1として定義したEBSで、
ルートボリュームのEBSバックアップは取得されていません。

最後に

自分の想像と実際の挙動が異なったので確認してみました。
自動で一括バックアップが取れることの喜びを嚙み締めつつ、
思った通りに本当になっているか、確認作業を怠らないことが大切だと思いました。