Goとlibsaloudでさくらのクラウド用CLIを素早く作ろう

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

libsacloudってなに?

さくらのクラウドAPIライブラリとしてsaklientというのがあるのですが、残念ながらGo向けはありませんでした。

そこでsaklientを参考に、Go用にスクラッチ開発したのがlibsacloudです。

ある程度の使用感はsaklientと同じまま、Goでさくらのクラウドが容易に操作できるようになりました。

Goで開発すれば、各プラットフォーム向けにクロスコンパイルして単一バイナリにできるので
ツールの配布が非常に楽ですよ:thumbsup::thumbsup::thumbsup:

libsacloudの利用例

今回はlibsacloudの紹介を兼ねて簡単なCLIツールsacloud-upload-imageを作成してみました。

libsacloudを使って、さくらのクラウド上にISOイメージのアップロードを行うためのCLIです。
libsacloudREADMEにあるファイルアップロードサンプルの応用例となっています。

:star2: サンプルはGoで作成していますので、 Windows/Linux/Mac(OSX)全てで動かせます! :star2:

libsacloudを使うことでソースコードの総行数200行以下のシンプルな作りすることが出来ました。


サンプルアプリsacloud-upload-image

:bulb:サンプルアプリsacloud-upload-imageは以下のリポジトリで公開しています。:bulb:

sacloud-upload-image(GitHub)

概要

さくらのクラウドには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という名前でインポートしています。

cli.go(import部分)
// libsacloudを"API"という名前でインポート
import API "github.com/yamamoto-febc/libsacloud/api"

API利用開始

API利用前にAPIクライアントの初期化が必要です。
初期化にはNewClient関数でアクセストークン、シークレット、ゾーンを指定します。
以後はNewClient関数の戻り値apiを使えばAPI呼び出しができるようになります。

cli.go(APIクライアント作成)
    // APIクライアント作成
    api := API.NewClient(params.token, params.secret, params.zone)

さくらのクラウド上へリソース作成

今回のサンプルアプリで利用するリソース(ISOイメージ)の作成を行います。
この辺りの使用感がsaklientと若干異なりますので注意が必要です。

cli.go(さくらのクラウド上にISOイメージ格納領域を作成)
    // 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をぜひお試しください。