AWS Backupのitem-level recoveryを試してみる

2023年12月18日にAWS Backupでアイテムレベルのリカバリがサポートされました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/aws-backup-search-item-level-recovery/

この機能はAWS Backupで取得したEBSスナップショット又はS3のバックアップ内から任意のファイルのみを取り出すもので、特定のファイルのみ復元したいケースなどで利用することでリカバリ時間の短縮が見込めそうです。
今回はEBSのスナップショットから特定のファイルの取り出しを行ってみました。

### EBS内にファイルを作成
最初に以下の流れでEBS内にファイルを作成します。

①：EC2を起動してEBSをアタッチする。
②：アタッチしたEBSにファイルシステムを作成する。今回はxfsファイルシステムを作成しました。
③：ファイルシステムをマウントする。今回は/mntにマウントしています。
④：/mnt/test_dir配下に100MBのファイルを5個作成する。作成したファイルは以下の通りです。
```
[root@ip-10-0-0-88 test_dir]# ls -lh /mnt/test_dir
total 500M
-rw-r--r--. 1 root root 100M Dec 21 06:08 test-1
-rw-r--r--. 1 root root 100M Dec 21 06:08 test-2
-rw-r--r--. 1 root root 100M Dec 21 06:08 test-3
-rw-r--r--. 1 root root 100M Dec 21 06:08 test-4
-rw-r--r--. 1 root root 100M Dec 21 06:08 test-5
```

### IAMロールの作成
EBSスナップショット内から特定のファイルのみ取り出す場合は以下のIAMポリシーを含んだIAMロールでAWSBackupにジョブを実行させる必要があります。
・インデックスの作成(ファイルの一覧作成)：AWSBackupServiceRolePolicyForIndexing
・ファイルの取り出し：AWSBackupServiceRolePolicyForItemRestores

こちらのIAMポリシーについての詳細は公式ドキュメントをご参照ください。
https://docs.aws.amazon.com/aws-backup/latest/devguide/backup-search.html#backup-search-access


本ブログ執筆時点(2024年12月22日)では上記IAMポリシーがアタッチされているIAMロールはデフォルトでは用意されていないため別途作成する必要があります。
以下2つのIAMロールを作成しました。
・AWSBackup_BackupAndIndexRole
アタッチしたIAMポリシー
　AWSBackupServiceRolePolicyForBackup
　AWSBackupServiceRolePolicyForIndexing

・AWSBackup_ItemRestore
アタッチしたIAMポリシー
　AWSBackupServiceRolePolicyForItemRestores


### AWSBackupでEBSスナップショットを取得する
AWSBackupで対象のEBSのスナップショットを取得します。
今回はオンデマンドバックアップで取得しました。

コンソールでAWSBackupの画面を開き、左メニューの「保護されたリソース」を選択後に「オンデマンドバックアップを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/6f53e284-a226-fed9-4759-4e7388f8bb77.png)

以下の設定値を入力して「オンデマンドバックアップを作成」を選択します。
・リソースタイプ：EBS
・ボリュームID：スナップショット取得対象のEBSのボリュームID
**・バックアップインデックス：「バックアップインデックスの作成」にチェックを入れる ※バックアップ完了後に自動でインデックスが作成される**
・バックアップ期間：「今すぐバックアップを作成」にチェックを入れる
・IAMロール：AWSBackup_BackupAndIndexRole ※事前に作成したIAMロール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/7811d2b7-575e-f9b5-3ab7-8cfcb0b02e0d.png)

対象のEBSのスナップショットが作成されるまで待機します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/4e0abbe2-5e27-aa9f-ce1a-bf4f2158b4ba.png)


### インデックスの確認
EBSスナップショットの取得が完了したら左メニューの「ボールト」を選択して対象のボールトを選択後、先ほど取得したEBSスナップショットの復旧ポイントIDを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/d4c45a87-8535-7e06-e89e-fed731e7842f.png)


「バックアップインデックス」の「インデックスステータス」が「アクティブ」になるまで待機します。 ※スナップショット取得直後は「保留中」となります。
「インデックスステータス」が「保留中」の状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/6d653cde-22f3-d3ed-6363-9a24b1420603.png)

「インデックスステータス」が「アクティブ」の状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/0fcb50ae-68eb-f87d-c4ac-42feabe101af.png)


### ファイルの検索
インデックスが作成されたら復元対象ファイルの検索を実行します。

「バックアップインデックス」の「検索バックアップ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/57b5ae5f-4f8f-95c5-2448-eb598db3acf4.png)

「リソースタイプ」、「バックアッププロパティ」には既に必要な値が入っているのでここでは「アイテムプロパティ」のみ設定します。
「アイテムプロパティ」にはファイルサイズが1MB以上という条件を指定しました。
この状態で「検索を開始する」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/fe548d49-8221-be40-a29d-f959ff6e76d4.png)

ファイルの検索が開始されるので暫く待機します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/af491ea1-b599-b46e-c58b-e302bbb44c7e.png)

検索完了後、下方の「検索結果」の画面を更新するとEBSスナップショット内のファイルが表示されます。
尚、ここで表示される「ファイルパス」はOS上のフルパスではなくEBSのマウントポイントからのパスが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/a3c8aea6-c6f2-6cca-43cd-b78be1077ef7.png)


### ファイルの復元
それではファイルを復元してみましょう。

復元対象のファイルを選択して「復元」を選択します。
一度に復元可能なファイルは5つまでです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/ca5e5b6a-8d83-ed3b-8468-3137db4bf66e.png)

ファイルの復元先はS3となるため、復元先のS3バケットと事前に作成したIAMロール「AWSBackup_ItemRestore」を指定して「バックアップを復元」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/0bbc3c36-fd64-7c39-8d87-44888dfe76c8.png)

復元が開始されるので暫く待機します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/20db60ef-11a6-96e4-8464-fb9c2ab6d9bc.png)

ステータスが「完了」となれば復元ジョブは完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/6061f0a7-f6ec-7764-30c5-f732ddf25990.png)

復元先のS3バケットを確認すると対象のファイルが復元されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/85ecd0d6-10e0-6ac0-27c1-8f8196c15cf1.png)

復元までの流れは以上となります。

これまでは特定のファイルを復元したい場合は、EBSスナップショットリストア→リストアしたEBSをEC2へアタッチ→ファイルシステムマウント→OS上でファイル検索、という流れを踏んでいたのがこの機能を使用することでかなり簡素化できそうです。