目次
はじめに
いつもご愛読ありがとうございます。咲くキャリ情報局です。今回の記事では、「サーバーレスアーキテクチャの導入:メリットとデメリット徹底解説」について、詳しく考察していきたいと思います。具体的には、
1.サーバーレスアーキテクチャとは
2.代表的なサーバーレスサービスとその特徴
3.クラウドコンピューティングとの違い
4.サーバーレスアーキテクチャの導入のメリット
5.サーバーレスアーキテクチャの導入のデメリット
以上の順番でみていきます。最後までお付き合いいただければ幸いです。
1.サーバーレスアーキテクチャとは

サーバーレスアーキテクチャとは、開発者がサーバーの準備や管理を意識しないで済むので、開発者がサーバーの運用や管理から解放され、アプリケーションやサービスのコードの作成に集中できるように設計されたアーキテクチャの一つです。なぜ、プロビジョニングや管理を意識しないで済むのでしょうか、それはクラウドプロバイダーにインフラの運用・管理をゆだねるからです。ですので、サーバーレスアーキテクチャでは、実際に使ったリソース量に応じて課金される従量課金制を利用しています。
では、どうしてサーバーレスという状態を維持できるのでしょうか、それは、プロバイダーのバックエンドで、仮想マシンや物理サーバーは稼働し続けるので、その構築や保守といったライフサイクル管理はすべてプロバイダー側が責任を負うというシステムになっているからです。ですので、アプリケーションの開発企業はスケーリング(システムやアプリケーションの処理能力や容量を、需要の変化に合わせて調整すること※1)の戦略策定や、OSのセキュリティパッチ適用などのインフラ管理作業から解放されて、コードの作成に集中できます。
参考出典:
※1はAPPSWINGBYから引用
2.代表的なサーバーレスサービスとその特徴

サーバーレスの代表的なサービスは、①Google Cloud Functions、②Azure Functions
③AWS Lambdaがあります。
①Google Cloud Functions
Google Cloud Functionsは、Google社のサーバーレスコンピューティング・プラットサービスのことで、イベント駆動型のコード実行環境を可能としているサービスのことを指します。すなわち、開発者がアプリケーションを構築・運用するために必要なインフラストラクチャの管理をすべてGoogle社に任せるので、開発者はコードの記述に集中できます。また、Google社がフルマネージドでサーバーの構築や管理をすべて行ってくれるので、コードを書くだけで必要な分のリソースを使えます。これにより、スケーラビリティの向上やコスト削減が期待できるサービスです。主な特徴としては、Cloud Storageのオブジェクトの変更、HTTPリクエスト、Cloud Pub/Subメッセージなどのイベントをトリガーとして関数を実行できます。
②Azure Functions
「Azure Functions」は、Microsoft社が提供するサーバーレスコンピューティングサービスです。Microsoft社がサーバーの構築や保守、必要に応じてスケーリングも行ってくれます。ですので、開発企業はサーバーを意識することなく、アプリケーション開発に集中できます。また、コードを作成する際に、必要な分だけリソースを使えるため、使用した分のコストのみが課金されます。すなわち、コストを最適化することができます。その上、リクエストに応じて自動的にスケーリングするので、スケーラブルなアプリケーションを開発が可能となります。主な特徴としては、タイマーによるトリガー、HTTPトリガー、Cosmos DBの変更AzureStorageなど、さまざまなトリガーに対応しています。
③AWS Lambda
AWS Lambdaとは、Amazon社が提供するサーバーレスコンピューティング・プラットフォームであり、クラウド上にプログラムを定義しておくことで、インターネットを通じてプログラムを実行できるサービスです。これにより、自分でインフラサーバーの管理・運用を行う必要が無くなり、コード作成に専念できます。主な特徴としては、多種多様なイベント・トリガー(ファイルのアップロード、データベースの変更、HTTPリクエストなど)に応答して、コードを実行します。また、Amazon S3と組み合わせることで、データ変換、画像や動画の自動処理を簡単に実現したり、自動でフォーマット変換やリサイズを行うことも可能です。
参考出典:
3.クラウドコンピューティングとの違い

サーバーレスアーキテクチャーとクラウドコンピューティングの違いとは、簡潔に述べると下記のとおりです。
・サーバーレス
◎関数単位での課金・・プログラムの実行回数や実行時間に応じて料金が発生する従量課金制を採用しています。
◎サーバー管理が不要・・・プロバイダーがサーバーを管理・運用してくれるので、プログラムの実行環境がすべて用意されており、プログラムを送るだけですぐに実行できます。
◎自動スケーリング・・・イベント発生時に自動スケールします。アイドル時はゼロです。
・クラウドコンピューティング
◎インスタンス単位の課金・・・インスタンスの稼働時間に応じて課金されます。
◎サーバー管理が必要・・・プログラムを動作させたりするには、クラウドサーバー上でプログラムを開発したり、OS設定性能、見積もり、ソフトウェア導入、ミドルウェアをインストールするなどの実行環境構築が必要となります。
◎手動スケーリングが基本・・・手動増設、オートスケーリング設定が必要です。
このように、サーバーレスでは開発者がサーバー自体を管理する必要がありません。つまり、開発者は開発だけに専念できます。一方、クラウドコンピューティングでは、サーバー自体を自分で管理(サーバーの準備やメンテナンスなど)する必要があります。つまり、開発者は開発だけに専念できません。
参考出典:
4.サーバーレスアーキテクチャの導入のメリット

