TECH

ついに公開された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 リファレンスにありますので、ぜひご覧ください。

この記事を書いた人

中津川 篤司

株式会社MOONGIFT 代表取締役。CloudGarage、ニフクラ mobile backend、hifive エバンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。2004年、まだ情報が少なかったオープンソースソフトの技術ブログ『MOONGIFT』を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶエバンジェリスト業「DevRel」活動をスタートした。 Twitter:@goofmint | GitHub:@goofmint | Facebook: goofmint

この記事のタグ

オススメの記事

ページトップへ