2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
やらかしlineinfine 〜冪等性が失われた日、そしてreplaceへ〜(全1記事)
リンクをコピー
記事をブックマーク
林如弥氏:私の大いなる力で、lineinfileを責任を持って行使してしまって、やらかしましたという発表です。お願いします。
みなさん、ansible.builtin.lineinfileモジュールを使っていると思います。とても便利ですよね。ドキュメントの一角を切り取ってきたのですが「Manage lines in text files」ということで、テキストファイルの中の文字列を管理できるモジュールで、とても便利です。
私たちのユースケースでいうと、主にアプリや、OSの設定を一部変えることをやっています。
詳細は割愛しますが、こういうことをゴチャゴチャとlineinfileで、ありがたいことに使わせてもらっています。
copyやtemplatesという便利なモジュールもありますが、ファイルを丸ごと置き換えられないようなケースで使うのがlineinfileかなと思っていますし、特定の行を、シュパッと狙い撃って修正できる、これもまたいいところです。
ちょっとうちのつらみなんですけれども、けっこう手作業で作られた不揃いの環境があって(笑)、同じファイルでぜんぜん中身が違うけど、特定のパラメーターだけを変えたり、追加できたりするのがlineinfileで、だからみんな大好きですよね。
そんなlineinfileのやらかしを、2つほど持ってきたので、紹介します。
1個目、やらかし1ということで「実行するたびに重複が発生する/etc/hosts」というタイトルです。
これはサンプルですが、172.18.9.32みたいなIPに、今ショートネームみたいな、s1 sv1みたいなのがついています。ここに、ちょっと見直しをしてserver1みたいなものを追加したくなったわけです。
ここでやはりlineinfileですよと。regexpで先頭の正規表現かけて、後半はグループ化でbackrefsであとで再利用する。それで、最後の末尾にserver1を足すと。
これ、一見すごくよさそうに見えるんです。1回なら動くんです。
しかし、これは打つたびにserver1がこのように増えていく、増えていく、増えていく。しかも、これってhostsファイルとしては、どうも問題がないらしくて、気づくまでに時間がかかってしまいます。いろいろなケースで再利用したせいで、どんどん増えていったという問題が起きました。
こうして、Ansibleの代名詞と言ってもいいぐらいの冪等性を、lineinfileを使って(笑)失ってしまったというやらかしが1個目です。
そして、やらかし2です。「変換対象が複数回出るなら、replaceモジュールを使いましょう」というやらかし。
もう、この時点でピーンときた方もいると思うのですが、とあるミドルウェアの設定ファイルに、DB01みたいな宛先が書いてあったんです。そのDBをバージョンアップして、その向き先だけアプリでは書くことがあったんです。
「テキストの中の特定文字列を変えるならlineinfileだろう!」と思って、こんな感じのことを書きました。
先ほどとあまり変わらないのですが、regexpでDestの文字列を拾って、変えたい部分だけNewDB01みたいなかたちで書いたんです。すると、こうなりました。
どういう動きをしたかというと、後半のDB01だけNewDB01というかたちになるんです。つまり、1個目に出たDB01は変換されなかったんです。もう1回同じPlaybookをそのまま打つと、きちんと変換されます。
つまり、1回の実行だけだと1箇所しか変換されないんです。これに気づかなかった私が、アプリチームに「どうぞ、もう変えておきましたので」と言って、正常確認をお願いしたのですが、特定のコネクションプールだけ古いほうにつながり、新しいところには1箇所だけつながっている。そういう状況を作ってしまって、混乱を生んでしまいました。当時の同僚のみなさんにお詫びをしたいと思います。
これは、しっかりとドキュメントに書いてあります。Synopsisという、概要とでも訳すんですかね、そこに「See the ansible.builtin.replace module if you want to change multiple, similar lines」。「似たような、複数の場所を変更するなら、きちんとreplaceモジュールを見てね」ときっちりと書いてあるのに、僕はlineinfileを好きすぎて、1回で失敗したというやらかしの話でした(笑)。
まとめです。lineinfileは、やはりとても便利ですが、書き方次第では冪等性が失われます(笑)。きちんと複数回実行しても、同じ箇所が同じだけきちんとOKになるか、2回目やったら増えないかというところを確認しましょう。
あとは、複数箇所を同時に1回のplaybookの実行で変えたいのであれば、ここはreplaceモジュールの出番なので、lineinfileはまた別の機会で使ってくださいという話で、私の発表を終わります。ご清聴ありがとうございました。
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05