Help us understand the problem. What is going on with this article?

【AWS】「InstanceStateとInstanceStatusは違う」という紛らわしいお話【EC2】

1. はじめに

タイトルだけで完結してしまっているような気もしますが、
「そうなんだ!」と思った方は少しスクロールしていただけると幸いです。

2. とりあえず取得してみる

早速describe-instance-statusを叩いてみましょう。
と言いつつ、自分はリファレンスの実行例をコピペしましたが。~

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:runningInstanceStatus:okの他にどのような値があるのか、公式から引用しました。

1. InstanceState

稼働状況と考えるのがよさそうです。

Valid Values: pending | running | shutting-down | terminated | stopping | stopped

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/APIReference/API_InstanceState.html

2. InstanceStatus

ざっくりと言うと、問題の有無ということでしょうか。

Valid Values: ok | impaired | insufficient-data | not-applicable | initializing

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/APIReference/API_InstanceStatusSummary.html

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関数を作成する際にこのあたりを詳しく調べたのですが、
だいぶ前のことなので割と忘れてしまっている部分もありました。
ナレッジはすぐに形にしないといけませんね。。。

ogimm
駆け出しインフラエンジニア。 インフラ"寄り"みたいなところを目指している。
https://www.youracclaim.com/users/yuma-ogihara/badges
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away