こんにちは、井下です。
前回の鷲尾のブログに引き続いて、AWS SDK for Rubyを利用して、AWSの操作を行ってみます。
AWSへの操作という点では、AWS CLIと同じなのですが、SDKの場合は好きな言語で操作を行える点が魅力ですね。
なお、今回利用するAWS SDK for Rubyはv2です。導入方法・利用方法は最後に補足として説明しています。
さて、今回のテーマはタイトル通り、インスタンスに関連づいていないセキュリティグループの削除ですが、セキュリティグループはいくつ作っても課金対象ではありません。
そのセキュリティグループをわざわざSDKで削除させようとしているのは、セキュリティグループが意図せず増える土壌があるからです。
まず、EC2インスタンスを新規作成するとき、デフォルトの設定ではセキュリティグループもそのインスタンス用に新規作成・関連づけしてくれるようになっています。
ただし、EC2インスタンスを削除するときには、関連づいたセキュリティグループを削除してくれません。恐らくはセキュリティグループの仕様として、セキュリティグループ1つで複数のEC2インスタンスと関連づけが可能なためですね。
つまり、"とりあえず使える環境が欲しい"とEC2インスタンスをデフォルト設定で作成・削除を繰り返すと、使われないセキュリティグループがどんどん増えていきます。
また、セキュリティグループの一覧画面からは、EC2インスタンスに関連づいているかが見えないため(EC2インスタンス側からは、どのセキュリティグループが関連づいているかが見えます)、不要なセキュリティグループの削除には手間がかかってしまいます。
下の画像は私個人のAWSコンソールですが、EC2インスタンス4つに対し、セキュリティグループは19個もあります。15個は使われてない&今後使われることもないセキュリティグループです…。
前置きが長くなりましたが、実際にAWS SDK for Rubyを使ってインスタンスに関連づいていないセキュリティグループを削除してみます。
コードは以下のようになりました。
2015年9月16日水曜日
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 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での動作確認が出来ましたら、また報告します!
以上です。
登録:
投稿 (Atom)