サーバーレスコンピューティングとは?

サーバーレスとは

サーバーレスコンピューティングとは、開発者が、クラウドプロバイダーによって管理され、オンデマンドで利用可能なサーバー上でコードを構築し、実行できるようにするクラウドコンピューティングモデルです。サーバーレスコンピューティングは、開発者をバックエンドのインフラ管理から解放し、企業にスケーラブルで柔軟な環境を提供します。サーバーレスコンピューティングでは、クラウドプロバイダーは必要に応じてスケールアップまたはスケールダウンすることで需要に応じたインフラを提供し、定期的なメンテナンス、更新、パッチワーク、セキュリティ監視を行うことでインフラを管理します。

サーバーレスコンピューティングとは、サーバーが存在しないという意味ではありません。むしろ、サーバーレスとは、インフラ管理をクラウドプロバイダーに委託することを意味します。これがサーバーレス監視の利点と課題の理由です。企業はビジネスロジックにリソースを集中することができますが、その代償として、バックエンドで起こっている事象の制御能力や可視性が低下します。

サーバーレスとFaaS

FaaS(Function-as-a-Service)とは、バックエンドのインフラ管理の負荷をなくし、フロントエンドのコードの構築と実行に集中できるようにするコンピューティングサービスを指します。サーバーレスとFaaSは、しばしば同じ意味で使われますが、FaaSは特に開発者に提供するコード実行能力を指します。イベントドリブンのアーキテクチャーであるFaaSは、サーバーレスのサブセットであり、サーバーレスが提供するサービスの1つに過ぎません。

サーバーレスサービスには、サーバーレスストレージやデータベース、イベントストリーミングやメッセージング、APIゲートウェイも含まれます。

サーバーレスとBaaS

BaaS(Backend-as-a-Service)は、FaaSと同様に、サーバーレスのサブセットです。BaaSは、開発者がフロントエンドに集中できるようにするクラウドコンピューティングモデルです。BaaSには、ユーザー認証、プッシュ通知、クラウドストレージ、データベース管理といった一般的なバックエンド活動のための既製のソフトウェアが付属しています。

サーバーレスはFaaSとBaaSの両方で機能します。

サーバーレスとSaaS

SaaS(Software-as-a-Service)とは、プロバイダーがすぐに使えるソフトウェアアプリケーションをライセンス供与し、インターネット経由で企業に提供するコンピューティングサービスのことです。サーバーレスコンピューティングは、開発者がサーバー管理を気にすることなくアプリケーションを構築、デプロイできる、スケーラブルで柔軟なインフラを提供します。

サーバーレス監視とは?

サーバーレスコンピューティングのイベントドリブンアーキテクチャーとサードパーティーのインフラでは、専用の監視ソリューションも必要です。サーバーレス監視ソリューションは、企業が業務全体を可視化するのに役立ち、あらゆるサーバーレスコンピューティングモデルの重要な構成要素です。

サーバーレスアーキテクチャーの主要な構成要素とは?

サーバーレスアーキテクチャーにはいくつかの重要な要素があり、従来のインフラモデルとは一線を画しています。

  • クラウドプロバイダーの役割が重要:
    • クラウドプロバイダーはインフラ管理を担うため、サーバーレス環境の鍵を握ります。従来のアーキテクチャーコンピューティングモデルでは、通常、ITチームはサーバーの運用と管理に時間と工数を費やす必要がありました。サーバーレスでは、クラウドプロバイダーがその責任を負うため、開発者は自由になります。クラウドプロバイダーは、・サーバー、データベース、ストレージを提供します。
  • イベントドリブンのプログラミング:
    • サーバーレスは、ポーリングによってではなく、イベントによってトリガーされます。サーバーレス環境はイベントドリブンアーキテクチャー(EDA)です。イベントとは、ユーザー側からのリクエストのような、環境で発生するあらゆる状態の変化のことです。これらのイベントは関数を呼び出します。関数は開発者によってプログラミングされ、タスクのトリガーとなります。
  • トリガーベースのタスク:
    • サーバーレスは、イベントによって呼び出される関数によってトリガーされたときにのみタスクを実行します。その結果、サーバーレスは呼び出されたときに必要なリソースだけを使用します。
  • 非同期プログラミング:
    • サーバーレスのイベントドリブンアーキテクチャーとステートレスな性質により、非同期プログラミングが可能です。ステートレスとは、インタラクション間でデータが保存されないことを意味します。そのため、複数のタスクを一度に実行でき、タスクの終了を待ってから別のタスクを実行する必要がありません。非同期プログラミングの可能性は、開発者が新しいコードを作成したりテストしたりするときにも柔軟性をもたらします。デプロイが高速化します。
  • RESTful API:
    • サーバーレスでは、RESTful APIを使用してWebサービス間で通信を行います。RESTとは、representational state transferの略です。APIとは、アプリケーションパフォーマンスインターフェースのことです。ステートレスアーキテクチャ環境として、サーバーレスはRESTful APIを使用し、HTTPでリクエストを行ったユーザーに対してクライアントエンド(バックエンド)のリソースを翻訳または表現します。
  • DevOps(CI/CD):
    • サーバーレスによって、開発者はCI/CDでDevOpsからOpsの部分を外すことができます。CI/CDはアプリケーション開発に自動化を導入します。CIは継続的統合、CDは継続的デプロイまたは継続的デリバリーを指します。バックエンド監視をクラウドプロバイダーにアウトソースすることで、開発者は開発パイプラインの一部を自動化でき、デプロイの影響について心配する時間を減らせるため、サーバーレス環境はアジャイルなアプリケーション開発に貢献します。
  • 自動スケール:
    • サーバーレスは本質的にスケーラブルです。需要に応じて自動的にスケールアップまたはスケールダウンします。サーバーレス環境は、関数が呼び出されたときにだけコンテナーをスピンアップします。そのため、使用量の増減に自動的に対応します。
  • 自己回復:
    • サーバーレスアプリケーションは、エラーが発生すると自動的に識別して修正するようにプログラミングできます。このタイプの機能は、アプリケーションの耐障害性を向上させ、可用性を高めます。

