さくらのクラウドをコマンドラインから自由自在に!公認CLI 「 usacloud」を使ってみよう!〜実践編〜

前回はusacloudの概要〜セットアップ〜コマンド構文までを扱いました。
今回はusacloudコマンドの利用方法や便利な応用方法について扱います。

usacloudの基本的な使い方

ここではusacloudコマンドの基本的な使い方を解説します。

 

リソースの一覧表示(ls/list)機能

クラウド上のリソースを一覧表示します。
※一部のリソースは一覧表示に対応していません。

$ usacloud 対象リソース ls # lsの代わりにlistでも可

例えばサーバ、またはスイッチを一覧表示する場合は以下のようになります。

# サーバを一覧表示
$ usacloud server ls

# スイッチを一覧表示
$ usacloud switch ls

オプションを指定することでリソース名やタグでのフィルタリング、リミット/オフセットでの抽出範囲の指定、ソート条件の指定、出力形式の指定などが行えます。

オプションの使用例は以下の通りです。
※リソースごとに指定できるオプションが異なります。詳細はサブコマンドのヘルプを参照してください。

########################################
# フィルタ条件の指定
########################################

# タグでフィルタリング(複数指定可能、複数の場合AND条件となる)
$ usacloud server ls --tags tag1 --tags tag2

########################################
# リミット/オフセットの指定
########################################

# 検索結果からオフセット1番目から1件を表示
$ usacloud server ls --limit 1 --offset 1

########################################
# ソート条件の指定
########################################

# 名称(Name)の昇順
$ usacloud server ls --sort "Name"

# 名称(Name)の降順:列名の先頭にマイナスをつける
$ usacloud server ls --sort "-Name"

########################################
# 出力形式の指定
########################################

# CSV/TSV形式で出力
$ usacloud server ls --out csv #または --out tsv

# 出力する列を限定(IDと名称だけ出力する場合)
$ usacloud server ls --out csv --col ID --col Name

# JSON形式で出力
$ usacloud server ls --out json

# IDだけ出力
$ usacloud server ls -q # または --quiet

# テンプレート(Go言語のテンプレート形式)で形式指定
$ usacloud server ls --format "ID is {{.ID}}, Name is {{.Name}}"

なお出力形式関連のオプションについては一覧コマンド以外でも利用可能です。
※一部の出力のないコマンドなどを除く

 

リソースのCRUD操作

リソースのCRUD(作成/詳細表示/更新/削除)操作を行います。
※一部のリソースはCRUD操作に対応していません。

利用例は以下の通りです。

# 作成(Create)
$ usacloud switch create --name "Example" --desc "description" --tags "Tag1" --tags "Tag2"

# 詳細表示(Read)
$ usacloud switch read <ID または 名称>

# 更新(Update)
$ usacloud switch update --name "Example-update" <ID または 名称>

# 削除(Delete)
$ usacloud switch delete <ID または 名称>

ここでも指定できるオプションはリソース/サブコマンドごとに異なりますので、詳細はヘルプを参照してください。

[TIPS]
usacloudで扱うリソースのほとんどで作成(create)サブコマンドが利用できますが、サーバ(server)についてはcreateサブコマンドがありません。代わりにbuildサブコマンドが用意されています。これはサーバ作成についてはディスクやSSH公開鍵などの他のリソースと組み合わせて作成することが多く、サーバ単体での作成を行うことは稀なためです。ご注意下さい。

 

操作対象リソースの指定方法

read、update、deleteなどでは操作対象のリソースを指定する必要があります。

操作対象リソースの指定には以下の3つの方法があります。

  • IDを指定
  • 名称を指定
  • タグ(--selectorオプション)を指定

IDを指定する

コマンドの引数としてさくらのクラウド上でのリソースのIDを与えることで操作対象を指定します。
コマンドによっては複数のID指定が可能なものもあります。

# サーバの起動の例(IDを2つ引数として指定)
$ usacloud server boot 123456789001 12345678002

名称を指定する

コマンドの引数としてさくらのクラウド上のリソースの名称を与えることで操作対象を指定します。指定したリソース名に中間一致するリソースすべてが操作対象となります。複数の操作対象指定を許可していないコマンドについては複数のリソースがヒットした場合はエラーとなります。

