サーバーレス

サーバーレスとは? サーバーレスアーキテクチャのメリット・デメリットと6つの重要な要素

クラウドコンピューティングが一般的になる前、開発チームはサーバーハードウェアとしてのサーバーだけではなく、ソフトウェアとセキュリティのアップグレードも担当する必要がありました。これは非常に不便で、時間も費用もかかりました。 しかし、サードパーティ企業によって促進されたサーバーレスコンピューティングの出現により、開発チームはインフラストラクチャを気にせずにサービスを開発及び実行できるようになりました。本記事では、サーバーレスとは何か、そしてサーバーレスのメリットとデメリットについて解説します。

1.サーバーレスとは

サーバーレスまたはサーバーレスコンピューティングとは、開発者が基盤となるインフラストラクチャの管理をすることなく、サービスを開発及び実行できるようにする仕組みのことです。クラウドプロバイダーはアプリケーション、データベースやストレージシステムをあらゆる規模で実行するためのサーバーを提供するため、開発者はコードを書いてデプロイするだけで済みます。

2.サーバーレスアーキテクチャの仕組み

  • 開発者は、アプリケーションが特定のユーザーアクションにどのように応答するかを決定する機能を備えたアプリケーションを作成します。通常、クラウドプロバイダーはパッケージ済のFaaSソリューションを提供することで、開発者のコーディング手順を簡略化し、事前に構築されたバックエンド要素を導入することができます。
  • 関数がいつ、どのようにトリガーされるかを指定するイベントが定義されます。例えば、ユーザーがHTTPリクエストを作成すると、アプリケーションは特定のデータを取得して配信することがあります。この「if-then」プロセスはイベントと呼ばれます。
  • アプリケーションがデプロイされ、ユーザーがアクセスできるようになると、ユーザーアクションによってイベントがトリガーされます。
  • アプリケーションはイベントをクラウドプロバイダに中継し、プロバイダはあらかじめ定義された関数に従って、アクションに応じて必要なリソースを動的に割り当てます。
  • ユーザーは、関数で定義されたデータまたはその他の結果を受け取ります。

重要なことに、ユーザー要求が受信されない場合、リソースは割り当てられず、データは中間状態で保存されません。 これにより、最新のデータのみがユーザーに届くようになり(つまり、アプリはリアルタイムです)、ストレージ容量も節約されます。

3.サーバーレスのメリット・デメリット

3.1.メリット

  • コスト削減:クラウドプロバイダーは呼び出しごとに料金を請求するため、未使用のサーバーや仮想マシンに料金を支払う必要はありません。
  • スケーラビリティ:関数インスタンスは、同時実行制限の範囲内で、トラフィックの変動に応じて自動的に作成または削除されます。
  • 効率性:サーバーレスアーキテクチャを使用することで、チームはサーバーの維持について心配する必要がなくなり、コードベースに集中できるようになります。
  • 市場投入までの時間の短縮:チームはサーバーインフラストラクチャではなく、コードベースのみに集中するだけで良いので、製品を市場に投入するまでの時間が短縮されます。

3.2.デメリット

  • 制御の欠如:サーバーレス環境では、コードが実行されるソフトウェアスタックを制御することができません。ハードウェアエラー、データセンターの停止、またはその他の問題がサーバーの1つに影響を与える場合は、クラウドプロバイダーに依頼してその問題を解決することができます。
  • セキュリティ:クラウドプロバイダーは、複数の顧客のコードを同じサーバー上で同時に実行する場合があります。共有サーバーが正しく構成されていない場合、アプリケーションデータが公開される可能性があります。
  • パフォーマンスへの影響:サーバーレス環境ではコールドスタートが一般的であり、非アクティブな時間の後に関数が呼び出されると、コードの実行が数秒間遅延します。
  • テスト:サーバーレス環境では、機能コードの単体テストを実行することができますが、フロントエンドコンポーネントとバックエンドコンポーネントがどのように相互作用するかを調べる統合テストを実行するのは困難です。
  • ベンダーロックイン:AWSのような大規模なクラウドプロバイダーは、データベース、メッセージングキューやAPIなど、サーバーレスアプリケーションを実行するために使用できるサービスを提供しています。複数のベンダーの要素を組み合わせることができますが、単一のプロバイダーのサービスは最も簡単かつシームレスに統合されます。

サーバーレスは、市場投入までの時間を短縮し、スケーラブルで軽量なアプリを開発しようとする企業に役立ちます。しかし、アプリケーションに多数の実行時間が長いプロセスが含まれている場合は、仮想マシンまたはコンテナーの方が適しています。ハイブリッドインフラストラクチャでは、開発者はコンテナーまたは仮想マシンを使用して大部分の要求を処理し、データベースストレージなどの特定の実行時間の短いタスクをサーバーレス機能に引き渡す場合があります。

4.サーバーレスアーキテクチャの6つの主要コンポーネント

4.1.サービスとしての機能(Function as a Service - FaaS)

FaaSはサーバーレスの基本的なビルディングブロックであり、特定のシナリオでリソースをどのように割り当てるかを決定するロジックを実行します。使用中のクラウド環境に応じて、Amazon Web Services(AWS)のAWS Lambda、AzureのMicrosoft Azure Functions、Google Cloud PlatformのGoogle Cloud Functions (GCP)やプライベートまたはハイブリッド環境向けのIBM Cloud Functionsなど、専用の FaaSオファリングを選択することができます。ユーザーがイベントをトリガーすると、これらの関数はバックエンドデータベースを読み取ります。

4.2.クライアントインターフェース

