EFSのバックアップ設定と復元方法 (AWS Backup使用)

# はじめに
EFSでバックアップしたファイルを復元する方法についてまとめました。

# 前提条件
- EFS作成済み
- EFSにマウント設定したEC2作成済み
作成方法はこちらの記事を参考に

https://qiita.com/holdout0521/items/8564791feed63a39ad2f

# 流れ
1. バックアップ設定
1. EFSを復元
1. 注意点：復元にかかる時間
1. 注意点：増分バックアップ
1. 復元履歴確認


# バックアップ設定
EFSは、自動バックアップを有効化にすると、自動でバックアップされます。
![スクリーンショット 2021-11-13 16.40.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/710322d1-9eac-aed0-3303-f9ce2c2a0896.png)

バックアップの設定は、`AWS Backup`の`バックアッププラン`からEFSを選択し、`バックアップルール`をクリックすると確認できます。
![スクリーンショット 2021-11-13 16.43.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/2d96fe00-1fb9-e25e-7b05-f2b10460da97.png)
![スクリーンショット 2021-11-13 16.43.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/928740a1-5179-2685-db56-934c5757f942.png)

実際にバックアップされたリソースは、`バックアップボールト`から確認できます。
![スクリーンショット 2021-11-13 17.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/48cc1cb7-075a-1286-54f0-86078daee16a.png)


>バックアップボールトとは「バックアップを整理するためのコンテナ」であると説明されています。EC2 のバックアップである AMI 、RDS のバックアップであるスナップショットなどをまとめて管理するための器のようなイメージを持つとよいでしょう。

バックアップボールドについての詳細はこちら↓

https://dev.classmethod.jp/articles/aws-backup-perfect-understand/#toc-5

# EFSを復元

`バックアップボールト`から復元したいリソースを選択し、復元をクリックしましょう
![スクリーンショット 2021-11-13 17.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/48cc1cb7-075a-1286-54f0-86078daee16a.png)

### 設定
下記の画像のように設定しました。
特に説明する箇所はありませんが、`項目レベルの復元`というのは、例えば、
EC2の`/mnt/efs`ディレクトリにマウントされていて、復元したいファイルパスが `/mnt/efs/file1` である場合は、`「/file1」`と入力します



![スクリーンショット 2021-11-13 16.58.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/3725dbd5-721f-aeda-fd04-b17521bb370c.png)

`バックアップを復元`をクリックすると、以下のエラーになります。

```
アクセスが拒否されました
このアクションを実行するには権限が不十分です。必要な権限についてはアカウント管理者に相談してください。
```

原因は、EFSバックアップボールトのアクセスポリシー内の`Deny backup:StartRestoreJob`があるためです。
復元が拒否されていますね。

AWS Backupのコンソールから`バックアップボールト`をクリックし、EFSバックアップボールトをクリックすると、アクセスポリシーがあります。



`backup:StartRestoreJob`の箇所を削除しましょう。
削除前
![スクリーンショット 2021-11-13 17.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/f5a79d88-e7f9-868b-98de-e8396e5cf93a.png)
削除後

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "backup:DeleteBackupVault",
                "backup:DeleteBackupVaultAccessPolicy",
                "backup:DeleteRecoveryPoint",
                "backup:StartCopyJob",
                "backup:UpdateRecoveryPointLifecycle"
            ],
            "Resource": "*"
        }
    ]
}
```

再度、`バックアップを復元`をクリックすると、復元が実行されました。
![スクリーンショット 2021-11-13 17.19.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/4fdd7b04-3894-40d1-1196-d9fa1d464ccb.png)

新しくEFSが作成され、`aws-backup-restore_`というディレクトリ内に、ファイルやディレクトリが復元されているかと思います。

また、`aws-backup-lost+found`ディレクトリが存在しています。
適切なディレクトリに復元できないデータフラグメントは、aws-backup-lost+found ディレクトリに配置されます。
バックアップの実行中にファイルシステムに変更が加えられると、フラグメントがこのディレクトリに移動される場合があります。


# 注意点：復元にかかる時間

ジョブを復元のステータスが完了しても`数GBがある場合、数時間かかる`ことがあります。`復元が完了したことは、アナウンスされませんので注意してください！`

また、`完全な復元を選択`した場合、EFSが作成されていると思いますが、同様に復元が完了していません。
EFSのファイルシステム一覧を確認すると、合計サイズが数KBしかありませんので、**数時間待ち**ましょう。

ちなみに、2021年11月の時点では、`2GBのEFSを復元するのに1時間かかりました`。

![スクリーンショット 2021-11-13 17.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/db510525-d744-8acc-345a-540a56db3eb9.png)

# 注意点：増分バックアップ
AWS Backup は EFS ファイルシステムの増分バックアップを実行します。
`最初のバックアップ時`には、**ファイルシステム全体のコピー**が作成されます。
そのファイルシステムの`その後のバックアップ`では、**変更、追加、削除されたファイルとディレクトリのみがコピー**されます。

そのため、`バックアップボールト`の復旧ポイントの詳細のバイト数が少なく感じるかもしれませんが、復元時は、もっとバイト数が大きくなると思って間違いありません。

# 復元履歴確認

`AWS Backup`の`ジョブ`の`ジョブ履歴`から復元履歴が確認できます。
![スクリーンショット 2021-11-13 17.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/139bda81-220c-f8dd-905e-4345662aa6e7.png)


# 参考

https://docs.aws.amazon.com/ja_jp/efs/latest/ug/awsbackup.html#backups-storage-classes

https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/restoring-efs.html

https://dev.classmethod.jp/articles/aws-backup-perfect-understand/#toc-5