• AMIのバックアップをawscliで自動でとる

    こんにちは。OPSのほうの小宮です。

    どうも社内で需要があるようだったのと、
    javaよりpythonのツールが早いということで検索したけどawscliのは見つからなかったのでつくりました。
    タグでとるとらない自動判定などはしておりません。bkup_numに世代数を指定すると複数世代とれるように直しました。
    引数1にインスタンスID、引数2にホスト名を指定して実行する仕様です。
    --no-rebootを付けてあるので稼働中のインスタンスが再起動されることはありません。
    データ領域のEBSがあってもamiコマンドが勝手に複数とってくれるようだったので、
    osデバイスかdataデバイスか判定してわかりやすいタグつけるようにしてみました。

    ※※要注意※※
    --no-rebootつけてAMIを取得する対象がMyISAMストレージエンジンのmysqlのDBサーバだった場合に、データが壊れて止まるという現象が発生しました。
    InnoDBじゃない場合にどうしてもAMI取得したい時はメンテ推奨で止めてやるのがよいかと思われます。
    ※AWSでは無停止でのAMI取得に関するデータの整合性は保証しておりません。
     参考URL:http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html
    ということはストレージ系のサーバは気をつけたほうがよい(メンテ推奨)ようです。

    ・awscliが入ってなければインストールする
    入れ方参考:(入ってない場合はpip install awscliとする。pipはeasy_installで入れる)
    AWS Command Line Tool Python版 | Developers.IO
    pythonでeasy_install - ハネ@日記
    AWS Command Line Interface(awscli)を使ってみた - 元RX-7乗りの適当な日々

    スクリプトから呼ぶAWSのアクセスキーとリージョンの設定ファイルを作っておきます。
    [shell]# cat /root/.ec2/aws.config ———— [default] aws_access_key_id=<アクセスキーID> aws_secret_access_key=<シークレットアクセスキーID> region=ap-northeast-1 ————[/shell]
    ・コマンドの調査(いちおう載せておきます)
    [shell]# aws ec2 copy-image help ———— copy-image DESCRIPTION Initiates the copy of an AMI from the specified source region to the region in which the request was made. リージョン間コピーなのでいま要らない。 ———— create-image Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped. create-image [–dry-run | –no-dry-run] –instance-id –name [–description ] [–no-reboot | –reboot] [–block-device-mappings ] Command:

    ...