【小ネタ】AWS CLIでEC2インスタンスのOS情報を取得してみた。

2022.04.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんばんは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

EC2インスタンスのOS情報、皆さんはどこで確認していますか?

勿論コンソール上からも確認は出来ますが、AWS CLIでも取得出来ます。

今回はその方法と気になったことについてまとめてみました。

いきなりまとめ

  • コマンドラインでインスタンスのOS情報を取得するには、SSMエージェントが対象のインスタンスに入っている必要がある
  • aws ssm describe-instance-informationというコマンドでOS情報を取得可能
    • 出力結果を見やすく整形したコマンドがこちら↓
      • aws ssm describe-instance-information --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName,PlatformVersion]' --output table
    • 取得出来るOSの情報は3つ
      • PlatformType:OSプラットフォームの種類
      • PlatformName:OSプラットフォームの名称
      • PlatformVersion:OSプラットフォームのバージョン
  • OSの種類がLinuxでもWindowsでも取得可能

はじめに

ある日、弊社社員に「インスタンスのOS情報も確かAWS CLIで取れますよ」と教えてもらい、EC2のAPIで取るのかな?と思いコマンドを調べていました。

aws ec2 describe-instancesの出力内容を見ても、OSに関連する情報はOSプラットフォームの種類が記載されるPlatformDetailsぐらい無さそう。。。バージョンも見たいなぁ。

最終的に辿り着いたのはAWS ナレッジセンターのこの質問です。

EC2 Linux インスタンスの OS プラットフォームまたはバージョンの確認

どうやらインスタンスのOS情報はEC2のAPIではなくSSMのAPIで、インスタンスにインストールされたSSMエージェント経由で取得するようですね。

前提条件

調査対象のインスタンスが下記条件を満たしている必要があります。

やってみよう

それではどのように取得出来るのかやってみましょう。

今回コマンドはCloudShellで実行しました。お手軽ですね。

まずはaws ssm describe-instance-information --output tableでどのような出力がされるのかを確認します。

[cloudshell-user@ip-10-0-158-73 ~]$ aws ssm describe-instance-information --output table
--------------------------------------------------------------------------
|                       DescribeInstanceInformation                      |
+------------------------------------------------------------------------+
||                        InstanceInformationList                       ||
|+-------------------+--------------------------------------------------+|
||  AgentVersion     |  3.1.1188.0                                      ||
||  ComputerName     |  ip-172-31-5-47.ap-northeast-1.compute.internal  ||
||  IPAddress        |  172.31.5.47                                     ||
||  InstanceId       |  i-03eabc1c930425994                             ||
||  IsLatestVersion  |  False                                           ||
||  LastPingDateTime |  2022-04-19T07:12:03.639000+00:00                ||
||  PingStatus       |  Online                                          ||
||  PlatformName     |  Amazon Linux                                    ||
||  PlatformType     |  Linux                                           ||
||  PlatformVersion  |  2                                               ||
||  ResourceType     |  EC2Instance                                     ||
||  SourceId         |  i-03eabc1c930425994                             ||
||  SourceType       |  AWS::EC2::Instance                              ||
|+-------------------+--------------------------------------------------+|

OSに関連する情報としては、PlatformName, PlatformType, PlatformVersionが取れていますね。

最初にご紹介したナレッジセンターの回答を参考に、--queryオプションを使用して出力結果を整形します。

実行するコマンドはこちら。

aws ssm describe-instance-information --output table --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName,PlatformVersion]'

[cloudshell-user@ip-10-0-158-73 ~]$ aws ssm describe-instance-information --output table --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName,PlatformVersion]'
-------------------------------------------------------
|             DescribeInstanceInformation             |
+----------------------+--------+----------------+----+
|  i-03eabc1c930425994 |  Linux |  Amazon Linux  |  2 |
+----------------------+--------+----------------+----+

左から順に「インスタンスID」、「OSプラットフォームの種類」、「OSプラットフォームの名称」、「OSプラットフォームのバージョン」が出力されています。

ちなみに--region ap-northeast-1といったオプションを付けることで特定のリージョンの結果を取得することも可能です。(ap-northeast-1部分は任意のリージョンに変更して下さい。)

Windowsインスタンスでも出来るの?

ナレッジセンターの質問内容には「EC2 Linux インスタンス」と書かれています。

SSMエージェント経由だからWindowsインスタンスでも出来そうなのにLinuxインスタンス限定なの?と気になったのでやってみました。

[cloudshell-user@ip-10-0-158-73 ~]$ aws ssm describe-instance-information --output table --query 'InstanceInformationList[*].[InstanceId,PlatformType,PlatformName,PlatformVersion]'
----------------------------------------------------------------------------------------------
|                                 DescribeInstanceInformation                                |
+----------------------+----------+--------------------------------------------+-------------+
|  i-01e7870c7bc11b377 |  Windows |  Microsoft Windows Server 2019 Datacenter  |  10.0.17763 |
+----------------------+----------+--------------------------------------------+-------------+

取れました!

最後に

コマンドラインでOSの情報が取得出来るのは便利ですね。コンソール上ではOSプラットフォームのバージョンまでは確認出来ないので助かりますね。

やはりAWS CLIのコマンドは知らないことが多いので調べていて面白いです。

小ネタでしたが、本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。