2015年9月11日金曜日

AWS SDK for Ruby を使って、インスタンスの一覧を取得してみる

こんにちは。
鷲尾です。

現在AWSからは様々な言語用のSDKが提供されていますが、今回はRuby用のSDK"AWS SDK for Ruby"を使って、AWS上のインスタンスの一覧を取得したいと思います。


それでは、はじめにプログラムを実行する準備からです。

1.必要なもの
RubyでAWSのインスタンス情報を取得する際に必要となるものは、以下の4つです。

・Rubyの実行環境
・AWS SDK for Ruby
・AWSアカウント(認証情報)
・リージョン情報(EC2)


※今回は実行環境としてRedHatを使用していますが、事前にRubyのプログラムを実行できる環境を作成しておいてください。
※AWSアカウント、及びIAMユーザは既に作成済みであることを前提としています。RubyでAWSにアクセスする際にはIAMユーザを作成時にのみ取得することが出来る認証情報(シークレットアクセスキー)を使用しますので、忘れずに保存してください。

なお、現在使用できるリージョンの一覧を以下に記載します。(2015年9月7日現在)


リージョン一覧(引用:http://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#ec2_region)
Region NameRegionEndpointProtocol
米国東部(バージニア北部)リージョンus-east-1ec2.us-east-1.amazonaws.comHTTP and HTTPS
米国西部(オレゴンリージョン)us-west-2ec2.us-west-2.amazonaws.comHTTP and HTTPS
米国西部(北カリフォルニア)リージョンus-west-1ec2.us-west-1.amazonaws.comHTTP and HTTPS
欧州(アイルランド)リージョンeu-west-1ec2.eu-west-1.amazonaws.comHTTP and HTTPS
アジアパシフィック(シンガポール)リージョンap-southeast-1ec2.ap-southeast-1.amazonaws.comHTTP and HTTPS
アジアパシフィック(シドニーリージョン)ap-southeast-2ec2.ap-southeast-2.amazonaws.comHTTP and HTTPS
アジアパシフィック(東京)リージョンap-northeast-1ec2.ap-northeast-1.amazonaws.comHTTP and HTTPS
南米(サンパウロ)リージョンsa-east-1ec2.sa-east-1.amazonaws.comHTTP and HTTPS



1.aws-sdkをインストールする
以下のようにGemコマンドを利用して、aws-sdkをインストールすることができます。
RubyでSDKを使用する場合は、非常に簡単に準備が出来てしまうのがいいですね。

なお、AWS SDK for Rubyには、"v1"と"v2"という2つのバージョンが存在します。本来はv2を使用する予定だったのですが、私の環境だとなぜかうまく動いてくれず、今回は泣く泣くv1を使用しています。そのため、今回は明示的にv1のバージョンを使用することを明記してSDKのインストールを行います。


gem install aws-sdk -v "~>1"


これでインストールは完了です。


2.Rubyのプログラムを作成する
では実際にインスタンスの一覧を取得するRubyのプログラムを作成します。
今回はインスタンスの一覧と同時に、"インスタンスのID"、"インスタンスのステータス"、"インスタンスのIPアドレス"の3つを取得してみます。


◆ aws_instance_list.rb
プログラムはこちらからダウンロード出来ます。

require 'aws-sdk-v1'

AWS.config(:access_key_id => 'アクセスキー',
           :secret_access_key => 'シークレットアクセスキー',
           :ec2_endpoint => 'リージョン')

ec2 = AWS::EC2.new
puts '#instance-id    status    ip-address'

ec2.instances.each{|instance|
  puts "#{instance.id}\t#{instance.status}\t  #{instance.ip_address}"
}



なお、処理の流れとしては、"aws-sdk"を使用するためにrequireで外部ライブラリを宣言しておき、AWS.configで認証情報を設定した後に、その認証情報をもとにインスタンス情報を取得してくるという流れになっています。


3.実行
それでは気を取り直して、作成したRubyプログラムを実行してみましょう。

プログラム修正後、プログラムを実行します。

ruby aws_instance_list.rb


実行結果:

[ec2-user@ip-172-31-40-77 ~]$ ruby aws_instance_list.rb
#instance-id    status    ip-address
i-9*******      stopped
i-a*******      stopped
i-7*******      stopped
i-5*******      running   52.**.***.**
i-e*******      running   52.**.***.**
i-5*******      stopped

このように、インスタンスID、インスタンスのステータス、インスタンスのIPアドレスを取得することが出来ました。
AWSでは基本的に実行しているインスタンスにしかグローバルIPアドレスは付与されないため、現在ステータスが"running(実行中)"のもの以外は、割り当てられていないために、表示されていません(※)。

※Elastic IPが割り振られているインスタンスであれば、ステータスが"stopped"でも、グローバルIPアドレスが表示されます。



以上、AWS SDK for Rubyを使用してAWSのインスタンス一覧を取得してくるまでの流れになります。

なお、取得できるインスタンスの情報として、今回の情報以外にも様々な情報を取得することが出来ます。

・使用できるメソッド一覧
http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Instance.html#hypervisor-instance_method


使用する際は、ぜひ参考にしてみてください。

※v2での動作確認が出来ましたら、また報告します!


以上です。

0 件のコメント:

コメントを投稿