Ruby

ついに公開されたAPIをRubyから利用する(インスタンス一覧を取得)

TECH
中津川 篤司

CloudGarageのインスタンス操作などを自動化できるAPIがついに公開されました。これでインスタンスの立ち上げや停止を自動化できるようになります。 そこで今回はRubyを使ってAPI操作を行う方法を解説します。インスタンスを一覧で取得します。 必要なソフトウェア、ライブラリ 今回必要なソフトウェア、ライブラリは以下の通りです。 Ruby APIキーを取得する まずはCloudGarageの管理画面にてAPIキーを取得します。管理画面の右上にあるメニューをクリックして、アカウント情報確認/変更を選択します。 一度パスワードを入力する必要があります。 そして一番下にあるAPI Key管理にてAPI Keyを発行します。私はすでに発行済みなので再発行になっていますが、最初はAPIキーがないはずです。Client ID(クライアントID)とClient Secret(クライアントシークレット)の二つで認証します。重要なキーなので漏洩したりしないよう注意してください。 トークンを取得する 次にAPIを利用するためのトークンを取得する必要があります。コードは次のようになります。 POST /tokens リクエストして、その結果として得られるJSONの token.id の値がトークンになります。 require 'openssl' require 'net/http' require 'uri' # JSON加工用に必要 require 'json' # 設定 config = JSON.parse(open('../config.json').read) base_url = 'https://api.cloudgarage.jp' # トークンを取得 def getToken(base_url, config) uri = URI.parse("#{base_url}/tokens") https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_PEER req = Net::HTTP::Post.new(uri.request_uri) req["Content-Type"] = "application/json" req.body = { client_id: config['clientId'], client_secret: config['clientSecret'] }.to_json res = https.request(req) JSON.parse(res.body)['token']['id'] end インスタンス一覧を取得する トークンを取得したら、それを使ってAPIにアクセスできます。次にインスタンス一覧を取得します。これは GET /servers になります。取得したJSONの servers 以下に配列で返ってきます。 # インスタンス一覧を取得 def getInstances(base_url, token) uri = URI.parse("#{base_url}/servers") get(uri, token, 'servers') end # GETリクエスト用 def get(uri, token, key) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_PEER req = Net::HTTP::Get.new(uri.request_uri) req["Content-Type"] = "application/json" req["X-Auth-Token"] = token res = https.request(req) JSON.parse(res.body)[key] end インスタンス詳細を取得する インスタンス一覧では詳細情報までは分かりません。そこでさらにインスタンス一覧で取得したIDを使って詳細情報を得ます。 GET /servers/{resourceId} で情報が得られます。 # インスタンス詳細を取得 def getInstance(base_url, token, instance_id) uri = URI.parse("#{base_url}/servers/#{instance_id}") get(uri, token, 'server_detail') end 出力する インスタンス詳細情報を出力すると以下のようになります。 { "id": "ebe...26a", "name": "open-lambda", "addresses": [ { "address": "192.168.0.20", "mac_address": "fa:16:3e:30:aa:aa" }, { "address": "203.000.000.000", "mac_address": "fa:16:3e:30:aa:aa" } ], "instance_status": "ACTIVE", "contract_id": 114581, "instance_created_time": "2018-12-02T01:45:18Z", "instance_updated_time": "2018-12-02T01:45:55Z", "security_rules": [ { "protocol": null, "direction": "ingress", "ether_type": "IPv4", "port_range_min": null, "port_range_max": null, "remote_ip_prefix": "0.0.0.0/0" } ], "os_image": { "id": "a6...57", "os_type": "Linux", "os_distro": "UBUNTU", "os_version": "18.04_64bit", "image_type": "Linux", "image_name": "Ubuntu-18.04-64bit" }, "instance_spec": { "cpu": 1, "memory": 2, "disk": 50 } } インスタンスのスペックをはじめとして、ネットワーク情報やセキュリティルールなども取得できます。 まとめ Rubyの場合は基本的な操作を行う上で追加のライブラリは必要ありません。HTTP POST/GETなどのメソッドはまとめてしまえば、より簡単にCloudGarageを操作できるようになります。ぜひお使いください! APIリファレンスはCloudGarage API リファレンスにありますので、ぜひご覧ください。

ページトップへ