1回で分かる、サーバレスの特徴と使いどころ

2016年あたりから注目されるようになった技術ワードにサーバレスがあります。サーバレスアーキテクチャといった単語は一度は見聞きしたことがあるのではないでしょうか。

サーバレスアーキテクチャはAPIと相性が良いと言われていますが、そもそもサーバレスとは何かを紹介します。

実行時以外には存在しない究極のクラウド

クラウドコンピュータの世界では、サーバと呼べる存在は仮想化されており、自由に立ち上げたり落としたりできます。とは言え、サーバ(インスタンスとも言う)を立ち上げている間は料金がかかります。そのため、不用意にサーバを立ち上げすぎないように注意しなければなりません。そのサーバはCPUの質や量、GPU、ストレージなどによって金額が変わります。つまり仮想ではあるものの、リソースを確保することに対して料金が発生します。

対してサーバレスはそのサーバ自体が存在しません。もっと単純な、関数をクラウド上に定義します。そして関数はHTTP/HTTPSを介して呼び出されます。呼び出すまでは存在しないので、料金はかかりません。そして実行する際にメモリ上に展開されたデータも破棄されるので、料金は実行した回数や実行時間などによって決まります。

サーバレスの料金体系

サーバレスのサービスとして最も有名なAWS Lambdaの料金を見ると、関数に割り当てたメモリ量、実行回数そしてじ毎回の実行時間によって決まるとしています。さらに毎月100万回のリクエスト、40万GB秒が無料枠として設定されています。実際の計算は細かいのですが、関数に対して512MBを割り当て、300万回の実行、そして毎回の実行時間が1秒だった場合、18.34ドルという計算になっています。

前述の通り、サーバレスはHTTP/HTTPSでアクセスされるものになるので、APIとしてみれば300万アクセスされるようなAPIが月額18.34ドルで運用できると言い換えることもできます。

利用できる言語は

例えばAWS Lambdaの場合、Java、Node.js、C#および Pythonがサポートされています。Google Cloud FunctionsはNode.js、Azure FunctionsではC#、f#、Node.js、Python、PHPなどがサポートされています。サポートされている言語は拡大していますので、大抵のプログラミング言語が使えるようになるでしょう。IBM Bluemixではオープンソースのサーバレス実行環境であるOpenWhiskをサポートしておりNode.js、Swift(Kitura)、Python、JavaさらにDockerも利用できます。

AWS/Google Cloud/Azure/Bluxmixはクラウドベンダーとしては最大手になりますので、いずれのプラットフォームでも使えることを考えると、Node.jsが最も良い選択肢になりそうです。

利用時の工夫

前述の通り、サーバレスアーキテクチャでは利用時間によって料金が変わってきます。つまりなるべく速く処理を終えた方が料金が安く済みます。そのため、関数の中では重たい処理を避けるのが賢明です。例えば画像の生成、ネットワークアクセスなどはボトルネックになりやすいでしょう。データベース接続もコストが高いですが、避けるのは難しいかも知れません。

関数からサーバに接続してデータを取得するのではなく、関数にサーバのデータをポストして、それを解析させるのがお勧めです。ネットワーク接続せざるを得ない場合はタイムアウト時間を極力短くして対象サーバが落ちている場合なども処理が速く済むように工夫しなければなりません。

APIゲートウェイとの組み合わせ

サーバレスの話が出ると一緒に話題になるのがAPIゲートウェイです。サーバレスでは10個の関数があると、10のURLに分かれます。それぞれに関連性はありません。そのためAPI公開するとなると、何らかの取りまとめる存在が必要になります。これがAPIゲートウェイの役割です。

APIゲートウェイがアクセスを一手に引き受け、パスによってアクセス先の関数を変更します。また、認証情報を取りまとめたり、頻繁にコールされるのを制御するといった役割も担います。それによって関数がそれぞれ認証情報の検証をしたり、アクセス制御するようなコストのかかる作業をしなくて済むようになります。

サーバレスの向き不向きについて

すべての処理がサーバレスに置き換わる訳ではありません。特に処理時間がかかるものついてはサーバレスに置き換えると料金が高くなる可能性があります。また、他の処理との密接度が高いものについても不利です。関数は個々に独立し、疎結合になっているのがベストです。

逆に送られてきたデータを処理してファイルに書き込んだり、メール送信するだけといった単純な処理はサーバレス向きと言えます。関数は無数にスケールさせることができますので、処理を大量に並列化したいといった目的や、逆に殆どアクセスされないのにサーバを保持しておかないといけないといった場合の置き換えに向いているでしょう。


サーバレスを使いこなすためにはこれまでのサーバを複数台揃えて運用するという方法から、クラウドを主体としたアーキテクチャ(サーバレスアーキテクチャ)を意識した形にしなければなりません。それはこれまでにない意識を必要とするでしょう。

まだまだ手探りで試されている最中で、開発や運用方法含めてトライ&エラーが必要です。しかし今後サーバレスアーキテクチャは確実に開発者が考えるべき開発要素になっていくので、今のうちに何ができて、何ができないのかを学んでおくと良いでしょう。

© NTT Communications Corporation All Rights Reserved.