鷲尾です。
現在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 Name | Region | Endpoint | Protocol |
---|---|---|---|
米国東部(バージニア北部)リージョン | us-east-1 | ec2.us-east-1.amazonaws.com | HTTP and HTTPS |
米国西部(オレゴンリージョン) | us-west-2 | ec2.us-west-2.amazonaws.com | HTTP and HTTPS |
米国西部(北カリフォルニア)リージョン | us-west-1 | ec2.us-west-1.amazonaws.com | HTTP and HTTPS |
欧州(アイルランド)リージョン | eu-west-1 | ec2.eu-west-1.amazonaws.com | HTTP and HTTPS |
アジアパシフィック(シンガポール)リージョン | ap-southeast-1 | ec2.ap-southeast-1.amazonaws.com | HTTP and HTTPS |
アジアパシフィック(シドニーリージョン) | ap-southeast-2 | ec2.ap-southeast-2.amazonaws.com | HTTP and HTTPS |
アジアパシフィック(東京)リージョン | ap-northeast-1 | ec2.ap-northeast-1.amazonaws.com | HTTP and HTTPS |
南米(サンパウロ)リージョン | sa-east-1 | ec2.sa-east-1.amazonaws.com | HTTP and HTTPS |
1.aws-sdkをインストールする
以下のようにGemコマンドを利用して、aws-sdkをインストールすることができます。
RubyでSDKを使用する場合は、非常に簡単に準備が出来てしまうのがいいですね。
なお、AWS SDK for Rubyには、"v1"と"v2"という2つのバージョンが存在します。本来はv2を使用する予定だったのですが、私の環境だとなぜかうまく動いてくれず、今回は泣く泣くv1を使用しています。そのため、今回は明示的にv1のバージョンを使用することを明記して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での動作確認が出来ましたら、また報告します!
※v2での動作確認が出来ましたら、また報告します!
以上です。
0 件のコメント:
コメントを投稿