はじめに
さくらのクラウド向けCLIUsacloud
のメジャーバージョンアップとなるv1.0.0をリリースしました。
Usacloud v1.0.0ではWebAssemblyに対応しました。このリリースに合わせブラウザ上で手軽にUsacloudを実行できるようにするChrome拡張UsaCon
もリリースしました。
この記事ではUsacloud v1.0とUsaConを紹介していきます。
Usacloud v1.0
さくらのクラウド向けCLIとして2017年3月に初版となるv0.0.1がリリースされました。
初版のリリースが行われて以降、ご利用いただいた方々からのフィードバックを反映したりさくらのクラウド自体の進化に対応したりと地道にアップデートを重ねてきました。
これまでの累計ダウンロード数はGitHub ReleasesやDocker Hubを合計すると延べ10,000を超えました。
Usacloud v0系で不満だった点
私自身日常の作業にUsacloudを利用していたのですが、数年利用している中でいくつか不満を感じるようになってきていました。
例えば、
- フラグ指定する際に指定する位置に気をつける必要がある
- 複数のゾーンに跨がる処理の実装が困難
- bash以外のシェル補完が行えない
というような点です。
例えば1点目は--zone=is1a
のような指定をしたい場合、以下のように指定するしないといけないということです。
- OKな例:
usacloud --zone=tk1a server list
- NGな例:
usacloud server list --zone=tk1a
指定忘れに気付いたらヒストリーから呼び出して所定の位置にカーソルを移動して、、というのが地味にストレスでした。
(option+←などのキーボードショートカットやctrl+aで先頭に戻ってから右へ移動とかでもOKなんですがそれもめんどくさい)
これらの問題を解決するには依存ライブラリの切り替えやアップグレードが必要で、Usacloud側も大幅に修正する必要がありましたので メジャーバージョンアップして対応することにしました。
Usacloud v1.0系での改善や主な新機能
前述の細かな不満の解消や新機能の追加などを行なっています。
- フラグ位置を気にしなくてよくなった
- 全ゾーン一括操作対応
- 操作対象リソースの指定にID or 名称 or タグを利用可能に
- シェル補完でbash/zsh/fish/powershellをサポート(
github.com/spf13/cobra
のおかげ) - いわゆるDry Run機能(libsacloudのFakeドライバーというやつを利用)
- ヘルプ表示の改善(候補値の表示やパラメータ例の追加など)
- WebAssembly対応
他にも細かな改善がたくさん行われています。この中からいくつかピックアップして紹介します。
全ゾーン一括操作
--zone
フラグにall
を指定することで全ゾーン一括操作が可能となりました。
# 全ゾーンのサーバを一覧表示 $ usacloud server list --zone=all +------+--------------+---------+------+-----+--------+-----------+----------------+----------------+--------------+ | Zone | ID | Name | Tags | CPU | Memory | IPAddress | Upstream(Mbps) | InstanceStatus | InstanceHost | +------+--------------+---------+------+-----+--------+-----------+----------------+----------------+--------------+ | tk1a | 100000000008 | example | - | 1 | 1 | - | - | - | - | | tk1b | 100000000011 | example | - | 1 | 1 | - | - | - | - | | is1a | 100000000012 | example | - | 1 | 1 | - | - | - | - | | is1b | 100000000010 | example | - | 1 | 1 | - | - | - | - | | tk1v | 100000000009 | example | - | 1 | 1 | - | - | - | - | +------+--------------+---------+------+-----+--------+-----------+----------------+----------------+--------------+ # 全ゾーンのサーバのうち、名称にexampleを含むサーバをシャットダウン $ usacloud server shutdown --zone=all example # 全ゾーンにサーバ作成 $ usacloud server create --name example ... --zone=all
参照系だけでなく、リソース作成や更新、電源操作なども一括で行えます。
操作対象リソースの指定にID or 名称 or タグを利用可能に
Usacloudはusacloud リソース コマンド 操作対象リソース
のような書式となっています。
この中の操作対象リソースの部分はv0系だとID or Nameだったのですが、v1からはタグも利用可能になりました。
# 全ゾーンのサーバのうち、env=stagingというタグがついているサーバを一括シャットダウン $ usacloud server shutdown "env=staging"
いわゆるDry Run機能
libsacloudにはFakeドライバーという機能があり、さくらのクラウドAPI呼び出しをローカルで擬似的に行えるようになっています。 主にテスト用途での利用を想定したものです。
# dry-run $ usacloud server create --name example --fake # 作成したリソースのデータを永続化しておきたい場合は--fake-storeを併用する $ usacloud server create --name example --fake --fake-store ~/.usacloud/fake_store.json
Fakeドライバーはバックエンドストレージとしてインメモリ/ローカルファイルを選べるようになっており、ローカルファイルを用いればデータの永続化も行えるようになっています。
また、Terraformのさくらのクラウド向けプロバイダーやPrometheusのさくらのクラウド向けExporterでもFakeドライバーが利用可能で、
例えばTerraformで作ったリソースをPrometheusで監視しつつUsacloudでリソースのCRUDや電源操作の動作確認、といったことを実際のリソースを作成することなく行えます。
RESTコマンドの追加
上級者向けではあるのですが個人的にお気に入りの機能なので紹介しておきます。
さくらのクラウドAPIをUsacloudやAPIライブラリlibsacloudの抽象化を通さずに直接叩くためのコマンドです。
# 特定サーバの電源をOFFにする: https://developer.sakura.ad.jp/cloud/api/1.1/server/#delete_server_serverid_power $ usacloud rest -X DELETE -d '{"Force":true}' https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/$ID/power # APIルートURLは省略可能 $ usacloud rest -X DELETE -d '{"Force":true}' /server/$ID/power # パラメータはファイルからでもOK $ usacloud rest -X DELETE -d parameter.json /server/$ID/power
curlを直接使えば良い、という感はありますが、APIキーやゾーンの指定は結構面倒なのでなかなか便利です。
WebAssembly(WASM)対応
GOOS=js GOARCH=wasm go build
でビルドできるようになりました。
実行するにはグルーコードが必要ですがnodejs上やブラウザ上でもUsacloudを動かせるようになりました。
# nodejs上でwasmを実行 $(go env GOROOT)/misc/wasm/go_js_wasm_exec usacloud.wasm -v 1.0.0 js/wasm, build c0ceb3ae
せっかくWebAssemblyに対応しましたのでブラウザ上でも動かせるように次で紹介するChrome拡張UsaCon
もUsacloud v1.0と同時リリースしました。
さくらのクラウドのコントロールパネル上でUsacloudを実行できるChrome拡張UsaCon
利用方法についてはこちらのドキュメントを参照ください。 docs.usacloud.jp
UsaConは@wasmer/wasm-terminal
というコンポーネントを用いて前述のUsacloud v1.0 WASM版を動かせるようにしたものです。
github.com
@wasmer/wasm-terminal
はXterm.jsやComlinkなどを用いた、WASIという規格に対応したWASMをブラウザ上で実行できるコンポーネントなのですが、
これをGoで作成したWASMを実行できるように改修して利用しています。
(この辺の実装の詳細については機会があればどこかに書いておこうと思っています。)
今はストレージもエディタも付属していないのですが、今後BrowserFSみたいなやつでバックエンドをオブジェクトストレージにしてみたり、vim.wasmみたいにエディタを動かせるようにしたりすると面白いんじゃないかなと思っています。(出来るかはまだわかりませんが)
なお、UsaConはAPIキーの保存にCredential Management APIのPasswordCredentialを利用していますのでChromeのみのサポートとなっています。 Firefox/Safariのサポートは今のところ出来ていません。Edgeはもしかしたら大丈夫かもしれませんが開発環境が手元にないので対応していません。
UsaCon
スクリーンショット
Usacloud v1.0 / UsaConの注意点
Usacloud v1.0では過去のバージョンと互換性のない変更がいくつか行われています。
例えば(APIで取得できる)全種類のリソースのサマリーを表示するusacloud summary
コマンドやデータベースアプライアンスのログを表示するusacloud database logs
コマンドなどの廃止、パラメータ名の変更(--nw-mask-len
=> --netmask
)などです。
Usacloud v0系からアップグレードされる方は前述の--fake
モードなどでDryRunして動作確認してみることをお勧めします。
その他にもいくつか破壊的な変更点があります。網羅的ではありませんがアップグレードガイドを用意していますのでこちらもご一読ください。
まとめ
- 様々な改善が行われた
Usacloud v1.0
をリリースしました - Usacloud v1.0をブラウザ上で動かすためのChrome拡張
UsaCon
をリリースしました - Usacloud v1.0にはv0系と互換性のない変更も含まれるためアップグレードの場合は注意が必要
ということで是非ご利用ください。
以上です。