1. はじめに
タイトルだけで完結してしまっているような気もしますが、
「そうなんだ!」と思った方は少しスクロールしていただけると幸いです。
2. とりあえず取得してみる
早速describe-instance-status
を叩いてみましょう。
~~と言いつつ、自分はリファレンスの実行例をコピペしましたが。~~~
$ aws ec2 describe-instance-status --instance-id i-1234567890abcdef0
{
"InstanceStatuses": [
{
"InstanceId": "i-1234567890abcdef0",
"InstanceState": {
"Code": 16,
"Name": "running"
},
"AvailabilityZone": "us-east-1d",
"SystemStatus": {
"Status": "ok",
"Details": [
{
"Status": "passed",
"Name": "reachability"
}
]
},
"InstanceStatus": {
"Status": "ok",
"Details": [
{
"Status": "passed",
"Name": "reachability"
}
]
}
}
]
}
InstanceStateとInstanceStatusが登場しますが、StateとStatusって一緒じゃないの?ってなりますよね。
辞書を引いてみると、どちらも「状態」と訳せるようです。
3. 原典にあたる
InstanceState:running
、InstanceStatus:ok
の他にどのような値があるのか、公式から引用しました。
1. InstanceState
稼働状況と考えるのがよさそうです。
Valid Values: pending | running | shutting-down | terminated | stopping | stopped
2. InstanceStatus
ざっくりと言うと、問題の有無ということでしょうか。
Valid Values: ok | impaired | insufficient-data | not-applicable | initializing
4. 使いどころ
例えば検証環境のインスタンスを夜間に停止し、翌朝に起動するというようなLambda関数(やシェルスクリプト)を作る場合は。。。
1. State
停止/起動を実行した後に確認し、結果に応じて待機したり再度実行したりという風に使えます。
2. Status
起動後に確認し、OKでなければ再起動するとかエラーを吐くという処理を実装しても良いかもしれません。
ただし、ec2 wait instance-status-ok
には注意が必要です。
→@netebakariさんよりコメントをいただきました。これの仕組みは自分で作らずCloudWatchにお願いしましょう。
5. ちなみに
「status vs state」論争に終止符を打つという記事がありました。論争になるほどなんですね。
少なくともInstance{State|Status}については、以下の記載がしっくりきます。
Status = 調子はどう?
State = 何をしているか?
6. おわりに
4. 使いどころで例に挙げたLambda関数を作成する際にこのあたりを詳しく調べたのですが、
だいぶ前のことなので割と忘れてしまっている部分もありました。
ナレッジはすぐに形にしないといけませんね。。。