コンテナ・クラウド基盤

AWS Lambdaとはサーバーレス関数の仕組みと同時実行・課金の考え方

AWS Lambdaとは、サーバーを管理せずにコードを実行できるAWSのサーバーレスサービスです。関数の仕組み、実行環境の初期化と再利用、同時実行の上限、向く場面と注意点を、AWSの公式ドキュメントで整理します。

公的機関・公式資料などの一次情報と照合して作成しています。このサイトについて

AWS Lambdaとは

AWS Lambda とは、AWS が提供するサーバーレスコンピューティングのサービスです。公式ドキュメントでは、サーバーをプロビジョニングしたり管理したりしなくてもコードを実行でき、サーバーのメンテナンス、容量の確保、スケーリング、パッチ適用といった基盤の管理は Lambda が自動で行うため、利用者はアプリケーションのロジックに集中できると説明されています。

中心となる「Lambda 関数」は、イベントや API の呼び出しに応答してコードを実行します。ハンドラー関数を書き、トリガー(API Gateway、Amazon S3、Amazon SQS、EventBridge など)につなぐと、Lambda が実行します。各呼び出しは共有状態なしで個別に動き、需要に合わせて水平にスケールします。同じ「サーバーを意識しない」実行基盤として、Google Cloud の Cloud Run もあります。

基本(Lambda 関数とその周辺)

公式ドキュメントによると、Lambda には用途の異なる2つの計算の単位があり、サーバー管理が不要で従量課金という基盤は共通です。

観点 Lambda 関数 Lambda MicroVMs
最適な用途 リクエストとレスポンス、またはイベント駆動の処理(API、データ処理、自動化) ユーザーや AI が作成した信頼できないコードを動かす永続的な環境
実行時間 呼び出しごとに最大15分(複数手順のワークフローは Lambda Durable Functions で最長1年) 実行中と一時停止中を合わせた存続期間が最大8時間
同時実行 実行環境ごとに一度に1つのリクエスト 1つの MicroVM で複数の同時接続
スケーリング Lambda が自動で増減 開発者が API で作成・一時停止・再開・終了

多くの Web 系の用途では、前者の Lambda 関数を使います。以降は、この関数を中心に説明します。

具体例(実行環境と同時実行)

同時実行の仕組みを、公式ドキュメントの説明に沿って整理します。同時実行数とは、Lambda 関数が同時に処理している、未完了のリクエストの数のことです。

流れ 内容
初期化フェーズ 最初のリクエストで、Lambda が新しい実行環境を作り、ハンドラーの外側のコードを実行する
呼び出しフェーズ ハンドラーのコードを実行する。この間、その環境は他のリクエストを処理できない
再利用 処理が終わった環境は、後続のリクエストに使われる。毎回初期化する必要はない
並行処理 同時にリクエストが来ると、利用できる環境がなければ新しい環境が作られる

たとえば、同時に10件のリクエストを受けると、空いている環境があればそれを使い、なければ新しい環境が作られて、同時に最大10の環境が動きえます。上限について、公式ドキュメントは、アカウントに対して1つのリージョン内の全関数の合計で、デフォルトの同時実行数が1,000であると説明しています。クォータの引き上げの申請や、関数ごとの同時実行コントロールで、重要な関数がスロットリングされないようにできるとされています。

AWS Lambdaの実践ステップ

  1. 処理が、リクエスト応答かイベント駆動か、15分以内に終わるかを確認します。
  2. トリガーを決めます。HTTP なら API Gateway、ファイルの追加なら S3、キューなら SQS などです。
  3. ハンドラーを書き、動作を試します。初期化のコードはハンドラーの外に置くと、環境の再利用時に使い回されます。
  4. 同時実行の見積もりを立てます。1秒あたりのリクエスト数と、1件あたりの処理時間から、必要な同時実行数を考えます。
  5. 重要な関数には、予約済み同時実行数やプロビジョニングされた同時実行数を検討します。
  6. メトリクスで同時実行数を監視し、上限に近づいていないか確認します。

AWS Lambdaの注意点

  • 状態は保持されない前提: 公式は、呼び出し間で状態が保持されないことがあると述べています。保存したいデータは、外部のストレージやデータベースに置きます。
  • 初期化の遅延: 新しい環境の初期化には時間がかかります。実際の所要時間は、ランタイムやコードによって異なると公式にも書かれています。
  • 同時実行の共有上限: 上限はリージョン内の全関数の合計です。1つの関数が使いすぎると、他の関数が制限を受けることがあります。
  • 実行時間の上限: 1回の呼び出しは最大15分です。長い処理は分割するか、別の仕組みを検討します。
  • 料金: 関数はリクエスト数と、実行時間のGB秒で決まります。単価は変わるため、公式の料金ページで確認します。

AWS Lambdaでよくあるミス

  • 長時間かかる処理を、そのまま1つの関数に入れて、時間切れになる。
  • 関数の中のメモリに状態を持ち、次の呼び出しで消えて不具合になる。
  • 同時実行の上限を意識せず、急なアクセスでスロットリングが起きる。
  • 重い初期化処理を、毎回のハンドラー内で実行して遅くする。

AWS Lambdaのチェックリスト

  • 処理が15分以内に終わるか
  • トリガーを決めたか
  • 状態の保存先を外部に決めたか
  • 同時実行数を見積もったか
  • 重要な関数の上限対策を検討したか
  • 料金を公式ページで見積もったか

AWS LambdaのFAQ(よくある質問)

Q. サーバーは本当に不要ですか。
A. 公式ドキュメントでは、サーバーを管理せずにコードを実行できると説明されています。ただし、コードの設計、権限、監視は利用者の責任です。

Q. Cloud Run との違いは何ですか。
A. Lambda はハンドラー関数を書いてトリガーにつなぐ形が基本です。Cloud Run はコンテナを動かす形が基本です。Cloud Run の記事で整理しています。

Q. API として公開するにはどうしますか。
A. トリガーに API Gateway を使う構成が公式に挙げられています。入口の役割は APIゲートウェイ で整理しています。

筆者の見解(AWS Lambda)

Lambda は、小さな処理を細かく分けて、必要なときだけ動かす用途に向いていると考えます。一方で、「実行時間の上限」「状態を持たない」「同時実行の共有上限」という3つの性質は、設計の最初に押さえておく必要があります。私は、最初の1本は、失敗しても影響の少ない通知やファイル処理のような用途で動かし、実行時間と同時実行数をメトリクスで見てから、本格的な API に広げることを勧めます。また、費用が小さく見える反面、呼び出しが急増したときの上限や課金の増え方は、事前に試算しておくと安心です。これは筆者の意見であり、要件により最適な構成は変わります。

AWS Lambdaの関連項目

出典(一次情報)

本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。