AWS Backup(CloudFormation)でEBSのバックアップをとりたい
はじめに
こんにちは、シマです。
前回、前々回に引き続き、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バックアップは取得されていません。
最後に
自分の想像と実際の挙動が異なったので確認してみました。
自動で一括バックアップが取れることの喜びを嚙み締めつつ、
思った通りに本当になっているか、確認作業を怠らないことが大切だと思いました。