• 公開日:2020年09月07日
  • | 更新日:2022年10月14日

サーバーレスアーキテクチャとは?

サーバーレスアーキテクチャ…の前にクラウドコンピューティングについて

サーバーレスアーキテクチャ(以下、サーバーレス)をいきなり説明することは難しいため、まずはサーバーレスの土台になるクラウドコンピューティングについて説明したいと思います。「クラウド」とよく略されているものです。

クラウドコンピューティングとは、インターネット等を通して、コンピュータ資源を利用することです。自分のパソコンにソフトウェアをインストールしなくても、インターネットを通じて利用できるサービス・資源と言うと分かりやすいかもしれません。例を挙げると、ファイル共有サービスの「Box」や、Googleが提供している「Gmail」等があります。私たちはそれらのサービスをネットワーク経由で使用していますが、実際にサービスを動かしているのは、サーバー(データセンター)になります。

サーバーの構築は容易なものではなく、メンテナンス等も含めるとそれなりの労力が必要になります。そこで生まれたのがサーバーレスという仕組みです。

サーバーレスとは?

サーバーレスは、実際にサーバーが無いというわけではなく、ユーザーがサーバーを持たないという考えになります。サーバーを準備するのは、クラウドベンダー会社(AWS, Microsoft, IBM等)で、利用者は関数(アプリケーション)のみを用意します。通常の運用とサーバーレスの運用を比較してみましょう。

通常のサーバーはアプリケーションに加え、サーバー本体、OS、実行環境等のミドルウェアを用意しなければいけませんが、サーバーレスの場合は、関数を準備します。関数はアプリケーションに相当するもので、トリガー/リクエストによって実行されるものです。この関数の出力をユーザーに返したり、別のクラウドサービスに渡したりすることで複雑なアプリケーションに発展させることができます。

通常のサービスは私たちがサーバーを準備し、常にサーバー(サービス)が稼働し続けるものになっていますが、サーバーレスは上記のように、「何らかのトリガーによってリソースが動的に割り当てられ、事前に登録した関数が動き出す」仕組みを取っています。このメリットとは一体何でしょうか?

サーバーレスのメリット

サーバーの構築・メンテナンスの工数が削減できる

サーバーの構築やメンテナンスはそれなりの労力が必要になります。また必要となる知識も異なるため、サーバー構築とアプリケーション開発者は別チームのケースや、アプリケーション開発者が自身の技術領域とは異なるサーバー構築をする必要があり、苦労するといったお話があります。サーバーレスであれば、アプリケーション開発者がサーバーの構築、メンテナンスをする必要がありませんので、サービス(アプリケーション)の提供に専念することができます。

運用コストの低減

従来のサーバー環境では、リクエストに応じて、サーバーのCPUやメモリ、ストレージを増強する必要があります。どんなに優れたサービスであっても、サーバーが捌きれないほどのリクエストがあった場合、実行環境がクラッシュしてしまうからです。そんな状況を考慮し、予めサーバーを大きくすることは可能ですが、コストが更にかかってしまいます。サーバーレスの場合は、リクエストに応じてリソースが動的に割り当てられるため、運用コストを最小限に済ませることが可能です。またサーバーレスは実行時間等に応じた課金システムになっているため、リクエストの少ない時間でも、無駄にコストがかかることはありません。

AWSで見る具体的な事例

EC2 vs Lambda

従来のサーバーとサーバーレスの比較例として、Amazon Web Services (以下、AWS)内のEC2とLambdaが挙げられます。

EC2とは、「Amazon Elastic Compute Cloud」の略になり、AWS上に仮想サーバーを構築し利用できるサービスになります。自社でデータセンター等を持たずに、サーバーを構築したい場合に用いられます。

一方Lambdaは、プログラムの実行環境を提供するサービスになります。私たちはトリガーに合わせて実行したい関数(Java, C#, Python等)を予め準備します。イメージが沸かないと思うので、簡単な例を以下に示します。私が昔テストでやってみたものです。

トリガーは「XXXサービスにデータを受信したら」、出力は「別のサービスの入力に…」といった設定にできます。

Lambdaは関数部分のみをプログラムすればよく、様々なプログラミング言語に対応しているため、非常に使いやすいです。これまでの内容で、Lambda(サーバーレス)が非常に優秀であり、全部サーバーレスにしたい!と思われる方もいるかもしれません。サーバーレスの仕組みが便利なことは間違いありませんが、勿論サーバーレスに不向きなことも存在しています。そのためメリット・デメリットを十分に理解し、サービス構築の際には使い分けなければいけません。

Lambdaではリクエストに応じてプログラムが実行されますが、実行した環境というのは都度破棄されるようになっています。そのため前回の実行結果を用いて何らかの処理を行う、という場合はデータベース等の別サービスを繋ぎ合わせて使用することになり、サービス間の連携、送るデータのフォーマット等、意識しなければならないことが沢山あります。またLambda関数の最大稼働時間も決められており、大規模な処理の制限もあります。そもそも既存サービスをサーバーレスに全て置き換えるというのは、時間的・技術的にも困難なことがあるため、部分的に置き換えていくことが多いようです。

さいごに

いかがでしたでしょうか?本記事でサーバーレスのイメージだけでも掴んでいただけたら幸いです。

私もAWSを初めて利用した時は、サーバーレス?Lambdaってなんだ?というところからスタートし、実際に動かしながら理解を進めていきました。AWSには無料利用枠というものもあるため、一度触っていただくと更にイメージが付きやすいと思います。是非ご利用してみてください。

 

※記載された会社名、商品名、システム等は、各社または団体の商標または登録商標です