# サーバの起動の例(名称を指定、名称にexampleを含むサーバ全てが対象)
$ usacloud server boot example

タグ(--selectorオプション)を指定

--selectorオプションを指定することで特定タグを持つリソースを指定できます。名称の場合と同じく、複数の操作対象指定を許可していないコマンドについては複数のリソースがヒットした場合はエラーとなります。

# サーバ起動の例(--selector指定、tag1というタグを持つサーバが対象)
$ usacloud server boot --selector tag1
# 複数指定も可能(AND条件)
$ usacloud server boot --selector tag1 --selector tag2

 

その他の操作

一覧表示やCRUD操作の他にも各リソース固有の操作を行うためのコマンドが用意されています。例えばサーバの場合、以下のような操作を行えるようになっています。

サーバ関連

  • 電源操作(起動/シャットダウン/強制シャットダウン/リセット)
  • VNC接続/キー送信
  • SSH接続/コマンド実行
  • scpでのファイル送受信
  • プラン変更
  • ディスクの接続/切断
  • NICの追加/接続/切断
  • ISOイメージの挿入/取り出し
  • 収納ホストのメンテナンス情報取得
  • アクティビティモニタの取得(CPU/ディスク/NIC)

その他のリソースについても様々な操作用のコマンドが用意されています。詳細は各リソースのヘルプを参照ください。

usacloudの便利な使い方

続いてusacloudをより便利に使うためのテクニックをご紹介いたします。

 

複数のAPIキーを使い分ける「プロファイル機能」

例えばMSP(Management Services Provider)などで複数の顧客のリソースを管理する場合に顧客ごとにさくらのクラウドの会員IDを分けたりアカウントを分けたりしていることがあります。この場合それぞれでAPIキーは当然異なることとなります。usacloudではAPIキー設定ファイルを複数作成しておき、必要に応じて切り替えて利用する「プロファイル機能」を持っていますので、こういったケースにも柔軟に対応可能です。

プロファイルの作成

プロファイルを作成するには以下のコマンドを実行します。

$ usacloud config edit [プロファイル名]

プロファイル名には任意の名前を指定可能です。省略した場合は「default」という名前になります。

以下のように実行します。

# 顧客A(customer01)用のAPIキー設定ファイル作成
$ usacloud config edit customer01

# 顧客B(customer02)用のAPIキー設定ファイル作成
$ usacloud config edit customer02

なお、先ほどAPIキー設定ファイルの作成時にusacloud configコマンドを利用すると解説しましたが、これは以下のようにeditサブコマンドの省略形となっています。

# APIキー設定ファイルの作成コマンド(先ほど解説したもの)
$ usacloud config

# 以下のコマンドと等価(サブコマンドとプロファイル名が省略されている)
$ usacloud config edit default

プロファイルの利用方法

現在登録されているプロファイルは以下のコマンドで一覧表示できます。

$ usacloud config list #一覧表示

プロファイルの切り替えや確認は以下のようにします。

# 現在利用中のプロファイル名を表示
$ usacloud config current

# プロファイルの切り替え(customer01を利用する場合)
$ usacloud config use customer01

また、グローバルオプションを指定することで、そのコマンド実行時だけ利用するプロファイルを指定可能です。

# 普段はcustomer01プロファイルを利用するが、今回だけcustomer02を利用する場合
$ usacloud --config customer02 [対象リソース] [サブコマンド]

 

大量のオプション入力をファイル化する「テンプレート機能」

コマンドの中には、サーバの作成のように場合によっては大量のオプション入力が必要なケースがあります。

#大量のオプション入力の例
$ usacloud server build \
    --core 2 \
    --memory 4 \
    --os-type centos \
    --disk-size 100 \
    --hostname ManyOptionExample \
    --password ************** \
    --disable-password-auth \
    --ssh-key-mode generate \
    --name ManyOptionExample \
    --description "Example host" \
    --tags web

似た構成のサーバを複数立てる場合など、オプションを都度入力するのは大変です。そこで、あらかじめパラメータを外部ファイル化しておき、パラメータテンプレートとして用いる「テンプレート機能」を用意しています。

パラメータテンプレートのスケルトン生成