サーバーレスアプリケーションの仕組み

サーバーレスは、Backend-as-a-Service(BaaS)とFunction-as-a-Service(FaaS)の両方を使用してリクエストを処理します。環境全体がイベントドリブンです。つまり、イベントが認証や機能などの応答を引き起こします。

サーバーレスのFaaS部分は、ユーザーのリクエストやイベントで動作します。リクエストはアプリケーションパフォーマンスインターフェース(API)ゲートウェイで処理され、関数を呼び出します。次に、この関数はデータベースと通信します。このアクティビティの文字列は、1つのアプリケーションタスクを表します。サーバーレス環境では、タスクは個別の関数としてプログラミングされるため、アプリケーションはモジュール化されます。

開発者は、オンデマンドでコンテナーにデプロイされるサーバーレスアプリケーションのコードを作成します。クラウドプロバイダーは、稼働中のサーバーで機能を実行するか、機能を実行するために新しいサーバーを立ち上げます。

サーバーレスはステートレス、つまりすべての呼び出しが独立しているため、開発者に大きな柔軟性をもたらします。以前のインタラクションからのデータは保存されません。サーバーレスは必要なときだけリソースを使います。関数が不要になると、そのコードが配置されていたコンテナーは消滅します。これにより、サーバーレスは開発者に柔軟性をもたらします。

サーバーレスアプリケーションにおけるその他の考慮事項:

  • コールドスタートは、ある関数が初めて呼び出されたときや、一定期間使用されなかった後に発生する可能性があります。このため、レイテンシが発生することがあります。
  • クラウドプロバイダーは、同時に実行できる機能の数を決定します。これが同時実行数の制限です。
  • タイムアウトは、クラウドプロバイダーが関数を終了させるまでに割り当てる時間のことです。

サーバーレステクノロジーが重要である理由

サーバーレステクノロジーが重要なのは、自動スケーリングを可能にすることでビジネスに大きな利益をもたらし、開発者の生産性を高め、アプリケーションをより迅速に提供できるようになるからです。そのため、費用対効果の高い技術です。開発者は運用よりも生産に集中ができ、消費ベースのモデルとして物理サーバーの運用、管理コストを削減できます。

サーバーレステクノロジーは10年以上前から存在しています。2014年、AWSは最初のFaaSであるAWS Lambdaを発表しました。GoogleにはGoogle Cloud Functions、MicrosoftにはAzure Functionsがあります。ほとんどのビジネスがクラウドコンピューティングに依存しているため、サーバーレステクノロジーはビジネスオペレーションの代名詞となっています。クラウドプロバイダーの役割が企業にとって重要になるにつれ、サーバーレステクノロジーも重要になります。

サーバーレス関数の利点

