みなさま、こんにちは。山本 和道(やまもと かずみち)と申します。
フリーランスのエンジニアで、主にWeb系開発やインフラ構築を扱っています。また、オープンソース活動として、さくらのクラウド関連ツールの開発を行っています。これまで「Terraform for さくらのクラウド」や「Packer for さくらのクラウド」といったツールの開発を行ってきました。
今回はさくらのクラウドをコマンドラインから操作するCLI「usacloud(ウサクラウド)」についてご紹介します。

さくらのクラウドAPIをより使いやすく

さくらのクラウドではREST APIが提供されており、クラウド上のリソースをプログラムなどから操作することが可能です。これによりインフラ構築の自動化やシステムへの組み込みなどが容易に行えるようになっています。

参考: さくらのクラウド API v1.1 ドキュメント

APIを利用する場合、主に以下のような3種類の方法があります。

  • (1) curlなどで直接HTTPリクエストを行いREST APIを呼び出す
  • (2) 公式APIライブラリsaklientやGo言語用ライブラリlibsacloudを利用して自作プログラムから呼び出す
  • (3) APIを利用しているアプリケーションを利用する

(1) curlなどで直接APIを呼び出す : 柔軟な反面、コード増

curlなどで直接APIを呼び出す方法は柔軟性が高く、APIが提供している全ての機能を利用することが可能ですが、 認証などで用いるHTTPヘッダの制御やAPIヘ渡すJSONの組み立てなど、通信周りの操作を自前で行う必要がありコマンド/コードの記述量は多めとなります。

(2) APIライブラリを利用 : シンプルなコードで利用できるが、プログラム作成は必要

APIライブラリは、RubyやJavaScript、Go言語といったプログラミング言語からさくらのクラウドAPIを容易に呼び出せるようにしてくれます。HTTPなどの通信プロトコルの詳細を意識せずにAPIを利用することができ、柔軟にAPI呼び出しを行うことができますが、 APIライブラリを組み込んだプログラムについては各自で作成する必要があります。
また、さくらのクラウドに追加されたばかりの機能についてはAPIライブラリ側が対応していないケースもあります。
ライブラリが対応していないAPIについては(1)のように直接APIを呼び出す必要があります。

(3) APIを使っているアプリケーションを利用: 用途は限定されるがAPIを意識せずに使える

APIを内部に組み込んだアプリケーションを利用することで、間接的にAPIを利用することが可能です。
例えばTerraform for さくらのクラウドPacker for さくらのクラウドといったアプリケーションを利用することで、 APIを意識することなくさくらのクラウドと連携することが可能となります。 しかし、そのアプリケーションが提供していない機能については当然利用できません。

プログラムを作成するほどじゃないけど、ちょうど良いアプリケーションがない場合は?

例えば定期的なバックアップの取得や、営業時間中だけ開発サーバの電源をONにするといった定型業務については APIを直接呼び出したりプログラムを作成しても良いかと思いますが、プログラム作成できる人員が確保できなかったり、保守の手間を考えると現実的ではないケースもあるかと思います。結局は作業手順書などを作成した上で手動で作業してしまうことも多いのではないでしょうか?

隙間を埋めるツール = CLI

そこで、(2)と(3)の隙間を埋めるツールとしてCLIという方法があります。
CLIとは一般的に(3)に分類される、内部的にAPIを利用するアプリケーションであり、 コマンドラインからクラウド上のリソースを操作するためのものです。

コマンドラインからAPIを通じてクラウド上の各種リソースを操作できるようにすることで、

  • 通信プロトコルの詳細を意識せずにAPIを利用できる
  • シェルスクリプトなどで手軽に処理を記載できる

といった利点があります。

AWSやAzure、GCPといったパブリッククラウドについてもCLIが提供されています。さくらのクラウドでは公認CLIである「usacloud」が利用可能となっています。

「usacloud」とは?

usacloudとは、さくらのクラウド公認CLIであり、オープンソースとして開発/リリースされています。

GitHub: sacloud/usacloud

以下のような特徴を持っています。

さくらのクラウドの主要APIのほとんどに対応している

APIで操作できるリソースについてはほぼ対応済みです。 一部未対応のAPIについては順次対応を行なっています。ウェブアクセラレータなど、さくらのクラウドのIaaS以外のサービスにも一部対応しています。

シングルバイナリで簡単インストール、Windows/Linux/macOSなどの各種OSに対応

usacloudはGo言語で書かれています。実行ファイルは1ファイルだけ(シングルバイナリ)で、バイナリをコピーするだけでインストールできます。また、Windows/Linux/macOSなど各種プラットフォーム用のバイナリがリリースされています。

