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

編集部注:本記事は2021年3月まで提供しておりました旧オブジェクトストレージサービスに関する情報です。現行のオブジェクトストレージとは互換性のないAPIを用いているため、現在はご利用いただけません。ご了承ください。
クラウドの利点はサーバの増減がとても簡単にできることです。しかし台数が増えれば管理も煩雑になりますし、減らす際にも慎重にやらないとミスが発生する可能性があります。
そうしたヒューマンエラーを防ぐためにもコードによる自動化は大事なことです。そこで今回はさくらのクラウドで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キーを取得してください。

$ 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が異なるサーバを煩雑化しないため使ってみたいソフトウェアです。