これまでWebアプリケーションの設置先には、導入コストの低いクラウドサーバーやVPS、レンタルサーバーが選ばれてきました。外部のインフラサービスを利用することで、自前の物理サーバーを用意することなく独自のWebサービスを公開できるため、費用やメンテナンス工数を削減できるメリットがあります。
最近ではさらなる運用効率を求めて、利用者側でインフラを持たない考え方が浸透してきました。サーバーレスはシステムを動かすための最小のインフラを提供するサービスで、迅速かつ効率的なリリースを可能にします。
この記事では、サーバーレスでWebアプリケーションを公開するメリットを解説していきます。また、サーバーを立てずにサービス例や開発時に注意すべきポイントも紹介していますので、インフラ選びの参考にしてみてください。
2014年 大学在学中にソフトウェア開発企業を設立
2016年 新卒でリクルートに入社 SUUMOの開発担当
2017年 開発会社Jiteraを設立
開発AIエージェント「JITERA」を開発
2024年 「Forbes 30 Under 30 Asia 2024」に選出
サーバーレスとは?
サーバーレスは、サーバーやネットワークなどのインフラ構築やメンテナンスを必要とせず、システム開発に集中できる基盤を提供する仕組みです。
これまでのシステム開発では、事前に用意したサーバーの上にOSやデータベース、関連するソフトウェアを配置していましたが、その導入作業が不要になります。また、CPU、メモリ、ストレージ、ネットワークなどのリソースが動的に割り当てられるため、その構成を気にしなくてよくなりました。
以降では、サーバーレスの概要を紹介し、クラウドサーバーとの違いを明確にしていきます。
サーバーレスの概要・仕組み
サーバーレスは、インフラ管理が不要なアプリケーション実行環境を提供する仕組みです。サーバーをはじめ、ストレージやネットワークなどのインフラを事前に用意する必要がない上、動作パフォーマンスに応じてリソースが割り当てられます。特に、従量課金制のサービスでは、利用した分だけ料金が発生するため、コストパフォーマンスが高いです。
また、開発者はベンダ側から提供される独自の管理ツールを通じて、間接的にサーバー操作を行うだけで済むため管理コストの削減にも繋がります。インフラは元より、OSやソフトウェアなどのメンテナンスはサービスベンダ側が行うため、管理の手間が軽減されます。さらに、利用者には見えない裏側では可用性の高いサーバー構成を採用しており、不意にシステムが停止する可能性は低いでしょう。
このようにサーバーレスでは、システム全体に必要なリソースを見積もることなく、簡単にインフラにアクセスできるようになります。
クラウドサーバーとの違い
クラウドサーバーは、仮想的に割り当てられたリソース上に個別のOSを提供するインフラです。遠隔から自由にOSレベルの操作が可能で、CPUやメモリなど足りないときにリソースを増やしたりできる柔軟性のあるインフラとして利用されます。また、OS内を自由に操作できるため、1つのサーバーに様々な役割を持たせることができます。
一方、サーバーレスは細かい調整ができない分だけ自由度が低いですが、管理コストを低く抑えられるメリットがあります。使用するインフラは自動的に構成されるため、利用者が調整する必要はありません。
両者の主な違いは下記の通りです。
サーバーレス | クラウドサーバー | |
料金体系 | 従量課金(Webアプリ起動時) | 従量課金(サーバー起動時) |
スケーリング | 自動 | 手動で構成 |
サーバー管理 | 不要 | 必要 |
サーバーレスはリクエストされたときだけ起動する上に、動作するのに必要な分のリソースだけが消費されるので、コストパフォーマンスが高いのが特徴です。OSレベルの操作が不要で、単純な構成で完結するケースに適しているといえます。
サーバーレスWebアプリのメリット・デメリット
サーバーレスでWebアプリケーションをリリースする主なメリットは次の2点です。
- 運用コストの削減
- オートスケーリング
リクエスト処理中のみ料金が発生するため、クラウドサーバーに比べて低コストで運用が可能です。また、パフォーマンスに応じて自動的にCPUやメモリ、ストレージなどのリソースが増減されるため、一時的なトラフィック増加に対応できるメリットもあります。
一方で次のデメリットもあります。
- ベンダロックインになる
- プログラム言語が制限される
サーバーレスはシステム開発を行う上でよく行き届いた仕組みである反面、サービスベンダ側に依存した作り方を求められます。クラウドサーバーに移行する場合は注意が必要でしょう。
メリット1:サーバー運用が不要であり、コストの削減もできる
サーバーレスでは、固有のインフラを確保せずにWebアプリケーションを動かすことができます。処理した時間だけ料金が発生する従量課金制で、アクセスのない時間帯は稼働しません。そのため、常に稼働しておく必要のない裏方の処理を担当するのに向いています。あるいは、特定の時間帯にだけアクセスが集中し、未使用リソースが発生しやすい用途で最大の効果を発揮するでしょう。
また、サーバーを直接持たないため管理コストも削減できます。OSやソフトウェアのメンテナンスが不要で、難しいコマンドで直接操作するようなメンテナンス作業も必要ありません。
初期費用がない上に、管理ツールを用いて簡単に導入できることから、思いついたアイディアを素早く形にできるメリットがあります。インフラ構築が不要なので、アプリケーションのリリースや機能追加に集中できるようになります。
メリット2:オートスケーリングができる
サーバーレスの裏側では、オートスケーリングを実現する構成が組まれています。オートスケーリングにより、急なアクセス集中により増加したリクエストを分散して処理することが可能です。
クラウドサーバーでも、CPUやメモリを一時的に向上させたり、ロードバランサーによる負荷分散の構成を採ったりすれば、アクセス増加に対応できますがコストが高くなります。
負荷に対して柔軟な構成を採るほど導入コストが増加しますが、サーバーレスでは構成を気にする必要はありません。オートスケーリング機能により、アクセス状況に対して適切なリソースが割り当てられます。
デメリット1:クラウドベンダへの移行が難しい
サーバーレスは、サービスベンダ側の仕様に依存しやすく、別のインフラサービスに移行しづらいです。クラウドサーバーであればOSの細かな設定したり、複雑なシステム構成を採用したりできますが、サーバーレスのサービス単体ではできることが制限されます。
例えば、クラウドサーバーではOS上にWebサーバー、データベース、メールサーバーなど複数の機能を持たせることが可能です。サーバーレスのサービスは1つの機能を提供することに特化しており、クラウドサーバーとは作り方が異なります。
もし、サーバーレスで作成したサービスを集約して1つのサーバーに統合したいといった場合、仕様が異なることから環境を移行する妨げになるでしょう。
デメリット2:使用できるコードが制限される場合がある
サーバーレスでは実行できるプログラム言語が限定されるデメリットがあります。サービスベンダ側にある既存のアプリケーション実行環境を利用することになるため、使用プログラム言語はサービスベンダに依存します。
対応しないプログラム言語の場合、コードの改修コストを考えると現実的ではありません。また、新規の開発であってもプログラム言語が制限されてしまいます。アプリケーション実行環境を自由に導入できたり、バージョンやセキュリティアップデートなど柔軟な対応ができたりするクラウドサーバーと比べると制約となります。
ただし、一般的に普及しているプログラム言語であれば対応していることが多いです。例えば、AWSではJava、Node.js、C#、Python、Rubyなどの主要なコードを実行できます。サーバーレスのサービスを選ぶときは対応するプログラム言語に注意しましょう。
お気軽にご相談ください!
サーバーレスWebアプリを実現できるサービスとは?
サーバーレスのサービスは、クラウドベンダから様々な機能が提供されています。そのため、サーバーレスの組み合わせだけでWebアプリケーションを実現することも可能です。
以降では、人気の高いAWS(Amazon Web Services)のサーバーレスサービスを3つ紹介します。
- AWS Lambda
- Amazon API Gateway
- Amazon DynamoDB
各サービスは専用サイトから簡単に環境構築ができるため、Webアプリケーションを素早くリリース可能です。
AWS Lambda
AWS Lambda(ラムダ)は、サーバーレスのアプリケーション実行基盤です。配置したプログラムコードが呼び出されたときだけ実行される仕組みで、リソースの利用に無駄がありません。なお、料金はリソースの利用時間がミリ秒単位で細かく算出されます。
また、別のサーバーレスと連携が可能で、データベースやストレージを提供するサービスと組み合わせて1つのWebアプリケーションを構成できます。そのため、Webサービスのバックエンド処理のように、常に稼働させる必要はなく都度呼び出せれば充分なケースに向いているでしょう。
Amazon API Gateway
Amazon API Gatewayは、独自のサービスを外部に公開するWeb APIを構築するためのインフラを提供します。Web APIに必要なセキュリティインフラやバージョン管理機能に加えて、過剰なリクエストを抑制したり、アクセスログを収集したりする機能も備えています。
Amazon API GatewayはWeb APIにおけるリクエストの窓口を担当しますが、中身の処理は別途用意しなければなりません。結果を返すための処理は、AWSのクラウドサーバーであるEC2やAmazon LambdaなどHTTPアクセスが可能な仕組みと連携しましょう。
Amazon DynamoDB
Amazon DynamoDBは、Key-Value型のNoSQLデータベースのサーバーレスサービスです。サーバー上にデータベースをインストールする必要がないため、固定のインフラを用意する必要もありません。データ容量やリクエストが増えても動的にサーバーのリソースが確保されるため、必要な分だけデータベースが利用可能です。
また、データベース運用管理にかかる手間を軽減します。データベースを円滑に運用するための自動バックアップやリカバリ、他拠点へのレプリケーションが可能です。さらに、パフォーマンスに応じて拡張するオートスケーリング機能を備えています。
サーバーレスWebアプリを開発する際のポイント2つ
サーバーレスの上にWebアプリケーションを展開する場合は、下記の2点に注意しましょう。
- サービス側の制約を確認
- セキュリティリスク対策の実施
サービス提供側によって内部の仕様が異なるため、制約を把握しておく必要があります。また、サービス提供側でインフラレベルのセキュリティ対策が採られていますが、アプリケーションのセキュリティリスクには注意を払う必要があります。
制約について詳しく確認する
サーバーレスでは仮想的にリソースが割り当てられますが、制限なく自由に使えるわけではありません。例えば、以下のような制約が挙げられます。
- 使用メモリの上限
- 1回当たりの処理時間の上限
- 初動の遅れ
- 対応するプログラム言語やフレームワークの種類
リクエストを受けるたびに起動するため、処理が終わるとリソースは開放されます。また、確保できるリソースにも上限があるため、時間のかかる処理には向きません。
セキュリティリスク対策をしっかりと実施する
サーバーレスのサービスでは、OSやネットワークなどのインフラに関わるセキュリティはサービス提供側が責任を持って対応しています。
利用者側の対応範囲は狭まり、アプリケーションレベルのセキュリティ対策に集中できます。サービス側にログ管理があれば、コードの脆弱性、不正アクセスの兆候、バグなどの追跡が容易です。また、攻撃的なアクセスを抑制するために、サーバーレスのサービスの手前に不正アクセス検知や遮断を担うサービスを配置すると良いでしょう。
クラウドサーバーよりも対策範囲は狭まりますが、アプリケーションのセキュリティ対策は必須です。
サーバーレスWebアプリのまとめ
サーバーレスは、低コストで高いリソース効率のアプリケーション実行環境を提供する仕組みです。クラウドサーバーのように細かい調整はできませんが、インフラを気にする必要がないため迅速にWebアプリケーションをリリースできます。
メリット
- クラウドサーバーよりも運用コストを削減できる
- オートスケーリングなのでパフォーマンスの変動を気にする必要がない
デメリット
- サービスの制約に沿って実装しなければならない
- クラウドサーバーへの移行には難がある
土台となるサーバーを持たないため、他のサービスと組み合わせて使われることが多いです。サーバーレスで構成することで、よりコストを抑えたシステム開発が可能になります。コストを重視したシステム開発・運用を検討されている場合は、サーバーレス構成の開発経験が豊富な株式会社Jiteraください。