シェルフレンドリー

usacloudはbashやコマンドプロンプトといったシェルで使いやすいことを設計目標としており、 オプション/パラメータの入力補完(bash_completion)や出力形式の細やかな指定などに対応しています。tailやsed、awkといったコマンドと組み合わせて利用するといったことも可能です。

コントロールパネルとusacloudの使い分け

どちらにも一長一短があるため状況に応じて使い分けが必要です。

コントロールパネルの特徴

コントロールパネルは直感的でわかりやすく操作しやすいという利点があります。また、公式に提供されているもののため、各機能を確実に利用することが可能です。

ただし、同じ作業を何度も行う場合スクリーンショットを駆使した手順書頼りになるなど人力頼りになってしまう面があります。

  • わかりやすい、操作しやすい
  • 機能を確実に使える
  • 最新機能もいち早くつかえる
  • 同じ作業を繰り返すのは苦手

CLI/usacloudの特徴

CLI/usacloudはコマンドラインからの操作となるため、ある種のとっつきにくさがあり、利用するにはある程度の慣れが必要となります。逆に慣れてしまえばコントロールパネルよりも素早く操作することも可能でしょう。また、コマンド=テキストであるため記録しやすく定期的な処理やプログラムからの処理など自動化しやすいことも特徴です。

注意点として、usacloudはさくらのクラウドAPIを利用しているという点があります。さくらのクラウドではコントロールパネルからのみ操作できるようなリソースも若干あります。(例:ローカルルータの操作など)
こういったリソースについてはusacloudからは操作不能なため注意が必要です。

  • とっつきにくい、慣れが必要
  • 慣れれば素早い操作が可能
  • 記録性/再現性に優れ自動化しやすい
  • API経由で操作できないものは扱えない

Terraformとusacloudの使い分け

クラウド上のリソースの管理を行うという点で見るとTerraform for さくらのクラウドも同じような機能を持っています。こちらも一長一短があるため使い分けが必要です。
Terraformではtfファイルと呼ばれる定義ファイルを元にインフラを構築する、いわゆる宣言型のツールとなっています。あるべき状態を宣言しておくことでインフラの現在の状態などをTerraformが判定し、適切なインフラ操作を行ってくれます。宣言型であるがゆえに、作業の順番などの細かな手続きの指定や電源On/Offや再起動といった手続きそのものが目的の場合は対応が難しいことが多いです。

対してusacloudは手続き型となっています。各リソースに対する操作(電源操作やSSH接続など)や手続きそのものが目的の場合、データ/ログ/統計情報のダウンロードといった場面ではusacloudが向いています。

  • Terraformは宣言型
  • Terraformがインフラの状態を考慮して手続きを制御してくれる
  • Terraformでは手続きの順序や細かなオプションの指定などは難しい
  • 操作/手続きそのものが目的の場合はusacloudを使う

筆者は基本的に以下のように使い分けています

  • インフラの作成/変更/削除は基本的にTerraform
  • 電源操作やSSH/VNC接続などの操作はusacloud
  • ストレージやログ、統計情報などデータを扱う場合はusacloud

とはいえ状況に応じて使い分け出来るようにしておいた方が良いと思います。

usacloudを使ってみよう!

さくらのクラウド APIキーの発行

あらかじめAPIキーの発行が必要になります。コントロールパネルにて発行しておいてください。
参考:Usacloudドキュメント – APIキーの取得

インストール

usacloudはGo言語で書かれており、実行ファイル(バイナリーファイル)1つを配置するだけでインストール可能です。また、yum/apt/homebrew/chocolateyといったパッケージ管理システムを利用してのインストールも可能です。

環境に応じて以下のいずれかのコマンドを実行してインストールを行います。
※bashをご利用の場合は入力補完(bash_completion)を利用可能です。詳細はインストールドキュメントを参照してください。

macOS + homebrew

brew tap sacloud/usacloud; brew install usacloud

Linux(RHEL/CentOS)

curl -fsSL http://releases.usacloud.jp/usacloud/repos/setup-yum.sh | sh

Linux(Ubuntu/debian)またはbash on Windows(Ubuntu)

curl -fsSL http://releases.usacloud.jp/usacloud/repos/setup-apt.sh | sh

Windows + chocolatey

Windowsでchocolateyをご利用の場合、以下のコマンドでインストール可能です。

choco install usacloud

※chocolateyのusacloudパッケージ @223n さんによってメンテナンスされています。

