以前、Boro Riding Shopのインフラの歴史 〜過去に制作したサービスシリーズ〜 で書いたように、サーバーにRuby言語やデーターベースPostgreSQL、Nginxなどのソフトウェアのインストールや設定を行いますが、その方法は、
初期は手動でインストールや設定を行い作業経過をテキストファイルに記録しておきました。このやり方は新たなサーバーを構築の際には記録間違いや作業ミスで手間がかかりました。
クラウド移行の際にChefを導入し、インストールや設定をDSL(レシピと呼ばれています)で記述し、実行する事でサーバー構築が自動化できました。めでたしめでたし、これで間違えなく実行できます!
しかし、ChefのDSL(レシピ)を使ってサーバーのメンテナンス手順をキープして行くのは大変でした。
Chefのその後
2014年にChefを導入しましたが、Gitログを見ると2015年にはChefの更新は止まっていました 😅。
ついつい手動でバージョンアップアップ作業をしてしまい、Chefのレシピは放置され、いつのまにか使いものに成らなくなってしました。
なぜChefのレシピを基にメンテされななくなったか考えると、
- Chef起動に手間がかかり、時間がかかる
- 冪等性(べきとうせい、再実行しても問題が発生しない)を保持するのはレシピ作成者の責務で、冪等性がないDSLを作ってしまいがちです。初期インストールには使えても、アップデートには使ないのです
- ChefのDSLはRubyで書けるので、自力で複雑なコードを書いてしまい不安定な部分ができてしまった
などありメンテできなくなりました。
Ansible
2017年に開発した別プロジェクトでは、構成管理ツールはChefではなくAnsibleを使ってみました。その時に感じたAnsibleのメリットは、
- 簡単に使える、サーバー側はsshとpythonが使えればよい
- 起動も早い
- インストールや設定で必要なモジュールが豊富にあり、自分でコードを書く必要がほぼなく、設定ファイル(Playbookと呼ばれるYAML形式のファイル)
- モジュールは冪等性があり、再実行しても(ほぼ)問題ない
などがあり、ECサイトもいつかAnsibleに置き換えたいと思いましたが。最近やっと実現しました。 今回作ったPlaybookは、
- linux : ロケールやタイムゾーンなどの設定
- accounts : アカウントの追加
- ruby : Rubyをソースコードからmake install
- postgresql : PostgreSQL12のインストール、全文検索エンジンPGroongaの組み込み
- nginx : Nginxのインストール・設定、SSL(証明書またはLet’s Encrypt)の設置
- ufw : ファイアーウォールの設定
- backup : バックアップスクリプト作成
- cron : cronの設定
- apps : アプリケーション用環境作成
Ansibleならメンテナンスできるのか?
Ansibleにしたからメンテナンスできるのかは、 CSSは面倒だなぁ〜のBEMを正しく保つのには気合いが必要と同じです。
簡単な作業を手動で行ってしまう誘惑に勝てるかだと思います、Chefに比べるとAnsibleは簡単で早く、冪等性があり再実行できる点は大きなメリットだと思います。
結果は何年後かに書きます😁