さくらのクラウド/オブジェクトストレージでInfrastructure as Codeを実現する「Sakurraform」レビュー

sakurraform-map

クラウドの利点はサーバの増減がとても簡単にできることです。しかし台数が増えれば管理も煩雑になりますし、減らす際にも慎重にやらないとミスが発生する可能性があります。

そうしたヒューマンエラーを防ぐためにもコードによる自動化は大事なことです。そこで今回はさくらのクラウドでInfrastructure as Codeを実現するSakurraformを紹介します。Ruby製のオープンソース・ソフトウェア(MIT License)になります。

Sakurraformのインストール

SakurraformはRubyで動きます。まずGemfileを作成し、以下のような内容を記述します。

$ cat Gemfile
source 'https://rubygems.org'
gem 'fog', git: 'https://github.com/fog/fog.git', ref: 'master'
gem 'sakurraform'

そしてインストールします。

$ bundle install

これで Sakurraform がインストールされました。

Sakurraformの使い方

まず初期化を行います。別途管理画面からAPIキーを取得してください。

APIキーメニュー

APIキーメニュー
$ sakurraform init
      create  .sakuracloud
Sakuracloud_api_token(required) ?  AAAAAAAAAAAAAAAAAAAAAAAAAAA
Sakuracloud_api_token_secret(required) ?  BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Sakura Base Storage buket name(optional) ?  
Sakura Base Storage token(optional) ?  
      create  .sakuracloud/credentials

これを見て分かる通り、さくらのクラウド オブジェクトストレージも管理が可能です。なお、.sakuracloudというディレクトリはカレントディレクトリの中に作成されます。つまりプロジェクトやクライアントごとにディレクトリやトークン、バケットを分けて管理できる仕組みです。

まずサーバの設計プランを生成します。

$ sakurraform plan generate
      create  state
      create  state/network
      create  state/server
      create  plan/network.yml
      create  plan/server.yml

planディレクト以下にそれぞれネットワークとサーバの設定が生成されます。ファイルは次のようになっています。

$ cat plan/server.yml 
---
server:
  - name: server1
    serverplan: 2001
    sshkey: <%= ENV['SAKURA_SSH_KEYID'] %>
    volume:
      diskplan: 4
      sourcearchive: 112500463685
    switch: network[defaultrouter]
    meta:
      network_offset: 3
      chef_environment: null
      chef_role:
        - aaa
        - bbb
  - name: server2
    serverplan: 2001
    sshkey: <%= ENV['SAKURA_SSH_KEYID'] %>
    volume:
      diskplan: 4
      sourcearchive: 112500463685
    switch: network[defaultrouter]
    meta:
      network_offset: 4
      chef_environment: null
      chef_role:
        - aaa
        - bbb

Chefの設定ができますので柔軟にサーバセットアップができるでしょう。

ではこのままサーバ設定を実行します。

 sakurraform plan apply
Create new network defaultrouter
[fog][WARNING] Create Router with public subnet
[fog][WARNING] Waiting available new router...
.......      create  state/network/defaultrouter-fba5f6e0-68c0-0132-1ad5-20c9d088151f.yml
Create new network defaultrouter2
[fog][WARNING] Create Router with public subnet
[fog][WARNING] Waiting available new router...
......      create  state/network/defaultrouter2-06ae06d0-68c1-0132-1ad5-20c9d088151f.yml
Create new server server1
[fog][WARNING] Create Server
[fog][WARNING] Create Volume
[fog][WARNING] Waiting disk until available
.[fog][WARNING] Modifing disk
Associate 153.120.107.100 to server1
      create  state/server/server1-11215760-68c1-0132-1ad5-20c9d088151f.yml
Create new server server2
[fog][WARNING] Create Server
[fog][WARNING] Create Volume
[fog][WARNING] Waiting disk until available
.[fog][WARNING] Modifing disk
Associate 153.120.107.101 to server2
      create  state/server/server2-729792c0-68c1-0132-1ad5-20c9d088151f.yml

このようにログが流れてサーバが立ち上がりました。終わったらネットワーク図をチェックします。

$ sakurraform map

とコマンドを叩くとWebブラウザが立ち上がってネットワーク図が表示されます。これで予定通りサーバが立ち上がっているか確認します。

ネットワーク図

