describe-instance-statusでInstanceStatusesが空配列になる

  • AWS
  • EC2
  • CLI

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何が起きたか

インスタンスIDを指定して以下を実行した。

ターミナル
aws ec2 describe-instance-status --instance-ids i-0123456789abcdef0

結果はこう。

{
"InstanceStatuses": []
}

インスタンスIDは合っているし、リージョンも間違っていない。なのに空配列。

原因

describe-instance-status はデフォルトで running状態のインスタンスしか返さない 仕様だった。AWS公式ドキュメントにもそう書いてある。

Describes the status of the specified instances or all of your instances. By default, only running instances are described, unless you specifically indicate to return the status of all instances.

つまり対象のインスタンスが stopped や stopping、terminated の状態だと、IDが正しくても InstanceStatuses は空になる。

AWS SDK for JavaScript側のリポジトリでも同じ挙動の報告があった。停止中インスタンスを含めてリクエストしても、停止中の分だけ結果に出てこないというもの。挙動としては昔から変わっていないらしい。

対処

--include-all-instances を付けると停止中・終了済みも含めて返ってくる。

ターミナル
aws ec2 describe-instance-status --instance-ids i-0123456789abcdef0 --include-all-instances

これで InstanceState が stopped の場合は SystemStatus / InstanceStatus が not-applicable として返ってくる。ステータスチェック自体は動いていないインスタンスなので「該当なし」という扱いになる、ということだと理解した。

切り分けの順番

空配列になったときに疑う順番は以下だと思う。

  1. インスタンスが running 以外の状態になっていないか(--include-all-instances を付けて再実行)
  2. リージョンが合っているか(デフォルトリージョンと実際のインスタンスのリージョンがズレていないか)
  3. インスタンスIDそのものが正しいか、権限で見えていないだけではないか

まず1を疑うのが早い。describe-instances で状態を先に見ておくと切り分けが早い。

ターミナル
aws ec2 describe-instances --instance-ids i-0123456789abcdef0 --query 'Reservations[].Instances[].State'