node.js

CloudGarage Public APIを使ったNode.js SDK(非公式)を開発しています

TECH
中津川 篤司

CloudGarageもPublic APIが公開されたことで、処理の自動化や外部ツールと組み合わせた操作が可能になります。しかしAPIをHTTPクライアントで利用するのは大変です。そこでSDKが必要になります。 様々な言語で用意されているのが望ましいですが、まずは非公式ながらNode.jsで作り始めてみました。徐々に機能を追加していきたいと思います。 インストール インストールは npm で行います。cloudgarage - npmにてパッケージを公開しています。 $ npm i cloudgarage -g 使い方 まず必ずトークンを取得しないといけません。そのため、あらかじめコントロールパネル | CloudGarageにてAPIのクライアントIDとクライアントシークレットを取得しておきます。 クライアントIDとクライアントシークレットを取得したら、以下のコマンドを入力します。 $ cloudgarage token そうすると対話型でクライアントIDとクライアントシークレットを指定します。デフォルトで .cloudgarage.json というファイルをホームディレクトリ直下に作成します。 $ node_modules/.bin/cloudgarage token ✔ What is your client ID? … ylk...t1P ✔ What is your client secret? … iIG...oUo Write configuration to ~/.cloudgarage.json Done ヘルプは以下のようになっており、クライアントIDとクライアントシークレットをオプションとして指定もできます。 $ cloudgarage help token Usage: cloudgarage-token [options] Options: -i, --id [clientId] This is Client Id that you can get it on Dashboard at CloudGarage -s, --secret [clientSecret] This is Client Secret that you can get it on Dashboard at CloudGarage -o, --output [configFilePath] Output config file path. Default is ~/.cloudgarage.json (default: "~/.cloudgarage.json") -h, --help output usage information ディスクイメージの取得 執筆時点ではディスクイメージの取得しかありません。これは images コマンドで行います。 $ cloudgarage images このコマンドで作成されているバックアップイメージを含め、ディスクイメージが一覧で返ってきます。 $ cloudgarage images ┌─────────┬────────────────────────────────────────┬───────────────┬──────────────────────────────────┐ │ (index) │ Id │ Type │ Name │ ├─────────┼────────────────────────────────────────┼───────────────┼──────────────────────────────────┤ │ 0 │ '38b60dd1-e374-44ef-b58e-9beaeabf0eaa' │ 'OS' │ 'CentOS-6.10-32bit' │ │ 1 │ 'b1e41e1c-1410-4880-aa33-9c83154d3571' │ 'OS' │ 'CentOS-6.10-64bit' │ │ 26 │ '38625780-5355-4da5-918f-2bd12abef9b7' │ 'APPLICATION' │ 'Redmine/Ubuntu-16.04-64bit' │ │ 27 │ '7761c7de-47a6-47a9-83de-3e6bf57f71b1' │ 'APPLICATION' │ 'WordPress/Ubuntu-16.04-64bit' │ └─────────┴────────────────────────────────────────┴───────────────┴──────────────────────────────────┘ -t または --type でディスク種別をフィルタリングできます。指定できるのは OS / APPLICATION / PRIVATEの3つです。他のオプションは以下の通りです。 $ cloudgarage help images Usage: cloudgarage-images [options] Options: -c, --config [configFilePath] Config file path. Default is ~/.cloudgarage.json (default: "~/.cloudgarage.json") -t, --type [type] Filtering image type. [OS, APPLICATION, PRIVATE] -h, --help output usage information まとめ 機能的にはまだ多くありませんが、徐々にバージョンアップしていきます。リポジトリはCloudGarageMania/node-js: CloudGarage SDK for Node.jsにありますので、不具合や優先して欲しい機能などがありましたらぜひIssueにてお願いします。なお、当SDKのライセンスはMITとなっています。

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

当社エンジニアに「ドローンで遊びたい」と言ったら想像と違った遊び方を教えてもらいました

TECH
セッションチーム

当社ドローン部より、レクチャーを受けつつ、ドローンを飛ばしてみた話をご紹介します。しかも、ただ飛ばしただけじゃありません。OSのインストールから、コマンドでドローンを操作して飛ばすところまでまるっと教えていただきました。

ページトップへ