サーバーレスとは
サーバーレスとは、サーバーを意識せずに必要なサービスを利用するコンピューティング環境を指します。決してサーバーがない環境ではなく、あくまでも意識せずに利用できるという意味合いで用いられます。
従来型ではシステムの設計をするにあたって規模を見積もり、可用性やデータ保全を考慮した設計が必要でした。サーバーレス設計では自動的なスケールや可用性を高めるリトライ処理が標準提供され、設計作業が簡素化できます。一番の特徴は、これまで必要とされていたサーバーの初期準備やOS保守がほぼ不要になる点です。
上記サービスを実現するために、アプリケーションのロジックを定義するサービス(Function as a service)のランタイム環境をサーバーレスランタイム環境と言います。一般的なクラウドサービスと違い、実行時の利用時間や回数で料金が請求されます。
サーバーレスの特徴
一般的なクラウドサービスは、コンピュータ資源としてサーバー・ストレージ・ネットワークを割り当てます。
メモリーサイズやストレージサイズ等のキャパシティ見積もりや、CPU数・ノード数等の性能値をあらかじめ設定しておく必要があります。通常は事前にサイジングやチューニング等のアセスメントを行い、サービス提供に必要される指標を求めます。システム開発を行いアプリケーションをデプロイする利用のための構築作業が必要となります。
サーバーレスの仕組はさほど難しくなく、裏側ですぐに利用できるコンピュートリソースが待機しているイメージです。利用するための一連の準備や構築に関する管理作業が不要となり、生産性が向上することが特徴です。
サーバーレスのメリット
代表的なサーバーレスの導入メリットとして以下の点が挙げられます。
・サーバー管理が不要 クラウドサービスでサーバーを利用する場合は、サーバーやストレージの選定および初期セットアップが必要です。サーバーレスでは、必要なコードを準備するだけでイベントに応じてサーバーが割り当てられます。
・柔軟なスケーリングと自動化 クラウドサービスでは、事前にサイジングを行い必要なインスタンスを確保します。サーバーレスでは、自動的に処理に応じたコンピュータ資源およびメモリー量が確保されます。同様にリトライ処理やイベントに応じた処理を設定することでエラー処理に必要なマニュアル作業を削減することが可能です。
・未使用時リソースの確保が不要 クラウドサービスでは、サービス利用契約に基づきコンピュータ資源を確保する必要があります。サーバーレスでは、イベントに応じてコンピュータ資源が割り当てられますので、繁閑の差があったり特定時間に処理が集中する場合にコスト最適化が期待できます。
・コスト削減 実行するワークロードに合わせてクラウドサービスの利用状況を自動調整してくれます。実行コードはイベントにより起動されますので、起動数や処理に必要なメモリー量等を自動的に調整してくれます。料金体系は消費したコンピューティング時間に対して請求されますので、事前に資源を確保する場合に比べて最終的にはコスト削減につながり、大幅な料金節約・適正化が図られます。
以上の点をまとめると、サーバーレスでは従来必要であった作業量が削減できること、導入時間が短縮できること、費用適正化が図られること、がメリットといえるでしょう。
サーバーレスのデメリット
サーバーレスでは色々な処理が自動実行できるメリットがあります。初期構築作業が削減できます。自動処理に関する手続きはプログラミングする必要があるので、システム構築以外のプログラム開発の投資はこれまで通り必要となります。
クラウドサービスの料金体系によっては、イベントの発生頻度が多い場合や、1度の実行時間が長い処理は従量制課金の集計が増えますので、固定的にサービスを利用する方がコストが抑えられる場合もあります。そのため高負荷・高利用回数の処理に関してはサーバーレスは不向きで、通常のサービスが適しています。
クラウド事業者のサーバーレスサービス
各クラウド事業者は、各社の名称でサーバーレスサービスを提供しています。
AWSでは、AWS LambdaやAWS Fargateが該当します。マイクロソフトは、Azure Functionsが該当します。プレビューとしてAzure Container Appsも追加提供されました。Google Cloudでは、Cloud Functions・Cloud Run・App Engineが提供されています。詳細は以降でお話しします。
AWS Lambda
AWS Lambdaは、AWS製品サービスでサーバーレスカテゴリーのサービスです。サーバーのプロビジョニングや管理等を行わずに必要なコード処理を実行できます。実行は、イベントを定義することでコンピュータ資源を用いて自動的に実行してくれます。
【参考】:AWS Lambda
AWS Lambdaの使用状況は、関数に対するリクエスト数とコードの実行時間に基づいて集計されます。リクエスト数はイベントの発生等による実行コードを呼び出した回数です。実行時間は、コード実行開始から終了(もしくは中止)までの時間を1ミリ秒単位で集計されます。
AWS Fargate
AWS Fargateは、コンテナ向けサーバーレスサービスのコンピューティングエンジンです。AWS Lambdaと同様にインスタンスの選択やクラスター容量のスケーリング設定することなく、適切なコンピューティング容量が割り当てられます。
【参考】:AWS Fargate
AWS Fargateでは、コンテナ化されたアプリケーションで消費される vCPU およびメモリリソースの量に対する料金が発生します。
Azure Functions
マイクロソフト社のAzure Functionsは、サーバーレスの考え方に基づくFunction as a serviceの提供サービスです。自動スケーリングにより、インフラ管理を簡素化します。Visual StudioとVisual Studio CodeでFunctions拡張機能が利用可能です。Azure Pipelinesを使用して継続的インテグレーションと継続的デリバリー(CI/CD)に活用できます。
【参考】:Azure Functions
Azure Functionsでは、関数の実行中にのみコンピューティング リソースに対して課金されます。
Azure Container Apps
マイクロソフト社のAzure Container Appsは、フルマネージドのサーバーレスコンテナサービスです。Kubernetesを用いてコンテナ化されたアプリをデプロイし、自動的にスケールするオーケストレーション環境が構築できます。
【参考】:Azure Container Apps プレビュー
Cloud Functions
Google CloudのCloud Functionsは、その名の通りFunctions as a Serviceから命名されています。サーバー管理なしでコードを実行する関数(Functions)を提供します。負荷に応じたスケーリングを自動的に行い、ハイブリッドクラウドやマルチクラウドに対応します。トリガーベースでサービス接続し、自動化が可能です。
【参考】:Cloud Functions
リアルタイムのファイル処理やストリーム処理、動画や画像分析等に用います。Cloud Functionsの使用量は関数の実行時間に対して計測され、100 ミリ秒単位でまとめて請求されます。
Cloud Run
Google CloudのCloud Runは、フルマネージド環境でコンテナアプリケーションの開発からデプロイまで対応します。Go・Python・Java・.Net・Node.js等の多様な言語をサポートします。Google Cloudの他のサービスと統合されているため、開発効率を高めることができます。
【参考】:Cloud Run
ウェブサイトやウェブサービス、データ処理に利用できます。Cloud Runの使用量はコード実行時間が計測され、100 ミリ秒単位でまとめられて請求されます。
App Engine
Google CloudのApp Engineは、フルマネージド環境でスケーラブルなアプリケーションの構築が可能です。Node.js・Java・Ruby・C#・Go・Python・PHPや指定の言語ランタイムが利用可能です。Dockerコンテナをランタイム環境に設定することもできます。
【参考】:App Engine
ウェブアプリケーションやモバイルバックエンドに利用できます。使用量は、設定した基本コンポーネントにしたがってアプリケーションの使用状況に応じて請求されます。
進むワークロード別のサーバーレス化
データベースや個々のワークロードにおいても、サーバーレスサービスがリリースされ始めています。
AWSのサーバーレスデータベースのAmazon Timestreamや、NoSQLのAmazon DynamoDB等があります。AzureはワークロードスケーリングのAzure Data Lake Storageやオンデマンド分析となるData Lake Analyticsが該当します。Google Cloudでは自動スケールに対応するDatastore等です。
このような用途別のサーバーレス化も準備拡大する気配があります。
サーバーレスの参考本
サーバーレスを体系的に学びたい方向けに以下の参考本を紹介します。
・基礎から学ぶ サーバーレス開発 AWS Lambdaを中心としたサーバーレス開発を解説しています。基礎知識からメリット・デメリットまで幅広くカバーしています。 出版元:C&R研究所
【参考】:基礎から学ぶ サーバーレス開発
・AWSによるサーバーレスアーキテクチャ AWS Lambdaの基本的な考え方から、Amazon S3・Amazon DynamoDBの組み合わせによる構築方法をカバーします。 出版元:翔泳社
【参考】:AWSによるサーバーレスアーキテクチャ
・Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド AWSのサービスを利用したアプリケーション開発をサーバーレスの観点から解説しています。AWSのサービス概要からアカウント設定、インフラの自動化まで広く紹介しています。 出版元:マイナビ出版
【参考】:Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド
サーバーレスのメリットを理解し利用しましょう
サーバーレスは、サーバー構築の手間をなくしアプリケーションの開発からデプロイを効率的に展開していきます。負荷に応じてスケーリングさせることで業務拡大にも対応します。従来のサービスは固定的に利用するのに適していますので、サーバーレスのメリットを享受しながら従来サービスと併用するのも良いでしょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから