[アップデート] Amazon EC2のステータスチェックにEBSボリュームへの到達性チェックが追加されました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
しばたです。
先日AWSより「Amazon EC2のステータスチェックにEBSボリュームへの到達性チェックを増やした」旨のアナウンスがありました。
こちら地味に便利な更新ですので本記事で解説したいと思います。
更新内容
更新内容自体は非常にシンプルです。
EC2インスタンス起動時のステータスチェックに従来の「システムステータス」と「インスタンスステータス」に加え「アタッチ済みのEBSステータスチェック」が増えました。
マネジメントコンソールでEC2インスタンスを見るとステータスチェック欄が従来のn/2からn/3になっていることが分かります。

さらに「ステータスとアラーム」タブにチェック結果とCloudWatchメトリクスのグラフも追加されました。

チェック対象のメトリクスはそれぞれ以下となります。
| チェック対象 | CloudWatchメトリクス |
|---|---|
| システムステータス | StatusCheckFailed_System |
| インスタンスステータス | StatusCheckFailed_Instance |
| [NEW!] アタッチ済みのEBSステータス | StatusCheckFailed_AttachedEBS |
また、AWS CLIのaws ec2 describe-instance-statusコマンドからもAttachedEbsStatusプロパティとして状態を取得できる様になっています。
# AttachedEbsStatus プロパティで EBSステータス を取得可能
$ aws ec2 describe-instance-status --instance-ids i-04de4299ab1e6a247
{
"InstanceStatuses": [
{
"AvailabilityZone": "ap-northeast-1a",
"InstanceId": "i-04de4299ab1e6a247",
"InstanceState": {
"Code": 16,
"Name": "running"
},
"InstanceStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
},
"SystemStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
},
"AttachedEbsStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
}
}
]
}
EBSボリュームへの到達性チェック
StatusCheckFailed_AttachedEBSメトリクス自体は去年の10月に追加されたものです。
上記ブログにある通り、当時はメトリクスは増えたもののEC2のステータスチェックに組み込まれておらず、EBSの監視をしたい場合は独自に行う必要がありました。
今回の更新でAWS側の標準に組み込まれた形となります。
注意点 : アタッチ済みのEBSステータスチェックができるのはNitroインスタンスのみ
注意点としてStatusCheckFailed_AttachedEBSメトリクスを取得できるのはNitroインスタンスのみとなります。
このため、非Nitro世代のインスタンスに対するステータスチェックは従来通り「システムステータス」と「インスタンスステータス」の2つのままです。

非Nitroインスタンス(t2.nano)のステータスチェックはn/2のまま

非Nitroインスタンスは StatusCheckFailed_AttachedEBS を取得できないので表示もされない
StatusCheckFailed メトリクスの扱い
続けて既存のStatusCheckFailedメトリクスの扱いについて検証していきます。
従来StatusCheckFailedメトリクスはStatusCheckFailed_SystemおよびStatusCheckFailed_Instanceのいずれかが失敗した際に失敗となるものでしたが、StatusCheckFailed_AttachedEBSがEC2のステータスチェックに組み込まれたことで変化したのでしょうか?
ドキュメントには
Reports whether the instance has passed all status checks in the last minute.
とあるだけで細かい点までは記載されていませんでした。
このため、AWS Fault Injection Simulator(FIS)でEBSボリュームのI/Oを止めて実際にどうなるか確認してみました。
FIS実験の手順自体は割愛しますが、EBSボリュームのI/Oを止めている間は下図の様にStatusCheckFailed_AttachedEBSの値が1[1]になりステータスチェックに失敗しました。

EBSステータスチェックに失敗した状態
I/Oを止めたEBSボリュームの状態はこんな感じです。

止めたEBSボリュームの状態
このEC2インスタンスの各種CloudWatchメトリクスから値の変化を確認すると下図の通りでした。

各種メトリクスの変化
結果としてはEBSボリュームのI/O停止中は赤色のStatusCheckFailed_AttachedEBSの値が1になるも青色のStatusCheckFailedの値は0のままでした。
StatusCheckFailedの仕様は従来通り「StatusCheckFailed_SystemおよびStatusCheckFailed_Instanceのいずれかが失敗した際に失敗する」まま変化ありませんでした。
最後に
以上となります。
地味に嬉しい更新だと思います。
くどい様ですがStatusCheckFailed_AttachedEBSメトリクスを取得できるのはNitroインスタンスのみですので、古い世代のインスタンスが混在する環境ではステータスチェックの表示も混在するのでそこはご注意ください。
EC2のコンソール画面だと平均値を取っているため値の上昇が勾配を持った形になってしまう... ↩︎






