はじめに
サーバを日々バックアップ運用していると、結構な頻度で「バックアップからファイルだけ戻してほしい」という相談が来ます。
EC2でどういう風にできるのか試してみました。OSはWindowsですが、Linuxでも同様かと思います。
概要
この記事では、以下の2つの方法をやっています。
- バックアップしたAMIから別のVMを作成し、元ファイルをコピーする方法
- スナップショットからボリュームを作成し新しいVMにアタッチし、元ファイルをコピーする方法
AMIからVMを作成する場合、内部で動いているシステム・サービスが外部に影響しないよう配慮が必要です。
他環境に影響ないことが保証されている、隔離環境で起動するなどを検討してください。
また、スナップショットからボリュームを作成する場合、作成したボリュームを既存のVMにアタッチすることもできますが、稼働中のサーバの構成を変更することになり影響が心配されますので避けています。
やってみた
今回はVMをAWS Backupでバックアップし、作成されたAMIとスナップショットを用いて行います。
準備:VMのバックアップ
まずはVMを作成して、リストアのためのファイルを作成します。
AWS Backupでオンデマンドバックアップします。念のためVMを停止した状態で行います。
このファイルをリストアするシナリオでやっていきます。
AMIから別のVMを作成し、元ファイルをコピー
まずはAWS Backupで作られたAMIを使って、ファイルをリストアします。
AWS Backupを使わないで作成されたAMIからでも、ほぼ同様にできると思われます。
AMIからリストア用VMを作成
まずAWS Backupに使わせるロールを作ります。元のインスタンスプロファイルを使ってアクセスするために、AWS Backupで利用するリストアのロールに、iam:PassRole権限を付与します。
今回は、以下のCFnテンプレートを使いました。既にあるポリシーAWSBackupServiceRolePolicyForRestores
に、iam:PassRole権限を付与しています。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
SampleRoleforBackup:
Type: 'AWS::IAM::Role'
Properties:
RoleName: SampleRoleforBackup
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- backup.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
Policies:
- PolicyName: AllowPassRole
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 'iam:PassRole'
Resource:
- !Sub 'arn:aws:iam::${AWS::AccountId}:role/*'
ロールが作成できたら、AWS Backupのコンソールから対象のAMIを復元します。
初期化のチェックに5分くらいかかりましたが、もう一つのVMが作られました。
作成したVMに、RDPでアクセスします。パスワードは元のVMと同じものを使ってアクセスします。
元のファイルが確認できました。後はこのファイルをネットワーク越しでコピーや、RDPなので一度ローカルにコピーしてから元VMにアップするなどします。
リストア用VM削除
作ったVMは終了して削除するだけです。
スナップショットからボリュームを作成し新しいVMにアタッチし、元ファイルをコピーする
次は、AWS Backup時に作られたスナップショットを使って、ファイルをリストアします。
スナップショットから、ボリュームを作成
EC2のコンソールから対象のスナップショットを選択し、[アクション]-[スナップショットからボリュームを作成]をクリックします。
新しいVMを作成
ボリュームを作成したAZに、新しいVMを作成します。サブネットの指定は同じAZになるように注意します。
ボリュームをアタッチ
作成したVMにボリュームをアタッチします。ボリュームから[アクション]-[ボリュームのアタッチ]を選択します。
インスタンスとデバイス名を選択します。デバイス名は、データボリュームの場合は xvd[f-p]
と書かれているので、それに従います。
アタッチした後、ボリュームのステータスがしばらく「データが不十分です」になっていますが、しばらくするとOKになります。
アタッチしたVMで、ボリュームを利用できるようにします。ログインしてサーバーマネージャを起動し、コンピュータの管理を開きます。
[Offline]のあたりの位置を右クリックして、Onlineをクリックします。
Onlineになったら、Openすることで、エクスプローラが開きます。
フォルダを潜っていて、対象のファイルの更新前の状態が確認できました。
VM・ボリューム削除
リストア用のVMは終了して削除します。作成したボリュームは残ったままなので、こちらも消す必要があります。
おわりに
今回は、バックアップしたEC2のVMから、ファイルだけ戻したいというケースを想定して、2つの方法を記事にしました。
専用のバックアップソフトだとファイル単位のリストア機能がありますが、EC2ではどうすればいいのか気になったので試してみました。
結構面倒なので、日常使用するファイルなどはEC2で構築したファイルサーバなどに保存せず、S3やBOXなどを使ってほしいです。
この記事がどなたかのお役に立てれば幸いです。