[さくらのクラウド] Debian の chef/serverspec の開発環境を準備する(β版) [アーカイブ]

やりたいことが多くて発散して、逆に何もしない、と言う一週間を過ごしてしまい、時間の重要さを不惑になってから感じ取っている今日この頃ですが、皆様いかがお過ごしでしょうか、しょっさんです。

sakura & cloud

縦長いよ。

しかしあれです。なんもやる気が無い割には、しっかりとイロイロやることはやっているもんです。ようやっと SoftLayerを使えるようにしましたし、毎日、さくらのクラウドにはお世話になっていますし、ConoHaに至っては、本番サーバとして使ってたりします。自宅鯖での限りあるリソースと、サーバの分散といった観点から考えて、VPSやクラウドの利用は必然ですね。運用資金の予算を作っていなかったので、これからどうしましょうという感じではありますが。

開発環境を「さくらのクラウド」にしたワケ

さて、そんなこんなで、インフラ屋さんの私がまず必要だったのは、ChefServerspecでインフラを構成するための開発環境です。自宅の iMacでも Oracle VM VirtualBox + Vagrant で開発をしていた時期があります。ただ Yosemite になってから、VM の環境が著しく不快であることと、自分のとこのリソースを使い放題なことで、逆に複雑な開発環境になっていって破綻し始めました。そこで、初心に返って、シンプルなサーバ構成で、単発の開発だけにうまく使えるような、そして時間を区切って集中できるよう、クラウドへ開発環境を持っていくことを考えました。

そこで、今回構成したのが「さくらのクラウド」です。使い方として、Vagrant で制御さえできれば良いので、AWS でも SoftLayerでもなんでも良かったんですけれども、いずれも Provider設定が面倒なのと、「無料枠のチケットを持っていなかった」こと、それと「アーカイブ機能」で、自分の好きなディスク構成で常に vagrant up できるところが簡単に実現できたので、さくらを選択しました。AWS でも AMI使えばいいし、SoftLayer でもなんかできるでしょう。ただ、さくらだとカンタンにできた、それだけです。

IT屋さんに多い気がしているんですが、「実現可能な方法が『機能』として提供されている」とそれだけで、個人の思想的判断から「良し」とされる方がいます。そういった人は好きにそうしてくれればいいです、個人の趣味に口出すつもりもないので。私の判断は「機能として提供されていることは当然として、非機能、特に UI/UXはどうか」と言う点がコストに見合っているかどうかで判断します。Windows はクソだ、とか Macは宗教と言う人に限って、機能厨だけの思想だったりする人が散見されますね。もう一度書きますが、個人の趣味はどうでもいいでススキにしてください、でも、そういう人は個人的に嫌いです。Windwos も Mac も UI/UX の面では、Linux/UNIX と比較して、初心者向けで使いやすいですし、Macは UNIXベースのお陰で、サーバの開発にも面倒が少ないです。そういった側面も含めて、Linuxを使わずに、Macを使い続けてるのが、私の心情です。見た目も大事です。デフォルトの状態で、文字がホントに読みやすい。

閑話休題

ということで、実現できるし、みんなが使っているから AWS というよりも、使い勝手が良かったから「さくら」にしてみました、今回。今後、使い勝手によって AMIを使い倒すようになっているかも知れませんし、個人的な宗教的な問題で SoftLayerしか使わなくなるかも知れませんが、それはまた別の問題。

chef/serverspec の開発環境を準備しよう

前置きが長すぎて、運が悪いと炎上しそうですが、私のことはそっとしておいてください。

さて、「さくらのクラウド」で chef/serverspec が使える環境を準備しましょう。serverspec は remoteから実行するだけなので、ssh使えれば良いから、ここでは「chefを使えるようにしよう」が正確です。では、chef を使える準備をしましょう。

さくらのクラウドで「Debian 7.0 64bit」を起動する

