インフラエンジニアならpythonだよね

f:id:suganoo:20181105181116p:plain
「インフラエンジニアならプログラミング知識とかいらないよね?」
「プログラミング苦手だからインフラやろうかな。」

たまにこんなことを耳にします。


そんなこと言う人がいるんだな~とちょっと驚きました。

たしかにインスタンスはawsとかでボタンポチポチ押せばいいし、デプロイも設定ファイルに設定内容書いてボチッと実行すればいいだけかもしれません。

ですが、これまでの自分の(偏った)経験を振り返るとそんなことないなーと思います。

障害調査

インフラエンジニアの仕事ってかなり地味だなーと思うことが多いです。

ssh設定だとか、ネットワークだとか、ミドルウエアの管理とか....

そんな作業をしてると「Rubyとかでアプリ作ってるのいいなー」とうらやましくなってきます


そんなインフラエンジニアにもおお!っと脚光をあびることがありますが、それは障害対応の時です。
しかも原因が特定できた時だけです!

原因特定できなかった時はなんともカッコ悪く、存在意義がなくなるので将来的にクビになるのではドキドキしてしまいます。


これまでの経験からそういった障害調査のためログから特定の文字列を抜き出したりするときにコーディングができるとかなり調査がはかどります。
っというかコーディングできないとお話になりません!

Pythonの方がいい

じゃどの言語がいいのかというと、どれでもいいのですがPythonがおすすめです。

ほんと別になんでもいいんですけどね、自分はPythonかなと思います。

なぜなら、Linux標準にPythonが入ってるからです。

たいていインフラで使ってるOSはLinuxのディストリビューションだと思います。
Red-Hat, CentOS, Ubuntuとか。

障害が起きた時はどのサーバーで障害が起きるかなんてわかりません。
そんな時に標準で入ってるPythonであれば、インストールなど関係なく使えるのでどこでもすぐ調査ができます。


障害が起きた時はたいてい緊急です。

そんな時RubyやJavaが得意だからと言って、インストールからなんてやってられません。
ましてやコンパイルなんて面倒です。

なのでPythonがおすすめです。

もちろん標準のPythonはバージョンが古かったりして使える関数が使えなかったりすることなどありますが、基本的な使い方は変わらないでしょう。

また標準で入ってるものとしてPerlもあります。
はい、Perlでもいいですよ。正規表現処理早いし。
好みの問題ですが、私はユーザーが多いのでPythonを使ってます。

シェルスクリプトでもいいじゃん!?とも思いつきますが、ちょっと複雑なことするとすぐコードが読みにくくなるんですよね。
なので使うのを避けてます。それにシェル芸人になってもねえ....。


ああとそうだ、一応書いておきますが本番サーバーとかの中でログを読み出したりすると、メモリがいっぱいになっちゃったりして影響を及ぼすことがあるんでローカルにコピーしてから障害調査するなど気を付けましょうね。

ツール作るよ

業務でなにかしらのツールを作ることがよくあるかと思います。
ファイルをインポートする、ノードを監視する...など、そういったときの便利ツールを作るときにもコーディングができると便利です。

そういう時しかコーディングの機会がないので、俄然やる気が入っちゃいますけどね。

またログが取れるってことはデータ解析もできるんで、anacondaとかも使えるからPythonは有利ですね。


思えばansibleはpythonでできてるから、テンプレートとか書くときに便利ですね。
あ、chefはRubyだな.....。

できればGoもできた方がいい

そしてまた便利ツールを作ってると、CPUコストや処理速度が気になってきます。
さらに手を伸ばしてGoを学んでみるのもいいでしょう。

ポインタ使ったり、処理速度が速くなることがあるんでGoを学ぶのもおすすめです。

Docker, KubernetesはGoでできてるのでソースコードを見るのも勉強になるでしょう。

最後

っというようにインフラでもプログラミングが必要になることは多いですよ。なので日々機会を見つけて勉強しましょう。

なによりやっぱプログラミングは楽しいですよね。

インフラやってると確かになかなかコーディングの機会を得るのは難しいかもしれません。
ですが、どーにかして仕事をさぼろうと考えればコーディングの機会もできてくるので考えてみましょう。

インフラ監視でフロントエンドから作ってくのも楽しいですよ。

以上です。