「サーバーレス」とかいうイマイチな用語について
「サーバーレス」という用語を聞いたことがあるが、触ったことないし、実体がわからんなぁ、という方向けの記事です。
たとえば、AWSのサーバーレスのサービスであるAWS Lambdaは「サーバーレスでプログラムを実行できるサービス」のように表現されることがあります。「FaaS(Function as a Service)」という文脈で「サーバーレスアーキテクチャ」という用語を聞いたことがある方も多いでしょう。
ただ、この用語、座学でのみ勉強していると、「サーバーレス」のサービスが、字面のせいで謎の仕組みで動く謎のサービスのように感じられます。
結論を初めに書いておくと、
- サーバーレスという用語の字面は、実体をイメージするにはイマイチ
- プログラムが動作するためのサーバーは、裏側でちゃんと存在する
- この用語自体、開発者の立場では意識する必要がない
なので、「この用語が意味するところだけちゃんと把握しよう」という気持ちで読んでください。
「サーバーレス」は、「サーバーの『管理』が必要ない」の意味
「サーバーレス」という用語は、プログラムを実行する環境において、サーバー部分の管理作業が必要ない、意識しなくてよい、ということを意味しています。
この用語、イマイチ
この「サーバーレス」、イマイチな用語だと思います。
「プログラムが動く際に、サーバーが要らなくなる...?え、じゃあどこでどういう仕組みで『動く』の...?」という気持ちにさせられますが、そんな得体の知れない実行環境などはなく、実体としては、背後ではもちろんサーバーが動いています。
つまり、「レス」は「サーバー」に直接かかるわけではなく、「サーバーの『管理作業』」にかかります。わかるか!😡
「全国=全世界の国々」並に、字面から意味を勘違いしやすい用語だと思えばいいです。
やること・やらずに済むこと
「サーバーレス」のサービスを使う場合、プログラム実行環境を作って運用し続ける作業の中で、次の部分をやる必要がなくなる=意識する必要がなくなります(大雑把です):
-
サーバーを構築する
- サーバー内に、言語のコンパイラやランタイムなどをインストールする
- その他サーバーのセットアップをする
- ...
-
サーバーを保守する
- サーバーのOSの面倒を見る
- サーバーの死活監視をする
- サーバーの更新対応をする
- ...
逆に、次の部分の作業は、ユーザーが行う必要があります:
-
プログラムを作成する
- プログラムを書く
- プログラムをバージョン管理する
- 追加のライブラリを用意する
用語「サーバーレス」は、サーバーレスのサービスを勉強し始めるにあたって、気にしなくてよい
サーバーレスのサービスのユーザーとして、そのサービスの使い方の勉強を始める立場では、用語「サーバーレス」を気にする場面はほとんどありません。勉強する過程においては、この用語のことは忘れましょう。
サーバーレスのサービスのユーザーは、基盤に「コンテナ技術」が使われていることだけ知っておく
一点、「サーバーレス」のサービスの基盤として「コンテナ技術」が使われている、ということは知っておいたほうがいいかもしれません。
コンテナ技術を知っている方に説明すると、例えばAWS Lambdaでは、プログラムをユーザーが作成した後、AWS上のサーバー上のランタイム入のコンテナの中にそのプログラムファイルを配置して、コンテナの中で実行します。
このうち、ランタイム入りのコンテナや、その実行基盤であるコンテナホストサーバーの、構築・保守の部分を、クラウドプラットフォーム側がやってくれるというわけです。
コンテナ技術を知らない方は、サーバーレスのサービスの使い方が何となくわかって余裕が出てきたら、Dockerなどのコンテナ技術を勉強すると、理解がぐっと深まります。
また、一部、コンテナ技術を知らないと何故そうしなければならないのか理解できないお作法も存在します。(最初は『お作法』で大丈夫ですが。)
以下の本をおすすめしておきます(個人的に、実践と説明の塩梅がちょうどよく、技術書の中でも好きな本の一冊です):
用語「サーバーレス」は、アーキテクチャの選択の際に重要
「サーバーレス」という用語は、何かをITでやりたい場合に、プログラムの実行環境としてどういうアーキテクチャを選択するか、という場面で重要になります。
AWSを例に挙げると、サーバーごと構築・保守したい場合はEC2、「サーバーレス」を利用したい場合はAWS Lambda、というような使い分けになりますが、ここでAWS Lambdaを選択できる場合、次のような利点があります:
サーバーを管理する必要はありません:
インフラストラクチャのプロビジョニングや管理をすることなく実行コードを書いて、.zip ファイルやコンテナイメージとしてアップロードするだけです。自動スケーリング:
1 日に数十イベントから 1 秒に数十万イベントまで、あらゆる規模のコード実行リクエストに自動的に対応します。従量制の料金体系:
ピーク時の容量に備えてインフラストラクチャを事前にプロビジョニングするのではなく、使用するコンピューティング時間に対してのみミリ秒単位で支払うことで、コストを削減できます。パフォーマンスの最適化:
適切な関数のメモリサイズにより、コードの実行時間とパフォーマンスを最適化します。Provisioned Concurrency により、2 桁のミリ秒で高い需要に対応します。
引用元:
結局、「サーバーレス」は、主に技術選定のフェーズで重要になる用語です。
逆に、技術選定後のユーザー(開発者)の立場としては気にしなくてよい用語だと考えてよいでしょう。
Discussion
とあるYouTuberが「サーバーレスという言葉の意味を真剣に考えてはいけない。これはサーバが落ちた~とかサーバの障害が~とか言うエンジニアの言い訳を聞かされているマネージャ向けのマーケティング用語である。意味が分からないのは用語のバグではなく、仕様である。」という趣旨の発言をしていました。これが最も納得できる説明だと思いました。
コメントありがとうございます!
この記事、大元はLambdaについて書く中で「『サーバーレス』って用語はLambda使う上で気にしなくていいよ、一応背景とかは説明しとくけど。」という趣旨の「用語『サーバーレス』とは」という一節だったのですが、
切り出してこねくり回しているうちに、その成分が、特に冒頭から抜けて、「頑張って『サーバーレス』という用語について理解してみよう」みたいな記事になってますね...(というか末尾にしか残ってないかも)
いただいたコメントで気づきました。ちょっと修正したいと思います。