まず、何はともあれベースとなる debianを起動するところから始めます。Vagrantで全てを成したいので、次のようにします。まぁtsahara/vagrant-sakura · GitHubを見れば、使い方はよくわかるでしょうが、こちらにも書いておきます、俺様優しい。

vagrant-sakura plugin のインストール

まず、プラグインをインストールしましょう。0.0.6 だと、証明書エラーが出てしんでましたが、0.0.7 で解消されたようです。多分。それでもうまく行かなければ、なんか他のプラグインをインストールすると治ったりしました。私の場合、”vagrant-proxmox” でうまく行ったので、ご参考にどうぞ。

インストール方法

1
$ vagrant plugin install vagrant-sakura

簡単すぎる

Debian を起動するための Vagrantfile をつくろう

こんな感じです。まず、第一弾。

Vagrantfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "dummy"
  config.ssh.username = "root" #
  config.ssh.private_key_path = File.expand_path "~/.vagrant.d/insecure_private_key" # SSH秘密鍵のパス
  config.vm.provider :sakura do |sakura|
    sakura.server_name = 'sakura_oshiire' # これ反応しないけど、今後も考えて一応
    sakura.server_plan = '1001' # サーバーのプランID (今回は 1CPU 1GBの最安プラン)
    sakura.disk_source_archive = '112600140369' # ディスクアーカイブのID (Debian 7.0 64bit/20GB)
    sakura.access_token = '***-****' # ACCESS TOKEN
    sakura.access_token_secret = '******' # ACCESS TOKEN SECRET
    sakura.sshkey_id = '*****' # 登録したSSH公開鍵のリソースID
    sakura.zone_id = 'is1b' # ゾーンID is1a=石狩第1 is1b=石狩第2
  end
end

見たら分かりますね、ACCESS TOKEN は「さくらのクラウドAPIを使ってみよう(1)——コマンドラインツール「sacloud」から使う – さくらのナレッジ – Part 2」こちらに詳しい。SSH のリソースID も意味ないかもしれん。Debian はなぜか、”root” ユーザです。

サーバプラン、ディスクのアーカイブID は 2015/3/1現在のものです。確認するには、次のコマンドで確認できます。

さくらのクラウド:プランの確認方法

1
# vagrant sakura-list-id

Debian を起動して、chef が動く環境をつくろう

まず、vagrant を使って、起動させてみます。うまくいったら、お慰み。

Vagrant up

1
# vagrant up --provider=sakura

–provider=sakura はなくても起動したように記憶してますが、こういったものはおまじないなので、そのまま入れておきましょう、確実、着実、安全に、がモットー、しょっさんです。おっさんです。

Vagrant で使えるように、コマンド群を並べてみる

うまいこと起動したら「vagrant ssh」とかで、ログインしてみましょう。そしたら、次のコマンドをおもむろに打ちます。script 作っておいてくれても良いです。あたしゃそうしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apt-get update
apt-get upgrade -y
apt-get install sudo rsync curl
groupadd -g 1001 chef
useradd -m -d /home/chef -u 1001 -g 1001 -k /etc/skel/ -s /bin/bash chef
sed -ie '/^root.*ALL$/a chef    ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
mkdir /home/chef/.ssh
cat <<EOF > /home/chef/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
EOF
chmod 700 /home/chef/.ssh
chmod 400 /home/chef/.ssh/authorized_keys
chown -R chef.chef /home/chef/.ssh
curl -L https://www.chef.io/chef/install.sh | bash

Vagrant 標準の、あのinsecure な公開鍵を使う設定です。この辺の鍵の構成は好きにやっちゃってください。 こうやってみると、標準でいろいろとコマンドが足りていないことが分かります。ホントは、Vagrantfilebootstrap.sh とか組み込んで実行してしまえば…とか考えたんですけど、rsycn できないので、/vagrant ディレクトリの sync できないんですよね。困ったもんだ。

