【コミュニティ】「Chef等を使わずに、サーバーセットアップを自動化・管理してみた話」

Fukuoka.php Vol.11(NO PHP DAY)で LT させて頂きました。

Chef等を使わずに、サーバーセットアップを自動化・管理してみた話 // Speaker Deck

最近、インフラ管理コストが増えすぎていて、もう面倒見きれない!つらい!という状態になっていたので、最近流行りの「infrastructure as code」というのに挑戦してみました。Chef や Puppet は使っていません。シェルスクリプトだけで、構築してみました。

サーバーは AWS EC2 を想定しています。

AWS S3 と GitHub は、サーバーが自己構成を行うときのレシピを保管しておく場所として使います。

LT ではデモンストレーションも行ったので、多少イメージが湧きやすかったかもしれません。
詳しくは、スライドの「仕掛けの解説(p9)」を参照ください。


やっていることは、EC2 インスタンスの起動時に User Data を使って、構成レシピの指定を行います。

インスタンスが起動すると、S3 バケットへとアクセスし、初期設定を実行するためのスクリプトを取得します。このスクリプトを仮に「bootstrap.sh」と呼びますが、bootstrap.sh では GitHub からサーバーレシピを clone するためだけの最低限の処理を実行します。具体的には「sudo yum install git」とか、GitHub へアクセスするための秘密鍵の配置などです。

サーバーレシピの大部分は、GitHub 上のレポジトリで管理しています。
これをうまく clone できたら、構成したいサーバーの内容に応じて レシピシェル を実行します。

今回の例では、RailsMySQL をインストールして、デプロイさえすればすぐ使えるような環境を作っています。



最初のスクリプトの実装には、かなり時間はかかるものの、一度導入してしまうと、便利さで鼻血が出そうでした。いちいち、サーバー個別の設定を覚えておかなくても良いというのもメリットです。しかし、セキュリティリスクも生まれてしまったため、これは、今後私が改善していかなければいけないと思っています。



この構築作業をしている最中、Twitter で「Immutable Infrastructure」というキーワードがバズっていました。タイムリーな感じです。