サーバーレスとは?サーバーレスコンピューティングをわかりやすく解説
サーバーレスとは、サーバーを自分で設定したり管理したりせずにコードを動かす方式です。コードをクラウドのプロバイダーに渡すと、何かのきっかけ(Webリクエスト、アップロードされたファイル、決済の通知など)があったときだけ実行され、その後停止します。通常は、アイドル状態で稼働しているマシンに対してではなく、コードが実際に実行されている時間に対して料金を払います。
AIでアプリを作るときにサーバーレスが重要な理由
AIでアプリを作り、ホスティングの選択肢やコードを見ていると、「サーバーレス関数」「エッジ関数」「クラウド関数」といった言葉に出会うでしょう。多くのホスティングプラットフォームがこれを提供しており、一部のAIビルダーもバックエンドをこの方式でデプロイします。この仕組みを理解すると、次の3つの実際的な疑問に答えられます。
- 費用。 誰も使っていないときでも、アプリに費用はかかるのか?
- 速度。 静かな時間の後の最初のリクエストが遅いのはなぜか?
- 制限。 大きなレポートの作成や動画の処理といった長い作業が、なぜタイムアウトしたのか?
また、サーバーレスが何ではないかを知っておくことも役立ちます。サーバーレスはバックエンドがないことではありません。サーバー側のコードは今でもあります。ただ、マシンを運用する人が別にいるというだけです。基本については、サーバーとは何かをご覧ください。
日常の例え
従来のサーバーは、車を所有するようなものです。いつでもすぐに使えますが、乗るかどうかに関係なく、保険、駐車場、メンテナンスの費用を払い続けます。
サーバーレスは、タクシーを呼ぶようなものです。乗った分だけ払い、100人が同時に乗りたくなれば、100台のタクシーが来ます。しかし、車が来るまでに少し待つことがあり(コールドスタート)、一回の乗車には最大の長さがあり、運転手は前回の乗車を覚えていません(関数はステートレスです)。
サーバーレス関数の仕組み
もっとも一般的な形は、Function as a Service(FaaS)と呼ばれます。
- 関数を書く。 1種類のイベントを処理する小さなコードです。例えば「
/api/bookingsへのPOSTを処理する」などです。 - デプロイする。 プロバイダーがコードを保存し、URL、スケジュール、ストレージへの新しいファイル、キューのメッセージなどのきっかけに接続します。
- イベントが届く。 プロバイダーが関数のコピーを起動するか(またはウォームな状態のものを再利用し)、実行して結果を返します。
- 自動で拡張する。 1,000件のリクエストが同時に届けば、プロバイダーはアカウントの上限まで、多くのコピーを並列に実行します。
- アイドルになる。 トラフィックが止まると、コピーは停止します。何も動いていなければ、計算に対する料金はかかりません。
JavaScriptで書かれた小さなサーバーレス関数は、次のようになります。
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
サーバーを起動するコードも、ポートを開くコードも、プロセスを動かし続けるコードもありません。それらはすべてプラットフォームが扱います。
「サーバーレス」は、ほかにも自動で拡張し、使った分だけ課金されるマネージドサービスを、ゆるやかに指す言葉としても使われます。例えば、アイドル時に一時停止するサーバーレスのデータベースがそれです。
主な用語
| 用語 | 意味 |
|---|---|
| 関数(FaaS) | プロバイダーがオンデマンドで実行する小さなコードの単位。 |
| トリガー/イベント | 関数を起動させるもの。HTTPリクエスト、ファイルのアップロード、タイマー、キューのメッセージなど。 |
| コールドスタート | リクエストを処理する前に、関数の新しいコピーを起動しなければならないことによる遅延。 |
| ウォーム | すでに動いていて、すぐに応答できるコピー。 |
| ステートレス | 実行の間にメモリを保持しないこと。永続させたいものはデータベースやストレージに置く。 |
| タイムアウト | 1回の実行に許される最大時間。例えばAWS Lambdaの上限は15分です。多くのプラットフォームは、それよりずっと短く設定されています。 |
| エッジ関数 | ユーザーの近くの多くの拠点で実行される関数。制限は通常より厳しいことがある。 |
| ゼロスケール | トラフィックがないとき、何も実行せず、計算の料金もかからない状態。 |
具体例:小さな予約サイト
ヨガスタジオの予約サイトには、新しいスケジュールが公開される毎週日曜の夜に、アクセスが集中します。それ以外の週の残りは、ほとんどアクセスがありません。
- 常時稼働のサーバーの場合、 スタジオは24時間365日マシンの料金を払います。そのマシンは、日曜の夜のピークに合わせて選ばれており、それ以外の時間はほぼ遊んでいます。
- サーバーレス関数の場合、
GET /api/classesとPOST /api/bookingsが関数になります。日曜のラッシュでは多くのコピーが自動的に起動します。火曜の静かな朝には、ほとんど何も動かず、請求額はほぼゼロです。
トレードオフもあります。火曜の朝に最初にサイトを開いた人は、コールドスタートのために少し余分に待つかもしれません。データベースは、多くの関数のコピーからの、多数の短命な接続を扱わなければならず、コネクションプーラーが必要になるかもしれません。さらにスタジオが後から「全員の年間出席記録のPDFを生成する」タスクを求めた場合、関数の時間制限を超えるかもしれず、別の場所で動かす必要が出てきます。
サーバーレスが向いている場合と、向いていない場合
| 向いている | あまり向いていない |
|---|---|
| トラフィックが少ない、急増する、予測しにくい | 常に大量のトラフィックがあり、常時稼働のほうが安くなる場合 |
| API、フォームの処理、Webhookなどの短いリクエストと応答の処理 | 大きな動画の処理、大規模なデータの取り込みなど、長時間かかるジョブ |
| サーバーの管理をしたくない小さなチーム | ライブ接続を開いたままにするアプリ(一部のチャットや複数人ゲームなど)。プラットフォームが対応していない場合 |
| イベント処理:「ファイルがアップロードされたら、サムネイルを作る」 | リクエストの間にメモリを保持し続ける必要があるアプリ |
よくある誤解
- 「サーバーレスはバックエンドが不要という意味だ」。 管理すべきサーバーが不要という意味です。バックエンドのコードは今でも書いて、安全に守る必要があります。
- 「サーバーレスは常に安い」。 利用量が少なければ安いですが、一定して大量に使うと、リクエストごとの料金が積み重なります。
- 「サーバーレスは無限に拡張できる」。 プラットフォームには同時実行数の上限があり、関数よりずっと前にデータベースがボトルネックになることもあります。
- 「関数内に保存したファイルは、次回も残っている」。 ローカルのストレージは一時的なものです。データベースやファイルストレージを使ってください。
- 「ゼロスケールはサーバーレスと同じだ」。 関連はありますが、同一ではありません。アイドル時に眠り、次のリクエストで目覚めるような、通常のサーバーとしてアプリを動かすプラットフォームもあります。節約の効果や最初のリクエストの遅延は似ていますが、リクエストごとの関数的な時間制限はありません。
AIビルダーに頼むこと
- 「このバックエンドは、サーバーレス関数として動きますか? それとも常時稼働か、スリープするサーバーとして動きますか? それは費用にどう影響しますか?」
- 「長くかかりそうな作業はありますか? 制限時間を超える場合、どう扱うべきですか?」
- 「永続させる必要があるものは、メモリやローカルファイルではなく、データベースやファイルストレージに保存してください。」
- 「多くのコピーが同時に動くとき、データベースへの接続はどう管理すべきですか?」
- 「アプリがしばらくアイドルだった後、最初のリクエストの遅延はどのくらいですか?」
Mythexのアプリホスティングの仕組み
Mythexは、そのホスティングをサーバーレス関数として説明してはいません。公開すると、アプリはMythexが管理する通常のWebアプリまたはコンテナとして動きます。ホスティングの設定は不要です。方式はゼロスケールです。公開したアプリとそのデータベースは、アイドル時にスリープし、次の訪問で目覚めます。スリープ中のアプリは計算の料金がかかりません。追加のマシンは、トラフィックが多いときだけ起動します(Proプランでは1つのサービスにつき最大3台)。アタッチされたPostgresデータベースも、5分間のアイドルの後にスリープし、起きていた時間に対して課金されます。そのため、「使った分だけ払う」という利点の多くを得られます。一方で、静かな時間の後の最初のリクエストで、同じ種類の遅延も生じます。詳しくはドキュメントのホスティングの上限をご覧ください。関連するガイドとして、Webホスティングとは何かとホスティング費用を抑える方法もあります。
よくある質問
サーバーレスとは簡単に言うと何ですか?
サーバーレスとは、クラウドのプロバイダーにコードを預けると、必要なときだけ、たとえばリクエストが届いたときに実行してくれる方式です。サーバーの設定や管理は不要です。多くの場合、常時稼働しているマシンではなく、コードが実際に実行された時間に対して料金を払います。
サーバーレスには本当にサーバーがないのですか?
サーバーはあります。ただし、あなたがそれを管理しないだけです。プロバイダーは、あなたのコードを自社のマシン上で実行し、リクエストが届いたら起動し、負荷がかかれば拡張し、アイドル時には停止させます。
コールドスタートとは何ですか?
コールドスタートとは、サーバーレス関数がアイドル状態の後に実行されるときに生じる余分な遅延です。プロバイダーがまず新しいコピーを起動しなければならないために発生します。プラットフォーム、言語、コードのサイズによって、ほとんど気にならない程度から、1秒以上かかるものまであります。
サーバーレスは普通のサーバーより安いですか?
トラフィックが少ない、または不規則なアプリでは、多くの場合安くなります。アイドル中はほぼ費用がかからないからです。常に大量のトラフィックがあるアプリでは、常時稼働のサーバーのほうが安くなることもあります。利用パターンとプロバイダーの料金によって異なります。
サーバーレスのプラットフォームにはどのようなものがありますか?
よく知られた例には、AWS Lambda、Google Cloud Run functions、Azure Functions、Cloudflare Workers、そしてVercelやNetlifyなどのホスティングサービスが提供する関数機能があります。