こんにちは、不慣れなサーバを触るようになった社内システム担当の千野です。
最近、会社のWebサイトをレンタル専用サーバからAWSに移行しました。
以前のWebサーバは前任者がバッチリと他のサーバへデータを日次バックアップしていたのですが、AWSのEBSならデータが飛ぶことも無いだろうしバックアップも不要だろう設定しておりませんでした。
そんな中、公開しているファイルが消失する事故が発生し、バタバタとファイルの復旧する騒ぎが起きました。
この騒ぎで「可用性がいくら高いと言っても、EBSだけでは人為的なミスを含む事故には対応できない」ということに気づかされました。
一日一回バックアップを取ろうということになり、いくつか案を考えました。
- 前のサーバと同じように別のサーバに世代バックアップをとる
- 可用性は信用して、同じEBS上に世代バックアップをとる
- AWSの機能でEBSのスナップショットをとる
先輩サーバエンジニアのM氏に相談したところ
「AWS使ってるんだし、スナップショットでいいんじゃね。安いよ」
とのお言葉を頂いたので3案を採用することにしました。
最終的には、以下を実現するAWS CLIを使ったスクリプトを作り、cronで日時実行することにしました。
- 指定したvolume_idのスナップショットをとる
- 指定した世代数よりスナップショットの数が増えた場合、古いものを削除する
使ったAWS CLIのコマンド
-
aws ec2 describe-volumes –volume-ids ${VOLUME} –output json
-
aws ec2 create-snapshot –volume-id ${VOLUME} –description “${DESCRIPTION}”
-
aws ec2 describe-snapshots –filters Name=volume-id,Values=${VOLUME} –output json
-
aws ec2 delete-snapshot –snapshot-id ${SNAPSHOT}
AWS CLIのコマンドの結果はテキスト、テーブル、jsonのうち選択したもので返ります。今回はjsonで出力し、jqコマンドで必要な値を取り出すことにしました。
始めはテキストで値を取得していたのですが、スナップショットのdescriptionにスペースが入ったりだとか、階層構造を解釈するのが面倒だったりだとかでjsonの方がいいなと感じました。
出来上がったスクリプト
ebs_snapshot(zip)
ebs_snapchot.sh ボリュームid 世代数 コメント [AWS CLIのコンフィグ]
でスナップショットを一度取り、世代数以上のスナップショットを削除します。
(参考程度にご覧ください。もし、ご利用の際は自己責任にてのご利用をお願いいたします。Centos7で動作させましたが、お使いの環境によっては動作しない可能性がございます。jqコマンドの使える環境が必要です。)
AWSというと弊社のLMS Platonお手軽サービスパックでもAWSをプラットフォームとしたサービスを開始しました。AWSを使うことにより、さらに多くの受講者をサポートできるサービスが可能となりました。
オンプレより運用保守の手間はぐんと減るはずです、e-Learningを始めたいとお考えの方は是非検討ください。利用者数により、様々な価格帯でのサービスを提供しております。
ロゴスウェア
最新記事 by ロゴスウェア (全て見る)
- Amazon Linux(EC2)と PHPSTORM で Xdebug を行う - 2018年9月26日
- やらないことの合意 - 2018年6月27日
- 卒園アルバムとプロジェクトマネジメント - 2018年3月30日
Comments are closed.