サーバーレス関数は、開発者にも顧客にも多数の利点をもたらします。

  • 費用対効果:クラウドプロバイダーはサーバーレスを消費ベースのモデルとして提供し、利用したリソースや機能に対してのみ課金します。サーバーレスのステートレスな性質(コンテナーが使用されていない場合は消滅する)により、アイドル時間は存在しません。その結果、アイドル時間の料金を支払うことはありません。これはコスト効率に劇的な違いをもたらします。
  • スケール:サーバーレスでは、イベントドリブンアーキテクチャーにより、必要に応じてスケールアップやスケールダウンが可能です。需要が増えれば、クラウドプロバイダーは必要に応じてリソースを増やし、スケールアップすることができます。クラウドプロバイダーが代わりにリソースを運用、管理しているため、ビジネスの成長に集中できます。
  • 負荷の削減:サーバーレス関数では、クラウドプロバイダーがインフラの管理と監視を引き受けます。つまり、管理コストと人的リソースをクラウドプロバイダーに委ね、自社のリソースを開発とデプロイに振り分けることができます。
  • パフォーマンスと可用性:イベントドリブンの環境であるサーバーレスは、不必要なリソースを使用しないため、パフォーマンスが向上します。これは、リソースが必要に応じて利用できるということでもあります。クラウドプロバイダーは、必要に応じてサーバーやコンテナーをスピンアップすることで、必要に応じてスケールできます。サーバーやストレージの可用性を心配する必要はありません。
  • 開発者の生産性:クラウドプロバイダーがDevOpsの運用部分を担うため、開発者はサーバーレス関数の利点を活用できます。これにより、開発者はコードの作成に集中できます。サーバーレス環境は、開発パイプラインのCI/CD自動化を可能にするため、開発のアジリティと生産性が推進されます。

サーバーレスコンピューティングの課題

サーバーレスコンピューティングには、コスト効率や開発の加速といった明らかな利点があるにもかかわらず、一連の課題が伴います。サーバーレスコンピューティングには、次のような欠点があります。

  • ベンダーのロックイン:サーバーレスの性質は、コードのデプロイを単一のクラウドプロバイダーに委ねることを意味します。その結果、開発者はベンダーの提供するモデルに従わざるを得なくなります。プロバイダーは、同時実行数の制限など、リソースの使用を指示します。こうした理由から、ベンダーロックインは柔軟性の欠如を意味します。
  • コードの観点からの監視とデバッグ:。クラウドプロバイダーがインフラを管理するため、運用のバックエンドをほとんど可視化できません。その結果、専用のサーバーレス監視ツールがないと、サーバーレス環境を監視するのは非常に困難です。サーバーレス環境のイベントドリブンアーキテクチャーでは、バグの特定、再作成、修正も困難です。
  • レイテンシー -サーバーレス環境におけるアプリケーションはステートレスであるため、関数が初めて呼び出されたときや、長い間操作されなかった後にレイテンシが発生することがあります。レイテンシは、タイムアウトや、同時に実行される機能が多すぎる場合にも発生します。その場合、プロバイダーは関数のひとつを停止させるため、障害につながる可能性があります。ユーザー側では、これがレイテンシの原因となります。
  • 限られたカスタマイズと制御:サーバーレスプロバイダーが基盤となるインフラを管理するため、利用可能なランタイムのバージョン、メモリ割り当て、実行時間の制限など、環境のカスタマイズや制御に制限がある場合があります。
  • セキュリティの懸案事項:サーバーレスコンピューティングは攻撃対象領域を減らす一方で、新たなセキュリティリスクをもたらす可能性があります。開発者は、サードパーティのサービス、機能レベルの権限、アプリケーションコードの脆弱性に関連するリスクを認識する必要があります。
  • ステートレス:サーバーレス関数はステートレスであり、呼び出しの間にデータを保持しません。このため、アプリケーションの状態を管理することが難しくなり、開発者は状態を維持するために外部ストレージやデータベースに依存せざるを得なくなります。
  • コストの予測可能性:サーバーレスコンピューティングは費用対効果が高いものの、呼び出し回数、メモリ、実行時間などの要因に依存するため、コストを予測するのは困難です。想定外の使用量の急増は、コストの増加につながる可能性があります。
  • 既存のシステムとの統合:サーバーレス関数を既存のシステムやアーキテクチャーに統合することは、特にレガシーアプリケーションや複雑なシステムを扱う場合には、困難が生じることがあります。
  • 学習曲線:サーバーレスコンピューティングを採用すると、開発者は新しいコンセプトやツール、ベストプラクティスを学ぶ必要があり、開発プロセスが複雑化する可能性があります。

サーバーレスコンピューティングのユースケース

