Auto Scalingが設定してあるインスタンスで深刻な不具合が発生すると、設定によっては、調査中に勝手にインスタンスがTerminateされてしまうことがあります。
これを回避する方法のメモ。乱文。
正しいやり方かはわからないけれど、現状のインスタンス規模なら適当。
前提
インスタンス数: 2台
Auto Scaling設定あり(=重篤な不具合を検知すると自動で代替インスタンスが立ち上がる)
インスタンスのスタンバイ状態を活用する
- インスタンスの内部をいじる場合は、まずインスタンスを「スタンバイ状態」にしておきます。
スタンバイ状態にすれば、ロードバランサーがアクセス異常を検知しなくなるので、好きなだけゆっくりと調査ができます。- Auto Scaling > [インスタンス]タブ
- 対象のインスタンスを選択し、 [操作] > [スタンバイに設定]
- ※スタンバイ状態にすると、ロードバランサーはそのインスタンスにリクエストを投げなくなります(=インスタンスとしては稼働しているが、いないものとして扱われる)。
- このとき、代替インスタンスを自動で立ち上げるかを選択できます。
- 立ててもいいですが、調査対応後の動作確認をする際に、当該インスタンス以外をすべてスタンバイに切り替えるので、可能な限り立ち上げない方が良いかもしれません。
- ※スタンバイ状態に切り変えると、Auto Scalingの「希望インスタンス数」の値は自動で変動し、意図しないインスタンスの増減を防止します。
- 調査後、問題なさそうになったら、スタンバイ状態のインスタンスを「実行中」に設定します。
- 当該インスタンスの「ライフサイクル」が「実行中」に切り替わるのを待ちます。
- その後、調査対象のインスタンス以外のインスタンスを「スタンバイ」に設定し、動作検証を行いたいインスタンスのみがアクセスの対象となるようにします。
- 動作確認します。
- 問題なく稼働するようであれば、インスタンスのイメージを取得して保存します。
- 適当なインスタンス数になるよう調整したりなんだりします。
- インスタンスの希望台数を適性に設定し直し、不要なインスタンスを終了させていく。
- ※スタンバイ状態にしたままインスタンスがTerminateされると、Auto Scalingの[インスタンス]タブにゾンビ項目みたいに残ったりする?かもしれない。多分インスタンスが終了しても即座に紐付けが消失しないせい。
(インスタンス一覧から消えればさすがに反映されると思われる)
CloudWatchのログを見る
CloudWatchにログを吐き出す設定をしていれば、ログが利用できるはずです。
- CloudWatch > 左側メニュー[ロググループ]
- ドメイン名などで検索をかけ、表示するログを絞ります。
- ログを開くと、インスタンスごとにファイルがわかれているので、問題が生じているインスタンスのIDで検索をかけてログファイルを特定します。
- ログを見ます。
- ログの最下部にあるpauseを押せば、ログの自動更新を一時停止できます。
- 時間を絞って表示することもできてまあまあ便利。
インスタンスのログを見る
Apache : /var/log/httpd/error_log
とか。
nginx : /var/log/nginx/error_log
とか。