AWS CLIのdescribe-instancesの使い方を完全ガイド!初心者向けにfilter・query・tagも解説
生徒
「AWS CLIでEC2の情報を取得したいんですが、どうすればいいですか?」
先生
「それならdescribe-instancesコマンドを使うといいですよ。インスタンス情報の取得にとても便利です。」
生徒
「インスタンス名やタグで絞り込むこともできますか?」
先生
「もちろん。--filtersや--queryオプションを使えば、柔軟に絞り込みできますよ。順を追って解説していきましょう。」
1. describe-instancesとは?
aws ec2 describe-instancesは、AWS CLIでEC2インスタンスの情報を取得するための基本コマンドです。
このコマンドを使うことで、インスタンスID、パブリックIP、タグ、ステータスなど、さまざまな情報を得ることができます。
aws ec2 describe-instances
このまま実行すると、全リージョンの全インスタンス情報が大量に表示されます。 実務では、特定のインスタンスや条件に絞って使うことが一般的です。
2. filterオプションで条件を絞り込む
--filtersオプションを使うと、特定の条件に一致するインスタンスだけを取得できます。
例えば、タグに基づいたフィルタや、インスタンスタイプによる絞り込みが可能です。
aws ec2 describe-instances \
--filters "Name=instance-type,Values=t2.micro"
タグによるフィルタの例も見てみましょう。
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=WebServer"
このように、フィルタはNameとValuesのセットで指定し、複数指定も可能です。
3. queryオプションで出力を整形する
出力されるJSONは情報が多く、読みづらい場合があります。--queryオプションを使えば、表示項目を絞って見やすく整形できます。
aws ec2 describe-instances \
--query "Reservations[*].Instances[*].InstanceId"
上記の例では、インスタンスIDだけをリストで取得できます。 他にもパブリックIPやステータスなども以下のように取得可能です。
aws ec2 describe-instances \
--query "Reservations[*].Instances[*].[InstanceId, PublicIpAddress, State.Name]"
また、--output textオプションを併用すると、表形式で見やすく表示できます。
4. tagを使った柔軟なインスタンス管理
EC2インスタンスにはタグ(key-value形式)を設定できます。 たとえばNameやEnv(環境名)などをタグにすることで、インスタンスの識別や検索が容易になります。
以下のようにタグ付きインスタンスのみを抽出できます:
aws ec2 describe-instances \
--filters "Name=tag:Env,Values=prod"
実際の現場では、タグによるリソース管理は非常に重要です。 大規模なAWS環境で混乱を避けるためにも、必ずタグを活用しましょう。
5. よくあるdescribe-instancesの活用パターン
■特定のステータスのインスタンスだけを取得
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running"
■複数の条件をANDで絞り込み
aws ec2 describe-instances \
--filters \
"Name=instance-state-name,Values=stopped" \
"Name=tag:Team,Values=DevOps"
■JSON形式ではなくテキスト形式で出力
aws ec2 describe-instances --output text
このように、describe-instancesは柔軟に出力形式や抽出条件を設定できるため、スクリプトや自動化処理にも活用されます。
6. 実行結果のフォーマットを切り替える(--output)
AWS CLIのデフォルト出力はJSON形式ですが、用途に合わせて形式を変更することができます。--outputオプションを活用することで、人間が見やすい形式や、他のプログラムで処理しやすい形式に切り替えられます。
主に使われるのは以下の3種類です。
- json(デフォルト): すべての情報を構造化して出力します。詳細な確認に最適です。
- table: 枠線付きの表形式で表示します。パッと見て状況を把握したい時に便利です。
- text: タブ区切りのテキストで出力します。Linuxコマンドの
grepやawkと組み合わせて処理する際に役立ちます。
プログラミング未経験の方でも分かりやすいように、Javaのプログラムで「出力形式を切り替えるスイッチ」のようなイメージを例えてみましょう。
public class OutputFormatExample {
public static void main(String[] args) {
String format = "table"; // ここを json や text に変えるイメージ
if (format.equals("table")) {
System.out.println("+----------------+-----------+");
System.out.println("| InstanceID | State |");
System.out.println("+----------------+-----------+");
System.out.println("| i-0123456789 | running |");
System.out.println("+----------------+-----------+");
} else {
System.out.println("{ \"InstanceId\": \"i-0123456789\", \"State\": \"running\" }");
}
}
}
+----------------+-----------+
| InstanceID | State |
+----------------+-----------+
| i-0123456789 | running |
+----------------+-----------+
7. インスタンスのプライベートIPアドレスを特定する
実務では、踏み台サーバーから各インスタンスへ接続するために「プライベートIPアドレス」を調べたい場面がよくあります。describe-instancesを使えば、特定のタグ(Nameタグなど)を持つインスタンスのIPアドレスだけを素早く抜き出すことができます。
以下のコマンドは、「Nameタグが WebServer であるインスタンス」の「プライベートIPアドレス」だけを表示する例です。
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=WebServer" \
--query "Reservations[*].Instances[*].PrivateIpAddress" \
--output text
10.0.1.50
このように、--filtersで対象を絞り込み、--queryで必要な項目(PrivateIpAddress)だけを指定することで、画面をスクロールして探す手間が省けます。
8. エラーが出たときのチェックポイント
コマンドを実行しても、意図した結果が表示されなかったりエラーが出たりすることがあります。初心者が特につまずきやすいポイントを整理しました。
- リージョン設定の確認: インスタンスが存在するリージョンと、CLIの設定(Region)が一致しているか確認しましょう。
--region ap-northeast-1のように明示的に指定することもできます。 - 権限(IAM)の不足: 実行しているユーザーに「ec2:DescribeInstances」の権限が付与されている必要があります。
- 大文字・小文字の区別: フィルタの「Values」に指定する値は、大文字と小文字を区別します(例:running と Running は別物)。
もし何も表示されない場合は、まずフィルタを外して全件表示されるか試してみるのが解決の近道です。
# フィルタなしで全件のIDだけ表示して、疎通確認する例
aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --output text
i-0123456789abcdef0
i-0987654321fedcba0
正しく情報が表示されれば、AWS CLIの初期設定はバッチリです。これらのテクニックを組み合わせて、効率的なインフラ管理を目指しましょう。
まとめ
この記事では、AWS CLIのdescribe-instancesコマンドについて、基本的な使い方から実務で役立つ応用パターンまでを網羅的に解説しました。AWS環境をCLIベースで管理したい初心者の方にとって、describe-instancesはEC2の状況把握に欠かせない重要なコマンドです。
まず最初に、aws ec2 describe-instancesの基本的な使い方を紹介し、その後で--filtersを使ったインスタンスタイプやタグによる条件の絞り込み方法を解説しました。実際の業務では「Webサーバーだけを確認したい」「停止中のインスタンスを探したい」といったニーズが頻繁に出てきます。そのようなとき、フィルタオプションは非常に役立ちます。
また、--queryオプションによってJSON出力を整形することで、目的の情報だけを取得でき、視認性が大きく向上します。さらに--output textと併用すれば、CLIツールやスクリプトと連携しやすいテキスト形式に変換できるのも大きな利点です。
さらに、タグを活用したインスタンス管理も重要なポイントです。タグの活用によって、インスタンスの環境(本番、開発)やチーム別に分類でき、運用効率が向上します。これにより、大規模環境でもリソースの整理整頓がしやすくなり、インフラ管理が非常にスマートになります。
最後には、よく使われるパターンを紹介しました。describe-instancesの活用は、AWS CLIを使ったインフラ管理の第一歩であり、自動化やスクリプト化にもつながる重要な技術です。
以下に、本記事で紹介したコマンドの要点を再掲しておきます:
# すべてのインスタンスを表示
aws ec2 describe-instances
# 特定のインスタンスタイプに絞り込み
aws ec2 describe-instances \
--filters "Name=instance-type,Values=t2.micro"
# タグ Name=WebServer に一致するインスタンスを表示
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=WebServer"
# インスタンスIDだけを取得
aws ec2 describe-instances \
--query "Reservations[*].Instances[*].InstanceId"
# 状態・IPなどを取得
aws ec2 describe-instances \
--query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,State.Name]"
# 出力をテキスト形式にする
aws ec2 describe-instances --output text
# 特定のタグでフィルタ
aws ec2 describe-instances \
--filters "Name=tag:Env,Values=prod"
このように、describe-instancesは非常に多機能であり、AWS CLIを使いこなすうえでの要とも言えるコマンドです。初心者の方も、フィルターやクエリを少しずつ試しながら習得していきましょう。
生徒
「最初はdescribe-instancesって難しそうだと思ってたけど、実際にやってみたら、タグやクエリで結構簡単に絞り込めるんですね!」
先生
「そのとおり。最初はJSONが長くて戸惑うかもしれないけど、--queryや--filtersを使いこなせば、必要な情報だけをすぐに取り出せるようになります。」
生徒
「これでスクリプトとかに組み込んで、自動化にも活かせそうですね。」
先生
「まさにそれが狙いです。日常の運用で毎回手動で見るより、必要なインスタンス情報だけを抽出して、レポート化したり監視ツールに渡したりもできますよ。」
生徒
「タグ運用もちゃんとすれば、describe-instancesで効率よく状況確認ができそうです。次はこれを組み込んだバッチ処理とか挑戦してみたいです!」
先生
「いいですね。次のステップではjqとの連携や、cronを使った定期実行なども学んでいきましょう。」