「AWS Lambda」はAmazonの提供する、サーバーレスコンピューティングサービスです。AWSの各種サービスと連携し、従来サーバーで実行していた処理をLambdaで行うことで、開発者はサーバー管理から開放されます。
ウェブ開発に慣れた人ほど「サーバーが無いってどういうこと?」という疑問が湧くと思います。Lambdaの前にまずサーバーレスの背景と概念から紹介します。
※当記事の内容は2018年8月現在のAmazon RDSの仕様・公開情報に準じます。
サーバーレスが求められる背景
膨大なアクセスが見込まれるサイトのサーバーダウンを避ける方法として、サーバーの冗長化構成が検討されることは多くあります。
しかしサーバーの冗長化は、単純にサーバー台数が倍以上になるためインフラ費用が増加し、その冗長化構成の構築に作業と期間の相応のコストがかかります。さらに、冗長化をしたとしても負荷監視や障害時の対応といった継続的な保守管理は必要です。
また開発者視点だと、サーバーの構築・保守管理は必要なことですが基本的にクリエイティブな作業ではありません。
AWS Lambdaによるサーバーレスの概念は、そうしたサーバーに関わる煩わしい課題や作業から開放され、エンジニアがクリエイティブな開発に専念できるようになる機能を備えています。
AWS Lambdaの特徴・メリット
Lambdaには以下のような特徴があります。
😄 サーバー構築・管理からの開放
ウェブアプリケーションを稼働させるには従来ならサーバーを立ち上げ、Linuxなどの環境構築、ウェブサーバーやミドルウェアの設定が必要です。また稼働中もOSやミドルウェアの更新、死活監視など継続的なインフラの保守管理が必要です。
Lambdaはそれらを一切省き、ウェブアプリケーションを稼働させる実行環境を用意しています。
開発者はアプリケーション開発のみ行い、それをLambdaに実行させるだけで済むようになります。
⚡ サーバーが落ちることがない
サーバーが無いのでサーバーダウンの概念がありません。
厳密にはAmazon側のネットワークがダウンすれば共倒れしますが、どのプラットフォームもサービス本体がダウンすれば同じことが言えるので、世界的インフラのAWSと、自社サーバーや一般企業のレンタルサーバーのどちらを信用するか、という話になります。
🛡️ サーバーの脆弱性を突いた攻撃が効かない
セキュリティ被害の多くはサーバーOSやミドルウェアの脆弱性を突いた攻撃ですが、公開ネットワーク上にサーバーが無いので、一般的なサーバーの脆弱性を突く攻撃が効きません。
Amazonのプラットフォームに脆弱性が無いとは言えませんが、プラットフォーム仕様が公開されていないので脆弱性を探すことが難しく、一般的なサーバーOSより脆弱性被害の可能性は少ないです。
🖥️ 様々なプログラムに対応
Lambdaは以下のプログラム言語に対応しており、今後も対応する言語が追加される予定です。
- Java
- Node.js
- C#
- Python
💰 コード実行単位の従量課金
Lambdaはコードが実行される0.1秒(100ms)ごと、およびプログラムが実行された回数で課金されます。
一般的なホスティングサーバーやAWSのEC2も、ウェブサイトへのアクセスが無くともサーバーの公開中は課金され続けますが、Lambdaはプログラムが実行されなければ一切料金は発生しません。
AWS Lambdaの料金
Lambdaの料金はプログラムのリクエスト数+実行時間の合計料金です。
公式の料金表を見てもイメージにしくいですので、ケースを仮定して料金計算してみます。
Lambdaの料金を試算してみる
一般的なメールフォーム
月に100回実行され、毎回の実行時間が1秒、割当メモリ128MBとした場合…
実は計算するまでもなく無料です。100万リクエストまでは無料のため、ほんの100回程度では料金がかかりません。
もっとスケールを上げてみましょう。
大規模な集客キャンペーンに成功した登録フォーム
月に500万回実行され、毎回の実行時間が1秒、割当メモリ128MBとした場合…
●リクエスト回数の料金計算 5,000,000 - 無料枠(1,000,000) = 4,000,000 4,000,000 x 0.2USD ÷ 1,000,000 = 0.8USD ●実行時間の料金計算 実行時間(秒) : 5,000,000回 x 1秒 = 5,000,000秒 実行時間(GB-秒) : 5,000,000 x 128MB ÷ 1024 = 625,000GB-秒 625,000GB-秒 - 無料枠(400,000GB-秒) = 225,000GB-秒 225,000GB-秒 x 0.00001667USD = 3.75USD ●合計 リクエスト回数料金(0.8USD) + 実行時間料金(3.75USD) = 4.55USD (約500円)
なんと500円でした。
1ヶ月で500万登録に成功するキャンペーンなど滅多にありませんが、これをサーバー冗長化で捌こうとすると、数千倍の費用が見込まれます。
ただし上記の計算はLambdaだけの料金です。Lambda単体ではウェブサイトの体を成さないため、S3などAWS関連サービスの料金が別途かかります。関連サービスを考慮しても、サーバーの冗長化構成をするより低コストで高負荷に強い環境が作れると考えられます。
さいごに
今回は AWS Lambda の特徴から料金についてご紹介しました。
サーバーレスの概念は初めは難しくとっつきにくい印象があるかと思います。私もそうでした。メリットを理解することでサーバーに関わる様々な常識が変わるので、今回の内容がサーバーレスの理解の助けになりましたら幸いです。