こんにちは、藤城(@tafujish)です。前回から話を戻し今回はIDCFクラウドの話、idcfcloud-cliを詳細に紹介しまショウ。
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くらいしか気づくところはなかったのですが。
さて今回、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_profileにsource /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_idとconfig_id、そして追加対象のIPアドレスが必要です。
まずはlb_idとconfig_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バージョン環境を構築