自動化をとめるな! ~最近自動化について思うこと~ (ShanonAdventCalendar2018・4日目)

このエントリーをはてなブックマークに追加

この記事はShanonAdventCalendar20184日目の記事です。

こんにちは。inomataです。

最近はDockerをいじったり、AWS CloudFormationをいじったり、アプリを改修したりアプリのテストをしています。
そんな中、何かを自動で行うということについて今一度考えてみたいと思いました。

自動化は人的なコストの削減やオペミスを防止してくれるので大変便利なものです。
しかし、いつしかその自動化は壊れたり、あるいはナニカを壊したり、飼い主にかみつくこともしばしばあります。
そうならないためには、いったい何に気を付けなければいけないのでしょうか。





自動化は理想状態の収束を目指す


自動化は自動で何かをしてくれます。パッケージのインストールだったり、DBのデータを更新したり。データを集計したり。
良くも悪くも毎回こっちの都合などお構いなしです。そこで気を付けなければいけないのは、自動化が実行される場所、あるいは対象の状態でしょう。
簡単に言うと、"どういう状態で実行されてもその状態にする"ということです。つまりはべき等性の担保です。

例えばapacheの2.4.37をインストールする自動化スクリプトがあるとします。その内容は、
 - apacheがインストールされていなければapache2.4.37をインストールします。
 - apache2.4.37をインストールされていれば何もしません。
 - apache2.3.0がインストールされていればapacheの2.4.37に更新します。
という具合です。これならばこの自動化スクリプトを実行するだけで、対象のサーバにapache2.4.37がインストールされるということが保証されます。

とはいえ、どんな場合でも無条件にスクリプトが実行できるとも限りません。その場合は"何もしなかったことにする"ということが上策でしょう。
そうすれば、実行できない原因を排除して再実行することも簡単でしょう。


テストを定期的に行う


せっかく作った自動化スクリプトも、前述の通り無条件で実行できるわけがありません。月日が経つにつれ、いつ動かなくなるかわかりません。
なので毎日動かしてテストするのが理想です。本番環境で実行されるべきものも、テスト環境を用意して毎日実行するのがよいでしょう。
運用でたまにしか使わないスクリプトなんかもテストしておくとよいでしょう。そうすれば本番で実行する機会が訪れるたびに無用な緊張感がなくなります。
少なくとも毎日は実行しなくても、状態が変わる前のタイミングでテストはしておくべきでしょう。


まとめ


結構当たり前だなーなんて思ったりしますか?しますよね?けど、例えばCI/CDで使うちょっとしたスクリプト(CDはヤバイ)、テスト環境で自動テストを動かすためのスクリプト、運用のための機能アクティベートのためのスクリプト。イマドキの開発プロセスでは、随所にスクリプトを仕込み定期実行する仕組みを用意しないと立ち行かないでしょう。
インフラ構築のための自動化はChefやAnsibleなどのツールはべき等性を担保するのであまり気を使わないかもしてませんが、そういったツールを使うまでもない、あるいはデータ集計のバッチなど性質が異なる等の理由で自前で作ったスクリプト(実行する仕組みも含む)なんかはこういうことが疎かになりがちです。

わかってる人もそうでない人も、
 - 自動化されたスクリプトは理想状態への収束を目指す
 - テストを定期的に行う
これらを意識して今一度見直してみてはいかがでしょうか。
飼い犬に手をかまれないためにも、最後まで気を抜かず安寧な自動化ライフを!


P.S.
"理想状態への収束"という言葉は以前サイボウズさんの勉強会に参加したときに聞いた言葉です。元ネタがあったりするのでしょうか?
またサイボウズさんはCloudFormationのテストを毎日VPCから作りなおすと言ってました。すごすぎです。
これらにリスペクトして今回書きました。
次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...