こんにちは。もぐめっとです。
旅に出るとこのI love ****シリーズのシャツを買うのが割と好きです。
最近、久々にAWS触ったらまるっとデータをふっとばしてしまったので戒めのために原因と対策を記しておこうと思います。
この記事は本番環境でやらかしちゃった人 Advent Calendar2021の3日目の記事になります。
なぜデータが吹っ飛んだのか
原因としては2点あります。それは無知と慢心です。
経緯として最近引き継ぎをうけた某スタートアップが作成したサービスを改修しようとしていたところから始まります。(サービスとしては既に停止済み)
最初にインスタンスを止めてインスタンスサイズを変えようとしたのですが、あろうことか、「インスタンスの終了」を選択してしまいました。
実はEC2には停止と終了の2つの言葉があり、シャットダウンだけだと停止を選ばないといけないのです。
どちらも一緒や!!とおもったら全然違う。
そして次が慢心につながるのですが、インスタンスの終了を選んだ場合は当然警告としてデータ消えるけどいいの?って聞かれるんですけど、このときの私の心情として、
「なんで停止するのにデータ消えるんだ・・・?まぁでもEC2のインスタンスの領域のことだろうし、普通アプリで使うEBSは別に用意するだろうからインスタンス消えても大丈夫っしょー」
という軽い気持ちがありました。
そして、終了後気づいてしまいました。
EBSもスナップショットもなにもない
→復元不可\(^o^)/オワタ
対策
そんな無知と慢心からやらかしてしまったので、同じことを繰り返さないために対策を考えます。
やることはかんたんです。第一にバックアップの確認、第2にバックアップ、3、4もバックアップで最後に消さないようにするです。
バックアップの確認
弄る前に直ぐに確認しましょう。
EBSあるのか、スナップショットあるのか、S3に保存してあるのか、、
とにかく確認です。
あったら気持ち安心はしますが、最新じゃない可能性もあるのでどちらにせよバックアップをはじめます。
すでにバックアップがある場合はバックアップの手法を揃えておくといいと思います。
DBのバックアップを取る
まずはDBです。大切です。
RDSでしたら備わってる機能を使うでもいいですし、EC2にDBが乗っかっているだけでしたらsshしてダンプをとりましょう。
mysqlでしたらmysqldumpを使うといいと思います。
アプリケーションのバックアップも取る
mysql、nginxなどのアプリケーション側の各種構成ファイルもバックアップをとっておきましょう。
とりあえず/etcをバックアップしておけば間違いなさそう。
スナップショットを取る
最後に念の為にインスタンスのスナップショットもとっておきましょう!!
推奨としてはインスタンスを停止してからのほうがいいですが、怖いので停止前と停止後二個とっときましょう!!
※追記
Lifecycle ManagerでEBSのバックアップをしたり、AWS Backupを使うことでいい感じにAMIのバックアップをとってくれたりもできるようです!すごい!
インスタンスを作る際の設定を変える
そもそもの対策として、EC2を作る際に2点ほど対策をいれておきましょう。
EC2のストレージを作る際にボリュームを削除しないようにチェックを外しておきましょう。
ただしこれらの設定はちゃんとインフラの再現性がいつでもすぐできるようになり、環境が整ってきたらデフォルトの設定でも問題ないかとはおもいます。
※追記
EBSの消し忘れによる課金も発生する可能性もあるので、環境が整ったらデフォルト通り削除するようにしておきましょう!
まとめ
スタートアップだとお金がないためEC2を酷使する構成になっていたり、バックアップがないことが多々あります。
当たり前を当たり前と思わず、ちゃんと確認しながらオペレーションをしていく大事さを知ることができました。
バックアップは忘れずに取りましょう!!
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffchaといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。