TECH

ついに公開されたAPIをNode.jsから利用する(イメージ取得)

TECH
中津川 篤司

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

そこで今回はNode.jsを使ってAPI操作を行う方法を解説します。まずはインスタンスイメージの取得です。

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

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

  • Node.js
  • superagent

プロジェクトのベースの作成する

Node.jsのインストールが終わっていることとして、まずは適当なディレクトリを作成し、その中でNode.jsプロジェクトのベースを生成します。

npm init

続いて必要なライブラリである superagent をインストールします。

npm i superagent -S

APIキーを取得する

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

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

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

トークンを取得する

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

const config = require('../config');
const request = require('superagent');
const baseUrl = 'https://api.cloudgarage.jp';

const getToken = async (config) => {
  const response = await request
    .post(`${baseUrl}/tokens`)
    .send({
      client_id: config.clientId,
      client_secret: config.clientSecret
    });
  // トークン文字列
  return response.body.token.id;
}

今後のリクエストはこのトークンを X-Auth-Token ヘッダーに適用すれば良いだけです。

イメージ一覧を取得する

では今回はOSイメージの一覧を取得します。これは GET /images リクエストになります。

const getImages = async (token) => {
  const response = await request
    .get(`${baseUrl}/images`)
    .set('X-Auth-Token', token)
    .send()
  return response.body.images;
}

これでOSイメージの一覧が返ってきます。

実行例

例えば今回のコードを以下のように実行します。

(async (config) => {
  try {
    const token = await getToken(config);
    const images = await getImages(token);
    console.table(images);
  } catch (e) {
    console.error(e);
  }
})(config);

そうすると結果が以下のように返ってきます(一部抜粋)。

┌─────────┬────────────┬─────────────────────────────────┬─────────────────┬──────────────┬─────────┬────────────┐
│ (index) │    size    │  image_id │     image_name      │ os_distribution │ os_version   │ os_type │ image_type │
├─────────┼────────────┼─────────────────────────────────┼─────────────────┼──────────────┼─────────┼────────────┤
│    0    │ 1612185600 │ '38...aa' │ 'CentOS-6.10-32bit' │    'CENT_OS'    │ '6.10_32bit' │ 'Linux' │   'OS'     │
│    1    │ 1029636096 │ 'b1...71' │ 'CentOS-6.10-64bit' │    'CENT_OS'    │ '6.10_64bit' │ 'Linux' │   'OS'     │
│   30    │ 2964258816 │ '21...b9' │ 'minecraft20181111' │                 │              │         │  'PRIVATE' │
└─────────┴────────────┴───────────┴─────────────────────┴─────────────────┴──────────────┴─────────┴────────────┘

インスタンスを立ち上げる際にはこの中の image_id を使って行います。

まとめ

Node.jsの場合、HTTPリクエスト用ライブラリのSuperagentとawait/asyncを組み合わせることでネットワークの非同期処理が簡単に書けます。APIリファレンスはCloudGarage API リファレンスにありますので、ご覧ください。

この記事を書いた人

中津川 篤司

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

この記事のタグ

オススメの記事

ページトップへ