EC2インスタンスで、意図的に「StatusCheckFailed_Instance」にし続ける方法

クラウド

EC2インスタンスで、「StatusCheckFailed_Instance」が発生し続ける状態を作りたいと思ったのですが、その方法がちょっと探しても見つからなかった(もしかして需要がない?やってることがおかしいかも?)ので、自分流のやり方を備忘録しときます。

経緯

EC2インスタンスが再起動しても「StatusCheckFailed_Instance」の状態が継続した場合というシナリオのテストをしたいと思っていたのですが、ググってもそれを実現する方法が見つかりませんでした。

なお、ChatGPT に聞くと、「AWS FIS を使用する方法があります」と返ってきましたが、たぶん現状では AWS FIS を使用しても「StatusCheckFailed_Instance」の状態にはならないと思われます。

実現したいこと

  • あらかじめ、CloudWatch Alarm で「StatusCheckFailed_Instance」のメトリクスを監視しており、アラームアクションとしてEC2インスタンスの再起動としている
  • 「StatusCheckFailed_Instance」になった際、EC2インスタンスを再起動するが、再起動後も継続して「StatusCheckFailed_Instance」となっている場合のシナリオをテストしたい

実施概要

前提

注意!!

ここで述べる方法を実行すると、対象のEC2インスタンスは2度と正常に再起動できなくなると思うので、不要なインスタンスを使用する、またはバックアップをとってから実行するようにしてください。

想定OS

Amazon Linux 2

「StatusCheckFailed_Instance」のアラームを起こす方法

前提として、「StatusCheckFailed_Instance」のアラームを起こす方法として、以下のサイトを参考にして、NICを無効にする方法を使用します。

[小ネタ]StatusCheckFailedのテスト方法(Windows、Linux) | DevelopersIO
EC2インスタンスのステータスチェックでのテスト方法を纏めてみました。 StatusCheckFailed EC2インスタンスのステータスでは、AWSシステム側の障害やOS側の一部の障害を起点にアクション(復旧、再起動) …

EC2インスタンスで以下のコマンドを実行すると、疎通不可となり、「StatusCheckFailed_Instance」のアラーム条件が成立します。

$ sudo ifdown eth0

概要

概要としては、いたってシンプルですが、OS起動直後に上記の sudo ifdown eth0 を実行させるようにします。(Windowsでいうとスタートアップに登録するイメージです。)

実施手順

1. EC2インスタンスの起動/接続

  1. テスト対象のEC2インスタンスを起動する(上述の通り、2度と正常に再起動できなくなってもよいものという前提)
  2. SSH で接続する

2.起動直後実行のスクリプトを登録

起動時実行方法については、下記のサイトを参考にさせてもらいました。

Systemdを使ってEC2インスタンス起動時にスクリプト実行 - LayerX Research
#AWS 環境 Amazon Linux 2 /etc/systemd/system配下に.serviceファイルを作成 code:/etc/systemd/system/sample.servise Unit Description = sample daemon Service User=root ExecStar...
  1. サービスの作成
$ sudo vi /etc/systemd/system/test.service

test.service の中身は以下の内容にして保存します。

[Unit]
Description = test daemon
After=local-fs.target

[Service]
User=root
ExecStart = /opt/test.sh
RemainAfterExit=yes
Type = oneshot

[Install]
WantedBy = multi-user.target
  1. NIC無効スクリプトの作成
$ sudo vi /opt/test.sh

test.sh の中身は以下の内容にして保存します。

#!/bin/bash

sudo ifdown eth0
  1. スクリプトを実行可能なようにする
$ sudo chmod 755 /opt/test.sh
  1. サービス登録する
# serviceとして認識されたかどうかチェック
$ sudo systemctl list-unit-files --type=service | grep test

# 自動起動onに設定
$ sudo systemctl enable test

# daemonを更新
$ sudo systemctl daemon-reload

# !!注意!!サービス開始。これを実行すると、NIC無効状態が開始します
$ sudo systemctl start test.service

3.確認

少し待つと、以下のような感じで「StatusCheckFailed_Instance」アラームが発生します。

コメント

タイトルとURLをコピーしました