細かい説明はしないですが、必要なコマンドを追加して、’chef‘ ユーザを作って、公開鍵を登録して、おもむろに chefのインストールをしているだけです。ここで、一応 “~/.ssh/authorized_keys“を作って準備していますが、Vagrant の insecure key を、”Vagrantfile” で指定しているときは、自動的に準備されるように見受けられます。その辺よく分かってないんですけど、なんだろうか。謎は深まります。

ディスクアーカイブをしよう

いったん、気分的に静止点が取りたいので、ログアウトしてサーバを停止しましょう。

Vagrantでサーバを停止する

1
# vagrant halt

まちがって “destroy” しないように。

今度は、さくらのコントロールパネルにはいります。詳しくは書かないですぜ、親分。

archive in sakura

コンパネのサービスから「ストレージ」→「アーカイブ」ですね、ここでおもむろに「追加」ボタンを押しやがってくださいませ。

create archive in sakura

ここで「アーカイブソース」に”ディスク” を選択して、「ディスク選択」に出てくる1つを選択しましょう。これがさっき起動した Debian です。きっと、多分。その他、名前やらタグ、アイコンは好きにつけてくださいませ。あとで分かるようなヤツ。

ここまでやったら「作成」ボタンでしばらく待ちましょうヽ(´ー`)ノ

アーカイブが完成したら、先ほど作ったサーバは不要なのでさっくり消しちゃいましょう。

サーバの削除

1
# vagrant destroy

ここで気がついたかと思われますが、アーカイブには「お金がかかります」。破産するようなレベルじゃないでしょうが、アホみたいにアーカイブつくっても良いことないので、その辺はうまいことやってください、大人なんだから。

新しく作ったプライベートアーカイブで起動する。

修正箇所は 2点。ユーザ名とディスクのアーカイブIDです。

Vagrantfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "dummy"
  config.ssh.username = "chef" #
  config.ssh.private_key_path = File.expand_path "~/.vagrant.d/insecure_private_key" # SSH秘密鍵のパス
  config.vm.provider :sakura do |sakura|
    sakura.server_name = 'sakura_oshiire' # これ反応しないけど、今後も考えて一応
    sakura.server_plan = '1001' # サーバーのプランID (今回は 1CPU 1GBの最安プラン)
    sakura.disk_source_archive = '*******' # ディスクアーカイブのID (Debian 7.0 64bit/20GB)
    sakura.access_token = '***-****' # ACCESS TOKEN
    sakura.access_token_secret = '******' # ACCESS TOKEN SECRET
    sakura.sshkey_id = '*****' # 登録したSSH公開鍵のリソースID
    sakura.zone_id = 'is1b' # ゾーンID is1a=石狩第1 is1b=石狩第2
  end
end

config.ssh.username” を “root” から “chef” へ、そして、”sakura.disk_source_archive” を、先ほど新しく作ったアーカイブIDへと変更します。ID は ‘vagrant sakura-list-id‘ コマンドでね、確認するんですよ。へい。

Vagrant up

1
# vagrant up --provider=sakura

ということで、これでうまくいったら、お慰み。うまくいったり、行かなかったりする気がして、変な気分ですが、こんな感じでなにとぞどうぞ。

さて、うまくいきましたら、chef でも使えるように、おまじないをしてからどうぞ。

ssh 構成の追加

1
# vagrant ssh-config >> ~/.ssh/config

これで完成ですヽ(´ー`)ノ試しに knife solo cook ほにゃららとかやってみましょう。やっほい、うまくいったヽ(´ー`)ノ

補足

次の設定がどう反映されているか分からないし、Vagrantfile で指定した private key が参照されていなかったり、なんか謎の行動を起こすので、ちょっとその辺は追々調べていきますね(´・ω・`)なんでやろ。vagrant-sakura で鍵は自動作成なのか、これ。誰か教えて。

sakura.sshkey_id = ‘*****’ # 登録したSSH公開鍵のリソースID