クライアントインターフェースは、サーバーレス機能において重要な役割を果たします。選択したアプリケーションにサーバーレスアーキテクチャを強制することはできません。リクエストへの素早い応答、ステートレスなやり取り、及び柔軟な統合はすべて、インターフェースでサポートされている必要があります。インターフェースは大量のデータ転送と少量のデータ転送の両方をサポートするように構築する必要もあります。

4.3.クラウド上のWebサーバー

Webサーバーでは、ユーザーが開始した後、FaaSサービスが終了する前に、ステートレスなやり取りが開始されます。Webサーバーは、ユーザーに配信される情報が保存されるバックエンドデータベースとは異なります。例えば、オンライン ビデオコンテンツプロバイダであるとしましょう。その場合、Webサーバーは、サーバーレスの一時的な性質によって終了する前に、ユーザー要求、スクリプトやFaaS応答などをホストする場所です。一方、動画コンテンツはバックエンドストレージに保持され、ユーザーの要求に応じて取得されます。

4.4.セキュリティサービス

セキュリティは以下の理由でサーバーレスオペレーションの重要な要素といえます。。

  • 何千もの同時リクエストがアプリケーションによって処理されます。レスポンスを送信する前に各リクエストが認証される必要があります。
  • ステートレスな性質により、過去のやり取り履歴は保存されません。アプリケーションは、以前のやり取りにフォールバックして将来のやり取りを検証することができません。
  • サーバーレスモデルは透明性と監視をより困難にします。毎日ログに記録される何百万ものイベントからセキュリティインテリジェンスを取得する必要があります。
  • サーバーレスアーキテクチャの分散性により複数のサービスやベンダーが関与します。ランドスケープ全体を保護する必要があります。

通常、サーバーレスアプリケーションはトークンサービスを使用します。トークンサービスでは、一時的な認証情報がユーザー用に生成され、関数の呼び出しに使用することができます。また、サーバーレス対応のID及びアクセス管理サービスをアプリケーションに統合することもできます。例えば、AWS CognitoはAWS Lambdaと連携して、SSOまたはソーシャルネットワークを通じてユーザーIDを認証します。あなたが選択した他のクラウドプロバイダーにおいても同様のサービスを見つけることができるでしょう。

4.5.バックエンドデータベース

バックエンドデータベースではユーザーと共有される情報が保存されます。これは、静的コンテンツリポジトリからSQLデータベース、メディアストレージやライブブロードキャストモードにまで及ぶ可能性があります。通常、開発者はサービスとしてのバックエンド(Backend as a Service – BaaS)ソリューションを使用して、保守や管理に伴う労力を減らします。また、ほとんどのクラウドベンダーは、自社のFaaSオファリングと互換性のあるBaaSソリューションを提供します。

4.6.APIゲートウェイ

APIゲートウェイは、コンポーネント1と2、つまりFaaSとクライアントインターフェースを接続します。ユーザーがアクションを開始すると、APIゲートウェイを介してそのアクションが中継され、FaaSサービスを介してイベントがトリガーされます。ゲートウェイは、クライアントインターフェースを複数のFaaSサービスに接続し、アプリケーションの機能を強化することができます。

重要なトレンド・ポイント

サーバーレスの導入は、ここ数年で急速に進みつつあります。少なくとも5分の1の組織が、AWS、Azure、またはGoogle FaaSの製品を使用しています。もし、現在、サーバーレス開発を計画している場合、覚えておくべき重要なポイントは次の通りです。

  • サーバーレスでは、ホスティングインフラストラクチャを必要とせず、クラウドプロバイダーは、ユーザーリクエストやコンピューティングイベントに応じてリソースを動的に割り当てます。
  • イベントには、データ処理イベント、クラウドストレージイベント、データベースの変更、コードの変更、通知やユーザーリクエストなど、様々な種類があります。
  • サーバーレスアーキテクチャとはサーバーがないという意味ではありません。
  • サーバーレスアーキテクチャは通常、FaaSソリューション、クライアントインターフェース、セキュリティサービス、Webサーバー、APIゲートウェイ、及びバックエンドデータベースの6つの主要コンポーネントで構成されます。
  • サーバーレス環境を運用するには、サーバーレスセキュリティ、イベント駆動型アーキテクチャ、分散ワークフローオーケストレーションやAPI設計などのスキルが必要です。
  • Slack、Netflix、Autodesk、Major League BaseballやCoca-Colaなどの大企業は、サーバーレスを使用して、柔軟で高性能、高可用性のアプリを提供しています。
  • サーバーレスアーキテクチャは、あらゆる状況に最適な選択肢ではありません。サーバーレスプロセスはステートレスであるため、イベントトリガーとユーザーへの配信の間に遅延が生じる場合があります。また、インフラストラクチャを管理しないため、ベンダーロックインのリスクもあります。

しかし、サーバーレスのメリットはデメリットを大幅に上回ります。IBMは、ユーザーの95%が2022年にサーバーレスへの投資を維持または増加すると予測しています。企業は、この強力なクラウドコンピューティングテクノロジーを適用するために、サーバーレスのアーキテクチャコンポーネントとその主要なアプリケーションを認識する必要があります。

ビジネスにおける時間、資金やその他リソースを最適化するためにクラウドサービスプロバイダーを利用したい場合は、CMC Japanという選択肢を検討してみてはいかがでしょうか。2200人以上の認定エンジニアにより、300以上のグローバルクライアントがより優れたパフォーマンス、信頼性、アップタイム、及び費用対効果を実現するのを支援してきました。以下フォームよりお気軽にご相談ください。当社の専門家がお客様のニーズを聞き、最適なソリューションを提供します。

>> サーバーレスサービスに関する無料相談はこちら