スケーラビリティや管理の軽減など、サーバーレスコンピューティングがもたらす利点は、いくつかのユースケースに適しています。

  • Webアプリケーションデプロイ:サーバーレスコンピューティングは、開発者が迅速にテストできる環境であるため、Webアプリケーション開発に適しています。クラウドプロバイダーが提供する消費ベースのモデルは、Webアプリケーション開発がサーバーレスで安価になることも意味します。使用したリソースの料金のみを支払い、インフラの管理に時間や人的資源を費やす必要はありません。これにより、開発者はフロントエンドに集中できます。データベース、APIゲートウェイ、イベントドリブンアーキテクチャー(EDA)などのサーバーレスサービスは、開発者がコードを作成するだけでWebアプリケーションを構築することを可能にします。
  • データ処理と分析:サーバーレスは、構造化されたテキスト、音声、画像、動画データに適しています。サーバーレスは、大規模な異種データセットの処理と分析を可能にします。従来のコンピューティングモデルと同様、サーバーレス環境にはサイロ化されたさまざまなデータセットが含まれます。開発者は、すべてのビジネスチャネルからのデータを単一のデータベースに集めて処理するアプリケーションを作成できます。サーバーレスコンピューティングは、必要なワークロードを処理するために、水平方向にスケールできるため、ETL(Extract、Transform、Load)処理、ログ分析、データ検証など、大量のデータを処理する際に最適です。
  • APIとマイクロサービス:サーバーレス関数は、APIやマイクロサービスを迅速に構築、デプロイするために使用でき、開発者はインフラ管理を気にすることなくアプリケーションロジックの記述に集中できます。
  • リアルタイムのファイル処理:サーバーレス関数は、クラウドストレージサービスにアップロードされたファイルをリアルタイムで処理し、画像のサイズ変更、ビデオのトランスコード、テキストの抽出を可能にします。
  • イベント主導のワークフロー:サーバーレスコンピューティングは、データベースの変更、IoTデバイスのデータストリーム、メッセージキューからのメッセージなど、特定のイベントに応答するイベントドリブンのワークフローを構築するために使用できます。
  • スケジュールされたタスクとcronジョブ:サーバーレス関数は、毎晩のバックアップ、レポート作成、データ同期など、タスクをスケジュールし、特定の間隔で実行するために使用できます。
  • チャットボットとバーチャルアシスタント:サーバーレス関数は、ユーザーの入力を処理して応答するチャットボットやバーチャルアシスタントを作成したり、メッセージングプラットフォームや自然言語処理サービスと統合したりするために使用できます。
  • IoTデータ処理:サーバーレスコンピューティングでは、IoTデバイスによって生成されたデータを処理、分析し、リアルタイムの監視、異常検知、データ集約が可能です。

Elasticでのオブザーバビリティの詳細

サーバーレスと従来のアーキテクチャー

サーバーレスと従来のアーキテクチャーの主な違いは、企業のITチームが物理サーバーを運用、管理しない点です。つまり、その負荷は、クラウドプロバイダーに委託されます。

従来、企業はベアメタル(BM)サーバーを使用してアプリケーションを実行していました。そのためには、ハードウェアを調達するための時間とリソース、そしてそれを設置し、電力を供給し、冷却するための物理的な場所が必要です。BMでは、ハードウェアのラックへの搭載、設置、構成が必要です。ITチームはまた、コードデプロイの環境設定、オペレーティングシステムのインストール、サーバーの保守および管理といった時間のかかる責任も担います。

BMサーバーは仮想マシン(VM)へと進化しました。企業は依然としてハードウェアの設置と構成を行わなければなりませんが、複数のコンピューターを同じハードウェアで稼働させることができるという利点があります。つまり、コンピューティングリソースがより有効に活用されるということです。技術チームは、ハイパーバイザーを使って複数のサーバーをデプロイできますが、BMと同様に、オペレーティングシステムをインストールし、保守と管理を確実に行う必要があります。オペレーティングシステムのインストールは、VMテンプレートと自動化ツールを使って自動化されます。

コンテナーはVMから進化しました。コンテナーは、アプリケーションを特定のオペレーティング環境で実行できるようにするコードパッケージであり、アプリケーションを移植可能にします。VMとは異なり、コンテナーはすべて同じオペレーティングシステムとコンテナーランタイムで実行され、そのコンピューティングリソースはカーネルユーザー空間で分割されます。これにより、管理する必要があるオペレーティングシステムが減り、これらのサービスの管理が大幅に簡素化されます。コンテナーはKubernetesのようなプラットフォームを通じて自動化され、コンテナーのデプロイを柔軟にし、ポータブルで、必要なときに簡単にデプロイしたり破棄したりできます。

サーバーレスアーキテクチャーは、インフラ管理の負荷がすべてクラウドプロバイダーに任させるため、ITチームはコードの作成とデプロイに集中できます。

