箱のプログラミング日記。

えんじにあ奮闘記

AWS Backup でバックアップ作成を自動化する

f:id:y_hakoiri:20191102121842j:plain

サーバーのバックアップ作成を定期実行してくれるAWSのサービスがないかな〜と思って調べたところ、AWS Backupというのがあり、早速仕事にて導入してみたのでメモ。

AWS Backupとは

ざっくり特徴だけ掻い摘んでおくと

  • AWSリソースのバックアップ作成をスケジューリングし自動化することが可能
  • 保存期間のカスタマイズ可能(一定期間を過ぎ不要になったバックアップの自動削除までサポート)
  • リージョン間の移動やクロスアカウント間の移動設定も可能

こんな感じ。

対象のAWSリソースについて詳しくは下記参照

AWS Backup | 一元化されたクラウドバックアップ | アマゾン ウェブ サービス

AWS Backupの料金

リソースごとに異なるので詳しくはこちら。(※リージョンによって異なるので注意)

AWS Backup の料金 | 一元化されたクラウドバックアップ | アマゾン ウェブ サービス

従量課金制。使用するバックアップストレージの容量と、復元したデータ量に応じて課金される。

たとえば東京リージョンで、EBSのバックアップ作成だと0.05USD/GB。そんなに高くない。ていうか安い。

また、初回のバックアップ取得時はリソースデータの完全コピーを作成するけど、次回以降は増分データのみインクリメンタルにバックアップを取得していくことで低コストに抑えられるとのこと。

リソースによってはウォームストレージからコールドストレージへの移行もでき、これによるコスト削減も可能。(現状はAmazon EFSのみ対応可能)

構築方法

前置きは程々にして下記やること一覧。

  • バックアップボールトを作成
  • バックアッププラン・バックアップルールを作成
  • リソースを割り当てる

バックアップボールトを作成

バックアップボールトというのが、作成したバックアップの貯蔵庫みたいなものらしい。

f:id:y_hakoiri:20211030234635p:plain
backup_vault_index

特にドキュメントには書いてなかったけど、個人的ベストプラクティスはバックアップボールト自体をサービスごとではなくリソースごとに分ける方が管理しやすいなと思った。(いっぱい溜まるとどのリソースのバックアップかどうかが分かりづらかったので)

f:id:y_hakoiri:20211030234811p:plain
backup_vault_new

とりあえずバックアップボールト名だけ入力して作成する。

バックアッププラン・バックアップルールを作成

次にバックアッププランとバックアップルールを作成する。

f:id:y_hakoiri:20211030235624p:plain
backup_plans_index

「どのリソースのバックアップを、どれくらいの頻度で作成するか、いつまで保存するか」をプランニングするためのもの。

f:id:y_hakoiri:20211030235730p:plain
backup_plan_new

細かくカスタマイズもできるし、AWS側が提案するフォーマットに沿って作成もできる。

f:id:y_hakoiri:20211030235822p:plain
backup_plan_templates

テンプレートは4種類。今回は月1でのバックアップ作成を選択。

f:id:y_hakoiri:20211030235916p:plain
backup_plan_name

「バックアッププラン名」を入力する。

このあと保存先のバックアップボールトを選択するので、リソース単位でボールトも分ける場合は、ちょっとめんどくさいけどバックアッププランやバックアップルールも個別に作成する必要がある。

同じルールなのに複数個作るのがめんどいようであれば、保存先のバックアップボールトも一つにまとめて良いと思う。

で、バックアップルールは「Monthly」を選択。

f:id:y_hakoiri:20211031000150p:plain
backup_rule_new

ここでバックアップボールトを選択。

このテンプレートだと、毎月1日に作成するルール。変更も可能。

f:id:y_hakoiri:20211031000522p:plain
backup_window

バックアップウィンドウのデフォルトは

  • 日本時間14:00開始
  • 8時間以内に開始
  • 7日以内に終了

これだと、バックアップウィンドウの開始が毎月1日14:00(日本時間)で、実際のjob開始が14:00から8時間以内で、job終了が7日以内になる。

いつ始まりいつ終わるかが不明確だとちょっと心配なので、「1時間以内に開始」「2時間以内に終了」に変更しといた。

作成したバックアッププラン・バックアップルールはこんな感じ。

f:id:y_hakoiri:20211031001440p:plain
backup_rule

ここで「リソースの割り当て」を行う。

リソースを割り当てる

作成したバックアッププランに対し、リソースの割り当てを行う。

f:id:y_hakoiri:20211031001701p:plain
resource_attach

「リソース割り当て名」を適当に入力し、IAMはデフォルトのままでOK

リソースの選択はリソースIDもしくはタグで検索することができる。

今回はEC2インスタンスのNameタグにて対象リソースを選択し、割り当てを実行。この時に指定したリソースIDもしくはタグの値がバックアップ名に使用される。

ジョブの実行

設定した日程で待ち構えていたところ、しばらくしたらジョブが開始した。

進行中、完了済みのジョブ状況はダッシュボードで確認ができる。

f:id:y_hakoiri:20211031002305p:plain
aws_backup_dashbord

CloudTrailを見てみると「AWSBackup-AWSBackupDefaultServiceRole」がイベントを実行していることがわかる。(※毎月1日ではなく29日実行のプランで検証)

f:id:y_hakoiri:20211031003301p:plain
cloud_tail_event

作成されたバックアップはバックアップボールトに溜まる。もちろんAMI側でも確認可能

f:id:y_hakoiri:20211031003506p:plain

AMI名は「AwsBackup_」から始まり、イメージのNameはリソースのタグが自動で入りました。

楽だし、簡単!!!

参考

AWS Backup | 一元化されたクラウドバックアップ | アマゾン ウェブ サービス

開始方法 1: サービスのオプトイン - AWS Backup