AWS Backup を使用した EFS の復元方法

複数の Amazon EC2 から同じファイルを参照できる Amazon EFS は、可用性向上やシステムの簡略化にとても役立ちます。
複数台の EC2 で構成されたWebシステムであれば、以前は画像ファイルや CSS, Javascript など静的ファイルは EC2 間でファイルを同期し合うか、Amazon S3 を参照することでファイルの整合性を担保していましたが、考えることが多く大変だったので開発側としては EFS はとても助かるサービスです。
ですが、その分 EFS の重要性が高く、データ消失した際のインパクトが大きくなりがちです。
EFS 自体の可用性は十分にありますが、ヒューマンエラーなどで削除してしまうこともあるかと思います。
AWS Backup で復元は可能ですが、どのような形式で復元されるか理解しておかないといざという時に慌ててしまうので、そういったケースに備えて、今回は AWS Backup での EFS の復元方法などをご紹介します。
目次
EFS の作成、アタッチ
まずは、復元の前に EFS を作成しアタッチをしたいと思います。
マネージメントコンソールの EFS の画面から「ファイルシステムの作成」を選択し、下記の設定値で EFS を作成します。
今回は検証ですので、適当な設定値となっています。

作成後、EFS をマウント(アタッチ)させる EC2 で作業をします。
今回は作成したばかりの Amazon Linux 2 にマウントします。
マウント前の df コマンドの結果は以下の様になります。
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 474M 0 474M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 508K 483M 1% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.5G 6.5G 19% /
tmpfs 97M 0 97M 0% /run/user/1000
まずはマウントに必要な EFS マウントヘルパー (amazon-efs-utils) をインストールします。
# yum install amazon-efs-utils
次にマウントポイントを作成します。
# cd /
# mkdir efs
マウントする準備が整ったので、以下のようなコマンドでマウントします。
sudo mount -t efs -o tls fs-xxxxxxxxxxxxx:/ efs
EFS のコンソール画面の「アタッチ」から上記コマンドが確認できます。

マウント後の df コマンドの結果は以下のようになります。
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 474M 0 474M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 456K 483M 1% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.5G 6.5G 19% /
tmpfs 97M 0 97M 0% /run/user/1000
127.0.0.1:/ 8.0E 0 8.0E 0% /efs
今回は復元テストをしたいので、まずは適当なファイルを EFS に保存します。
# echo "test.txt Before File" > /efs/test.txt
# echo "test2.txt Before File" > /efs/test2.txt
# cat /efs/test.txt
test.txt Before File
# cat /efs/test2.txt
test2.txt Before File
また、現状のディレクトリ構成はこの様になります。
# tree /efs
/efs
├── test.txt
└── test2.txt
0 directories, 2 files
AWS Backup でバックアップ取得
EFS の下準備ができましたので、AWS Backup でバックアップを取得していきます。

定期バックアップの設定(バックアッププラン)はもう少し細かい設定値がありますが、手動バックアップ(オンデマンドバックアップ)の場合は、「保護されたリソース」の「オンデマンドバックアップを作成」からすぐにバックアップ取得可能です。

今回はテキストファイル2個のみでしたので、すぐに取得完了となりました。
次に、復元前後の検証をしやすくするため、EFS に保存されたテキストファイルを編集しておきます。
# echo "test.txt After File" > /efs/test.txt
# echo "test2.txt After File" > /efs/test2.txt
# cat /efs/test.txt
test.txt After File
# cat /efs/test2.txt
test2.txt After File
AWS Backup で EFS を復元
AWS Backup から EFS を復元する場合、大きく2項目2種類の設定があります。

今回はそれぞれ4種類でどのような形式でファイルが復元されるか確認したいと思います。
1~4の各方法で復元し、その結果を出力しています。
※復元後のディレクトリ構成を確認することをメインとしますので、具体的な復元手順は割愛させていただきます。
1.「完全な復元」&「ソースファイルシステムのディレクトリに復元する」
# tree /efs
/efs
├── aws-backup-restore_2021-12-18T10-47-31-040Z
│ ├── aws-backup-lost+found_2021-12-18T10-47-16-337Z
│ ├── test.txt
│ └── test2.txt
├── test.txt
└── test2.txt
2 directories, 4 files
# cat /efs/aws-backup-restore_2021-12-18T10-47-31-040Z/test.txt
test.txt Before File
# cat /efs/aws-backup-restore_2021-12-18T10-47-31-040Z/test2.txt
test2.txt Before File
# cat /efs/test.txt
test.txt After File
# cat /efs/test2.txt
test2.txt After File
2.「項目レベルの」&「ソースファイルシステムのディレクトリに復元する」
# tree /efs
/efs
├── aws-backup-restore_2021-12-18T10-52-37-825Z
│ ├── aws-backup-lost+found_2021-12-18T10-52-15-337Z
│ └── test.txt
├── test.txt
└── test2.txt
2 directories, 3 files
# cat /efs/aws-backup-restore_2021-12-18T10-52-37-825Z/test.txt
test.txt Before File
# cat /efs/test.txt
test.txt After File
# cat /efs/test2.txt
test2.txt After File
3.「完全な復元」&「新しいファイルシステムに復元する」
# tree /efs2
/efs2
└── aws-backup-restore_2021-12-18T10-36-54-113Z
├── aws-backup-lost+found_2021-12-18T10-36-35-413Z
├── test.txt
└── test2.txt
2 directories, 2 files
# cat /efs2/aws-backup-restore_2021-12-18T10-36-54-113Z/test.txt
test.txt Before File
# cat /efs2/aws-backup-restore_2021-12-18T10-36-54-113Z/test2.txt
test2.txt Before File
4.「項目レベルの」&「新しいファイルシステムに復元する」
# tree /efs2
/efs2
└── aws-backup-restore_2021-12-18T10-37-59-155Z
├── aws-backup-lost+found_2021-12-18T10-37-43-564Z
└── test.txt
2 directories, 1 file
# cat /efs2/aws-backup-restore_2021-12-18T10-37-59-155Z/test.txt
test.txt Before File
1と2の「ソースファイルシステムのディレクトリに復元する」で復元した場合、ファイルを上書きするイメージでしたが、実際に復元するとマウントポイント直下にディレクトリが作成され、その配下に復元されたファイルが配置されるようです。
3と4の「新しいファイルシステムに復元する」で復元した場合は、EFS が新規作成されるため別にマウントする必要があります。
そのため、検証では efs2 というディレクトリを作成し、そこにマウントしています。
AWS Backup を使用した EFS の復元方法(まとめ)
筆者も AWS Backup から EFS を復元できることは知っていましたが、実際に私がイメージしていた復元結果と違い、事前検証・訓練の重要性も改めて感じました。
今回ご紹介した復元をはじめ、ターン・アンド・フロンティアではすでに AWS をご利用されているお客様にも、技術的なご支援が可能ですので、ご興味のある方はお気軽にご相談ください。
元記事発行日: 2022年06月23日、最終更新日: 2023年03月28日