各コマンドに対し--generate-skeletonオプションを指定することで、該当コマンド(サブコマンド)に指定可能なパラメータがあらかじめ記載されたパラメータテンプレートが生成できます。

# server buildコマンド用のパラメータファイルを生成
$ usacloud server build --generate-skelton > parameter.json

# 以下のようなファイルが生成される
$ cat parameter.json
{
	"core": 1,
	"memory": 1,
	"disk-mode": "create",
	"os-type": "",
	"disk-plan": "ssd",
	"disk-connection": "virtio",
	"disk-size": 20,
	"source-archive-id": 0,
	"source-disk-id": 0,
	"distant-from": [
		0
	],
	"disk-id": 0,
	"iso-image-id": 0,
	"network-mode": "shared",
	"interface-driver": "virtio",
	"packet-filter-id": 0,
	"switch-id": 0,
	"hostname": "",
	"password": "",
	"disable-password-auth": false,
	"ipaddress": "",
	"nw-masklen": 24,
	"default-route": "",
	"startup-scripts": [
		""
	],
	"startup-script-ids": [
		0
	],
	"startup-scripts-ephemeral": true,
	"ssh-key-mode": "",
	"ssh-key-name": "",
	"ssh-key-ids": [
		0
	],
	"ssh-key-pass-phrase": "",
	"ssh-key-description": "",
	"ssh-key-private-key-output": "",
	"ssh-key-public-keys": [
		""
	],
	"ssh-key-public-key-files": [
		""
	],
	"ssh-key-ephemeral": true,
	"name": "",
	"description": "",
	"tags": [
		""
	],
	"icon-id": 0,
	"assumeyes": false,
	"param-template": "",
	"param-template-file": "",
	"generate-skeleton": false,
	"output-type": "",
	"column": [
		""
	],
	"quiet": false,
	"format": "",
	"format-file": "",
	"us-keyboard": false,
	"disable-boot-after-create": false
}

このファイルには該当コマンドで指定可能な全てのオプションが含まれています。ファイルを編集し、値の設定や不要な項目の除去を行っておきます。

パラメータテンプレートの利用

以下のように利用します。パラメータテンプレートの値はコマンドラインオプションで上書きすることも可能です。

# パラメータテンプレートとしてparameter.jsonを指定する場合
$ usacloud server build --param-template-file parameter.json
# パラメータテンプレート + オプションで個別に上書き
$ usacloud server build --param-template-file parameter.json --name OverwriteName

 

自動化のための機能

usacloudはcron/タスクスケジューラでの実行やJenkins/TravisCIなどのCI/CD連携を行いやすくするための機能を持っています。

確認ダイアログに自動応答する--assumeyesオプション

usacloudのコマンドの中には実行前に確認ダイアログを表示するものがあります。

# 確認ダイアログの例
$ usacloud server boot example

Target resource IDs => [
	123456789001,
	123456789002
]
Are you sure you want to boot?(y/n) [n]:

usacloudを自動実行する際にダイアログが表示されてしまうと実行が中断されたままとなってしまいます。この場合、--assumeyesオプション(または-yオプション)を指定することで確認ダイアログに自動応答させることが可能です。

ステートレスな実行環境のためのDockerイメージ + 環境変数

usacloudはDockerイメージでの配布も行なっています。また、APIキーを環境変数経由で指定することもできますので、TravisCI + DockerというようなステートレスなCI環境での利用も簡単に行えるようになっています。

以下のように利用します。

#APIキーは環境変数に設定しておく
# export SAKURACLOUD_ACCESS_TOKEN=APIトークン
# export SAKURACLOUD_ACCESS_TOKEN_SECRET=APIシークレット
# export SAKURACLOUD_ZONE=対象ゾーン

# Dockerでusacloudを起動、APIキーを環境変数で渡す
$ docker run -it --rm \
    -e SAKURACLOUD_ACCESS_TOKEN \
    -e SAKURACLOUD_ACCESS_TOKEN_SECRET \
    -e SAKURACLOUD_ZONE \
    sacloud/usacloud [対象リソース] [...]

定型業務を楽にするコマンドの紹介

ここでは筆者がよく使う定型業務を楽にするためのコマンド群をご紹介いたします。実際に筆者が必要を感じて実装したコマンド群で、どれも利用頻度が高いコマンドとなっています。

 