・サーバーレス環境においては、サーバー運用・保守が不要なので、コストの大幅な削減が図れます。
サーバーレスのメリットは、その管理コストを大幅削減が可能になることです。サーバーレス環境を導入することで、従来自社の専門チームが行っていたスケーリング、OSのパッチ適用、セキュリティ監視、障害対応、ミドルウェアのアップデートなどの日常運用は、クラウド事業者が代わりにやってくれます。これにより、開発者はサービス改善、新機能開発、ビジネスロジックの実装などの業務に振り分けることができます。すなわち、人件費などのコストを削減できるようになります。
・オートスケーリングでアクセス集中にも自動的調整が可能です。
従来のサーバーを利用する場合、専門チームが主導で需要の変動に合わせて調整する必要がありました。ですが、サーバーレスだとアクセスが集中した場合、クラウド基盤が瞬時に実行環境を拡張し、また、ピークを過ぎれば実行環境は自動的に縮小します。つまり、常に需要にみあったリソースが確保されています。この自動スケーリング機能は、短期的な需要の変動にも適切に対応できます。具体的には、キャンペーンやセールなど変動の大きいビジネスにおいてもサービス品質を落とすことなく、良い水準を保てます。
・従量課金制度、つまり実行した時にだけ料金がかかるのでコストの最適化ができます。
サーバーレス環境では、コンピューティングリソース(コードの実行時間、リクエスト数など)が実際に使用された分だけ課金される完全な従量課金制です。つまり、サーバーレス環境では、関数が呼び出されたときだけ実行環境を起動して、処理が終われば停止するのです。そのため アイドル状態の間には課金が発生しません。すなわち、無駄なアイドリングコストを無くすことができます。
・アプリケーションのリリースまでの時間を大幅に短縮できます。
サーバーレスの環境では、開発者はインフラ管理を気にする必要はないので、開発者はコーディングに集中できます。そのため、アプリケーションのリリースまでの時間を効率的に大幅に短縮できます。
・サーバーレスアーキテクチャは障害に強いです。
プロバイダーがサーバーを管理しているので、万が一、障害が起きても開発者が障害に対応しなくても済みます。これにより、障害時の労力やコストを削減することができます。
参考出典:
5.サーバーレスアーキテクチャの導入のデメリット

・ベンダーロックインのリスクがあります。
ベンダーロックインとは、特定のクラウドプロバイダーが提供するサービスに強く依存するため、一度システムを構築すると、他のプロバイダーへの移行が困難になることです。すなわち、クラウドごとにオーケストレーション(大規模なITシステムやアカウントの管理をソフトウェアによって自動化する機能※2)などが独自の仕様のため、別クラウドへ移行する際はツール整備や設計の見直しが必要となるといった移行コストが増大するからです。
・デバッグや統合テストが複雑化してきます。
サーバーレスアーキテクチャは統合テストも複雑化したり、デバッグがやりずらいというデメリットがあります。デバッグがやりずらい原因としては、サーバーレスプロバイダーが管理しているバックエンドプロセス(APIの提供、セキュリティ対策、データの保存や操作、ビジネスロジックの実装システム全体の基盤を支える役割のこと)の可能性が低くなることが挙げられます。また、大規模な開発では開発コードが属人化するため、統合テストが複雑化し、開発効率が下がる危険性もあります。
・セキュリティ要件が変化しています。
サーバーレスの環境下における脆弱性管理はクラウド側が担います。しかし、ネットワーク設定や関数の実行権限は開発者の責任です。IAM権限(ユーザーやデバイスの「身元(ID)」を確認し、それぞれに適切なアクセス権を与えるための管理システムや仕組みの総称※3)を最小権限で設計して、保存データや通信を暗号化しなければリスクが生じます。また、開発者は設計時に法規制への適合状況を必ず確認するようにしなければなりません。
・対応プログラミング言語を事前に調べる必要があります。
サーバーレス環境では、サーバーレスサービスごとに対応言語が異なるため、導入時に確認する必要があります。どのようなプログラミング言語がデフォルトで使えるのか、開発する際は事前に確認が必要です
・コールドスタートによる遅延が起こります。
コールドスタートとは、サーバーレス環境において、一定時間呼び出しがない関数は休止し、次のリクエスト時にランタイムと実行環境を初期化することを指します。これにより、長期間アクセスがなかった関数が呼び出される際に、実行環境の準備に通常より時間がかかり、レスポンスが遅延する現象が起こります。
参考出典:
※2はネットアテストから引用
※3はサイバーセキュリティ.comから引用
まとめ

この記事では、下記の通り考察してきました。
1.サーバーレスアーキテクチャとは
2.代表的なサーバーレスサービスとその特徴
3.クラウドコンピューティングとの違い
4.サーバーレスアーキテクチャの導入のメリット
5.サーバーレスアーキテクチャの導入のデメリット
この記事を通じて言えることは、サーバーレスアーキテクチャは、サーバーを管理する必要が無いため、アプリケーションをスピード感を持って開発したい開発担当者におすすめです。また、企業側にもメリットがあります。それはサーバー管理に手間をかけずに、コストを下げながら開発をスムーズに進められる点です。
今回も最後までお読みいただき、本当にありがとうございました。