Lambda(ラムダ)は、AWSが提供するサーバーレスコンピューティングのサービスです。最近はサーバーレスアーキテクチャも増えてきていますが、「サーバーレス」ということ自体、まだまだわかりにくい、実感しにくいと感じているユーザーも多いのではないでしょうか。Lambdaの特徴やメリットについて紹介します。Lambdaの概要について見てみましょう。Lambdaは、AWSの提供するサーバーレスコンピューティングサービスです。プログラムはクラウド上で実行され、ユーザー自身でサーバーや仮想サーバーを利用することはありません。汎用性が高く、さまざまなアプリケーションやサービスを実行できます。Lambdaのサービスに含まれるため、ユーザーはサーバー構築や運用に関わる作業を行う必要がなく、実行するプログラムをLambda関数として作成・登録するだけです。EC2はクラウド上の仮想サーバーで、利用料金はサーバーを利用している時間単位で計算されます。利用量はダイナミックに変動させることが可能です。ユーザーはOS上にミドルウェアやアプリケーションをインストールし、メンテナンスも行う必要があります。Lambdaは、サーバーではなくプログラムを実行できる環境を提供し、利用料金はプログラムを実行している時間で計算されます。Lambdaでは実行環境を提供しているので、ソフトウェアのインストールやメンテナンスなどをユーザーが行う必要はありません。用意するのは、動作させたいプログラムだけです。Lambdaは、アプリケーション開発やバックエンドサービスなど、さまざまな用途に使うことができます。「なんらかのイベントをトリガーにして予定しておいた処理を行う」という特徴を生かし、次のような用途に向いています。Lambdaの料金体系はどのようになっているか見てみましょう。Lambdaは、プログラムのリクエスト数と、プログラムの実行が開始されてからコードが返されるまでの時間に対して課金されます。ミリ秒単位で切り上げられます。プログラムが実行されなければ料金はかかりません。ミリ秒あたりの課金単価は、プログラムに割り当てたメモリの量により異なります。Lambdaには、月間100万リクエストまで、最大320万秒までのコンピューティング時間の無料利用枠が適用されます。無料利用枠の量はプログラムに割り当てたメモリの量により異なり、1GBのファンクションで無料利用枠は40万秒までです。Lambdaの無料利用枠は無期限で提供されており、12か月たっても期限切れにはなりません。EC2では、課金の仕組みが異なります。EC2では、サーバーを利用していればアクセス数に関わらず課金されます。サーバー利用中に何回リクエストがあり、プログラムが実行されても、料金は変わりません。そのため、待機が必要な処理に向いています。Lambdaでは、プログラムへのリクエストやプログラムの実行時間について課金されるので、プログラムの実行回数が増えると料金が上がります。そのため、1日あたりの利用頻度が少ない処理に向いています。Lambdaを使うと、ほかのクラウドコンピューティングサービスを利用したときに比べて、以下のメリットがあります。Lambdaでは、リクエストに応じてプログラムを実行した回数と時間によって料金が発生します。待機時間には課金されないので、処理内容によっては大きなコストダウンが可能です。Lambdaには自動スケーリング(オートスケール)機能があり、アクセス数や負荷に応じて自動的に利用するサーバーの数を増減します。これによって、ユーザーは、サーバーを意識することなくプログラムを実行することが可能です。サーバーの構築や管理が不要サーバーの運用は提供側のAWSが行うので、サーバーを管理する必要はありません。ソフトウェアのインストールやセキュリティの設定、ハードウェアのメンテナンスなども不要で、サーバーの構築や運用のための工数を削減できます。Lambdaでは、ネットワーク上にサーバーが公開されておらず、プラットフォームの仕様も公開されていません。そのため脆弱性をついた攻撃がしづらくなっています。高可用性を実現しているためメンテナンスによる定期的なダウンタイムもありません。Lambdaは、Java、Node.js、C#、Python、Go、PowerShell、Rubyのプログラム言語に対応しています。RuntimesではErlang、Elixir、COBOL、N|Solid、PHP、C++、Rustが使用可能です。Lambdaを使うときには、次のような注意が必要です。Lambda単体では何もできません。S3など、ほかのAWSサービスと組み合わせてシステムを構成する必要があります。その場合、料金は利用したサービスすべての合計金額を支払うことになります。Lambdaの料金は毎月アクセス数により変動します。そのため、固定費として予算計上することができません。初期化などによりオーバーヘッドが発生することがあります。ランタイムを検討しても良いかもしれません。Lambdaのメモリ割り当てでは、初期値で128MB、最大は3,008MBまでです。そのため、大量のメモリが必要な処理には利用できないこともあります。Lambdaでは、初期値の3秒から最大900秒で処理がタイムアウトになります。900秒以上かかる処理には利用できません。EC2を使用したほうがよいでしょう。Lambdaでは、処理が失敗したときに自動的に再試行する機能がついています。S3からLambda関数を呼び出すと、処理が失敗したときに自動的に2回再試行されます。すると、同じ関数が3回実行されてしまうことになるので、その点を考慮して設計する必要があります。Lambdaだけでなく、サーバーレスコンピューティングからホスティング環境に移行することは簡単ではありません。万一AWSのサーバーレス環境に障害が起きた場合は、ほかのサーバーレス環境に移行することになります。Lambda以外のサーバーレス環境でも動作するよう設計しておくことも重要です。Lambdaは、サーバーレスでシステムを構築するサービスの代表です。サーバーレスシステムはこれまでの仮想サーバーとは使い方が大きく異なりますが、どちらにもメリットとデメリットがあります。Lambdaの使い方を理解することで、より利用目的に合ったシステムを構築しましょう。※本記事の内容につきましては2018年11月時点での情報です。Lambda編集部twiterfacebookAWSを中心としたクラウドインフラやオンプレミス、ビッグデータ、機械学習などの技術ネタを中心にご紹介します。