サーバ電源の一括ON/OFF

さくらのクラウドのサーバは起動中のみ課金されるようになっています。(参考:ご利用料金の計算方法)
このため、開発用のサーバなどの常時起動が必要でないものについては業務時間中だけ起動しておくようにすれば利用料金を抑えられます。

# 業務終了時に一括で電源OFF("development"タグを持つサーバが対象)
$ usacloud server shutdown -y --selector development

# 業務開始時に一括で電源ON
$ usacloud server boot -y --selector development

これを定期実行するようにcron/タスクスケジューラを設定したり、slackのBOTに組み込んでChatOps風に利用するのも便利かと思います。

 

サーバへSSH接続(Windowsも一部OK)

サーバ名を指定してSSH接続を行うことが可能です。

# SSH接続(コピー元アーカイブごとのデフォルトユーザーで接続)
$ usacloud server ssh [ID or サーバ名]

# ユーザ名を指定して接続
$ usacloud server ssh --user ユーザ名 [ID or サーバ名]

# 秘密鍵ファイルを指定して接続
$ usacloud server ssh -i 秘密鍵ファイルのパス [ID or サーバ名]

 

なお、パブリックアーカイブからサーバを作成している場合、デフォルトではアーカイブごとのデフォルトユーザーでSSH接続を行うようになっています。
(例: Ubuntuの場合"ubuntu"、RancherOSの場合"rancher"など)

また、単発のコマンドを実行するだけであればssh-execサブコマンドが利用可能です。

# 単発のコマンドを実行
$ usacloud server ssh-exec [ID or サーバ名] 実行したいコマンド

# 実行例(uname -aを実行)
$ usacloud server ssh-exec your-server-name uname -a

server sshの場合は各OSのSSHクライアントソフトウェアを利用しますが、ssh-execの場合はgoで実装されたSSHクライアント機能を用いるため、WindowsのコマンドプロンプトのようなデフォルトではSSHクライアントが用意されていない環境からでも利用可能です。

 

サーバとのファイルのやりとり(SCP)

サーバ名を指定してscpでのファイルのやりとりが可能です。(サーバ側にてssh接続できるように構成されている必要があります。)
リモートからローカルへの送信、ローカルからリモートへの送信の両方に対応しています。また、WindowsなどのデフォルトでSSHクライアントが用意されていない環境でも利用可能です。

# ローカルからリモート
# target.txtというファイルをリモートの/root/配下へコピー
$ usacloud server scp target.txt [サーバID or サーバ名]:/root/

# リモートからローカル
$ usacloud server scp [サーバID or サーバ名]:/root/ ./

server sshと同じくユーザ名の自動補完が行われます。またコマンドラインオプションでのユーザ名や秘密鍵の指定についてもserver sshと同様となっています。

 

サーバへのVNC接続(VPC内でもOK)

さくらのクラウドでは各マシンに対するVNC接続が行えるようになっています。ISOイメージからのサーバインストール中やVPC内にあり直接インターネット接続できない場合のようなSSHやリモートデスクトップ接続ができないサーバでも操作可能です。

$ usacloud server vnc [サーバ名 or ID]

usacloudコマンドを実行しているマシンのデフォルトのVNCクライアントが起動するようになっています。macOSだと「画面共有.app」が起動します。Windowsの場合は拡張子「.vnc」に対しVNCクライアントを関連づけておく必要があります。

 

サーバのメンテナンス情報の確認

時折サーバが格納されている物理ホストにおいてメンテナンス作業が発生することがあります。通常はメールやコントロールパネルのお知らせなどで告知されますが、usacloudを用いることで利用中のサーバにメンテナンス情報があるかどうかを取得することが可能です。

# 現在のゾーン内の全てのサーバにおけるメンテナンス情報を取得
$ usacloud server maintenance-info

メンテナンス情報がある場合のみ結果が表示されます。監視ソフトウェア/サービスと組み合わせて利用すると良いでしょう。

リソース利用状況の確認(サマリー)

コントロールパネルのダッシュボード機能のように、さくらのクラウド上のリソースの利用状況を一覧表示時することが可能です。

