AWS Lambdaはイベント駆動型のサーバーレスコンピューティングプラットフォームであり、コードの実行に必要なバックエンドの管理やインフラを処理しながら、イベントに応じてコードを実行します。
本記事では、AWS Lambdaの仕組み、概念、メリット、ユースケースについて解説します。
サーバーレスコンピューティングとは?
サーバーレスコンピューティングとは、オンデマンドでバックエンドサービスを提供する手段です。サーバーレスプロバイダーを利用すれば、基盤となるインフラをユーザー自身が管理することなく、コードを記述してデプロイできます。
バックエンドのクラウドインフラに関する管理や運用の作業は、クラウドプロバイダーが担います。これには、スケーリング、プロビジョニング、パッチ適用、スケジューリングなどが含まれます。
関連記事: サーバーレスアーキテクチャとは?
AWS Lambdaとは?
AWS Lambdaは、サーバーのプロビジョニングや管理を行わずにコードを実行できるコンピューティングサービスです。高可用性を特徴とするコンピューティングインフラを通じて、Lambdaはコードを実行し、コンピューティングリソースの管理を行います。
Lambdaは、自動スケーリング、サーバーとオペレーティングシステムの保守、キャパシティーのプロビジョニング、コードのモニタリングとログ記録を処理します。
どのように機能するのでしょうか。まず、Lambdaがサポートする言語でコードを用意します。コードをLambda関数にまとめると、Lambdaがその関数を実行します。必要な場合にのみコードを実行し、自動的にスケールします。
ユーザーが料金を支払うのは、実際に使用したコンピューティング時間分だけです。Lambda関数はLambda APIを通じて呼び出せます。また、他のAWSサービスからのイベントに応じて実行することもできます。
知っておきたいAWS Lambdaの用語
AWS Lambdaを利用するには、数多くの用語を知っておく必要があります。主な用語は次のとおりです。
- 関数:Lambdaでコードを実行するために呼び出せるリソースである関数には、関数に渡されたイベントを処理するコードが含まれます。
- ランタイム:実行環境で動作する、言語固有の環境を提供します。ランタイムは、Lambdaと関数の間で共有される呼び出しイベントとレスポンスを送信します。
- トリガー:トリガーとは、Lambda関数を呼び出すリソースまたは設定です。関数を呼び出すよう設定できるAWSサービスなどが含まれます。
- レイヤー:Lambdaレイヤーは、さまざまな関数依存関係を配布する仕組みです。Lambda関数で利用できるライブラリやその他の依存関係を適切にパッケージ化できます。
- イベント:イベントとは、Lambda関数が処理するデータを含むJSON形式のドキュメントです。関数の呼び出しによって、イベントの構造と内容が決まります。
- 同時実行数:特定の時点で関数が処理しているリクエスト数を指します。
関連記事: サーバーレスアーキテクチャ:メリットと課題とは?
Lambdaのメリット
継続的なスケーリング
AWS Lambdaは、イベントによってトリガーされたコードを並列実行し、各トリガーを個別に処理するとともに、ワークロードの規模に応じて正確にスケールします。スケーリングの範囲は、1日数件のリクエストから毎秒数十万件のリクエストまで及びます。
サーバー不要
Lambdaにより、ユーザーはサーバーに関する責任から解放されます。耐障害性と高可用性を備え、AWSリージョン内の複数のアベイラビリティーゾーンをカバーするインフラ上でコードを実行します。
AWS Lambdaは、組み込みのログ記録およびモニタリング機能を提供しながら、インフラの保守、管理、パッチ適用を処理します。
豊富なエコシステム
Lambdaは多くのAWSサービスと統合されており、開発者がサーバーレスアプリケーションを構築するための有用なエコシステムを提供します。
AWS Serverless Application Model(SAM)を通じて、開発者はサーバーレスアプリケーションを構築し、AWS Toolkit for Visual Studio、AWS Cloud9、PyCharm、IntelliJなどのIDEと統合できます。AWS Serverless Application Repositoryを利用すると、開発者はサーバーレスアプリケーションを見つけ、デプロイ、公開できます。
AIによるアプリケーションのモダナイズ
Lambdaでは、学習済みの機械学習モデルを備えた関数を利用して、アプリケーションに人工知能を組み込めます。1回のAPIリクエストで、動画分析、画像分類、音声のテキスト変換、自然言語処理などを実行できます。
イノベーションと生産性
Lambdaがインフラ管理を担うため、組織のプログラミング人材はイノベーションとビジネスロジックの開発に集中できます。こうした人材を本来の業務に振り向けることで、生産性の向上にもつながります。
関連記事: Amazon S3とは? Amazon Simple Storage Service
どのようなユーザーに適しているのか?
Webサイトのバックエンドロジックをホスティングするソリューションを探している人
Lambda関数は、Amazon API Gatewayを介してHTTP経由で呼び出せるため、構築中のWebサイトのバックエンドロジックをホスティングする用途に特に適しています。WebクライアントがAPIを呼び出すと、API GatewayはリクエストをLambdaに転送できます。
アプリケーションで大量のリアルタイムデータを処理する人
アプリケーションで大量のストリーミング入力データを処理する必要がある場合、後で処理するためにデータを一時ストレージへ移動するのは非効率的なことがあります。
ユースケースによっては、リアルタイムデータストリームをAWS Lambdaアプリケーションに送信することで、アプリケーション全体に遅延を生じさせず、重要なリアルタイムタスクを確実に処理できます。
その場でログ分析を行いたいチーム
Lambdaを利用すると、Amazon CloudwatchやCloudtrailのログファイルを調べるLambda関数を作成できます。Lambdaはログの特定のエントリーやイベントを発生時に確認し、その後Amazon Simple Notification Service(SNS)を使って通知を送信できます。
SlackやZendeskなど他のシステムのAPIエンドポイントを呼び出して、カスタム通知フックを簡単に実装することもできます。
アプリケーションやWebサイトから外部サービスへのリクエストが必要な人
外部プロバイダーのサービスをリクエストする必要がある場合でも、アプリケーションやWebサイトのコードでリクエストとレスポンスの詳細を処理する必要はありません。こうした処理は、Webベースのサービスで遅延が発生する原因の1つだからです。
Lambda上で実行されるアプリケーションにリクエストを送信しても、Lambda関数からのレスポンスを待つ間、メインアプリケーションが停止することはありません。そのため、エンドユーザーから遅いレスポンスを見えなくできます。
分析アプリケーションを開発する人
分析アプリケーションの作成時にLambdaを利用し、DynamoDBテーブルに未加工データを保存できます。DynamoDBテーブルの項目を変更すると、DynamoDB Streamsを使って、テーブルに関連するストリームへ項目更新イベントを発行できます。
Lambda関数を記述して未加工データを集計することで、カスタムメトリクスを生成できます。