近年、サーバーレスという概念が、クラウドコンピューティングにおいて注目されています。そこでこの記事では、サーバーレスとは何かについて詳しく説明します。あわせて代表的なサービスやそのメリット・デメリット、今後の課題まで解説しますので、読み終われば、サーバーレスの基本的な知識を習得できるでしょう。
サーバーレスとは
「サーバーレス」をひと言で説明すると、サーバーの管理を意識することなく、プログラムを実行できるサービスのことです。決してサーバーを使わないことではありません。実際にはサービス提供企業がサーバーを管理しているのですが、ポイントは、エンジニアにサーバーを「意識させないこと」なのです。
Webサイトやスマートフォンのアプリ、メールからCRM(Customer Relationship Management)などの業務にいたるまで、インターネット上のシステムを動かすにはサーバーが必要です。インターネット上のシステムは、常に稼働していることが前提であるため、システム稼働に不可欠なサーバーについても、常に保守管理が必要とされます。
つまりエンジニアは、本来の仕事であるシステムの開発に集中したくても、手間のかかるサーバーの管理から逃れられない状況下にあったのです。
そこでサーバーレスが登場することにより、サーバーの管理が不要、つまり「管理レス」が実現します。エンジニアはシステムの開発に集中し、イベントが発生したときにコードが実行されるようにトリガーを設定するだけで、あとはすべてプラットフォームに任せられます。ただ、すべての処理がサーバーレスに向いているわけではありません。常にシステムが動いている必要のあるサービスや、高い負荷が長時間続くシステムなどは、サーバーレスには不向きでしょう。
なおサーバーレスは、関数(function)となるコードをサーバーの管理不要で実行できることから、Function as a Service(Faas)と呼ばれることもあります。
サーバーレスの代表的なサービス
大手クラウドサービス企業からは、サーバーレス(Faas)のプラットフォームがリリースされています。
Amazon Web Services(AWS)は、2014年11月に「AWS Lambda(ラムダ)」を開始しました。その後、Microsoftが「Azure Functions」、Googleが「Google Cloud Functions」、IBMが「IBM Cloud Functions」を公開しています。
4社ともFaasで従量制による課金であることは共通していますが、対応するランタイム(プログラム言語)やタイムアウト時間などに違いがあります。
サーバーレスでトップシェアを誇るのは「AWS Lamda」です。AWSが提供する他サービスとの連携が容易な点などが、世界中から評価されています。また カスタムランタイムを使えば、どのプログラム言語でも実行できるのが特徴です。
「Azure Functions」の特徴は、サーバレスモードとPaaS上で動作する「App Service」モードがあることです。すでに「App Service」を利用している場合は、追加料金を払わずに「Azure Functions」を利用できます。
サーバーレスのメリット
サーバーの管理が「レス」になることで、どのようなメリットが生まれるのでしょうか。
1つ目はリソースの最適化です。サーバーレスの場合、イベント発生時のみコードが実行されるため、メモリやCPUなどのリソースを無駄づかいしません。
自社運用の場合、常にサーバーの使用量を予測し、十分なリソースを確保しておく必要があります。クラウド型サーバーならオートスケーリングが可能ですが、課金時に金額を気にしたり、自らスケールダウンを行ったりするケースもあります。
サーバーレスなら、負荷に応じてオートスケーリングしてくれる、つまり、いかなるときも自動でリソースの最適化をしてくれるので、まさに「管理レス」なのです。
2つ目はコストの軽減です。自社運用なら電気料金が発生しますし、クラウド型サーバーは、基本的に24時間分課金されます。サーバーレスはコードが実行されたときだけ課金される従量制です。つまり、リソースを使った分しかコストがかかりません。
「AWS Lambda」では、さまざまなメモリサイズに対応した 1ミリ秒あたりの料金を提示していますが、512MBの場合、1ミリ秒あたりの料金は0.0000000083USDです。
ほとんどがアイドル時間のマシンに対しても料金を課す従来のサーバーとは非常に対照的で、大幅なコスト減が期待できるでしょう。
サーバーレスのデメリット
多数のメリットがあるサーバーレスですが、デメリットもちろんあります。
その1つ目は、既存のコードが使えない可能性があることです。主要な言語はサポートされているものの、サーバーレスで動かすためのコード修正が必要なケースもあります。修正のために工数が別途かかる可能性も、きちんと視野に入れておくことが重要です。
2つ目はベンダーロックインされやすいことです。これまでのところ、サーバーレスの技術仕様は規格化されていません。AWSやMicrosoft、Google、IBMの各ベンダーは独自の技術仕様になっています。そのため特定のベンダーに依存しやすく、ほかのベンダーへの乗り換えが難しいと言えるでしょう。
3つ目は処理内容に制約があることです。サーバーレスはあらゆる状況にパーフェクトに対応できるアーキテクチャーではありません。処理のレイテンシー(遅延)や、リクエストやレスポンスでやり取りするデータの容量制限があるなど、機能的な制限は存在します。
このような場合は、ほかのサービスと連携しなければならないことを覚えておきましょう。
サーバーレスの今後の課題
サーバーレスには、上記のようなデメリットがありますが、ベンダーロックインに関しては解決に向けた動きが始まっています。
CNCF(Cloud Native Computing Foundation)が中心となって技術仕様の規格化を進め、2019年にはイベント通知の標準仕様である「CloudEvents 1.0」をリリースしました。多数の企業がこの「CloudEvents 1.0」に対応、もしくは対応予定であることを公表しています。
サーバーレスは現在進行形の技術なので、改善を重ねていくことが予想されます。サーバーレスへの流れは今後さらに加速していくでしょう。
まとめ
サーバーレスはサーバーの管理を「レス」にし、コストの軽減も可能にする魅力的なアーキテクチャーです。サーバーレスを採用する際は、機能や特徴をよく比較検討し、適材適所で使うことが求められます。そのようにすることで、さまざまなメリットが得られるでしょう。今後さらに加速するサーバーレスの波に乗り遅れないようにしましょう。