僕個人としては、DevOpsツールというのは、Bash ScriptとServerSpecだけでも良いのではないか、と思ってる

読了まで:約4分


概要: この記事はプログラマー歴 8 年のニートの提供でお送りします


なぜ、僕はそのようなコトに思い至ったか

えーっとですね、ぶっちゃけ、

  1. Chef
  2. Puppet
  3. Ansible

のどれも、

  • 複雑すぎる

と感じるからです。

特に、

  • Docker による Container-based deployment

を、 無意識の内に採用した 僕としては、

  1. Dockerfile でコンテナ作る
  2. docker でコンテナをビルドする
  3. 要らなくなったらそのコンテナを捨てる
  4. 以下繰り返し

という、超シンプルなサイクルを一度味わってしまった以上、冪等性がどうたらとか、あるいは、あの何がなんだかな Chef とか Puppet は使いづらいというか、使う気が起きないのです。なのです。

で。

究極的な話、DevOps というか、サーバ構築において必要な要素って、

  1. サーバインフラ構築の属人性の排除=完全自動化
  2. サーバインフラのあるべき状態の定義及びテスト= ServerSpec
  3. サーバインフラの状態の監視=??? (この辺りは詳しくない)

の三つだと思っていて、上記の 1 番を実現するために、Chef とか Puppet とか、あるいは Ansible とか使ってるんだと思うんです。

けれども、ぶっちゃけた話、ServerSpec によって、

  • サーバインフラの有るべき状態の定義及びテスト

が出来るようになった今現在において、僕としては、Chef とか Puppet とか使う意義があんまり見いだせない、というのが、今のところの感想なんですよね。

それこそ、Container-based deployment における、

  • Docker + Dockerfile

でやってるコトって、

  • ( Homebrew / Linuxbrew ) + Brewfile
  • bundler + Gemfile / carton + cpanfile / npm + package.json

を使うのと、あんまり変わらない感じだと個人的には思ってますし、なんというか冪等性がどうのっていうのは、もう古い(ぇというか、なんて言うかな、僕としては、

  1. 簡単にアプリケーションの依存関係の定義ができる
  2. その定義に基づき、簡単にアプリケーション実行環境が作成できる
  3. また、そのアプリケーション実行環境の破棄が容易にできる

というのが満たされているのであれば、もう Chef とか Puppet とか、あえて今から使い出す必要はないんじゃないかな、と僕は思っているというか感じています。

まあ当然のコトながら、僕は大規模な DevOps どころか、そもそもまともに Web Service を作成 / 運営を未だにやったことの無い人間ですので、その辺りは経験を積むと、また印象とか変わってくるかもですけど。

ということで、僕は今、Bash による DevOps ツールもどき作ってます

なんか最初のセクションで僕がなんとなく感じていることを全部言えちゃったので、残り書くことなくなちゃったよ!って感じなんですが、僕は最近、

というツールを作ってます。

というかこれ、ツールっていうより、

  1. ssh でローカルの bash script を実行する Wrapper script
  2. recipes とは言うものの、実態はただの Bash script コレクション

というだけの物体 X なのですが、とりあえず今、これを開発しつつ、

のサーバ内に、 手動で 構築した環境の、自動化 + 再構築なんぞをやっております。

あと、この Bops は、

  • DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE

なので、煮るなり焼くなり好きにしやがれこの野郎! って感じです。はい。

ということで大体は以上です。

あとはまあ Gehirn RS2 に構築した鯖環境の、

  1. サービスの状態のモニターとか
  2. あるいは ServerSpec によるテストとか

を出来るといいなぁと思ってますが、今のところ、まだその辺りはやっておりませぬ。というか、そこまでの気力が有りませぬ。うつ悪化とかで。

あと、最初のセクションにも書きましたが、僕としては、

  • 個人であり、かつ Container-based deployment というリスクが取れる

という状態であるならば、

  1. Chef
  2. Puppet
  3. Ansible

とかのツールの使い方を習得する必然性は低いのでは無いかなーと思ってます。

が、やっぱり会社で業務で使うとか、あるいは、個人で有っても、大規模な環境をいじる、とかなら、必要になるのではないかな、という予感はありますが、僕個人としては、その辺り実感がわきません。

まあ、最後に、何が言いたいかっていうのを一言でまとめると、

インフラテストさえあれば、冪等性とか捨てて、実行環境の build & trash だけをすれば良いんじゃね?

という感じですね。


という訳で本日のニートさんの妄念は以上です。

まあ僕はいかんせん実戦経験が無い 8 年モノのにわかゆとりですので、この辺りもうちょっと詳しいヒトに意見とか聴いてみたいですね。はい。

という訳で本日の記事を終わります。お疲れさまでした。まる。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。