EC2(EBS)で自動スナップショット取得&世代管理

cooltext187634869331817

1.EC2スナップショット機能の欠点

EC2スナップショット機能はRDSほど柔軟ではない。

EC2(EBS)のスナップショット作成は、AWSコンソール画面上から簡単に行うことができます。取得したスナップショットをもとに新しいEBSを作成したり、AMIを作成することできます。めちゃくちゃ便利ですね。しかし、自動でEBSスナップショットを作成したい場合にはなんらかの仕組みを自前で用意しないといけません。(RDSは自動バックアップ設定が簡単にできるのに、、、)

ということで今回はAWSのタグ機能・Ruby・AWS-CLIを組み合わせることによって指定した世代分で自動バックアップができるようにしてみました。

※注意点

  • 筆者のプログラミングスキルは素人に産毛が生えた程度です。プログラミングの欠陥がある可能性が大いにあります。。
  • AWSの仕様変更によりプログラムがガラクタに成り果てる可能性が大いにあります。

2.ゴール・できること

  • AWSの管理画面にバックアップを何世代とるかのカスタムタグを作成・表示させる。
  • カスタムタグに数字が入っていればその世代数のバックアップをとる。(空白や数字以外は何もしない)
  • 毎日指定した時間に自動でスナップショットが取得される。(cronで回せば)
  • 【世代=日付】で管理し、一日複数回取得したスナップショットはまとめて一世代分とする。
  • 手動で作成したスナップショットは管理対象に含めない(AMIとか作った時のことを考えて))
  • 手動で作成したスナップショットは削除しない。
  • 完了通知をメールで送付する。(成功・失敗も含め)
  • EBSが複数アタッチされた環境でも取得できるようにする。

3.導入手順

1.バックアップ用の独自タグを追加・EBSの名前を入力

EC2サービスのEBS画面から独自タグを追加します。EBSには取得したい世代数分の数字を入力しておきます。

snap01

カスタムタグを追加します。ここでは「auto_backup」タグを作成します。

snap02

値は後から変更可能です。3日分なら3、30日分なら30と入力しておきます。

snap03

作成したタグは左上の歯車マークから表示することができます。

snap04

Nameタグにはバックアップ対象とする世代数、auto_backupタグにはEC2インスタンス名-EBSと入力しておきます。(これをしないとうまく動作しません。)ちなみに、取得するスナップショットのディスクリプションにNameタグの内容が利用されます。

snap05

 

2.AWS-CLIを利用可能にする。

プログラムではサーバからAWS-CLIを利用してインスタンスIDやEBSのIDを取得します。併せてスクリプトを実行するサーバからAWSのAPIにアクセス可能な権限を付与する必要があります。詳細については割愛します。

参考記事AWS-CLIセットアップ手順(CentOS5,CentOS6,AmazonLinux,CentOS7)

IAMのロールやアクセスキーのインポートを行い、EC2の各種操作が可能なようにしておきます。セキュリティ面からはロールによる制御が好ましいでしょう。今回は検証用途なので、create-snapshotユーザを作成し、EC2のフルアクセス権限を付与しています。

snap07

3.Ruby・AWS-CLIのインストール確認

4.必要なコマンド・ライブラリのインストール

5.プログラムの設置

AWS_idとnotify_mail_addressは自分のアカウントIDと通知先メールアドレスに書き換えてください。

6.手動実行による動作チェック

実行権限を付与し、実行してみます。(Warningはでますが、、、)

無事に2台分のスナップショットが取得できました。

snap08

7.自動実行登録

cronで夜中3:00に実行されるよう設定します。

 

これでラクラクEC2のバックアップができました!!以上。

 

Bookmark this on Google Bookmarks
LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です