AWS Lambdaは、“サーバーレス”でプログラムコードを実行するサービスである。といっても、コードはサーバー(仮想マシン)で実行する。どういうことか。

 Lambdaでは、ユーザーはコードを登録するだけ。AWSが仮想マシンを用意して実行する。ユーザーにとっては、仮想マシンを作成したり運用したりしなくてよいどころか、仮想マシンの存在を意識する必要すらない。こういうコード実行の方法を「サーバーレスコンピューティング」と呼ぶ。

 サーバーレスは従来のオンプレミス(自社所有)環境に無かった考え方なので、分かりづらいかもしれない。Lambdaがどのように動作するのかを流れに沿って説明しよう(図1)。

図1 Lambdaの概要
図1 Lambdaの概要
[画像のクリックで拡大表示]

 Lambdaは、直接的なAPIコールのほか、「オブジェクトストレージのS3にデータが投入された」「メッセージ通知サービスのSNSからメッセージが発信された」といったイベントをトリガーとして起動する。CloudWatch Eventsと組み合わせることで、スケジュールに基づいて起動させることも可能だ。

 コードはユーザーが登録しておく。プログラミング言語として、Node.js(Ver4.3とVer6.10)、Java 8、Python 2.7、C#を利用できる。

 イベントによってLambdaが起動されると、登録されたコードに合わせて、コンテナの仮想マシンとコード実行に必要なミドルウエアが立ち上がり、実行環境が整う。コードを含む実行環境を「Lambdaファンクション(関数)」と呼ぶ。

 Lambdaファンクションは、数百個の並列実行も可能だ。ただし制約がある。最長の実行時間は300秒、一時ストレージ容量512MBといったものだ。

 これらの制約があるのは、そもそもLambdaでは多機能なアプリケーションや時間の掛かる処理の実行を想定していないからだ。短時間で終わる単機能のコードを実行するという想定のサービスなのだ。

 コードの実行が終わると、コンテナのリソースが解放される。ただし同一のLambdaファンクションを短期間に繰り返し起動させるとき、2回目以降はコンテナが再利用され、素早く起動する。

 Lambdaの動作は、CloudWatch/CloudWatch Logsで監視できる。リクエスト数、遅延、可用性、エラー率などのメトリクス情報のほか、動作ログの取得も可能だ。

実行時間の分だけ課金

 Lambdaの特徴の一つが、独特な課金体系である。ユーザーが指定したメモリー容量(およびそれに比例するCPU性能)と100ミリ秒以下は切り上げの実行時間によって課金される。コードを登録するだけなら無料。実行して初めて、課金される。

 EC2では、インスタンスを起動するだけで実質的に何の処理もしていなくても課金が発生する。しかも基本的に1時間単位の課金なので、数分起動しただけでも1時間分の料金が必要だ。不定期に発生する処理を毎日短時間だけ行う場合でも、24時間365日分のコストが掛かる。そういうケースでは、実行時間で課金されるLambdaは大きなコストメリットを期待できる。

 セキュリティでは、Lambdaは、アクセス権限ポリシーのIAMロールをサポートしており、柔軟に権限を付与できる。VPC(Virtual Private Cloud)にも対応しており、VPC内で実行させることも可能である。

 Lambdaによって、サーバーレスというアーキテクチャー設計の新しい選択肢が登場したといえる。Lambdaは、AWSの様々なサービスと連携でき、応用範囲が広い。

 ただし、使いこなしは簡単ではない。そこで以降では、すぐに実践できるLambdaの使い方を、構成パターンとして五つ紹介する。さらに、Lambdaの性能検証を行う。

 構成パターンについては、構成図、解決する課題、解説という三つの要素を用いて紹介する。