見出し画像

システムのインフラを作ることは、こんなにも楽しい

久しぶりに書いたのに、早速 2日くらい空いてしまうのはよくあること、しょっさんです。

さて、巷では「インフラエンジニア不遇時代」の空気が漂ってます。「使えるインフラエンジニアがいない」「使える・使えない以前にインフラエンジニアがいない」「クラウドだから、いらないんじゃないの」。実態がどうかはさておき、縁の下の力持ちなインフラ領域は、闇が増すことはあっても、光の当たることはほぼありません。

でも、もっとも重要な部分です。

自分がインフラに携わって20年くらい。今は aPaaS/PaaS エンジニアですが、インフラに関わらないってことはありません。インフラやっていたから、この分野でも苦労していないという自負があります。この経験から、わたしがインフラエンジニアやっていて楽しかったことを、みなさまへお伝えします。

インフラの領域をおさらいしましょう。様々・身勝手な定義が横行していますが、広義での定義でいう次の定義が一番しっくり来ます。

「アプリケーションを動かすために必要なものすべて」

コンピュータで重要な部分は、機能要件の実装です。それはまさに、開発者がアプリケーションをプログラミングする部分です。そのために様々なフレームワークやライブラリを利用しますが、そこも含めてのアプリケーションです。

しかし、そのプログラムを動かすためのランタイム以下、ミドルウェア、データベース、オペレーティングシステム、仮想環境、サーバーハードウェア、ストレージ、ネットワーク、はてはデータセンターまで、これらはすべて「インフラ」です。好奇心旺盛な若者であれば、「こんなたくさんの領域を知ることのできる、インフラ素晴らしい」となるでしょう。そうです「素晴らしい」です。

昔、アプリ屋さんに言われたことがあります。「インフラなんて言われたとおりに構成するだけで、なにも生み出さないじゃん。プログラム開発する以外が、クリエイターを名乗るなどおこがましい」なんて。

アホかと。

アプリケーションサービスを実現するためには、「機能要件」と「非機能要件」とに分かれます。「機能要件」は実現したい機能そのものです。「在庫を引き当てて欲しい」「カートに品物を入れて欲しい」「購入したら、決済システムに情報を連携して欲しい」などから、愚直にも「科学技術計算をしたい」などが機能的な要求です。

これと対を成す「非機能要件」とは、そのアプリケーションサービスの「品質」を求めるものです。セキュリティもここに含まれます。他に「可用性」「拡張性」「信頼性」「運用容易性」など、分類方法は多岐に渡りますが、サービスの「品質」を定義するものはすべからく「非機能要件」です。たとえば、「24時間365日サービスを提供して欲しい」「ユーザを認証して、特定のサービスしか利用できないようにして欲しい」「アクセスピーク時にも、3秒以内にリクエストを返して欲しい」「広域災害が発生しても、データは保護して欲しい」などなど項目としては、たくさんあります。IPAの公開する非機能要求グレードが一番まとまって公開されている情報です。こちらもご参考に。

「インフラ」を実装する上で一番重要なポイントが、この「非機能要件」です。いくら、機能に優れたプログラムが最高で素晴らしくても「品質」が悪ければ利用されません。毎日、障害で 3時間しか使えないようなサービスや、データがしょっちゅう破損してしまったり、セキュリティで問題があって、他人のデータがすぐに引っこ抜かれてしまうようなサービス。こういったものは、発想がよくても使われなくなります。「信頼できない」からです。品質が悪いということは、「信頼がない」ことを意味します。

「インフラエンジニア」は、この「信頼」を獲得するために、その知識を総動員し、知恵を働かせて実装します。ただのWebアプリケーションサービスと言えども、ハードウェアに適当にミドルウェアを入れて「はい、おしまい」というわけにはいきません。

ハードウェアは安全な場所に配置され、適合する温度の範囲内であるか。想定されるアクセスに対して、必要なネットワークの帯域が確保されているだろうか。オペレーティングシステムは安全性に配慮し、最低限のユーザで安全に運用され、適切なハードニングが行われているだろうか。ミドルウェアはアプリケーションが動作するために最適な構成となっているだろうか。データベースはACIDが担保できるだろうか、障害時に正しく切り替わるだろうか。運用に配慮して、開発・テスト用の環境が準備され、セキュリティパッチを適用できる準備はいつでも取れるだろうか。

こんなものではないたくさんの配慮をおこなって、はじめて品質が担保されます。セキュリティをガチガチにすれば、運用容易性が下がります。運用のユーザビリティを上げれば上げるほどセキュリティにリスクが生まれるかもしれません。ちょっと環境をケチった所為で、アプリケーションを開発する環境が準備できないかもしれません。

アプリケーションの動く環境を準備するだけでは、インフラエンジニアの仕事は終わりません。未来永劫、安全に安定して信頼のあるサービスを提供するためには、将来を想定しながら知識をフルに動員して設計しなければなりません。

これらのどこがクリエイティブではないのか。声を大にしていいたい。インフラのエンジニアリングは、アプリケーションサービスを動かすための根幹であり、よりよいサービスを、円滑にそして安全にユーザが利用するための不可欠なものです。

実際に作ったアプリケーションサービスが、快適に動作し、安全にそしてみんなに信頼されることは、インフラのエンジニアにとて誇らしいことです。

今日、世の数多ある巨大なサービス群たちが「安全に」「いつでも」「どこでも」「誰でも」利用できるのは、インフラエンジニアがいてこそです。こんなに頭をつかって作ったものですから、こんなに楽しいことはありません。

「ただ設定するだけだろ」「カスタマイズしただけじゃん」というなかれ。その設定項目の値一つ一つを、なぜその設定にまで落とし込んだのか。そこには、インフラエンジニアが、これまでに気づいてきた様々な知見から裏打ちされた、最高の傑作が生み出された瞬間なのです。

#つくるのはたのしい

貴方がサポートしてくれると、私が幸せ。 私が幸せになると、貴方も幸せ。 新しいガジェット・ソフトウェアのレビューに、貴方の力が必要です。