概要
libsacloudってなに?
さくらのクラウドAPIライブラリとしてsaklientというのがあるのですが、残念ながらGo向けはありませんでした。
そこでsaklientを参考に、Go用にスクラッチ開発したのがlibsacloudです。
ある程度の使用感はsaklientと同じまま、Goでさくらのクラウドが容易に操作できるようになりました。
Goで開発すれば、各プラットフォーム向けにクロスコンパイルして単一バイナリにできるので
ツールの配布が非常に楽ですよ
libsacloudの利用例
今回はlibsacloudの紹介を兼ねて簡単なCLIツールsacloud-upload-image
を作成してみました。
libsacloudを使って、さくらのクラウド上にISOイメージのアップロードを行うためのCLIです。
libsacloudのREADMEにあるファイルアップロードサンプルの応用例となっています。
サンプルはGoで作成していますので、 Windows/Linux/Mac(OSX)全てで動かせます!
libsacloudを使うことでソースコードの総行数200行以下のシンプルな作りすることが出来ました。
サンプルアプリsacloud-upload-image
サンプルアプリsacloud-upload-image
は以下のリポジトリで公開しています。
概要
さくらのクラウドにはISOイメージという機能があります。
通常さくらのクラウドでサーバを作成する際はあらかじめ初期設定済みのOSイメージ(アーカイブ)からOSを選択するのですが、自分でISOイメージをアップロードして好きなOSをインストールすることも可能です。
ただ、ISOイメージのアップロードは割と煩雑な作業です。詳細はこちらのページに記載されているのですが、
1) コントロールパネル上でISOファイル用領域を作成
2) ファイル領域へのFTP接続情報が表示されるため控えておく
3) FTPS+PASV対応のFTPクライアントからアップロード
という手順が必要になります。
sacloud-image-upload
ではこれらの作業を自動化しました。
curlなどのコマンドで取得したISOイメージをパイプでsacloud-image-upload
に渡すことでさくらのクラウド上へアップロード出来ます。
インストール方法
こちらのリリースページから最新バージョンのバイナリをダウンロードして展開、実行権を付与してください。
以下のプラットフォーム用のバイナリを用意しています。
- darwin(i386/amd64)
- linux(i386/amd64)
- windows(i386/amd64)
コマンド書式
オプション、イメージのパス、イメージ名を指定するとアップロード実施します。
以下の書式で実行できるようにします。
$ sacloud-upload-image [オプション] [イメージ名]
オプション
-token : さくらのクラウドのAPIキー(アクセストークン)
-secret : さくらのクラウドのAPIキー(シークレット)
-zone : 作成するゾーン (is1a/is1b/tk1a) デフォルト:is1a
-file : アップロードするISOファイルのパス
zone
は以下の値をとります
is1a : 石狩第1ゾーン is1b : 石狩第2ゾーン tk1a : 東京第1ゾーン
APIキーの設定方法
上記のオプションで指定する、または環境変数も利用できます。
$ sacloud-upload-image -token=[アクセストークン] -secret=[シークレット] [イメージ名]
$ export SAKURACLOUD_ACCESS_TOKEN=[アクセストークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[シークレット]
$ sacloud-upload-image [イメージ名]
ISOファイルの指定方法
ISOファイルは-file
オプション、またはパイプなどで他コマンドの結果を受け取れるようにもしておきます。
curl
などでISOファイルを取得、即さくらのクラウドへアップロード出来ちゃいますよ!
# curlからパイプで受け取る
$ curl -L http://[ISOイメージのURL] | sacloud-upload-image [オプション] [イメージ名]
# リダイレクトで受け取る(CoreOS.isoというファイルをアップロードする例)
$ sacloud-upload-image [オプション] [イメージ名] < CoreOS.iso
利用例:curlでweb上からISOイメージをダウンロード & さくらのクラウドへアップロード
CentOS Atomic Hostの例
# APIキーを環境変数で指定する
$ export SAKURACLOUD_ACCESS_TOKEN=[アクセストークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[シークレット]
# CentOS Atomic Host(http://www.projectatomic.io)の例
$ curl -L http://cloud.centos.org/centos/7/atomic/images/CentOS-Atomic-Host-7-Installer.iso | \
./sacloud-upload-image "CentOS Atomic Host"
CoreOSの例
# APIキーを環境変数で指定する
$ export SAKURACLOUD_ACCESS_TOKEN=[アクセストークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[シークレット]
# CoreOS(https://coreos.com)の例
$ curl -L https://stable.release.core-os.net/amd64-usr/current/coreos_production_iso_image.iso | \
./sacloud-upload-image "CoreOS stable"
[開発者向け]実装のポイント
200行に満たないソースコードですので実際にソースを見ていただくのが早いです。
数点だけポイントを解説します。
ライブラリのインポート
import文でgithub.com/yamamoto/febc/libsacloud/api
を指定します。
お好みで別名を当ててもいいでしょう。今回はAPI
という名前でインポートしています。
// libsacloudを"API"という名前でインポート
import API "github.com/yamamoto-febc/libsacloud/api"
API利用開始
API利用前にAPIクライアントの初期化が必要です。
初期化にはNewClient
関数でアクセストークン、シークレット、ゾーンを指定します。
以後はNewClient
関数の戻り値api
を使えばAPI呼び出しができるようになります。
// APIクライアント作成
api := API.NewClient(params.token, params.secret, params.zone)
さくらのクラウド上へリソース作成
今回のサンプルアプリで利用するリソース(ISOイメージ)の作成を行います。
この辺りの使用感がsaklientと若干異なりますので注意が必要です。
// 1) 空のISOイメージオブジェクトを作成
newImage := api.CDROM.New()
// 2) 必要な値を設定
newImage.Name = params.imageName
newImage.SizeMB = 5120
// 3) API呼び出しでリソース作成
image, ftp, err := api.CDROM.Create(newImage)
api
配下にlibsacloudで操作できるリソースがぶら下がっています。
どんなリソースが利用できるかはAPIドキュメントなどを参照ください。
最後に
Goによる開発パワーをさくらのクラウドで活かせるlibsacloudをぜひお試しください。