Amazon謹製のEFSバックアップソリューションを使ってみた:リストア編

Amazon Elastic File System (EFS)が東京リージョンで一般提供されて約2ヶ月たちました。 みなさん、Amazon EFS をお使いでしょうか?

プロダクションサービスに組み込む場合、どれだけ手離れよく運用できるかは重要なポイントです。

Amazon EFS を運用する上で一点気をつけないといけないのは、Amazon EFS は可用性・耐久性は高いが、ファイルシステムの意図しない変更や削除に対しては別途対策が必要ということです。

このような意図しないオペレーションに対しては、Amazon EFS のユーザーガイドでは EFS-to-EFS バックアップソリューションが推奨されています。

今回は、このバックアップソリューションで取得したバックアップをもとに、リストアを実施します。

バックアップについては、次の記事を参照ください。

Amazon謹製のEFSバックアップソリューションを使ってみた:バックアップ編

EFS-to-EFS バックアップソリューション概要

EFS-to-EFS バックアップソリューションは、その名の通り、バックアップしたい EFS(source file system) を別の EFS(backup file system) にバックアップするソリューションです。

  • バックアップスケジュール
  • データ保持期間
  • バックアップ対象パス

などを細かく指定できます。

差分バックアップを利用するため、初回バックアップ以降は、処理時間や消費ストレージを軽減できます。

リストア時には、リストアに利用するアーカイブやサブディレクトリーを指定できます。

  • バックアップ
  • リストア

で個別にデプロイが必要です。

リストアソリューションをデプロイする

リストアソリューションのデプロイには CloudFormation を使います。

次の URL にアクセスすることで、ソリューション用テンプレートを選択した CloudFormation Stack の作成画面に遷移します。

https://console.aws.amazon.com/cloudformation/home#/stacks/new?templateURL=https:%2F%2Fs3.amazonaws.com%2Fsolutions-reference%2Fefs-backup%2Flatest%2Fefs-to-efs-restore.template

多くのパラメーターはバックアップ時とペアになっているため、バックアップ時に指定したパラメーター(FolderLabel など)を転記すればOKです。

重要なパラメーターを紹介します。

パラメーター 意味
Source EFS バックアップデータでリストアしたい EFS IDです。
Backup EFS バックアップデータのある EFS IDです
Backup Number 数字が小さいほど新しく、0が最新です。
Restore Log Bucket ジョブの実行ログの出力先です。バックアップデプロイ時に作成された S3 バケットを指定しておくのがおすすめです。

各パラメーターの説明は次のドキュメントを参照ください

https://docs.aws.amazon.com/solutions/latest/efs-to-efs-backup/restore.html

SNS の疎通確認

SNS のメール通知を有効にすると、記入したメールアドレスに「AWS Notification - Subscription Confirmation」という件名の確認メールが届きます。

リストア完了時の通知に利用されます。

リストアが完了する前に、"Confirm subscription" をクリックして、Confirm してください。

リストアの確認

CloudFormation でリストア用スタックを作成すると、Auto Scaling Group 経由で EC2 インスタンスが起動され、EC2 内で実際にリストア処理が走ります。

CloudFormation はリストアに必要なリソースの作成と Auto Scaling Group の設定が終わると終了します。

リストアのSNS通知

リストア処理が終了すると、成功・失敗にかかわらず、SNS 経由で「AWS Notification Message」という件名で次のようなメール通知されます。

{
     SourceEFS:fs-AAA,
     BackupEFS:fs-BBB,
     Interval:daily,
     BackupNum:0,
     FolderLabel:efs-backup,
     RestorePrefix:/,
     RestoreSubDirectory:/,
     LogBucket:S3-BUCKET-NAME,
     RestoreStartTime:2018-08-08T21:15:23,
     RestoreStopTime:2018-08-08T21:16:31,
     RestoreStatus:Success
}

RestoreStatus:Success からリストアジョブは成功したことがわかります。

リストアデータの確認

実際にバックアップされていることを確認します。 Source EFS に指定した EFS をマウントして確認します。

