AWS Lambdaとは

AWS Lambda(ラムダ)は、サーバーのプロビジョニング(構築)や管理を一切行うことなく、コードを実行できる「サーバーレス」コンピューティングサービスです。開発者は実行したいプログラムコード(関数)をLambdaにアップロードするだけで、AWSがインフラの管理、OSのメンテナンス、キャパシティのプロビジョニング、自動スケーリングなどをすべて自動的に行ってくれます。Lambdaは常に稼働しているわけではなく、あらかじめ設定した「トリガー(イベント)」が発生した時にのみ、必要なリソースを瞬時に割り当ててコードを実行します。そして最大のメリットは、コードが実際に実行された時間(ミリ秒単位)と実行回数に対してのみ課金される点です。コードが実行されていない待機時間には料金は一切発生しません。これにより、インフラ管理の煩わしさから解放され、開発者はビジネスロジック(アプリケーションのコアな機能)の記述にのみ集中でき、同時にインフラコストの大幅な最適化を実現することが可能になります。モダンなクラウドネイティブアプリケーション構築の核となるサービスです。
具体例
AWS Lambdaは、様々なAWSサービスと連携して、イベント駆動型の処理を自動化するのに適しています。
- 画像アップロード時の自動サムネイル作成: ユーザーがスマートフォンのアプリからAmazon S3(ストレージ)に高解像度の写真をアップロードしたとします。この「S3にファイルが保存された」というイベントをトリガーにしてLambda関数を自動的に起動させ、画像のサイズを縮小してサムネイル画像を生成し、別のS3バケットに保存する処理を行います。
- リアルタイムのログ分析と通知: システムのエラーログがCloudWatch Logsに出力されたことをトリガーにLambdaを実行し、エラー内容を解析。重大なエラーであれば、Amazon SNSを通じて管理者のスマートフォンやSlackなどのチャットツールに即座に警告アラートを送信します。
- サーバーレスWebアプリケーションのバックエンド: API Gatewayと連携して、ウェブサイトやモバイルアプリからのAPIリクエストを受け取り、Lambdaでデータベース(DynamoDBなど)のデータの読み書きを行い、結果を返す動的なバックエンドシステムを構築します。EC2のように常時サーバーを起動しておく必要はありません。
このように、「何かが起きたら、指定した処理を実行する」というピタゴラスイッチのような仕組みを簡単に作ることができます。
もう少し詳しく
AWS Lambdaは、Node.js、Python、Java、Go、Ruby、C#など、多様なプログラミング言語(ランタイム)を標準でサポートしており、開発者は使い慣れた言語でコードを記述できます。さらに、カスタムランタイムを使用することで、サポートされていない他の言語を実行することも可能です。Lambda関数の実行環境は完全に分離・保護されており、高いセキュリティが確保されています。イベントの発生頻度が急激に増加した場合(例えば、S3への画像アップロードが1秒間に100回発生した場合)、Lambdaは自動的にコードの実行環境(コンテナ)を複製し、100個の処理を並列で実行してスケールアウトします。ユーザー側でロードバランサーを設定したり、サーバーの台数を増やす設定を行う必要は全くありません。
ただし、Lambdaにはいくつか制限もあります。例えば、1回の関数の実行時間は最大15分までと定められているため、何時間もかかるような長時間のバッチ処理には適していません(そのような場合はAWS BatchやEC2を使用します)。また、関数が一定時間呼び出されなかった後、新たに実行される際に初期化の時間がかかり、応答がわずかに遅延する「コールドスタート」という現象が発生する場合があります。しかし、これらの制約を理解して適切にアーキテクチャを設計すれば、サーバーレスの恩恵を最大限に引き出すことができます。インフラストラクチャ・アズ・ア・サービス(IaaS)であるEC2とは対照的に、Lambdaはファンクション・アズ・ア・サービス(FaaS)に分類されます。
試験でのポイント
AWS認定クラウドプラクティショナー(CLF-C02)試験において、AWS Lambdaは「サーバーレス」「インフラ管理不要」「イベント駆動」「従量課金」といったキーワードとセットで出題されます。
- サーバーレスコンピューティング: 「サーバーのプロビジョニングや管理が不要でコードを実行できるサービスはどれか?」という問題の正解はAWS Lambdaです。サーバーレスアラキテクチャの代表格として必ず覚えましょう。
- 課金モデルの違い: EC2は(インスタンスが起動している間)利用した時間単位で課金されますが、Lambdaは「コードが実行されたミリ秒単位の時間」と「リクエスト回数」に基づいて課金され、待機状態では無料であるというコスト上のメリットが問われます。
- ユースケースの適性: 「15分以内で終わるイベント駆動型の処理」にはLambdaが最適ですが、「OSレベルの細かい設定が必要な場合」や「数時間連続で稼働する重い処理」には不向きであり、その場合はAmazon EC2を選択すべきであるという使い分けの判断が求められます。
関連する用語
Lambdaは単独で動作するよりも、他のサービスと連携して真価を発揮します。トリガーとなるイベントソースとして頻繁に利用されるのがオブジェクトストレージのAmazon S3です。また、LambdaをウェブAPIとして外部に公開するためのフロントドアの役割を果たすのがAmazon API Gatewayであり、サーバーレスバックエンドに最適なNoSQLデータベースとしてAmazon DynamoDBがよく組み合わせて使用されます。