サーバーレスとは?メリット、デメリットや仕組み、向き・不向きについて解説
サーバーレスとは、クラウドサービス環境でシステムの開発・運用を行う際に、サーバーの構築や管理が不要となる考え方のことです。近年、AWSやGCPなどの主要なクラウドサービス事業者もサーバーレスのサービスを充実させており、サーバーレスはシステム開発におけるひとつの選択肢として浸透してきています。
サーバーレスはメリットも多い一方で、開発するシステムの要件によって向き・不向きがあるため、サーバーレスの特徴を理解した上で導入を検討する必要があります。
本記事では、サーバーレスの概要や、サーバーレスを導入するメリット・デメリット、導入時のポイントなどについて解説していきます。
サーバーレスとは
サーバーレスとは、システム開発・運用を行う上で、サーバーの構築や管理が不要となる考え方のことを指します。ここでは、サーバーレスの仕組みや種類について説明していきます。
サーバーレスの仕組み
サーバーレスでは、サーバーの構築や管理をサービス提供事業者側が行い、ユーザーは提供された環境上でプログラムの開発・管理のみを行えばよい仕組みになっています。サーバーレスのサービスを利用することによって、システム開発者はサーバーの管理を意識することなく、プログラムの開発や運用のみに専念することができます。サーバーの構築・運用に時間やコストをかけることなくシステムを開発することができるため、サーバーレスは近年注目されている考え方となっています。
また、サーバーレスでは常時サーバーを稼働させるのではなく、プログラムを実行するトリガーとなるイベントが発生した時のみ、サーバーを稼働させる仕組みです。処理の実行に必要なリソースを都度確保するため、土日や夜間など特定の時間帯に利用が少ないシステムの場合、サーバーのリソースを効率的に利用することが可能となります。
サーバーレスの種類
サーバーレスの種類は、「FaaS」と「BaaS」の2種類があります。「FaaS」と「BaaS」について、それぞれどのようなサービスなのかを説明していきます。
FaaS(ファース)
FaaSは「Function as a Service」の略で、プログラムの実行環境を提供するサービスのことです。システム開発の現場では、サーバーレスというとFaaSのことを指すのが一般的です。
FaaSでは、開発されたアプリケーション内のプログラムを、特定のイベント発生時に実行するのが基本的な仕組みとなっています。特定のイベントとは、例えばデータの追加や、アプリケーション内のボタンの押下などです。
Faas上でイベントが発生すると、プログラムの実行に必要なサーバーリソースが割り当てられ、対応する処理が自動的に実行される仕組みになっています。
BaaS(バース)
BaaSとは、「Backend as a Service」の略で、アプリケーションのバックエンド機能をアプリケーションサーバー側が提供するサービスです。
例えば、アプリケーションにおいて共通的に利用されることの多いユーザーの登録・認証・管理機能や、プッシュ通知機能、決済機能、SNS連携などの機能が BaaSによって提供されます。BaaSを利用することで、バックエンド機能の開発コストを削減し、アプリケーション固有の機能やUIの開発に注力することができます。
クラウドサーバーとの違い
クラウドサーバーとは、クラウド上の仮想サーバーを提供するサービスのことです。サーバーレスとクラウドサーバーは似ているサービスですが、提供されるサーバーの環境などに違いがあります。
サーバーレスは、サーバー上にプログラムの実行環境が構築された状態で提供されます。一方、クラウドサーバーは利用者側でOSやミドルウェアなどのプログラムの実行環境の構築・管理を行う必要がある点が、両者の大きな違いです。
サーバーレスはサーバーの環境構築・管理にかかる時間やコストを削減することができますが、環境設定の自由度はクラウドサーバーと比較して低くなります。そのため、開発するシステムの要件を踏まえて、どちらのサービスの利用が適しているかを見極める必要があります。
以下にサーバーレスとクラウドサーバーの料金体系や管理範囲などの違いを整理しました。
比較項目 | サーバーレス | クラウドサーバー |
---|---|---|
料金体系 | プログラムの実行時間や実行回数によって課金 | サーバーの稼働時間によって課金 |
サーバーの環境構築 | 不要 | 必要 |
プログラミング言語の制約 | あり | なし |
システム開発側の管理範囲 | プログラムのみ | OS、ミドルウェア、プログラム |
サーバーレスのメリット
サーバーレスを導入することによって、システムの開発・運用においてさまざまなメリットが得られます。サーバーレスの利点について以下に説明していきます。
サーバー運用が不要になる
これまでも説明してきた通り、サーバーレスでは、システム開発者によるサーバーの構築や運用・保守が不要となります。
従来のシステム開発では、開発者はアプリケーションの開発だけでなく、サーバーの環境構築や運用・保守も行う必要がありました。サーバーレスでは、サービス提供事業者がサーバーおよびプログラムの実行環境を提供・管理するため、サーバー管理に人的リソースを割く必要がありません。そのため、開発者はアプリケーションの開発に専念することが可能となり、スムーズにプログラムの開発・運用を行うことができます。
余計なコストをかけずに済む
サーバーレスでは、サーバーのリソースを利用した時間や、プログラムの実行回数に応じて課金がされるという料金体系になっています。IaaSなどの他のクラウドサービスでは、サーバーを常に稼働させておく必要がありますが、サーバーレスではプログラムの実行に必要な時だけサーバーリソースを確保する形式になっています。
プログラムを実行していない時には料金が発生せず、サーバーのリソースを利用した分だけ課金されるため、余計なコストがかからないのがサーバーレスを利用するメリットのひとつです。
オートスケーリングが可能である
サーバーレスでは、アプリケーションの利用状況に合わせて、サーバーのリソースが自動的に増減されるオートスケーリング機能が提供されています。
サーバーをシステム開発側で準備する従来型のシステムでは、サーバーリソースが不足した際には追加でサーバーを購入し、新たに環境設定などを行う必要があり、サーバーリソースの拡張にコストや時間がかかっていました。
サーバーレスであれば、サーバーの稼働状況に合わせて、プログラムの実行に必要なリソースが都度確保されるため、リソース拡張に時間を要さず、安定した運用が可能となります。
可用性と回復性の向上が見込める
サーバーレスでは、サービスの提供者側で可用性と回復性を担保しています。具体的には、サーバーの冗長構成やデータのバックアップ機能などがサービス提供者側で考慮された設計になっており、高い品質で可用性と回復性が担保されます。
そのため、自前でインフラ環境を構築する場合と比較して、可用性と回復性の向上が見込めます。
サーバーレスのデメリット
サーバーレスを導入することによるメリットは多いですが、一方でデメリットも存在します。サーバーレスのデメリットについて、以下に説明していきます。
遅延が生じる恐れがある
サーバーレスでは、処理すべきイベントが発生してからプログラムが実行されるまでの間に、わずかではありますが遅延が発生する場合があります。
これは、サーバーレスがイベント発生のタイミングでサーバーリソースを確保するため、サーバーの起動に時間がかかる場合があることが理由です。
また、サーバーレスは、ネットワークを経由してサービスに接続し、プログラムを実行する仕組みとなっています。それゆえに、ネットワーク環境におけるアクセス集中などの要因でレスポンス遅延が発生する可能性もあります。
他のクラウドベンダーへ移行しづらい
サーバーレスでは、特定のクラウド事業者のサービス環境や仕様に依存した形でシステムを開発することになります。サービスの仕様や特性はクラウド事業者によって異なるため、同じプログラムを他のクラウド事業者の環境で実行しようとしても動かない、ということが発生します。
このように、サーバーレスでシステムを開発すると、他のクラウドベンダーへの移行が難しくなり、ベンダーロックインが起きやすいというデメリットがあります。
既存のコードでは動かない場合がある
サーバーレスのサービス上で、サーバーレス以外の環境で開発したシステムを移行しようとしても、既存のコードではプログラムが動かない場合があります。
従来のアプリケーションは、リクエストに対してサーバーが処理を実行し、レスポンスを返すというリクエスト-レスポンス型で開発されています。一方、サーバーレスのアプリケーションは、イベントが発生した時に処理を行うコードが実行されるイベント駆動型のモデルで開発します。そのため、既存のコードをサーバーレスに移行しようとすると、多くの場合コードを書き換える必要が出てくるのです。
また、代表的な開発言語は、主要なサーバーレスのサービスでは基本的にサポートされていますが、サポート外の言語で開発されたプログラムは動かすことができないという制約もあります。
サーバーレスが向いているケース・向いていないケース
サーバーレスが向いているケースは、処理が単純で、サーバーを常に稼働させておく必要のないプログラムです。なぜなら、サーバーレスの環境は、処理に使えるメモリサイズや時間に制約があることが多いため、複雑で時間のかかる処理の実行には適さないという特徴があるからです。
サーバーレスに向いている処理の例としては、ファイルのアップロードや、テキストデータの処理などのシンプルなデータ加工処理です。
また、サーバーの導入や環境構築にかかるコストを抑えることができるため、サービス開始時にあまりコストをかけずにスモールスタートをしたい新規サービスの開発などにも向いています。サーバーレスはオートスケーリング機能を備えている点も、必要なスペックを事前に予測しづらい新規サービスに適しているといえます。
一方で、サーバーレスが向いていないケースとしては、上で述べたように複雑で時間のかかる処理や、応答速度の要件が厳しく求められるシステムです。
例えば、応答速度の要件がシビアな金融取引のシステムや、リアルタイムのデータ配信システムなどの開発には適さないといえるでしょう。
サーバーレスを導入する際のポイント
サーバーレスを導入する際には、サーバーレスの特徴やメリット・デメリットを踏まえて、開発するシステムがサーバーレスに適しているかを確認する必要があります。サーバーレスを導入する際に確認すべきポイントを説明していきます。
実行時間やメモリなどの仕様をチェックする
サーバーレスのサービスは、実行時間やメモリの大きさなどに制約があることが多いです。具体的にどのような制約があるかはサービス提供事業者によって異なりますが、よくある制約としては、1回あたりのプログラムの実行時間、1秒間に処理を実行できる回数、メモリの大きさなどです。
サーバーレスの導入を検討する際には、このような制約の種類と内容を必ず把握し、開発するシステムの要件と照らし合わせて、問題がないかを確認しましょう。
セキュリティ対策を徹底する
サーバーレスでは、セキュリティ対策を徹底することが重要です。サーバーレスは、インターネット経由で接続してプログラムを実行するため、マルウェアの感染リスクや、サイバー攻撃のリスク、システムの脆弱性を狙った攻撃を受けるリスクなどがあります。
そのため、サーバーレスの導入時には、セキュリティ対策を万全にしておくことが欠かせません。サービス提供事業者によるセキュリティ対策サービスの内容を確認し、活用していくことも検討するとよいでしょう。
クラウドサービスに障害が発生した際の対策を立てておく
サーバーレスはクラウドサービス上でプログラムを実行するため、クラウドサービス側で障害が発生した際に大きな影響を受けてしまいます。
クラウドサービスは基本的には信頼性の高いサービスですが、障害が発生する可能性はゼロではありません。そのため、障害が発生する前提で対策を考えておくことが求められます。具体的には、クラウドサービスに障害が発生した際の影響範囲の確認や、障害発生時にどのような対応を取るかなどを前もって検討しておくことが大切です。
主要なサーバーレスのサービス例
サーバーレスのサービスは、クラウドベンダーなどから提供されています。主要なクラウドベンダー4社クラウドベンダーのサービスについて以下にまとめました。
AWS Lambda | Azure Functions | Google Cloud Functions | Alibaba Cloud Function Compute | |
---|---|---|---|---|
対応言語 | C# Go Java PowerShell Python Ruby Node.js | C# F# Java JavaScript PowerShell Python TypeScript | Go Java PHP Python Ruby .NET Core Node.js | C# Java PHP Python Node.js |
最大実行時間 | 15分 | 10分 | HTTP関数60分、イベントドリブン関数9分 | 10分 |
SLA | 99.95% | 99.95% | 99.95% | 99.95% |
ポイントを押さえてサーバーレスの導入を成功させよう
この記事では、サーバーレスの概要やメリット・デメリットなどについて解説してきました。サーバーレスはシステム開発側によるサーバーの構築・運用が不要となるため、システム開発にかかるコストを抑えることができます。一方で、サーバーレスには向いているケースと向いていないケースがあるため、システムの要件を踏まえた上で、サーバーレスの採用が適しているかを事前によく検討することが大切です。
また、実際にサーバーレスを導入する際には実行時間などの制約をチェックするほか、セキュリティリスクの対策を万全にするなど、サーバーレスの特性を意識した対応を取っていく必要があります。ポイントを押さえてサーバーレスを導入し、サーバーレスのメリットを最大限に活かしたシステム開発を成功させましょう。
TD SYNNEXではサーバーレスを提供している各種パブリッククラウドを取り扱っております。詳細はこちらをご覧ください。
<著者プロフィール>
羽守 ゆき
慶應義塾大学を卒業後、大手IT企業に就職。システム開発、営業を経て、企業のデータ活用を支援するITコンサルタントとして10年超のキャリアを積む。官公庁、金融、メディア、メーカー、小売など携わったプロジェクトは多岐に渡る。現在もITコンサルタントに従事するかたわら、ライターとして活動中。