さくらのクラウド/オブジェクトストレージで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が異なるサーバを煩雑化しないため使ってみたいソフトウェアです。