昨今、クラウドコンピューティングが普及し、サーバー運用の手間を大幅に省けるようになりました。なかでも注目されているのが、サーバーレスと呼ばれる新しいクラウドサービスです。
サーバーレスは、専用サーバーを用意する必要がないため、コストを大幅に削減できるメリットがあります。本記事では、サーバーレスの概念、種類、メリット・デメリットを解説します。
サーバーレスとは
サーバーレスとは、アプリケーションやサービスを実行する際に、物理的なサーバーリソースを準備したり管理したりする必要がないクラウドサービスのことです。
従来は、サーバー機器を用意し、運用・保守を行う必要がありました。しかしサーバーレスでは、クラウドベンダーが提供するコンピューティングリソースを必要な分だけ利用することができます。
サーバーの管理作業に費やすリソースを削減できるため、開発者はアプリケーション開発に集中できます。
サーバーレスとクラウドサーバー(仮想)との違い
サーバーレスとクラウドサーバー(仮想)の大きな違いは、サーバーのプロビジョニングの有無にあります。クラウドサーバー(仮想)では、サーバー自体を自分で管理する必要があります。一方、サーバーレスではサーバー自体を意識する必要はありません。
両者の違いをまとめると、下記の通りです。
サーバーレス
|
クラウドサーバー(仮想)
|
サーバー管理が不要
|
サーバー管理が必要
|
関数単位の課金
|
インスタンス単位の課金
|
自動スケーリング
|
手動スケーリングが基本
|
サーバーレスでは、実行する関数のコードを書くだけで済みます。そのため、サーバーの準備やメンテナンスの手間がかからないことが最大のメリットです。一方、クラウドサーバー(仮想)ではサーバー自体を管理する必要があり、手動でのスケーリングを行う必要があります。
サーバーレスとサーバーレスアーキテクチャの違い
サーバーレスとは、サーバーのプロビジョニングやメンテナンスを意識することなく、必要な時だけリソースを利用できるクラウドサービスのことです。
一方サーバーレス アーキテクチャとは、サーバーレスサービスを組み合わせて構築されたシステム全体の設計パターンを指します。
つまり、サーバーレスはクラウドサービスの一種であり、サーバーレス アーキテクチャはそれらのサービスを組み合わせて設計されたシステムのアーキテクチャパターンです。サーバーレス アーキテクチャを採用することで、従来のアーキテクチャに比べてスケーラビリティが高く、開発が容易になるというメリットがあります。
サーバーレスアーキテクチャについては、下記の記事で詳しく解説しています。
サーバーレス開発の仕組み
サーバーレス開発では、アプリケーションの実行に必要なリソース(CPU、メモリ、ストレージなど)をクラウドベンダーが自動的に割り当てます。そのため、サーバーのプロビジョニングやスケーリングなどのインフラ管理は不要になり、開発者は、コードの書き換えやデプロイに集中できます。
具体的なサーバーレス開発の流れは、以下の通りです。
- 開発者がアプリケーションコードを書く
- そのコードをクラウドベンダーの環境にデプロイする
- イベント(HTTPリクエスト、データベースの更新、クラウドストレージへのファイルアップロードなど)が発生すると、コードが実行される
- コードの実行に必要なリソースをクラウドプロバイダーが自動的に割り当てる
- コードが実行され、必要な処理が行われる
- 処理が終了するとリソースが自動的に解放される
サーバーレス開発については、下記の記事で詳しく解説しています。
サーバーレスの種類
ここからは、サーバーレスの種類についてご紹介します。
サーバーレスの種類は、下記の通りです。
FaaS
FaaSとは、Function as a Serviceの略で、クラウド上でサーバーレスでアプリケーション開発ができるサービスのことです。
FaaSには主に下記2つの特徴があります。
機能
|
説明
|
イベントドリブン方式
|
イベント(HTTPリクエスト、データベース更新、 クラウドストレージの更新など)と連携させることで イベントをトリガーに処理が実行される
イベントが発生しないと処理は実行されないため、 サーバーを常に起動しておく必要がない
|
オートスケーリング
|
サービスの負荷に応じて、自動的にサーバーリソースを 拡張・縮小する
ユーザーは手動でスケーリングする必要がなく、 常に適切なリソースを確保できる
|
FaaSは、イベントドリブンでサーバーレスに処理を実行でき、オートスケーリング機能によりリソース管理の手間も省けるため、開発者はアプリケーションのロジックに集中できるメリットがあります。
BaaS
BaaSとは、Backend as a Serviceの略で、アプリケーション開発者がフロントエンド側の開発に専念できるよう、バックエンド機能をクラウドサービスとして提供するモデルのことです。
BaaSではユーザー認証、プッシュ通知、クラウドストレージ、データベース管理などの一般的なバックエンド機能が用意されています。開発者は、APIを呼び出すことで、バックエンド側の実装を気にすることなく、フロントエンド開発に集中できます。
つまり、BaaSを利用することで、バックエンド基盤の構築やサーバー運用の手間を大幅に省くことができ、スピーディな開発が可能になります。
サーバーレスの代表的なサービス例
ここからは、サーバーレスの代表的なサービスをご紹介します。
サーバーレスの代表的なサービスは、下記の通りです。
- AWS Lambda
- Azure Functions
- Google Cloud Functions
AWS Lambda
AWS Lambdaは、AWS(Amazon Web Services)が提供するサーバーレスコンピューティングプラットフォームです。
ユーザーがアップロードしたコードを実行するためのサービスで、さまざまなイベントトリガー(HTTPリクエスト、データベースの変更、ファイルのアップロードなど)に応答して、コードを実行します。
コードは、イベントドリブン方式で実行されるため、リクエストがない時は実行されず、課金もされません。リクエストに応じて自動的にスケーリングするため、大量のリクエストにも対応できます。
AWS Lambdaについては、下記の記事で詳しく解説しています。
Azure Functions
Azure Functionsは、Microsoft Azureのサーバーレスコンピューティングサービスです。
イベントベースのコード実行を可能にしており、HTTPトリガーやタイマーによるトリガー、AzureStorageやCosmos DBの変更など、さまざまなトリガーに対応しています。
Azure Functionsは、小さな関数としてコードを実行するため、サーバーのプロビジョニングや維持管理が不要です。イベントドリブンの実行モデルにより、必要なリソースのみが消費され、使用した分のコストのみが課金されます。自動的にスケーリングされるため、トラフィックの増減に合わせて柔軟にリソースを調整できます。
Azure Functionsについては、下記の記事で詳しく解説しています。
Google Cloud Functions
Google Cloud Functionsは、Google Cloud Platform(GCP)のサーバーレスコンピューティングサービスで、イベント駆動型のコード実行環境を提供しています。
HTTPリクエスト、Cloud Pub/Subメッセージ、Cloud Storageのオブジェクトの変更などのイベントをトリガーとして関数を実行できます。
サーバーの構築や管理が不要で、コードを書くだけで必要な時だけリソースを使えるため、コスト削減やスケーラビリティの向上が期待できるサービスです。
Google Cloud Functionsについては、下記の記事で詳しく解説しています。
サーバーレスのメリット
ここからは、サーバーレスのメリットをご紹介します。
サーバーレスのメリットは、下記の通りです。
- サーバー運用をしなくていい
- コストを削減できる
- スケーラビリティが高い
サーバーレスのメリット・デメリットについては、下記の記事で詳しく解説しています。
サーバー運用をしなくていい
サーバーレスでは、従来のオンプレミスやクラウドの仮想サーバーと異なり、サーバー自体の運用や保守作業が不要になります。
具体的には、サーバーの稼働状況の監視、障害発生時の対応、OSやミドルウェアのアップデート、セキュリティパッチの適用などの作業が必要ありません。
運用業務は、クラウドベンダー(AWS、Microsoft Azure、Google Cloud Platformなど)が一括して担当してくれます。サーバーレスサービスを利用すれば、開発者はアプリケーションロジックの実装に専念でき、サーバーの運用に関するさまざまな手間を削減できます。
コストを削減できる
サーバーレスは、実際に利用したリソースに応じた課金体系になっています。
具体的には、関数の実行時間や実行回数、利用したメモリ量などに基づいて料金が発生します。つまり、アプリケーションが利用されていない時にはコストがかからず、利用が増えれば課金額も増えるという従量課金制です。
このように、サーバーレスは必要なリソースを必要な分だけ動的に確保できるため、無駄なリソースを常時確保しておく必要がありません。特に、バースト的なトラフィックの増加時にもスケーリングが自動で行われるため、過剰なリソース確保を抑えられます。
スケーラビリティが高い
サーバーレスのメリットの1つが、高いスケーラビリティです。
従来のサーバーを利用する場合、需要の変動に合わせてリソースを手動で調整する必要がありました。しかし、サーバーレス環境では、下記のようにリソースが自動的に調整されます。
需要の変化
|
サーバーレス環境での対応
|
需要の増加
|
リソースが自動的に拡張される
|
需要の減少
|
リソースが自動的に縮小される
|
つまり、手動での調整作業が不要になり、常に需要に見合ったリソースが確保されます。 自動スケーリング機能によって、短期的な需要の変動にも適切に対応できます。
サーバーレスのデメリット
ここからは、サーバーレスのデメリットをご紹介します。
サーバーレスのデメリットは、下記の通りです。
- ベンダーロックインのリスクがある
- 初回の起動に時間がかかる
- 使える言語に制限がある
ベンダーロックインのリスクがある
サーバーレスでは、特定のクラウドプロバイダーが提供するサービスやプラットフォームに依存する、ベンダーロックインのリスクが生じる可能性があります。
ベンダーロックインとは、特定のクラウドベンダー製品やサービスに依存し、他のベンダーに移行することが困難になる状態を指します。
サーバーレス環境では、各クラウドプロバイダーが独自の仕様やAPI、サービスを提供しているため、プロバイダー間での互換性が低くなりがちです。一度特定のプロバイダーのサービスを利用し始めると、そのプロバイダーに依存する度合いが高くなり、他のプロバイダーに移行するコストが高くなってしまいます。
リスクを回避するには、できるだけベンダー非依存の設計にすることが重要です。
初回の起動に時間がかかる
サーバーレス環境では、関数が初めて呼び出される際に、実行環境を新たに起動する必要があります。初回の起動にかかる時間をコールドスタートと呼び、関数の初回実行が遅延する可能性があります。
サーバーレス環境では、リソース(メモリやCPUなど)が割り当てられていないため、関数を実行するための環境を新たに作らなければいけません。
コールドスタートの実行時間は、使用するサーバーレスサービスや関数の実装、割り当てられるリソースサイズなどによって変わりますが、数百ミリ秒から数秒程度かかる場合があります。リアルタイム性が求められるWebアプリケーションでは、数秒の遅延でユーザーエクスペリエンスが損なわれる恐れがあるでしょう。代表的な対策としては、関数の起動を頻繁にトリガーしてウォームスタートの状態を維持する方法などがあります。
使える言語に制限がある
サーバーレス環境では、使用できるプログラミング言語に制限があります。サービスごとに対応言語が異なるため、導入時に確認する必要があります。
サービス
|
対応言語
|
AWS Lambda
|
Node.js、Python、Ruby、Java、Go、C#、PowerShell、Node.js、Ruby
|
Azure Functions
|
C#、F#、Node.js、Java、JavaScript、Python、PowerShell、TypeScript
|
Google Cloud Functions
|
Node.js、Python、Go、Java、Ruby、PHP、.NET
|
サービスごとにサポートされている言語が異なるため、開発する際は事前に対応言語の確認が必要です。
サーバーレスを導入するポイント
ここからは、サーバーレスを導入するポイントをご紹介します。
サーバーレスを導入するポイントは、下記の通りです。
- サービスごとの制約を確認する
- セキュリティ対策を徹底する
サーバーレスの向き不向きについては、下記の記事で詳しく解説しています。
サービスごとの制約を確認する
サーバーレスサービスを利用する際は、各サービスの制約を事前に確認する必要があります。
代表的な制約事項は、下記の通りです。
制約事項
|
内容
|
実行時間
|
1リクエストあたりの最大実行時間が決められている
|
メモリ
|
割り当てられるメモリの最大値が決められている
|
言語
|
サポートされる言語が限定されている
|
外部リソース
|
外部リソースへのアクセス制限がある場合がある
|
導入する際は、システム要件に合わせて適切なサービスを選定することが重要です。サービスの利用に先立ち、公式ドキュメントで制約を必ず確認しましょう。
セキュリティ対策を徹底する
サーバーレスでは、サーバーの管理が不要になる代わりに、インターネット経由でクラウドサービスに接続するため、新たなセキュリティリスクが考えられます。
主なリスクとしては、以下が挙げられます。
- マルウェア感染
- 脆弱性を狙ったサイバー攻撃のリスク
このようなリスクに対処するため、以下の対策を徹底することが重要です。
対策
|
内容
|
安全なネットワーク環境の整備
|
VPNやプライベートネットワークなどを活用し、安全性の高いネットワーク接続を確保する
|
セキュリティソフトの導入
|
ウイルス対策ソフトやファイアウォールなどのセキュリティソフトを導入し、マルウェアの侵入や不正アクセスを防ぐ
|
脆弱性情報の確認とパッチ適用
|
クラウドベンダーや関連ソフトウェアの脆弱性情報を定期的にチェックし、セキュリティパッチを適用して最新の状態を維持する
|
サーバーレスでは、従来のサーバー管理とは異なるセキュリティ対策が必要となります。上記の対策を徹底することで、クラウド環境におけるセキュリティリスクを最小限に抑えられます。
サーバーレスを実現したいならICにお任せください
引用元:システム開発のIC
株式会社ICは、40年以上の実績を持つITソリューション企業です。サーバーレスの導入には、クラウドサービスの選定や開発環境の構築、セキュリティ対策など、さまざまな課題があります。
ICは、長年の経験とノウハウから、お客様のニーズに合わせたサーバーレスソリューションをワンストップで提供します。
サーバーレスの導入を検討中の企業様は、ぜひICにご相談ください。
システム開発のIC
まとめ
本記事では、サーバーレスの概念、種類、メリット・デメリットを解説しました。
サーバーレスは、アプリケーションやサービスを実行する際に、物理的なサーバーリソースを準備したり管理したりする必要がないクラウドサービスのことです。
サーバーレスのメリットは、サーバー運用が不要なため手間が省け、実行時のみコストがかかるため費用を抑えられ、自動的にスケーリングされるため拡張性が高いことです。一方、デメリットとしては、ベンダーロックインのリスク、初回実行時に立ち上がりに時間がかかる、使用できる言語に制限があることなどが挙げられます。
サーバーレスを導入する際は、各サービスの制約を確認し、セキュリティ対策を徹底する必要があります。
サーバーレスの導入を検討されている場合は、システム開発のICにご相談ください。