直径1.5メートル

ひよっこエンジニアのちょっとしたメモ。主に備忘録。

【Ruby】EC2のインスタンスが取得できなくてはまったお話

AWS SDKを使ってAWSのEC2のインスタンス名を取得しようとしたものの、そもそもEC2のインスタンス一覧を取得すること自体できていなくてはまったお話。
下記ドキュメントを参考にコンソール上でお試し。
Class: AWS::EC2 — AWS SDK for Ruby - Amazon.com

S3の場合

> s3 = AWS::S3.new( : access_key_id => ACCESS_KEY_ID,
           : secret_access_key => SECRET_ACCESS_KEY)
=> <AWS::S3>
> s3.buckets.to_a
=> [#<AWS::S3::Bucket:BUCKET1>, #<AWS::S3::Bucket:BUCKET2>, …]

とするとS3上にあるバケット一覧が取得できる。(to_aメソッドで配列表示)
「いける…!」と思ったので、EC2でも同じようにしてインスタンス一覧を取得。
しようとしたものの、to_aメソッドを付けて見てみると、返ってくるのは空の配列でした。残念。

> ec2 = AWS::EC2.new( : access_key_id => ACCESS_KEY_ID,
             : secret_access_key => SECRET_ACCESS_KEY)
=> <AWS::EC2>
> ec2.instances.to_a
=> [ ]

ここではまりにはまって途方にくれていたところ、こんな記事を見つけました。
Rubyからaws-sdkを使ってEC2のインスタンスとEBSのボリューム一覧を取得する
よくよく見るとアクセスキーIDとシークレットキーID以外にリージョンも指定している…?
ということで、早速追加してみたところ、ちゃんとインスタンス一覧が取得できました。

> ec2 = AWS::EC2.new( : access_key_id => ACCESS_KEY_ID,
             : secret_access_key => SECRET_ACCESS_KEY,
                : region => REGION )
=> <AWS::EC2>
> ec2.instances.to_a
=> [ <AWS::EC2::Instance id:INSTANCE-ID1>, <AWS::EC2::Instance id:INSTANCE-ID2>,… ]