IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

idcfcloud-cliをリリース!

こんにちは、藤城(@tafujish)です。前回から話を戻し今回はIDCFクラウドの話、idcfcloud-cliを詳細に紹介しまショウ。

f:id:ynagaoka:20170905123128p:plain

idcfcloud-cliはその名のとおり、IDCFクラウドをコマンドラインから操作するためのインターフェースです。もう少し具体的に話すと、idcfcloudコマンドを実行してIDCFクラウドの各サービスのAPIを操作することができます。この手のCLIツールとしてはこれまでcloudstack-apiを提供してきました。cloudstack-apiはコンピューティングのAPIにのみ対応しており、ILBなど他のサービスには対応していませんでした。そこでIDCFクラウドの全サービス全APIへの対応をゴールにしたCLIツールを提供しようというのがidcfcloud-cliです。

今回のリリースでは、

  • ILB
  • Your(Billing)

に対応しています。12月に予定している次のアップデートでは、DNS/GSLBコンテンツキャッシュに対応予定で、その後も追加を予定しています。それでは、以下の流れで紹介していきます。

Yourってなぁに

このたび唐突に出してみましたYourですが、本題に入る前に紹介させてください。
IDCFクラウドにログインして、右上のアイコン(アバター)から出てくるメニュー「アカウント設定」と「ビリング」の情報提供の総称です。つまり、これまでBillingのAPIと呼んで提供していましたが、正確にはYourのBillingに関するAPIということになります。これまでは、エンドポイントのURLくらいしか気づくところはなかったのですが。

f:id:ynagaoka:20170905123156p:plain

さて今回、idcfcloud-cliのリリースにあたりYourをオモテに出しました。お察しのとおり、今後「アカウント設定」の情報もAPIで取れるようにしていく予定です。淡くご期待ください。

インストール方法

それでは、idcfcloud-cliを試してみましょう。前提条件としてRuby 2.2.7以降がインストールされた環境が必要です。Rubyのバージョンは次のように確認できます。以降ではIDCFクラウド標準テンプレートのUbuntu 16.04上で実行しています。

$ ruby -v
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

Ruby環境が整っていればidcfcloud-cliをインストールするのは簡単です。gemでネットワークインストールするのみです。その前にOS側で必要なパッケージも入れておきます。ついでに、RubyGemsの脆弱性もあったのでgemもアップデートしておきます。

$ sudo apt update && sudo apt install ruby-dev gcc g++ make -y
~略~
$ sudo gem update --system
$ sudo gem install idcfcloud
~略~
1 gem installed

インストール後は、idcfcloudコマンドを実行してみてください。helpが出てくれば成功です。

$ idcfcloud help
Commands:
  idcfcloud configure              # create configure
  idcfcloud help [COMMAND]         # Describe available commands...
  idcfcloud ilb [OPTION]           # ILB Service
  idcfcloud init                   # initialize
  idcfcloud update                 # list update
  idcfcloud your [OPTION]          # Your Service

と、さらりと書きましたが、Rubyの必要なバージョンの準備がちょっと大変かもしれません。Ubuntu16.04では2.3.1が標準で入っているので問題なく実行できたと思います。CentOS7.xのように、Rubyのバージョンが古い場合は、Rubyの環境を構築する必要があります。このあたりは、次回のテックブログで紹介します。

idcfcloud-cliを初期設定する

インストールができたら、まずはAPIキーなどを初期設定します。設定用のコマンドが用意されています。事前にクラウドコンソール画面の「API」からAPI KeyとSecret Keyの情報を事前に確認してください。

$ sudo idcfcloud init
default:api_key[NONE] :
【API Keyを貼りつけてください】

default:secret_key[NONE] :
【Secret Keyを貼りつけてください】

default:region[NONE] :
【デフォルト指定するリージョンを記述ください(jp-east/jp-east-2/jp-west)】

please write in
~/.bash_profile
source /var/lib/gems/2.3.0/gems/idcfcloud-0.1.2/output/complement.bash
~/.zprofile
source /var/lib/gems/2.3.0/gems/idcfcloud-0.1.2/output/complement.zsh

キーの入力後にidcfcloud以降の引数(commandなど)をタブによる入力補完をするシェル設定が出力されます。たとえばBash環境であれば、~/.bash_profilesource /var/lib/gems/2.3.0/gems/idcfcloud-0.1.2/output/complement.bashを追記しsource ~/.bash_profileなどで反映させると入力補完が利用できます。このパスは環境により異なります。また、入力補完が不要な場合この設定は不要です。

以上で初期設定は完了です。次に設定周りのオプションを紹介します。
設定したAPIキーを修正する場合はconfigureを使います。

$ sudo idcfcloud configure

デフォルトで設定ファイルは、/(インストール先)/idcfcloud-cli/config/config.iniにグローバル設定として出力されます。ログインユーザー毎に設定を変えたい場合はグローバル設定を無効(--no-global)にします。

$ idcfcloud configure --no-global

すると~/.idcfcloud/config.iniに設定が出力されます。

APIのコマンド追加などで入力補完用の設定が更新された場合はupdateを使います。本コマンド自体の更新ではないので注意してください。

$ sudo idcfcloud update

本コマンド自体の更新はgemで行います。

$ sudo gem update idcfcloud

idcfcloud-cliの使い方

実行形式としては次のようになります。一度設定してしまえば、以降は一般ユーザー権限で実行できます。

$ idcfcloud <serviceName> <command> [attributes] [option]

各サービスにおいて対応しているコマンドの確認はhelpから可能です。たとえばILBの場合は次のように確認できます。

