ServerlessConfとエンジニアの職掌に関して
10月1日に開かれたServerlessConf Tokyoに行ってきました。会場で一度「サーバーエンジニアの方ってどれぐらいいますか?」という質問がありましたけど、そのときの挙手によればサーバー、インフラ寄りのエンジニアはだいぶ少数派だったみたいですね。まぁサーバーなくなっちゃってんだからそりゃそうだろって感じなんだけど、自分としてはインフラエンジニアの立場から見て「サーバーがない!」という状況はどう映るのか、どう向き合えばいいのかというのがだいぶ気にかかってました。それでなくてもクラウドの登場、特にAWSが当たり前のものとなってからはインフラエンジニア不要論が常に囁かれてはきたわけで。
インフラエンジニアの幸福論 · the world as code
改めてサーバーレスとはなんだろうと。いや、サーバーがないはずはないじゃんというのはよく聞く反論で、仰る通りAWS Lambdaといえど裏側では当然Amazon Linuxが、物理的なサーバーが動作しており、サーバーレスって言葉はあまりよろしくないんではみたいな話もあります。とはいえ運用するエンジニアの視点からすると、サーバーというスコープはごっそり消失しているような状態ではあるので、個人的にはあながち的を外しているとも思ってはいないです。しかしそうすると今度は、従来のherokuやAWSマネージドサービスだってサーバーレスだったことになるじゃん?というのが自分の疑問としてはあったのですけど、この点はだいぶ思い違いをしていたなと今回認識を改めました。
端的にサーバーレスで受けられる恩恵をまとめたものとしては、このスライドが非常にわかりやすくてピンときました。これまでビジネスロジックはサーバーというモノシリックなエンティティの中に組み込まれ、サーバーを基本単位として扱われることが主だったわけだったですけど、サーバーレス、いわゆるFaaSの世界ではビジネスロジックが単一の機能=関数を単位としたマイクロサービスへ分割されます。そして実行媒体は常時稼動が前提であったサーバーやデーモンから、immutableなライフサイクルを持ったコンテナへ移されるため、自ずとステートレスな状態が保たれる。FaaSの実行はイベントドリブンで必要なときのみに絞られるので、リソースの効率性も従来とは考え方がまったく変わってくる。サーバーレスというのは、こういったソフトウェアアーキテクチャーの全体的な転換点として捉えなければならないんだなというのがやっと掴めました。
確かに実行媒体であるはずのコンテナすらも隠蔽され、コードを書いて渡してしまえばそれだけで実行されるサーバーレスな世界というのは、インフラエンジニアという旧来の職種が入る余地はなさそうには見えます。でも自分の立場から見て、こういったサーバーレスの世界でやること皆無になるか?というとそうは思えなくて、ハードウェアリソースを如何に効率的に使うかだとか、リソース部分をすべて別の事業者に委ねてしまった状態で、可用性やパフォーマンスをどう担保していくかだとか、インフラエンジニアの視点から出来ることっていろいろあると思うんですよね。まぁそりゃ今までみたいにLinuxにSSHして云々だとか、ネットワーク機器の設定をどうのってのをやる機会はほぼ無いのかもしれないけれど、「インフラエンジニア」の定義を技術領域からミッションに変えることで、見えていく先はあるんじゃないかなと。
またイベント内でこれも何度も聴いたんですけど、当然ながらサーバーレスは銀の弾丸ではないです。ステートフルであることが相応しいソフトウェアもあるし、デーモンを常駐させる必要性も現在皆無になったわけではない。サーバーレスを至上として、ソフトウェアをどうすればサーバーレスに出来るか?と考えるよりは、ソフトウェアをより望ましい状態にするために、アーキテクチャーとしてサーバーレスを選択することが適切か?という考え方をするべきなのではないかなと感じました。
エンジニアの職掌は従来だと技術領域のレイヤーで隔てられることが多かったですが、技術分野の変容もさることながら、アーキテクチャーすら10年待たずにガラガラと形を変えていく時代においては、技術レイヤーへのフォーカスだけで職種を定義すると痛い目を見そうな気がしてきました。まずはミッション先にありきであって、そのための手段として技術やアーキテクチャーを選択する。そういう発想でいくと、「インフラエンジニア」と呼ばれる職種にも未来はある気がします。あるいは最近それがSREといった呼び方に変わったりしているのも、その証左であるんじゃないかなと。