saklientを使ってスクリプトでサーバを立ち上げてみよう

先日リリースしたさくらのクラウド用ライブラリsaklientはお試しいただいたでしょうか。自分の好きなプログラミング言語を使ってさくらのクラウドを操作できますので、外部システムと連携させることも容易です。

saklientにはPHP/C#/Python/Ruby/Perl/Node.jsが用意されていますが、今回はRuby版を使ってサーバを立ち上げてみたいと思います。

まずはインストール

Ruby版のインストールはRubygemsを使って行います。PHPであればPackagist、PythonであればPyPIなど各言語の一般的なパッケージ管理に対応しています。

$ gem install saklient
Fetching: saklient-0.0.2.8.gem (100%)
Successfully installed saklient-0.0.2.8
1 gem installed

使ってみる

では早速試してみます。まず基本はライブラリの読み込みと、認証になります。API操作のためにAPIキーが必要です。設定画面のAPIキーから取得または作成ができるようになっています。

認証はAPIキーで取得できるトークン、シークレットとゾーンで行います。


APIキー画面

ゾーンは執筆時点で4つあります。

tk1a
東京第1ゾーン
is1a
石狩第1ゾーン
is1b
石狩第2ゾーン
tk1v
サンドボックス

になります。

require 'saklient/cloud/api'
token  = 'your-token'
secret = 'your-secret'
zone   = 'is1a'
api = Saklient::Cloud::API::
       authorize(token, secret, zone)

このようなコードで認証を行います。

認証が終わればいよいよサーバ立ち上げになります。サーバを立ち上げるまでにはいくつかのステップがあります。

  1. ディスクの選択と作成
  2. サーバプランの選定
  3. ネットワーク インタフェースの追加
  4. ディスクとサーバの接続
  5. スタートアップスクリプトの選択(必要があれば)
  6. ディスクの修正
  7. サーバ起動

となります。APIを使った場合もこの操作を順番に行っていく形になります。それでは順番に見ていきましょう。

1. ディスクの選択と作成

ディスクの選択は新規ディスク、既存ディスクそしてディスクレスの3つから選択します。そして新規ディスクの際にはディスクサイズとアーカイブを選択します。

archives = api.archive.
  with_name_like('CoreOS').
  with_size_gib(20).
  with_shared_scope.
  limit(1).
  find
archive = archives[0]

こちらがその処理を行っている部分になります。ディストリビューションの名前で検索できるのでどんなサーバを立ち上げたいかが簡単に指定できます。

アーカイブを選択したらディスクの作成を行います。

disk = api.disk.create
disk.name = name
disk.description = description
disk.tags = [tag]
disk.plan = api.product.disk.ssd
disk.source = archive
disk.save

ディスクの名前(name)、説明(description)、タグ(tags)は管理上のものです。分かりやすい設定を行ってください。planとしてSSDか標準プランが選べます。

saveを実行した時点でディスクが作成されます。

2. サーバプランの選定

次にサーバプランの選定を行います。コア数、メモリ容量が選択できます。

server = api.server.create
server.name = name
server.description = description
server.tags = [tag]
server.plan = api.product.server.get_by_spec(cpu, mem)
server.save

CPUは1〜12コア、メモリは1〜5GBまで指定ができます。こちらの名前(name)、説明(description)、タグ(tags)も管理上のものです

3. ネットワーク インタフェースの追加

ディスクとサーバが準備できたらNICを用意します。こちらはインターネットへの接続、スイッチへの接続そして接続なしの3パターンから選択ができます。インターネット接続の場合は1 IPの共有セグメントになります。

iface = server.add_iface
iface.connect_to_shared_segment

4. ディスクとサーバの接続

アーカイブを選択した場合、ディスクのコピーが完了するまではしばらくかかります。そこで待ちの処理を行います。

disk.sleep_while_copying

これが返ってきたらディスクの準備ができたということなので、サーバと接続します。

disk.connect_to(server)

5. スタートアップスクリプトの選択(必要があれば)

スタートアップスクリプトを使うとDocker UIやLAMP、ownCloud、Redmine、WordPressなどが起動時にすでに立ち上がっている状態にできます。こちらもまたAPIを通じて指定が可能です。

scripts = api.script.
  with_name_like('WordPress').
  with_shared_scope.
  limit(1).
  find
script = scripts[0]

アーカイブと同じくLike検索ができるのが手軽ですね。

6. ディスクの修正

ディスクの修正とはあらかじめ指定したホスト名、ログインパスワード、公開鍵、スタートアップスクリプトを反映してくれる機能です。まだこの時点ではサーバは起動していないのが面白いところです。

diskconf = disk.create_config
diskconf.host_name = host_name
diskconf.password = password
diskconf.ssh_key = ssh_public_key
diskconf.scripts.append(script)
diskconf.write

7. サーバ起動

そして最後にサーバ起動です。

server.boot

bootを実行して少し待つと true が返ってきますので、そうするとサーバの情報が確認できるようになります。

> server.ifaces[0].ip_address
 => "133.242.19.144"
> server.ifaces[0].mac_address
 => "9C:A3:BA:22:0B:7A"

スクリプト全体や他のプログラミング言語でのコーディング例はsaklientのページで確認できます。いつも同じように操作してさくらのクラウドをお使いでしたら、そこはぜひスクリプト化して間違いのない、かつ楽しいサーバ管理をしてください!

saklient sample