# バックアップ先 EFS をマウント
$ sudo mkdir restore
$ sudo mount -t efs fs-123:/ restore
# ファイル一覧を確認
$ sudo tree restore/
restore/
...

EC2のバックアップ処理のログを確認

このソリューションでは、Auto Scaling 経由で EC2 インスタンスが起動&Terminateされます。

ログファイルはC loudFormation パラメーターの「Restore Log Bucket」で指定した S3 バケットに保存されます。

ログの種類ごとにプリフィックスを分けて出力されます。

# cloud-init ログ
$ aws s3 ls s3://BUCKET-NAME/ec2-logs/
2018-08-09 20:39:33      69382 fs-backup-daily.0-restore-20180809-2039.log
# コピー処理のログ
$ aws s3 ls s3://BUCKET-NAME/efs-restore-logs/
2018-08-09 20:39:30        958 efs-backup-daily.0-restore-fpsync-20180809-2039.log
2018-08-09 20:39:31        122 efs-backup-daily.0-restore-rsync-delete-20180809-2039.log

参考 https://docs.aws.amazon.com/solutions/latest/efs-to-efs-backup/appendix-b.html

ソリューションのカスタマイズ

リストアを実行後、各種パラメーターをカスタマイズして再実行したいことがあるかと思います。

主なパラメーターの変更方法を紹介します。

リストア実行するインスタンスタイプを変える

デフォルトでは c5.xlarge のインスタンスが起動されます。

別のインスタンスタイプで起動したい場合は、CloudFormation テンプレートの次の箇所でインスタンスタイプ(c5.xlarge)を書き換得てください。

...
Mappings:
  Map:
    send-data: {"SendAnonymousData": "Yes"}
    c5.xlarge: {"Arch":"HVM64"}
    us-east-1: {"InstanceSize":"c5.xlarge"}
    us-east-2: {"InstanceSize":"c5.xlarge"}
    us-west-1: {"InstanceSize":"c5.xlarge"}
    us-west-2: {"InstanceSize":"c5.xlarge"}
    ca-central-1: {"InstanceSize":"c5.xlarge"}
    eu-west-1: {"InstanceSize":"c5.xlarge"}
    eu-central-1: {"InstanceSize":"c5.xlarge"}
    eu-west-2: {"InstanceSize":"c5.xlarge"}
    ap-southeast-1: {"InstanceSize":"c5.xlarge"}
    ap-southeast-2: {"InstanceSize":"c5.xlarge"}
    ap-northeast-1: {"InstanceSize":"c5.xlarge"}
    ap-northeast-2: {"InstanceSize":"c5.xlarge"}
    ap-south-1: {"InstanceSize":"c5.xlarge"}
    sa-east-1: {"InstanceSize":"c5.xlarge"}
...

ソリューション利用状況を AWS に送信したくない

デフォルトの CloudFormation テンプレートを利用してデプロイすると、ソリューションの利用状況が AWS に送信されます。

オプトアウトしたい場合は、テンプレートの

Mappings:
  Map:
    send-data: {"SendAnonymousData": "Yes"},

となっている箇所を

Mappings:
  Map:
    send-data: {"SendAnonymousData": "No"},

に修正してください。

まとめ

意図しないファイルシステム操作に備えて、EFS to EFS ソリューションでバックアップしたデータのリストア方法を紹介しました。

バックアップとリストアはパラメーターがペアになっているため、迷う箇所はあまりないかと思います。

くれぐれも、リストア先の EFS ID を間違えて、二次災害を起こすことはないよう、お気をつけください。

参考

  • https://aws.amazon.com/answers/infrastructure-management/efs-backup/
  • https://docs.aws.amazon.com/efs/latest/ug/efs-backup.html
  • https://docs.aws.amazon.com/solutions/latest/efs-to-efs-backup/restore.html
  • https://www.slideshare.net/AmazonWebServicesJapan/20180704-aws-black-belt-online-seminar-amazon-elastic-file-system-amazon-efs-106065624
  • https://github.com/awslabs/efs-backup