AWS SDK for Goで貧者のためのEC2バックアップCLIツールを作ってみた
AWS SDK for Go(のベータ版)が出たので触ってみたくて作ってみました。
最近の(自分の周りの)EC2バックアップ事情
EC2の定期バックアップは特に受託案件だとほぼ必須で各社・各個人で色々な方法でやっていることと思います。
最近だとお金があるなら「Cloud Automator使え」ってなるんですが、僕らのような貧者は昔からEC2のタグを見てバックアップを行うスクリプトをcronで回していたり、Jenkinsおじさんにお願いしたりするわけです。
で、一括管理できるようにアカウント横断で共用サーバ上で回すのが楽なわけですが、必ずしもそうできないような場面も会って、そうなるとスクリプトを別のサーバに仕込むわけです。
ただ、そうやってバックアップスクリプトが増殖していくと、そのうちAPI仕様変更とかSDKのバージョン違いによるバグ踏んじゃったりとか、Chefとかがあるとはいえそのためだけに何かしらの言語ランタイム入れないと…とか、ツラい未来(一部現在進行形)が色々想像できちゃうわけです。
Goで書いてみた理由
その点、Goなら言語ランタイムは要らないし、API仕様変更は無理ですがSDKのバージョン違いによるバグはテスト済みでコンパイルされたバイナリを使っている限り起きえませんし、万が一何かあってもバイナリ差し替えるだけなので楽です。
WindowsでもLinuxでも同じコードベースで動くのでWindows Server一台案件とかでも問題ありません。
あと、今までのはこのへんを参考に作っていたりするのですが、Name
タグを制御に使うのは微妙だと前々から思っていたので書き直したかった。
ということで作ってみました。
使い方
前提
以下の権限のIAM Roleを有するEC2インスタンス
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateImage", "ec2:CreateSnapshot", "ec2:CreateTags", "ec2:DeleteSnapshot", "ec2:DeregisterImage", "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:RegisterImage" ], "Resource": [ "*" ] } ] }
1. バックアップ対象のEC2にBackup-Generation
タグを設定
※Valueはバックアップ世代数
2. バイナリを取得してEC2上に配置
バージョン | ダウンロード元 |
---|---|
HEAD | Downloads | ec2backup |
Release | Releases · marcy-go/ec2backup · GitHub |
※実行するOSとArch(amd64 or 386)によってバイナリが別なので注意
3. コマンド実行
- Linux自分のみ
/path/to/ec2backup self
- Linuxアカウント全体
/path/to/ec2backup all
- Windows自分のみ
C:¥path¥to¥ec2backup.exe self
- Windowsアカウント全体
C:¥path¥to¥ec2backup.exe all
今後対応したいやつ
- credentialsファイル指定、profile切り替え
Backup-Generation
タグを無視するオプション- コマンドからの
Backup-Generation
タグ設定
以上です。
お金がある方はCloud Automator、無い方は良かったら使ってみてください。