ネットワーク図
サーバ一覧

サーバ一覧

ではもう一度そのままサーバ設定を適用してみます。

$ sakurraform plan apply
defaultrouter already available as defaultrouter-fba5f6e0-68c0-0132-1ad5-20c9d088151f
defaultrouter2 already available as defaultrouter2-06ae06d0-68c1-0132-1ad5-20c9d088151f
server1 already available as server1-11215760-68c1-0132-1ad5-20c9d088151f
server2 already available as server2-729792c0-68c1-0132-1ad5-20c9d088151f

このように表示されて、設定が重複して適用されないようになっています。

マップではなく状態を確認する場合にはstatusを実行します。

$ sakurraform status
  Nework resources
  +----------------+-----------------------------------------------------+--------------+--------------------+-----------------+
  | name           | sakurraform_name                                    | sakura_id    | subnet             | gateway         |
  +----------------+-----------------------------------------------------+--------------+--------------------+-----------------+
  | defaultrouter  | defaultrouter-fba5f6e0-68c0-0132-1ad5-20c9d088151f  | 112600996959 | 153.120.107.96/28  | 153.120.107.97  |
  +----------------+-----------------------------------------------------+--------------+--------------------+-----------------+
  | defaultrouter2 | defaultrouter2-06ae06d0-68c1-0132-1ad5-20c9d088151f | 112600996962 | 153.120.107.112/28 | 153.120.107.113 |
  +----------------+-----------------------------------------------------+--------------+--------------------+-----------------+

  Server resources
  +---------+----------------------------------------------+--------------+-----------------+--------+---------------------------+
  | name    | sakurraform_name                             | sakura_id    | ipaddress       | status | last_state_changed        |
  +---------+----------------------------------------------+--------------+-----------------+--------+---------------------------+
  | server1 | server1-11215760-68c1-0132-1ad5-20c9d088151f | 112600996964 | 153.120.107.100 | up     | 2014-12-18T17:54:48+09:00 |
  +---------+----------------------------------------------+--------------+-----------------+--------+---------------------------+
  | server2 | server2-729792c0-68c1-0132-1ad5-20c9d088151f | 112600996979 | 153.120.107.101 | up     | 2014-12-18T17:57:08+09:00 |
  +---------+----------------------------------------------+--------------+-----------------+--------+---------------------------+

さくらのクラウド オブジェクトストレージを管理してみる

続いてさくらのクラウド オブジェクトストレージに関するコマンドを叩いてみます。APIキーとバケット名を設定した状態で実行します。

$ sakurraform bs ls
  +--------------------------------------------------+----------------+---------------------+---------------------------+--------------------------------------------------------------------------------------------+
  | key                                              | content_length | content_type        | last_modified             | public_url                                                                                 |
  +--------------------------------------------------+----------------+---------------------+---------------------------+--------------------------------------------------------------------------------------------+
  | images/                                          | 0              | binary/octet-stream | 2014-02-20 15:37:30 +0900 | http://mobiletouch. b.sakurastorage.jp/images/                                          |
  +--------------------------------------------------+----------------+---------------------+---------------------------+--------------------------------------------------------------------------------------------+
  | images/00fd271a22a2bd1044f2f0e161df0ed3.200.png  | 53045          | image/png           | 2014-03-09 11:50:04 +0900 | http://mobiletouch. b.sakurastorage.jp/images/00fd271a22a2bd1044f2f0e161df0ed3.200.png  |
  +--------------------------------------------------+----------------+---------------------+---------------------------+--------------------------------------------------------------------------------------------+
  :

このように表示されます。ファイルが大量にあると時間がかかるのでご注意ください。

ファイルをダウンロードする場合はcatを使います。

$ sakurraform bs cat images/00fd271a22a2bd1044f2f0e161df0ed3.200.png > image.png

このように実行すればバイナリファイルもダウンロードできます。

さくらのクラウド オブジェクトストレージについてはこの他、deleteコマンドでファイルの削除ができます。


Sakurraformはさくらのクラウドで、オブジェクトストレージを活用したサーバ運用を考える上で強力なツールになりそうです。案件ごとにアーキテクチャが異なる場合や、サービスごとに台数やOSが異なるサーバを煩雑化しないため使ってみたいソフトウェアです。

higanworks/sakurraform