3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CLI を使ってEC2の一覧を取得

Last updated at Posted at 2025-12-07

背景

なぜこの記事を書くのか?

AWS環境の管理をしていると、調査などのために一覧作成が必要なことがあります。
例えば、何らかの問題(脆弱性の発見など)が発生した際に、調査対象のリソース(EC2など)を抽出して一覧を作成する、といった場合などです。

普段からAWS CLI を使い慣れているなら問題ないのですが、
たまに(年に1、2回とか)しか使わない場合、使い方を忘れて毎回調べ直したりして、地味に労力を費やすことになっていました...。

そこで、自分自身の備忘の意味も含めて、先日利用したコマンドを、ざっくりとした解説とともに記載します。

結論

EC2の一覧取得コマンド

まず結論から・・・

aws ec2 describe-instances --region ap-northeast-1 \
--query "Reservations[].Instances[]" \
| jq -r \
'.[] | select(.LaunchTime >= "2025-12-01T00:00:00Z" or .State.Name == "running") | [ .InstanceId, .LaunchTime, "ap-northeast-1", .PublicIpAddress, .PrivateIpAddress, (.Tags[]? | select(.Key=="Name") | .Value // "-") ] | @tsv'

↑のコマンド(aws cli v2)で・・・

  • 以下のEC2の一覧を取得できます。
    • 東京リージョン
      かつ
    • LaunchTime(※)が2025年12月1日以降、または、現在実行中
       
  • また、出力形式は、以下の項目をタブ区切りで出力します。
    • LaunchTime
    • ap-northeast-1(べた書き文字列)
    • パブリックIP
    • プライベートIP
    • Name

※EC2のLaunchTimeは、EC2の最新の開始時刻と同じ時刻を指します。
初期と最新の起動時間を確認

解説

コマンドの構成

前半部分

前半部分が、AWS CLI の処理で、

aws ec2 describe-instances --region ap-northeast-1 \
--query "Reservations[].Instances[]"

後半部分

後半部分は、AWS CLI の結果を受け取った jq コマンドの処理になります。

| jq -r \
'.[] | select(.LaunchTime >= "2025-12-01T00:00:00Z" or .State.Name == "running") | [ .InstanceId, .LaunchTime, "ap-northeast-1", .PublicIpAddress, .PrivateIpAddress, (.Tags[]? | select(.Key=="Name") | .Value // "-") ] | @tsv'

説明

もう少し詳細を説明します。

describe-instances

aws ec2 describe-instances --region ap-northeast-1

東京リージョンを指定して、インスタンスの情報を出力する。

--query

--query "Reservations[].Instances[]"

出力結果から、Reservations配列の各要素を取得し、その中のInstances配列の各要素を取得する。

jq

| jq -r

AWS CLI の出力結果(JSON形式)を、パイプを通してjqコマンドへ渡す。

'.[] | 

jqコマンドへ渡った配列の各要素を取得し、パイプで次へ渡す。

select

select(.LaunchTime >= "2025-12-01T00:00:00Z" or .State.Name == "running") |
  • LaunchTimeが2025年12月1日以降、または、EC2が実行中のもののみを取得し、
    パイプで次へ渡す。
  • select は条件に一致するものだけを取り出すjqコマンドの機能です。

出力項目の絞り込み

[ .InstanceId, .LaunchTime, "ap-northeast-1", .PublicIpAddress, .PrivateIpAddress, (.Tags[]? | select(.Key=="Name") | .Value // "-") ]

出力対象の項目を以下に絞り込む。

  • .InstanceId
  • .LaunchTime
  • "ap-northeast-1"
    • " "で囲んで、べた書きの文字列として出力
  • .PublicIpAddress
  • .PrivateIpAddress
  • (.Tags[]? | select(.Key=="Name") | .Value // "-")
    • Tags のうち、Nameタグ(Key = Name のタグ)の Value を出力
    • 空の場合は - を出力

出力形式

| @tsv'

タブ区切りで出力する。

補足

  • 今回は、サーバー側のフィルタリング機能(filters)は利用せず、クライアント側でフィルタリングを行っています。
  • filters を使って LaunchTime の範囲指定をできるかどうか分からなかったので...
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?