ブログ

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日、最終更新日: 2022年06月27日