上記以外の場合

各プラットフォームごとに用意されたバイナリを直接ダウンロードしてください。詳細は以下のガイドを参照ください。
参考: usacloudドキュメント – 導入ガイド

動作確認

インストール後、以下のコマンドを実行してみてください。正常にインストールできている場合バージョン情報が表示されるはずです。

$ usacloud -v
usacloud version 0.2.2, build 8677000

APIキーの設定

続いてAPIキーの設定を行います。

APIキーの設定は以下の3通りの方法があります。

  • 環境変数で指定
  • 設定ファイルを利用して指定(usacloud configコマンドで作成する)
  • コマンド実行時にオプションとして指定する

今回は設定ファイルを利用する方法をご紹介いたします。その他の方法についてはドキュメントを参照してください。

参考: usacloudドキュメント – APIキーの設定

それではAPIキーの設定を行います。APIキー設定ファイルは「usacloud config」コマンドで作成可能です。このコマンドは対話形式でAPIキーの設定を行うものです。トークン、シークレット、対象ゾーンの入力を促されますので、それぞれ入力します。入力後はAPIキー設定ファイルが作成されます。

$ usacloud config
Setting SakuraCloud API Token => 
	Enter token: xxxx

Setting SakuraCloud API Secret => 
	Enter secret: xxxx

Setting SakuraCloud Zone => 
	Enter zone[is1a/is1b/tk1a/tk1v]: tk1v

Written your settings to ~/.usacloud/default/config.json

[TIPS]
さくらのクラウドではusacloudをインストールするためのスタートアップスクリプトが提供されています。
このスタートアップスクリプトはusacloudのインストールからAPIキーの設定まで一括で行ってくれます。是非ご活用ください。

usacloudコマンド構文/ヘルプ表示

ここまででusacloudコマンドを利用する準備が整いました。
次に、コマンド構文やヘルプ表示方法などの実際にコマンドを利用する前に押さえておきたい基本的な部分について解説します。

コマンド構文

usacloudコマンドは以下のコマンド構文にて利用します。

$ usacloud [グローバルオプション] 対象リソース コマンド [オプション] [引数]

グローバルオプション

[グローバルオプション]には、APIキーや対象ゾーンなどのusacloudコマンド全体の挙動に影響する値を設定可能です。グローバルオプションについての詳細は以下のドキュメントを参照してください。
参考:usacloudドキュメント – グローバルオプション

対象リソース

サーバやスイッチといった、操作対象となるクラウド上のリソースを指定します。

# サーバに対する操作の場合
$ usacloud server [...]

# スイッチに対する操作の場合
$ usacloud switch [...]

どのようなリソースが指定できるかはヘルプを参照してください。

# 操作対象リソースについてのヘルプ表示
$ usacloud -h

コマンド

それぞれのリソースごとにコマンドが用意されています。どのようなコマンドがあるのかはヘルプを参照することで確認できます。

$ usacloud 対象リソース -h

また、コマンドごとに指定できるオプションや引数などが異なります。これらはコマンドのヘルプを参照することで確認できます。

$ usacloud 対象リソース コマンド -h

実際のコマンドは以下のようになります。

# オプションなしのシンプルなコマンドの例
$ usacloud server list                #サーバ一覧表示

# オプションをつけた例
$ usacloud server list --name Example #サーバ一覧表示(フィルタ条件あり)

# 引数が必要なコマンドの例
$ usacloud server boot Example        # 名前に「Example」を含むサーバを起動

[TIPS]
入力補完(bash_completion)が有効になっている場合、グローバルオプションや対象リソース、コマンド、オプション、引数などをTABキーで入力補完することが可能です。便利ですのでusacloudをご利用の際は是非入力補完をご利用ください。


次回:実践編へ

ここまででusacloudコマンドのセットアップを行い、基本的な使い方の解説を行ってきました。次回はいよいよ具体的な使い方や便利な応用例などをご紹介します。お楽しみに!
次回「実践編」はこちら

付録:usacloudイメージキャラクター「うさみん」

usacloudのリリース情報のお知らせや便利な使い方を紹介してくれるイメージキャラクター「うさみん」がTwitterマストドン(mstdn.jp)にて活動中です。

Twitterアカウント: https://twitter.com/usamin_usacloud
マストドン:           https://mstdn.jp/@usamin_usacloud
是非フォローをお願いいたします!!

クレジット

この記事のアイキャッチ画像でも使われているusacloudのロゴと「うさみん」のキャラクターデザインは禎波ハヅキ(@kze_yoshi8)さんによるものです。