ニトエルの運用保守を支えるコマンドラインツールについて
はじめまして! ニトエル エンジニアの大塚です。
私の自己紹介はこちらになります:)
人生ではじめてテックブログを書くので、若干緊張しています…
今日はニトエルの日々の運用保守を支えているコマンドラインツールについてご紹介させて頂きます!
作ろうと思ったきっかけは、ホテル向けシステムでの業務委託経験
突然なのですが、カップルで入るホテルに、映画が見れたり、フードを頼めたりするテレビがあると思います。あのテレビの中で動いているシステムが、実はWebアプリケーションだということをご存知でしたか??
ニトエルに入る前に半年ほど業務委託としてこのホテル向けのシステムの運用保守に関わっていたのですが、その現場ではGoのライブラリであるCobraで書かれたコマンドラインツールが大活躍していました。
オンプレで動いているので、OSレベルネットワークの設定からアプリケーションの更新、動画コンテンツの配信などなど、多種多様な設定、オペレーションがあるのですが、それら全てが"ppn"(仮称)というコマンドラインツールから全てできるようになっていました。またWindowsユーザーであるCSの方もこの"ppn"というツールを積極的に使っており、コマンドを打つことでサーバーやアプリの状態の確認や、更新などの業務をされていました。
私も実際に使ってみて、「いいねこれ!素晴らしい」と思っていたので、
ニトエルでも同じようなことを再現しようとしてできたコマンドラインツールが"nitoel-cli-tool"です。
私が第一回目の開発合宿で作った代物で、多分ニトエルのエンジニアが使わない週はないのではないかと思います:)
"nitoel-cli-tool"で何ができるのか
nitoelの保守で使うコマンドラインツール
調査などでよく使うコマンドのなどを簡単に実行するためのもの
Usage:
nitoel [command]
Available Commands:
backup backup関連のコマンド
bastion bastion関連のコマンド
log Azureからログを出力する
「バックアップ/リストア」「踏み台サーバーにログインする」「ログを出力する」の3つの操作ができるのですが、今日はログに関してご紹介します。
「この時間帯のアプリケーションのログがみたい」というニーズが日々あると思うのですが、クラウドだと結構面倒だったりしますよね…
「テキストのログがほしい!」
「それ以降はgrepやsedやawkで料理したい」
ので、下記のようなコマンドを打ってるようになっています。
$ nitoel log -h
Azureからログを出力する
例: nitoel log -k=dev -s=tenant-backend
last, range_from, range_toのいずれも指定がない場合、last=1d扱いとする
Usage:
nitoel log [flags]
Flags:
-h, --help help for log
--last string 1dとか24hとか60hとか
--range_from string 日本時間でfrom 例: 2022-11-30 21:10
--range_to string 日本時間でto 例: 2022-11-30 23:55
-s, --subject string tenant-backendかsupplier-backendかsidekiq
Global Flags:
-k, --kind string dev, pre, prodなどの環境を表す値
$ nitoel log -k=dev -s=tenant-backend
## ==> 内部的にはシンプルにazというawsコマンドのazure版を叩いているだけ
の出力は…以下のようになります
設計方針
このツールの設計方針で考えたことなどを、まとめてみます
運用保守が誰でもミスなくできる状態
固定しすぎることなく柔軟にエンジニアが使いやすく
セキュリティ
運用保守が誰でもミスなくできる状態
当たり前のことを言うだけなのですが、コマンドにすることでミスは減ります。長いコマンドを覚えたり、自分用のスニペットに追加する必要はありません。またミスが起きたときに、再発防止策も立てやすいです。
固定しすぎることなく柔軟にエンジニアが使いやすく
「バックアップ/リストア」「踏み台サーバーにログインする」「ログを出力する」など、nitoel-cli-toolの責務は現状すごくシンプルにしています。
その後どう料理するか現状、エンジニアの裁量です。
セキュリティ
具体的な話は避けますが2段階認証などを挟むことで、nitoel-cli-toolのバイナリが仮に流出したとしても、問題がないような工夫がされています。
今後の拡張
今後の拡張についてアイディアベースで書いてみます。
インフラやその他周辺ツール(Auth0など)の費用などを月次で出力させたりして面白いかもしれない。
AIで使ってるGPUなど、お金かかりがちな部分を自動停止するようなスクリプトを組み込んでしまう。
「そんなこと、こんなところでしてるのか…知らないよ..」
という驚きが起きないよう、
「インフラに関してterraform(状態)で表現されない部分はnitoel-cli-tool(オペレーション)に表現されている」
という世界を目指していければいいのかなと思っています。
終わりに
最後まで読んで頂きありがとうございます。
コマンドラインツールを書いてみたいという方がもしいれば
「Cobraでコマンドラインツールを作る方法」とchatgptに聞けばすぐトライできますので、是非試してみてください!
Mac, Linux, Windowsどこでも動き、バイナリ一枚になって、楽ちんです!