$ idcfcloud ilb help
Commands:
  idcfcloud ilb add_server <lb_id> <config_id> <data> [headers]
~以下略~

デフォルトでは、Json形式で出力されます。Json形式のほか-oオプションにてテーブル形式(-o table)、CSV形式(-o csv)、XML形式(-o xml)も利用できます。

Yourのビリングを試してみる

では、まず過去の請求情報を確認してみましょう。たとえば2017年4月の請求は次のように実行できます。

$ idcfcloud your list_billing_detail 2017-04 
{
  "status": 200,
  "message": "",
  "data": {
    "meta": {
      "account_id": "71000000000",
      "taxable_amount": 395789,
      "tax": 31614,
      "total": 427403,
      "updated_at": "2017-05-01T02:29:43+09:00",
      "billing_period_start_at": "2017-04-01",
      "billing_period_end_at": "2017-04-30",
      "invoice_no": "B7129932301"
    },
    "data": [
      {
        "Region": "jp-east",
        "ServiceName": "Cloud Computing",
        "ZoneName": "joule",
        "Category": "VirtualMachine",
        "Menu": "standard.S4",
        "ResourceDisplayName": "web01",
        "StartDate": "2017-04-10",
~以下略~

結果の意味についてはAPIドキュメントサイトをご覧ください。たとえば、Excelで管理したい場合はCSVにファイル出力(ここでは2017-04.csv)すると整形がしやすいと思います。

$ idcfcloud your list_billing_detail 2017-04 -o csv > 2017-04.csv
$ cat 2017-04.csv
Region,ServiceName,ZoneName,Category,Menu,ResourceDisplayName,StartDate,EndDate,Usage,Allocated,Running,Stopped,Amount,Tax,Net
jp-east,Cloud Computing,joule,VirtualMachine,standard.S4,web01,2017-04-10,2017-04-30,491.92444419861,491.96638870239,491.92444419861,0.04194450378418,5300,424,5724
~以下略~

ILBを試してみる

次に、既にHTTPの設定が入っているILBのバランシング対象にサーバー追加する例です。ILBへのサーバー追加はidcfcloud ilb add_serverにて可能ですがlb_idconfig_id、そして追加対象のIPアドレスが必要です。
まずはlb_idconfig_idを確認します。

$ idcfcloud ilb list_loadbalancers
~略~
          "servers": [
            {
              "id": "70da2f85-9893-4ae0-864e-4f3e2dfb23a1",
              "loadbalancer_id": "476b0e9f-ee26-4630-ab64-51edaa10aad4",
              "config_id": "b43e38a3-3d6e-4096-afdf-9bf09ecb6c9d",
              "ipaddress": "10.32.0.204",
              "port": 80,
              "created_at": "2017-08-30T16:44:18.000+09:00",
              "updated_at": "2017-08-30T16:44:44.000+09:00",
              "state": "Running"
            }
          ],
~略~

今回は既に入っているILBの設定は1つなので対象となるIDは次の2つです。
 lb_id:"476b0e9f-ee26-4630-ab64-51edaa10aad4"、
 config_id:"b43e38a3-3d6e-4096-afdf-9bf09ecb6c9d"
10.32.0.123のIPを持つサーバーをHTTP(80)として追加します。

$ idcfcloud ilb add_server "476b0e9f-ee26-4630-ab64-51edaa10aad4" "b43e38a3-3d6e-4096-afdf-9bf09ecb6c9d" '{"ipaddress":"10.32.0.123", "port":80}'
{
  "status": 200,
  "message": "",
  "data": [
    {
      "id": "70da2f85-9893-4ae0-864e-4f3e2dfb23a1",
      "ipaddress": "10.32.0.204",
      "port": 80
    },
    {
      "id": "bf28183d-a291-4b27-b4f1-4815d6174014",
      "ipaddress": "10.32.0.123",
      "port": 80
    }
  ]
}

元からある1台(10.32.0.204)に追加され2台になりました。今追加したサーバー(10.32.0.123)を外す場合は次のコマンドを実行します。

$ idcfcloud ilb delete_server "476b0e9f-ee26-4630-ab64-51edaa10aad4" "b43e38a3-3d6e-4096-afdf-9bf09ecb6c9d" "bf28183d-a291-4b27-b4f1-4815d6174014"
{
  "status": 200,
  "message": "",
  "data": null
}

現在のバランシング先のサーバー一覧を確認すると1台に減っていることが分かります。

$ idcfcloud ilb list_servers "476b0e9f-ee26-4630-ab64-51edaa10aad4" "b43e38a3-3d6e-4096-afdf-9bf09ecb6c9d"
{
  "status": 200,
  "message": "",
  "data": [
    {
      "id": "70da2f85-9893-4ae0-864e-4f3e2dfb23a1",
      "ipaddress": "10.32.0.204",
      "port": 80
    }
  ]
}

まとめ

CLIツールのご要望は多くいただいてましたが、RubyにてILBとYourのビリングのAPIに対応したCLIツールをidcfcloudコマンドとしてリリースしました。今後も他のIDCFクラウドのサービスに対応していく予定です。CLIツールによってスクリプト化がしやすくなると思いますので、ILBのオートスケールへの対応など、IDCFクラウド操作の自動化に是非ご活用ください。次回のテックブログでは、CentOS7環境にて必要なRubyバージョンの環境を構築します。

CentOS7環境にて必要なRubyバージョンの環境を構築したい方はこちらの記事もどうぞ!
CentOS7上にrbenvやSCLを使って指定のRubyバージョン環境を構築

Copyright © IDC Frontier Inc.