TECH

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

TECH
中津川 篤司

CloudGarageのインスタンス操作などを自動化できるAPIがついに公開されました。これでインスタンスの立ち上げや停止を自動化できるようになります。

そこで今回はPythonを使ってAPI操作を行う方法を解説します。インスタンスを一覧で取得した後、インスタンスを停止させる操作を行います。

必要なソフトウェア、ライブラリ

今回必要なソフトウェア、ライブラリは以下の通りです。

  • Python
  • request

APIキーを取得する

まずはCloudGarageの管理画面にてAPIキーを取得します。管理画面の右上にあるメニューをクリックして、アカウント情報確認/変更を選択します。

一度パスワードを入力する必要があります。

そして一番下にあるAPI Key管理にてAPI Keyを発行します。私はすでに発行済みなので再発行になっていますが、最初はAPIキーがないはずです。Client ID(クライアントID)とClient Secret(クライアントシークレット)の二つで認証します。重要なキーなので漏洩したりしないよう注意してください。

トークンを取得する

次にAPIを利用するためのトークンを取得する必要があります。コードは次のようになります。 POST /tokens リクエストして、その結果として得られるJSONの token.id の値がトークンになります。

import requests
import json

config = json.load(open('./config.json', 'r'))

def getToken(base_url, config):
    response = requests.post(f"{base_url}/tokens",
        data=json.dumps({
            'client_id': config['clientId'],
            'client_secret': config['clientSecret'],
        }),
        headers={
            'Content-Type': 'application/json'
        }
    )
    return response.json()['token']['id']
base_url = 'https://api.cloudgarage.jp'
token = getToken(base_url, config)

インスタンス一覧を取得する

トークンを取得したら、それを使ってAPIにアクセスできます。次にインスタンス一覧を取得します。これは GET /servers になります。取得したJSONの servers 以下に配列で返ってきます。

def getInstances(base_url, token):
    response = requests.get(f"{base_url}/servers",
        headers={
            'X-Auth-Token': token,
            'Content-Type': 'application/json'
        }
    )
    return response.json()['servers']
servers = getInstances(base_url, token)

インスタンスを停止する

最後にインスタンスを停止させます。今回はインスタンス一覧の最初のインスタンスを止めてみます。これは POST /servers/operate になります。operateとして今回はSTOP(停止)を指定します。他にもSTART(起動)、RESTART(再起動)、RESTART_HARD(強制再起動)があります。

def stopInstance(base_url, token, id):
    response = requests.post(f"{base_url}/servers/operate",
        data=json.dumps({
            'operate': 'STOP',
            'servers': [
                id
            ]
        }),
        headers={
            'X-Auth-Token': token,
            'Content-Type': 'application/json'
        }
    )
    return response.json()
response = stopInstance(base_url, token, servers[0]['id'])

処理が成功した時のレスポンスです。resultに success が入ってきます。

{
  "operation_results": [
    {
      "result": "success",
      "resource_id": "ebe...26a"
    }
  ]
}

失敗時です。すでにインスタンスが停止しているとエラーになります。

{
    "operation_results": [
        {
            "result": "instance is invalid state for operate : STOP",
            "resource_id": "ebe...26a"
        }
    ]
}

まとめ

Pythonの場合はHTTPリクエストを標準ライブラリだけでも行えますが、requestライブラリがある方がより簡単です。HTTPリクエストを行うのはとても簡単なので、Pythonを通じてAPIをコールするコードを書くのは容易でしょう。

APIリファレンスはCloudGarage API リファレンスにありますので、ぜひご覧ください。

この記事を書いた人

中津川 篤司

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

オススメの記事

ページトップへ