ども、cloudpackかっぱ (@inokara) です。

メモ

うんちく

  • describe_instances メソッドの :filters を利用する
  • instance-state-code または instance-state-name にて絞り込む

ちなみに、以下は instance-state-codeinstance-state-name の比較。

instance-state-code instance-state-name
0 pending
16 running
32 shutting-down
48 terminated
64 stopping
80 stopped

コード

#!/usr/bin/env ruby

require 'aws-sdk'

ec2 = AWS::EC2.new(
  :access_key_id     => 'AKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  :secret_access_key => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  :ec2_endpoint      => 'ec2.ap-northeast-1.amazonaws.com',
).client

#  0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped)
p ec2.describe_instances(:filters => [{ 'name' => 'instance-state-code', 'values' => ['16'] }])
#  (pending | running | shutting-down | terminated | stopping | stopped).
p ec2.describe_instances(:filters => [{ 'name' => 'instance-state-name', 'values' => ['running'] }])

さらに…

ステータスが Running な状態なインスタンスを取得したい場合には以下のように…

#!/usr/bin/env ruby
(省略)
i = ec2.describe_instances(:filters => [{ 'name' => 'instance-state-name', 'values' => ['running'] }])
p i.reservation_set[0][:instances_set][0][:instance_id]

実行すると以下のようにインスタンス ID が出力されます。

i-xxxxxxxx

取り急ぎ

メモでした。
ちなみに、describe-instances からインスタンス ID を取り出すのってこんなに大変でしたっけ?

元記事はこちらです。
AWS SDK for Ruby でインスタンスのステータスを取得するメモ