サーバレスとは?AWS LambdaとAmazon EC2の違いやメリット・デメリットについて解説
クラウドサービスを利用した開発といえば、サーバを立てて環境構築から始めるイメージがあります。しかし、サーバを立てずにクラウド上のコンピューティングサービスだけを利用する「サーバレスアーキテクチャ」もかなり普及してきました。
現在はAmazonやGoogle、Microsoftなど、多くのクラウドサービスがサーバレスアーキテクチャのコンピューティングサービスを提供しています。
ここでは、代表的なサーバレスアーキテクチャとしてAmazonが提供しているAWS Lambdaを例に、サーバレスアーキテクチャの概要とメリット・デメリット、サーバレスアーキテクチャに向いた開発や事例などをご紹介します。
INDEX[非表示]
- 1.サーバレスアーキテクチャとは?
- 1.1.サーバレスとは?
- 2.具体的なサーバレスサービス
- 2.1.AWS Lambdaの特徴
- 2.1.1.AWS Lambdaの料金体系
- 2.2.Amazon EC2の特徴
- 2.2.1.Amazon EC2の料金体系
- 2.3.AWS LambdaとAmazon EC2の違い
- 2.4.AWSのその他サーバレスサービス
- 2.4.1.Amazon API Gateway
- 2.4.2.Amazon SNS
- 2.4.3.Amazon SQS
- 2.4.4.AWS Step Functions
- 3.サーバレスのメリット
- 3.1.サーバ管理が不要(準備、OS保守など)
- 3.2.AWSの各サービス、多様な環境で利用可能
- 3.3.オートスケール、リソース確保の柔軟性がある
- 3.4.従量課金制(コスト削減)
- 3.5.高可用性へ対応できる
- 3.6.高速でアプリケーションを構築できる
- 3.7.初期費用と手順が簡略化できる
- 4.サーバレスのデメリット
- 4.1.監視が難しい場合がある
- 4.2.コールドスタート問題がある
- 4.3.容量・時間の制限がある
- 4.4.レスポンスタイムが遅い
- 4.5.学習コストが必要
- 4.6.障害が起きたときの対応が大変
- 5.サーバレスに向いているもの
- 5.1.新規サービスの開発
- 5.2.マイクロサービスの運用
- 6.サーバレスに向いていないもの
- 7.AWSサービスを用いたサーバレス構成例
- 8.サーバレスでの構築ならエヌアイデイのクラウドソリューション
- 9.まとめ
サーバレスアーキテクチャとは?
サーバレスアーキテクチャとは、クラウドサーバ(仮想サーバ、仮想マシン)の契約なしに利用できるコンピューティングサービスです。
サーバレスアーキテクチャを利用すれば、クラウド上で開発をおこなったりサービスを提供したりするのに、クラウドサーバなどのインフラを用意する必要がありません。
ユーザーはインフラやリソースの管理を気にすることなく、開発に専念できます。
サーバレスとは?
「サーバレス」といっても、サーバを利用していないわけではありません。実際にはクラウドサービス上でサーバが動作しています。
ただし、ユーザーがサーバを契約したり管理したりする必要はありません。ユーザーの目に見える範囲にサーバがないため、サーバレスといいます。
常時稼働しているサーバを契約しないため、サーバの利用にかかるコストや運用管理のコストも削減できます。
具体的なサーバレスサービス
現在、ビジネスでよく使われるクラウドサービスの多くでサーバレスアーキテクチャを提供しています。代表的なサーバレスサービスには、次のようなものがあります。
- Amazon「AWS Lambda」
- Google Cloud「Google Cloud Functions」
- IBM「IBM Cloud Functions」
- Microsoft「Azure Functions」
同じ「サーバレスサービス」といっても、提供している内容は各社少しずつ異なります。ここではAmazonの「AWS Lambda」を例にご説明します。また、Amazonの汎用的な仮想サーバである「Amazon EC2」を例に特徴と違いもご説明します。
AWS Lambdaの特徴
AWS Lambdaの動作やシステム設計は「イベント駆動型」といい、Amazon EC2のように常時稼働しているシステムとは大きく異なります。
AWS Lambdaでの動作例を紹介します。例えば、メール着信、データ更新などなんらかのイベントが発生すると、それをトリガーにして「コンテナ」が起動します。コンテナはAWS上に用意された仮想サーバで起動し、規定の処理をおこなったあと、削除されるというものです。AWS Lambdaは、コンテナ以外にも、zip形式もサポートしています。
AWS Lambdaは、他のAWSのサービスと組み合わせて多様な機能を利用し、さまざまなシステムを構築できます。
AWS Lambdaの料金体系
AWS Lambdaは、プログラムを実行した時間ごとに料金がかかる従量課金制です。基本的には、プログラムを実行した時間×回数で料金が決まります。毎月一定の無料利用枠があり、その枠を超えると、段階的に課金されます。
料金は、利用量だけでなくコンピュータのアーキテクチャやリージョンごとに異なるため、利用前には見積もりが必要です。見積もりは下記からおこなえます。
参考:AWS Pricing Calculator「Configure AWS Lambda」
Amazon EC2の特徴
「Amazon EC2」は、AWSが提供する汎用的な仮想サーバです。CPU、メモリ、ストレージなどをさまざまに組み合わせた「インスタンス」として提供されており、適切な仕様のインスタンスを選択して環境を構築します。
Amazon EC2でサーバを立て、ストレージなどのサービスと組み合わせて環境を構築し開発をおこなうというのが、一般的な「クラウドサーバを利用した開発」のイメージでしょう。
Amazon EC2は、そのままではOSがインストールされているだけです。そこからミドルウェアのインストール、各種設定、他のサービスとの連携などをおこなうことで、ようやくプログラムが動作する環境が整い、利用できるようになります。
現在では、リソースの増減を自動化した「Amazon EC2 Auto Scaling」というサービスも提供されています。
Amazon EC2の料金体系
Amazon EC2も従量課金制で、インスタンスを起動している時間ごとに料金がかかります。その時間に何回プログラムが動作しても料金は変わりません。毎月 750 時間分の無料利用枠があり、その枠を超えると、段階的に課金されます。
Amazon EC2の料金体系は、「オンデマンド」「Savings Plans」「リザーブドインスタンス」「スポットインスタンス」の4つに分けられます。
Amazon EC2でのコスト最適化については、下記をご参照ください。
参考:AWS「Amazon EC2 コストと容量の最適化」
AWS LambdaとAmazon EC2の違い
AWS LambdaとAmazon EC2の大きな違いは、「サーバが常時起動しているかどうか」です。
AWS Lambdaでは、必要なときのみAWS Lambdaのサービス外にあるサーバを起動し、利用します。一方Amazon EC2では、サーバは常時起動しており使い放題です。
また、サーバの利用形態が異なるため料金体系も異なります。AWS Lambdaではプログラムの利用回数ごとに料金がかかりますが、Amazon EC2ではサーバの稼働時間をもとに料金がかかります。
他にも、開発前に必要な準備において違いがあります。AWS Lambdaでは、インフラや開発環境はAWSが整備しているため、ユーザーは開発のみに専念できます。Amazon EC2では、OSがインストールされたサーバしかないため、開発環境の整備から自分でおこなわなければなりません。
運用保守も同様です。AWS LambdaではインフラやOS、ミドルウェアなどの開発環境の運用保守は不要ですが、Amazon EC2ではその部分も自社で運用保守をおこなわなければなりません。
AWS Lambda (サーバレスアーキテクチャ) |
Amazon EC2 (汎用サーバ) |
|
---|---|---|
サーバ |
必要なときだけ利用する |
常時起動している |
料金 |
プログラムを実行する回数が基準 |
サーバの稼働時間が基準 |
インフラ整備や環境設定 |
AWSが用意する |
OSしか入っていないので、自分でインフラ整備やセットアップをおこなう必要がある |
インフラや開発環境の運用保守 |
AWSがおこなう |
自社で整備したインフラや開発環境部分は、運用保守もおこなう必要がある |
AWSのその他サーバレスサービス
AWSでは、AWS Lambdaの他にもサーバレスサービスを提供しています。これらを組み合わせることで、コンピューティングからストレージまで完全にサーバレスな環境を構築し、さまざまなアプリケーションやシステムの構築が可能になります。
ここでは、よく使われるサーバレスサービスを紹介します。
Amazon API Gateway
アプリケーションのフロントドアとして、APIの作成や公開、保守などをおこなうサービスです。他のシステムのイベントをトリガーにして、AWS Lambdaを起動できます。
Amazon SNS
アプリケーションから他のアプリケーションへ(A2A)、またはアプリケーションからユーザーへ(A2P)通知を配信するサービスです。
他のサービスのイベントをトリガーに通知をおこなうことで、AWS Lambdaを起動できます。
Amazon SQS
他のソフトウェアから送信されたメッセージを受信、保存、送信するサービスです。受信したメッセージをキューとして保存し、順に送信します。送信するメッセージをAWS Lambdaのトリガーとすることが可能です。
AWS Step Functions
AWS のサービスを利用して分散型アプリケーションを構築するときに、オーケストレーションを提供するサービスです。複数のステップに分解したワークフローを視覚的に集中管理できます。
サーバレスのメリット
AWS Lambdaを例に、サーバレスサービスのメリットを説明します。
サーバ管理が不要(準備、OS保守など)
サーバの準備や運用保守、例えばOSやミドルウェアのアップデート、セキュリティパッチの適用、不具合の対応などは、ベンダーであるAmazonがおこないます。AWS Lambdaを利用するユーザーが管理する必要はありません。開発環境やインフラの整備もベンダーがおこないます。
そのため、ユーザーは開発やサービスの提供・運用に専念できます。
AWSの各サービス、多様な環境で利用可能
AWS Lambdaは、AWSの多様なサービスと連携してさまざまな機能を利用できます。サーバレスサービスだけでなく、従来型の汎用サーバを利用したシステムとも連携可能です。それを生かして、多様な環境、多様なシステムで利用できます。
オートスケール、リソース確保の柔軟性がある
AWS Lambdaは、プログラムの実行回数に合わせて自動的に、必要なリソースを割り当てます。この「オートスケール」でリソース確保の柔軟性を高めることが可能です。
それによって、突然のアクセス増加など、急激に負荷が増減しても、基本的にはシステムダウンすることなく運用できます。ただし、AWS Lambdaのオートスケーリングでは「スロットリング」、つまり一定時間内のリクエスト数を制限し、それ以上のリクエストにはエラ―を返すようになっています。そのため、オートスケーリングは無限ではありません。
※AWS Lambdaのオートスケーリングの上限はリージョンによって異なりますので、設計時に確認しておきましょう。
従量課金制(コスト削減)
AWS Lambdaは、常時動作しているわけではありません。トリガーとなるイベントが発生した場合のみ動作し、実行環境を利用します。そのためクラウドサービスの使用量削減と、それにともなうコスト削減が可能です。
また定額課金ではなく従量課金になるため、これまで固定費であったクラウドサービスの利用料を変動費に置き換えることができます。
高可用性へ対応できる
AWS Lambdaでは、ベンダー側で可用性や回復性を担保した設計になっています。ユーザー側で設定や設備の確保をおこなう必要はありません。
なんらかの不具合で停止してもベンダー側が自動的に対応し、システムダウンを防ぎます。そのため、コストをかけることなく運用の負担を減らすことが可能です。
高速でアプリケーションを構築できる
AWS Lambdaでは、開発のための環境設定をおこなう必要はありません。すぐにプログラムの記述など、開発作業に入ることができます。
サービスのトラブルや障害の対応などの運用保守はベンダーが担当するため、人的リソースを運用管理に割く必要もありません。すべての人的リソースを開発に割り振ることができるため、スピーディーな開発が可能です。
初期費用と手順が簡略化できる
AWS Lambdaではサーバやインフラを用意する必要はありません。また、従量課金制なので、初期費用はありません。それによって、導入時に必要な作業を減らし、導入コストを大きく抑えることができます。
サーバレスのデメリット
AWS Lambdaのようなサーバレスサービスには、次のようなデメリットもあります。メリットとデメリットの両方をよく確認し、検討していきましょう。
監視が難しい場合がある
AWS Lambdaを利用する場合、サーバを自社で管理できません。管理できるのは、AWS Lambdaなどで構築したシステムと、自社が開発・運用しているプログラム部分のみで、サーバやインフラ部分をモニタリングすることはできません。
そのため、自社が思うとおりのセキュリティ対策をおこなえないなど、自由な環境構築はできないことを頭に入れておきましょう。
コールドスタート問題がある
AWS Lambdaでは、「コールドスタート」という問題があります。これは、サーバレスの特性上、プログラムを毎回ゼロから起動しなければならないため、起動時間がかかるという問題です。
2022年に、このコールドスタート問題に対処するため「SnapStart」という機能が追加され、言語によっては起動時間が短縮されています。
※コールドスタート部分は課金対象外です。
容量・時間の制限がある
AWS Lambdaに限らず、サーバレスサービスにはデータ容量やタイムアウト時間などいくつもの制限があります。例えばAWS Lambdaでは、Lambdaクォータと呼ばれる制限があります。
- 同時に実行できる関数の数:1,000
- 関数タイムアウト:15分(900秒)
- GetFunction API リクエスト数:1 秒あたり 100 リクエスト
※2023年3月現在の情報です
この他にも制限があるため事前に確認しておきましょう。またAmazon API Gatewayなど他のサーバレスサービスにも制限があるため、利用するサービスすべての制限を確認する必要があります。
制限を超えそうな場合は、Amazon EC2など他のサービスの利用を検討したほうが良いでしょう。
レスポンスタイムが遅い
AWS Lambdaは、イベント駆動型でリクエストを受けてからサーバを起動するため、レスポンスタイムが遅くなります。即応性が必要なシステムを構築する場合には、サーバレスサービスとの相性は良くないかもしれません。
学習コストが必要
AWS Lambdaでは、これまでと同じプログラムでは動作しないことがあります。これまで使っていた言語が利用できなかったり、コードが流用できなかったり、サーバレス独自のルールがあったりするからです。
そのため、開発にはこれまで以上の時間や工数がかかる可能性があります。初めてAWS Lambdaを使って開発をおこなう際は、スケジュールに十分な余裕を持たせることを推奨します。
障害が起きたときの対応が大変
AWS Lambdaでは、ユーザーが管理できるのは構築したシステム部分のみです。そのため、障害が発生したときに問題の切り分けがしにくくなっています。
また、問題がサーバレスサービス側にあった場合、ユーザーが対応できることはなく、ベンダーが対応してくれるのを待つしかありません。
そのため、障害が起きたとしてもサービス全体がダウンしないよう、あらかじめシステムを複数のリージョン、または複数のアベイラビリティゾーンに分散させておきましょう。
サーバレスに向いているもの
ここまでサーバレスサービス(AWS Lambda)のメリット、デメリットを解説してきました。これらの特徴から、サーバレスサービスに向いているのは、次のような場合です。
新規サービスの開発
新しいサービスを開発する場合は、できるだけコストを抑え、スピーディーに開発を進めたいものです。
そのため、新規サービスの開発には環境構築の必要がなくスピーディーな開発ができ、コストは利用した分だけ支払えば良いサーバレスサービスが向いています。
マイクロサービスの運用
マイクロサービスとは、小さなプログラムやサービスがいくつも集まってシステムを構築するものです。
マイクロサービスなら一つひとつのプログラムが稼働している時間は短いため、コストを抑えることができます。またプログラムが小さいため、タイムアウトやメモリ利用量の制限にかかりにくく、サーバレスサービスでも安心して利用できます。
サーバレスに向いていないもの
逆に、サーバレスサービスは次のようなシステムの構築には不向きといえます。
速い応答速度が求められるアプリケーション
サーバレスサービスではレスポンスタイムが遅いため、高速処理が求められるアプリケーションには向いていません。
大容量のメモリが必要なアプリケーション
多くのメモリが必要なアプリケーション、大規模なアプリケーションや、複雑で長い処理時間がかかるアプリケーションは、サーバレスでの構築には向いていません。サーバレスサービスの制限にかかってしまう可能性があるためです。
AWSサービスを用いたサーバレス構成例
具体的に、AWSサービスを用いたサーバレス構成例にはどのようなものがあるのでしょうか?ここではAWSのサーバレスサービスを利用して、チャットボットサービス「Mesoblue AI」を提供するプラットフォームを構築した例をご紹介します。
サーバレスサービスであるAmazon API GatewayとAWS Lambdaを使用してデータベースの学習部分や管理部分を構築し、短期間でのサービス開発を実現しました。チャットボットエンジンは、自社で開発したものを利用しています。
学習や管理作業は常時必要な処理ではないため、運用コストの削減も可能です。
実際にチャットでQA処理をおこなう部分はAmazon EC2を利用しており、利用者の増加に合わせて柔軟にリソースを増減できます。
引用元:NID「AWS導入事例-3」
サーバレスでの構築ならエヌアイデイのクラウドソリューション
株式会社エヌアイデイは、AWS Partner Network(APN)アドバンストティアサービスパートナーです。アプリケーション開発、クラウドインフラ構築、クラウド環境の監視・運用など、AWSをはじめとするクラウドソリューションに関する多くの経験と知見があります。
単にクラウド環境でアプリケーションを開発するだけではありません。システムを開発して提供する場合、環境の構成提案や構築から開発・運用までを含めた「クラウドソリューション」を提供しています。
さらにAWSだけでなく、Microsoft Azure、GCP、Salesforceなどのさまざまなクラウド環境でのシステム開発に対応しており、お客様の業務に合わせたシステム構築やクラウドソリューションのご提案をおこなっています。
クラウドソリューションに関する課題があれば、ぜひご相談ください。
>>エヌアイデイのクラウドソリューションについて詳しくはこちら
まとめ
サーバレスサービスは、スピーディーな開発が可能でコストも抑えられ、運用保守の手間を省いて開発に専念できるなどのメリットがあります。また利用料を固定費から変動費に変えることができるのも大きなメリットです。そのため、開発現場でも利用されることが増えています。
しかし、レスポンスタイムが遅い、学習コストがかかる、障害対応が大変などのデメリットもあるので注意が必要です。
また、サーバレスサービスには、タイムアウトやメモリ使用量など細かな部分での制限もあります。そのため、完全に自由に開発をおこなえるわけではありません。サーバレスではなく、汎用サーバを利用してシステムを構築するほうが良い場合も多くあります。
さらにサーバレスが適している場合でも、これまでと同じような開発手法ではうまくいかないケースもあります。そのときは、AWSやクラウドソリューションに強い専門家のサポートがあれば、スムーズに開発を進めることができるでしょう。