背景
いろいろな環境でセットアップスクリプトを書いていると、
同じスクリプトを様々な環境から参照したいケースがある。
本質的に必要なのは『機能』であって、それがどこで動くかは重要じゃないでしょ、という場合。
( もちろん『どこで動くか』が重要な場合もありますが )
例えばクラウドで自分検証用にちょっとサーバ立てた。で、セットアップスクリプト書いた、
そういえばこれは自宅サーバでも移動中のノートPCでも、コンテナでも割と使いたいものだったりする。
セットアップスクリプトを置く場所は統一したい。
理想的にはGithubでレシピを公開なのかな、というとちょっとプライベートな部分もあって悩ましい。
自前でプライベートなgitレポジトリを立てるか?という考えも悩ましい。
- ストレージの冗長化は?
- git のサーバを2台立ててロードバランスすれば動きそうか?
- セキュリティはどのように守られるべきか?
- アクセス制限はどのように行うのか?
といった悩みが。 お仕事用のサーバ群では冗長化に対してかなりの
コストを支払っているのだけれど、2016年の今だとgitのサービスも
いろいろあるし、サービス使った方がセキュリティアップデートのコストはサービス提供者もちだし、その方が合理的だよな、とおもってCodeCommitを使ってみました。
下記のような構成をつくる
EC2で自動セットアップ
dockerで自動セットアップ
dockerでの利用は、もうちょっとシンプルにならないかな、という悩みがある
packerやDockerfileで都度イメージ作成だろうか。
( イメージによる管理も明確なメリットがある、インスタンスが起動してから使えるまでの時間が短い。が、ブロックデバイスから疎結合になりたい。わざわざイメージ作らなくても、セットアップスクリプトをpullして実行すればセットアップ可能、みたいな環境もありかな、とも )
KVM( libvirtd )でも
まだできてないのですが、自宅サーバも同様な感じでセットアップしたい。
これができれば、自宅の物理サーバも同様な方法( PXE + kickstart + CodeCommit )でいけると思われる。
注1
ここではchef-clientの実行間隔を60秒にし、
chef的に「インストールされてなければするし」「プロセスが立ち上がってなければ立ち上げるし」
というアプローチでプロセスが実行されていくようにしていますが
chef-clientの処理は、設定のボリュームが増えれば増えるほど長くなっていくので、
monitなり監視プロセスから起動されるアプローチの方が素早い気もします。が、monit使えていません。
作業の流れ
EC2で自動セットアップ
1. AWSアカウント作る
2. VPCつくる
3. CodeCommitを始める
4. ( 初回起動時に実行される仕組みの )cloud-initの処理を書き始める
5. cloud-initのスクリプトで git cloneする
6. EC2インスタンス自身が自分のRoleを確認して自分でセットアップされるようにする
dockerで自動セットアップ( 予定 )
ここを参考にしています http://qiita.com/kukita/items/932822b2d029e4b8a0c5
( 上記のURLの仕組みは凄いと思います。chefサーバの冗長化を考え始めると、
結構工数かかりそうなんですが、冗長化のコストを外に出せる )
* 作業用PCにchef-zeroで chef server
* セットアップスクリプトはCodeCommitから定期的に git pull
* chef serverを参照するようなdockerイメージ作成
* 作業用PCからchef serverにコンテナに与えるRoleを設定
* chef-clientが自分のRoleの処理を行う
自宅サーバでも( 予定 )
- PXE + kickstart での自動セットアップ
- kickstartの設定で自前のスクリプトを流す
- 自前のスクリプトの処理内で、セットアップ自動化を行う