EC2 の「強制的に停止 (Forcefully Stop)」操作を紹介します
TL;DR
- EC2が停止中(stopping)のままで一向に止まらない、なんてことがまれにあります
- そんなときのために、強制停止オプション(
--force
)があります - 強制停止だけに注意点もあります
Yes, Forcefully Stop !
様々な理由で、EC2 が「 stopping
」のまま止まらなくなることがあります。
マネジメントコンソールから「アクション」>「インスタンスの状態」>「停止」を選択し、表示されたダイアログで「停止する」をクリック。通常なら数分もすれば再起動処理が完了し状態が running
にかわるところが、何十分待ってもいっこうに stopped
にならない。そんな経験はないでしょうか。
実は EC2 インスタンスの停止( stop )コマンドには、「強制的に停止 (Forcefully Stop)」機能があります。 が、その操作方法がちょっと分かりにくいところがあるので、この場でご紹介します。
なお AWS 公式のドキュメントとしては、下記がありますのでこちらも併せてご参照ください。
インスタンスの停止と起動 - Amazon Elastic Compute Cloud
インスタンスの停止に関するトラブルシューティング - Amazon Elastic Compute Cloud
操作方法
順にご説明します。がその前に。
本当に強制停止が必要ですか?
EC2 には、該当インスタンスのコンソール画面をスクリーンショットの形で参照したり、コンソールログを取得したりする機能があります。
止まっているようにみえて、何かしらの処理が動いていたりするかも知れません。この操作には後述するリスクがありますので、十分待って、「もうこれしかない」という場面でお使いになることをお勧めします。
…よろしいでしょうか? それではご説明します。
マネジメントコンソールの場合
まず、 stopping 状態のままになってしまった EC2 をマネジメントコンソールで選択します。 その状態で「停止 (Stop)」を選択してください。
停止中 (stopping) 状態の EC2 に対して再度停止を実行しようとすると、ダイアログが変化し「強制的に停止」する旨の文言になります。
このまま「強制的に停止」をクリックすれば、その旨実行されます。
AWS CLI の場合
AWS CLIから実行する場合はもっと簡単です。 --force
オプションを突けるだけです。
例えばこんな感じになります(公式ドキュメントより):
aws ec2 stop-instances \ --instance-ids i-0123ab456c789d01e \ --force
その後について
実は「強制的に停止」の操作をしたからといって、即座に stop するか。。。というと、実はそこまで「強制」ではありません。
そもそも、 stopping の状態のまま何十分も止まらないという状態そのものが 異常 です。AWS のインフラに何らかのトラブルが発生している/していたのかもしれません。 それでも経験上、長くとも小一時間程度もすれば停止することがほとんどです。
その時間が待てない、ということであれば、公式ドキュメントにも書かれているように、事前に取得してあるバックアップ(スナップショット)からの復旧を行うことをご検討ください。復旧手段としては、これが最も確実な方法となります。
注意点
強制終了というだけあって、ノーリスクというわけではありません。そこはご注意ください。
いうなれば、オンプレサーバ機の電源ボタンを長押しするに等しい操作1が AWS 内部で行われることになります。 ちょっと AWS CLI の該当オプションのヘルプを引用しますが、
--force | --no-force (boolean) Forces the instances to stop. The instances do not have an opportu- nity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair proce- dures. This option is not recommended for Windows instances. Default: false
要はファイルシステムのキャッシュやメタデータを書き出す操作が省略されるため、ファイルシステムへダメージがあるかも知れないということになります。
ただし「強制的な停止」が必要になった時点で、すでに OS が正常に動作していない状態だといえます。そこは残念ながら、覚悟するしかないと(個人的には)考えます。
まとめ
EC2 の「強制的な停止」操作についてご説明しました。 先日の AWS 障害のような大規模障害のときのみならず、日常的にも AWS ホストは障害を起こします(機械なので当たり前です)。そういった場合に、通常の動作では EC2 をシャットダウン出来なくなることもあります。
そういった場面にであうことも少ないかも知れませんが、もしもの時のために、「こういったことも出来る」ということだけご認識おき頂けますと幸いです。
おまけ
この記事を書くために「長時間 stopping のままである EC2」を用意しなくてはならなかったんですが、 試してみたところ「カーネルパニック」させることで近い状態にできました。 Linux カーネルにパニックを起こさせるためには、以下の 3 行を実行すれば可能です。
言うまでもないですが、この操作を行えば OS は完全に停止し再起動するしかなくなります。 実行は自己責任で行ってください
$ sudo -s # echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger
なお、その際のスクリーンショットがこちらです。
ご参考までに。
脚注
- クラウドネイティブの世代には通じない例えでしょうか。。。 ↩