# リソース利用状況を表示(全ゾーン)
# --paid-resources-onlyオプションで課金対象リソースのみ表示も可能
$ usacloud summary
+---------------+------+------+------+------+-------+
|     Name      | is1a | is1b | tk1a | tk1v | Total |
+---------------+------+------+------+------+-------+
| Server        | 0    | 2    | 0    | 0    | 2     |
| Disk          | 0    | 2    | 0    | 0    | 2     |
| Archive       | 0    | 0    | 0    | 0    | 0     |
| ISOImage      | 0    | 1    | 0    | 0    | 1     |
| Switch        | 0    | 1    | 3    | 1    | 5     |
| Internet      | 0    | 0    | 2    | 1    | 3     |
| PacketFilter  | 3    | 1    | 0    | 0    | 4     |
| Bridge        | -    | -    | -    | -    | 0     |
| AutoBackup    | 0    | 0    | 0    | 0    | 0     |
| LoadBalancer  | 0    | 1    | 0    | 0    | 1     |
| VPCRouter     | 0    | 1    | 0    | 0    | 1     |
| Database      | 0    | 2    | 1    | 0    | 3     |
| GSLB          | -    | -    | -    | -    | 0     |
| DNS           | -    | -    | -    | -    | 1     |
| SimpleMonitor | -    | -    | -    | -    | 0     |
| License       | -    | -    | -    | -    | 0     |
| SSHKey        | -    | -    | -    | -    | 1     |
| StartupScript | -    | -    | -    | -    | 0     |
| Icon          | -    | -    | -    | -    | 1     |
+---------------+------+------+------+------+-------+

なお、ダッシュボードと比べると以下の点が異なりますのでご注意下さい。

  • 各リソースの数は前日までの値ではなく現在の値が利用される
  • オブジェクトストレージは非対応
  • ウェブアクセラレータは非対応
  • 課金額表示は非対応

 

ISOイメージのアップロード

さくらのクラウドではお好みのISOイメージをアップロードして利用することが可能です。ただ、ISOイメージをアップロードするには、

1) コントロールパネルからISOイメージリソースを作成(保存領域の確保が行われる)
2) 表示されるFTP接続情報を控える
3) 手元のマシンでFTPクライアントを起動、先ほどの接続情報を入力
4) ISOイメージのアップロード

という手順が必要で割と煩雑な作業となります。

usacloudであれば以下のようにISOイメージをアップロード可能です。

# ISOイメージのアップロード
$ usacloud iso-image create --name example --iso-file example.iso

なお、アップロードしたISOイメージを利用してサーバ作成を行う場合は以下のドキュメントを参考してください。

参考: usacloudドキュメント - サーバ作成/ブランクディスク

 

請求CSVのダウンロード

請求CSVをダウンロード可能です。ダウンロードしたCSVは社内の請求システムとの連動やメール送信などでご活用いただけると思います。
※請求情報関連コマンドの実行にはAPIキーに「請求情報」に対するアクセス権が必要です。必要に応じてコントロールパネルから設定を行っておいてください。

# 最新の請求CSVを取得
$ usacloud bill csv

# 過去のデータを参照する場合は一旦bill listを実行して請求ID(BillID)を調べる
$ usacloud bill list
+----------+---------+------+--------+
|  BillID  |  Date   | Paid | Amount |
+----------+---------+------+--------+
| 12345003 | 2017/10 | -    | -      |
| 12345002 | 2017/09 | true | ****** |
| 12345001 | 2017/08 | true | ****** |
+----------+---------+------+--------+

# 調べたIDを指定することで過去データもダウンロード可能
$ usacloud bill csv --bill-id [請求ID]

この章では定型業務を楽にするためのコマンドを紹介しました。今回は紹介しきれなかったですが、この他にもデータベース/VPCルータのログ参照機能や、バックアップ取得、アクティビティモニタを参照して外部の監視/モニタリングサービスと連動するといった機能など様々な機能/応用方法があります。定型業務や複雑な手順の自動化/省力化の一助にusacloudを是非お試しください。

 終わりに

さくらのクラウド公認CLIであるusacloudについてご紹介しました。
usacloudはオープンソースとして開発しており、随時イシューの登録や機能追加要望、プルリクエストを受け付けています。

GitHub: sacloud/usacloud

皆様からのご要望を元に機能追加されることも多いですので、是非お気軽にイシューなど登録してみてください!!


クレジット

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