AWS Lambdaの基本
AWS Lambdaの基本
AWS Lambdaは、「サーバーレス」コンピューティングを実現する中心的なサービスです。サーバーレスとは、開発者がサーバーの管理(OSのアップデート、セキュリティパッチの適用など)を気にすることなく、アプリケーションのコード実行に集中できる仕組みを指します。Lambdaは、コードを実行するための環境をAWSが完全に管理(マネージド)してくれるサービスです。
Lambdaを利用する際の主要な要素は以下のようになります。
トリガー --> Lambda関数 --> 配信先
^
|
Layers
- トリガー (Trigger): Lambda関数を実行するきっかけとなるイベントです。例えば、「S3バケットにファイルがアップロードされた」「API Gatewayにリクエストが来た」などがトリガーになります。
- Lambda関数 (Function): ユーザーが作成したアプリケーションコードそのものです。
- 配信先 (Destination): 関数の実行結果(成功または失敗)を送信する先です。SQSキューや別のLambda関数などを指定できます。
- Layers: 複数のLambda関数で共通して利用するライブラリやカスタムランタイムをまとめたものです。コードの再利用性を高めます。
Lambda関数の構成要素
ランタイムとアプリケーション
- アプリケーション: Lambdaで実行したい処理を記述したコードのことです。
- ランタイム: アプリケーションを実行するために必要な環境(プログラミング言語の実行エンジンやライブラリ)のことです。
Lambdaでは、主要なプログラミング言語に対応したランタイムが標準で提供されています。
AWS Lambdaが標準でサポートする主なランタイム
2025年6月21日時点
ランタイム (開発言語) | サポートバージョン例 |
---|---|
Node.js | 22, 20, 18 |
Python | 3.13, 3.12, 3.11, 3.10, 3.9 |
Java | 21, 17, 11, 8 |
.NET | 9, 8 |
Ruby | 3.3, 3.2 |
OS 専用ランタイム | 実行バイナリやシェルスクリプトを準備してAmazon Linux 系のOS上で実行 |
<small>※サポートされるバージョンは更新されるため、最新情報は公式ドキュメントで確認してください。</small>
Lambdaでは、この「アプリケーションコード」と「ランタイム」をセットにして 「関数 (Function)」 と呼びます。
Lambda関数の実装と詳細設定
ハンドラとソースコード
Lambda関数の中核となるのが 「ハンドラ」 です。これは、Lambdaが呼び出されたときに最初に実行される関数のことで、プログラミング言語ごとに決められた名前で作成します。
例えば、Node.jsの場合は handler
という名前の関数がデフォルトのハンドラになります。
Node.jsで実装したLambda関数の例
index.mjs
export const handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
※.mjs
は JavaScriptのモジュールファイル を表す拡張子で、ECMAScript Modules(ESM)形式のファイルであることを明示しています。
ソースコードは、AWSマネジメントコンソール上で直接編集することもできますが、一般的には、開発環境で作成したソースコードと必要なライブラリをzipファイルなどにパッケージ化してアップロードします。
Lambdaの主要な設定項目
Lambda関数を作成する際には、以下のような様々な設定を行います。基本的な設定以外にも、パフォーマンスやセキュリティを管理するための詳細な設定項目があります。
基本設定
- 説明: そのLambda関数の説明。
- メモリ: 関数に割り当てるメモリ量をMB単位で指定します(128MB~10,240MB)。割り当てるメモリ量に比例してCPUパワーも大きくなるため、パフォーマンスに大きく影響する重要な項目です。
- 実行ロール: Lambda関数にAWSの他のサービス(S3、DynamoDBなど)へアクセスするための権限を付与するIAMロールを設定します。CloudWatch Logsへのログ書き込み権限は、関数の実行ログを記録するために最低限必要となります。
- タイムアウト: 関数の実行時間の上限を1秒から15分の間で設定します。指定した時間を超えると、関数はタイムアウトエラーとして強制的に停止されます。
ランタイム設定
- ランタイム: 関数の実行環境(例: Node.js 22.x, Python 3.13)を選択します。
- ハンドラ:呼び出すハンドラ関数を指定します。
Node.jsの関数を設定する場合、ハンドラー設定の値は、ファイル名とエクスポートしたハンドラー関数の名前をドットで区切ったものになります、{ファイル名}.{ハンドラー関数}
。
(例)index.mjs
のexport const handler = ...
を呼び出す場合はindex.handler
です。
環境変数
コード内で使用する設定値などを、Key-Value形式で定義できます。データベースの接続情報など、コードに直接書き込みたくない情報を分離するのに役立ちます。
タグ
コスト管理やリソースの整理のために、任意のタグ(Key-Value形式)を関数に付けることができます。
モニタリングツール
- CloudWatch: Lambdaの実行ログは自動的にCloudWatch Logsに保存されます。実行回数やエラー数などのメトリクスも収集され、関数の動作状況を監視できます。
- AWS X-Ray: アクティブトレースを有効にすると、リクエストの処理経路を可視化し、パフォーマンスのボトルネック特定やデバッグに役立ちます。
VPC
Lambda関数を特定のVPC(仮想プライベートクラウド)内に配置する設定です。VPC内にあるRDSデータベースやEC2インスタンスなど、プライベートなリソースにアクセスさせたい場合に利用します。
ファイルシステム
Lambda関数からAmazon EFS(Elastic File System)をマウント(接続)して、永続的なファイルストレージとして利用する場合に設定します。
同時実行数
同じLambda関数が同時に実行できる数の上限です。例えば、東京リージョンではデフォルトでアカウントごとに1,000までとなっています。この上限を超えたリクエストは「スロットリング」され、処理が失敗します。上限を引き上げたい場合は、AWSサポートへの緩和申請が必要です。
非同期呼び出し
Lambdaが非同期で呼び出された際の再試行(リトライ)の挙動を設定します。処理が失敗した場合、イベントをキューに保持しておく最大時間(デフォルト6時間)や、リトライ回数を設定できます。
デッドレターキュー (DLQ)
非同期呼び出しで、リトライを繰り返しても処理が成功しなかったイベントの送り先です。ここにAmazon SQSキューやSNSトピックを指定することで、失敗したイベントを後から調査したり、再処理したりできます。
データベースプロキシ
RDS Proxyを利用して、LambdaからRDSデータベースへ効率的かつ安全に接続するための設定です。接続情報をSecrets Managerで管理し、IAMロールでアクセス許可を設定します。