Elasticのサーバーレスコンピューティングの将来

クラウドテクノロジーが進化し続けるにつれて、サーバーレスコンピューティングも進化するでしょう。プロバイダーはすでに、汎用的なビジネスワークロードにサーバーレスの利便性をもたらすパーツを追加することで、サーバーレスコンピューティングの改善に着手しています。

Elasticでのサーバーレス監視の詳細

サーバーレステクノロジーに関するよくある質問

サーバーレスとは?

サーバーレスとは、クラウドコンピューティングモデルの1つで、クラウドプロバイダーが基盤となるインフラを準備、管理することで、クライアントはフロントエンド開発に集中できます。サーバーレスはFaaSとBaaSで構成されています。この2つのサービスは、開発者がコードを迅速にデプロイできる柔軟な環境を提供するために連携しています。

サーバーレスコンピューティングの例

エンドポイントのユーザーが顧客のWebサイトを閲覧しています。こうすることで、2つのサーバーレス機能であるBaaSとFaaSが連携します。閲覧を続けるために、ユーザーは自分の情報を入力します。サーバーレス環境のBaaS部分はユーザー認証を実行します。ユーザーはWebサイトの閲覧を続け、購入します。これはイベントです。このイベントはゲートウェイAPIによって処理され、領収書電子メールを送信する関数を呼び出します。そのために、クラウドプロバイダーは、アプリケーションコードを格納したコンテナーをスピンアップし、タスクを実行します。これがFaaSです。

サーバーレスと呼ばれる理由

サーバーレスとは、クラウドプロバイダーが顧客のアプリケーションを実行するために必要なサーバーを準備し、管理するクラウドコンピューティング環境を表す誤った名称です。クライアントはサーバーを持たず、クラウドプロバイダーにサーバーの使用料を支払います。

サーバーレス用語集

  • APIゲートウェイ:アプリケーションプログラミングインターフェース(API)ゲートウェイは、リクエストを読み取り、バックエンドサービスにルーティングする通信リンクです。そして、バックエンドのデータをフロントエンドのユーザーに変換します。
  • BaaS:Backend-as-a-Serviceは、ユーザー認証やデータストレージなどのサービスを提供するために構築されたソフトウェアを使用するクラウドコンピューティングモデルです。サーバーレスのサブセットです。
  • クラウドコンピューティング:クラウドコンピューティングとは、クラウド環境に固有なコンピューティングモデルを指します。クラウド上で発生するあらゆるタイプのコンピューティングは、クラウドコンピューティングと呼ばれます。
  • クラウドネイティブ:クラウドネイティブとは、クラウド専用に構築されたアプリケーションやサービスを指します。クラウド環境のスケーラビリティと弾力性を考慮しています。
  • コールドスタート:コールドスタートは、ある関数が初めて呼び出されたときや、一定期間使用されなかった後に発生します。クラウドプロバイダーが関数を実行するためにコンテナーをスピンアップする最初の起動です。
  • コンテナー:コンテナーは、軽量で移植性が高く、依存関係を自給自足できるコードパッケージであるため、異なるコンピューティング環境でも一貫して実行できます。
  • イベントドリブンアーキテクチャー:イベントドリブンアーキテクチャーとは、イベント(リクエスト、状態の変化、更新)を利用してサービス間の通信をトリガーするソフトウェアアーキテクチャーモデルです。イベントドリブンはプログラミングの手法であり、プログラミング言語ではありません。
  • FaaS:Function-as-a-Serviceはイベントドリブンのクラウドコンピューティングモデルで、開発者はバックエンドのインフラを管理することなく、フロントエンドを構築し、実行できます。
  • マイクロサービス:マイクロサービスとは、ソフトウェアアーキテクチャーモデルの一種で、ソフトウェアを個別のサービスに分割したものです。これらのサービスはAPI経由で通信し、柔軟なデプロイを可能にします。
  • マルチクラウド:マルチクラウドとは、Google Cloud、AWS、Microsoft Azureなど複数のクラウドを指します。ほとんどの企業はマルチクラウド、つまり複数のクラウドプロバイダーのサービスを同時に利用しています。たとえば、電子メールにGoogle Officeスイートを使い、サーバーレス関数にAWS Lambdaを使っている企業があります。
  • ステートレス:ステートレスとは、アプリケーション、プロトコル、またはプロセスが独立してオペレーションを処理するコンピューティング特性を指します。たとえば、サーバーレスコンピューティングは本質的にステートレスであり、これは呼び出し間でデータが保持されないことを意味します。