okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

AWS SDK for RubyでEC2インスタンスのバックアップ(AMI)を作成するスクリプト

こんにちは。
少し時間がたってしまいましたが、先日AWS Summitに参加してきました。
2日目のCDPセッションにて玉川さんが【クラウドで実行させるスクリプトは再利用性がとても大事】というお話をしていました。
例えばEC2インスタンスのバックアップ(スナップショット)をするときに、インスタンスIDなどをベタ書きするよりもmeta-dataから取得したり、バックアップ世代の設定もタグで取得出来るようにしたほうが再利用性が高くなるという事でした。
もちろん、アクセスキーIDやシークレットキーもIAM Roleを使ってインスタンス内に設定しなくても実行出来るようにするべきです。
というわけで私もそのようなスクリプトのサンプルを書いてみる事にしました。

テストした環境

  • Amazon Linux
  • Ruby 1.9.3
  • AWS SDK for Ruby 1.11.2
  • IAM RoleでEC2の操作を可能にする

スクリプト概要

EC2インスタンスでスクリプトを実行すると自分自身のバックアップ(AMIの作成)を取得します。
インスタンスIDやリージョンはmeta-dataから取得して、バックアップ設定はEC2インスタンスのタグから取得します。
タグには以下のような設定をする事が前提となっており、タグが正しく設定されていない場合は終了するようにしています。

タグの名前 備考
backup on バックアップする場合は値にonを入れる
generation 5 バックアップの世代数を数字で入力する

スクリプト

こんな感じのスクリプトとなっており、cronへ登録して使います。
meta-dataからはAZは取得出来ますが、Regionは取得出来なかったので少し強引な設定をしました。

まとめ

スクリプト内にAWSアカウントやインスタンス固有の設定がされていないので、環境毎にスクリプトを編集する事なく実行出来るはずです。
Rubyのインストール、AWS SDKのインストール、スクリプトの設定、cronへの登録はChefを使ったり、初期化スクリプトで設定するなど色々な方法で自動化が出来そうです。