カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

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

概要: この記事はプログラマー歴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年モノのにわかゆとりですので、この辺りもうちょっと詳しいヒトに意見とか聴いてみたいですね。はい。

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