
AWSのLambda入門ガイド
AWS LambdaはAWSが提供するサーバーレスコンピューティングサービスです。サーバーのプロビジョニングや管理なしにコードを実行できるため、インフラストラクチャの運用負荷を大幅に軽減できます。このガイドでは、Lambdaの基本概念から実際の利用方法、そして運用のベストプラクティスまでを解説します。
Lambdaとは何か
AWS Lambdaは、サーバーの管理なしにコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、使用したコンピューティング時間に対してのみ料金が発生します。
Lambdaの主な特徴は以下の通りです:
- サーバーレスアーキテクチャ:サーバーのプロビジョニングや管理が不要
- イベント駆動型:様々なAWSサービスからのイベントでLambda関数を自動的に起動
- 自動スケーリング:並列実行数が自動的に調整され、高負荷状況にも対応
- マイクロサービスアーキテクチャとの親和性:小さな機能単位での開発と運用が可能
- 複数言語対応:Node.js、Python、Java、Go、.NET、Ruby、Rust等のプログラミング言語をサポート
- 従量課金制:実際に実行された時間とリソース使用量に応じた料金体系
Lambdaのアーキテクチャと仕組み
Lambdaは以下のコンポーネントから構成されています:
- Lambda関数:実行されるコード
- イベントソース:関数を起動するトリガー(S3、API Gateway、DynamoDB等)
- 実行環境:コードを実行するランタイム環境
- コンテキスト:関数の実行に関する情報を提供するオブジェクト
- レイヤー:共通ライブラリやカスタムランタイムを共有する仕組み
- 同時実行数:同時に実行できるLambda関数のインスタンス数
Lambdaの実行フローは以下の通りです:
- イベントソースからイベントが発生
- Lambdaサービスがイベントを検知し、関数を起動
- 実行環境(コンテナ)が初期化され、関数コードが実行
- 実行結果が返却され、必要に応じて他のサービスへ連携
- 一定時間アイドル状態が続くと、実行環境は終了
Lambda関数の作成と設定
Lambda関数を作成する基本的な手順は以下の通りです:
- AWSマネジメントコンソールにログイン
- Lambdaダッシュボードに移動
- 「関数の作成」ボタンをクリック
- 関数名を入力
- ランタイム(Node.js、Python、Java等)を選択
- 実行ロールを設定(IAMロール)
- 関数コードを記述またはアップロード
- メモリ、タイムアウト等の基本設定を構成
- トリガーを設定(API Gateway、S3、DynamoDB等)
- 関数を保存してデプロイ
基本的な関数例(Node.js)
exports.handler = async (event, context) => {
console.log('イベント:', JSON.stringify(event, null, 2));
// ビジネスロジックを実装
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Hello from Lambda!',
input: event,
}),
};
return response;
};
基本的な関数例(Python)
import json
def lambda_handler(event, context):
print('イベント: ', json.dumps(event))
# ビジネスロジックを実装
response = {
'statusCode': 200,
'body': json.dumps({
'message': 'Hello from Lambda!',
'input': event
})
}
return response
イベントソースとトリガーの設定
Lambda関数は様々なAWSサービスからのイベントをトリガーとして実行できます。主なイベントソースには以下があります:
- API Gateway:RESTful APIやWebSocket APIからの呼び出し
- S3:オブジェクトの作成や削除イベント
- DynamoDB:テーブルの更新イベント
- SQS:キューへのメッセージ到着
- SNS:トピックへの通知
- EventBridge:スケジュール実行やカスタムイベント
- Kinesis:データストリームからのレコード処理
- Cognito:ユーザープール関連イベント
各イベントソースには固有の設定があり、Lambdaコンソールまたはインフラストラクチャアズコード(CloudFormation、CDK等)を通じて設定できます。
Lambdaの設定パラメータ
Lambda関数の主な設定パラメータには以下があります:
- メモリ:128MB〜10240MB(10GB)の範囲で設定可能、CPUパワーもメモリに比例して割り当て
- タイムアウト:最大15分(900秒)まで設定可能、デフォルトは3秒
- 同時実行数:アカウント全体で1000が初期制限、引き上げ可能
- 環境変数:関数内で参照できる変数を設定
- VPC設定:VPC内のリソースにアクセスする場合に設定
- レイヤー:共通ライブラリやランタイム環境を関数間で共有
- デッドレターキュー:処理に失敗したイベントを送信するキュー
Lambdaの運用ベストプラクティス
Lambdaを効率的に運用するためのベストプラクティスをいくつか紹介します:
- 関数の単一責任:一つの関数に一つの責任を持たせる設計
- コールドスタート対策:Provisioned Concurrencyの活用や関数サイズの最適化
- 適切なメモリ設定:ワークロードに合わせたメモリ割り当てによるパフォーマンスとコストの最適化
- タイムアウト設定:処理に必要な時間を考慮した適切な設定
- エラーハンドリング:例外処理の徹底とリトライ戦略の実装
- ログとモニタリング:CloudWatchによる詳細なログ記録と監視
- セキュリティ:最小権限の原則に基づくIAMロールの設定
- テスト自動化:ユニットテストと統合テストの自動化
Lambdaの料金体系
Lambdaの料金は主に以下の要素で構成されています:
- リクエスト数:100万リクエストあたりの料金
- 実行時間:メモリサイズとGBレート秒単位での課金
- Provisioned Concurrency:事前に確保した同時実行環境の料金
Lambdaにはフリーティアがあり、毎月100万件のリクエストと40万GBレート秒の実行時間が無料で利用できます。これにより、小規模なアプリケーションであれば実質無料で運用可能です。
アプリケーション例:サーバーレスウェブアプリケーション
以下は、LambdaとAPI Gateway、DynamoDBを組み合わせたサーバーレスウェブアプリケーションのアーキテクチャ例です:
- ユーザーからのリクエストをAPI Gatewayが受信
- API GatewayがLambda関数を起動
- Lambda関数がビジネスロジックを実行
- 必要に応じてDynamoDBからデータを取得・更新
- 処理結果をAPI Gatewayを通じてユーザーに返却
このアーキテクチャでは、サーバー管理が不要でスケーラビリティが高く、使用量に応じた料金体系となっています。
まとめ
AWS Lambdaは、サーバーレスアーキテクチャの中核となるサービスであり、インフラストラクチャ管理の負担を軽減しながら柔軟なアプリケーション開発を可能にします。イベント駆動型の設計と自動スケーリングにより、リソースの効率的な利用とコスト最適化が実現できます。
本ガイドで紹介した基本的な概念と運用のベストプラクティスを参考に、Lambdaを活用したサーバーレスアプリケーションの開発に取り組んでみてください。適切な設計と構成により、メンテナンスコストの削減と開発サイクルの短縮が期待できます。