[AWS]サーバーレス・Lambdaについて
サーバーレス
サーバーがないのではなく、「サーバーの管理をしなくてよくしてくれる便利なサービス」のこと。
必要なサーバーの構築・保守をAWS側に任せることができる。
普通なら、アプリを動かすためにサーバーを立てて、OS入れて、ミドルウェア入れて…みたいな感じで準備が必要。
でも、サーバーレスを使えば プログラムだけ用意すればOK!
AWSが裏で勝手にサーバーを準備して、実行してくれるから、開発者はインフラのことを気にせずにコードに集中できる。
サーバーレスのメリット
✅ サーバーの管理不要(インフラ構築・運用しなくてOK)
✅ コスト最適化(使った分だけ課金)
✅ スケールが簡単(アクセスが増えてもAWSが勝手に対応)
デメリット
❌ 細かい設定ができない(AWSにおまかせ)
❌ 長時間動かす処理には向いてない(Lambdaは15分制限あり)
うまく組み合わせれば、サーバーを一切持たずにアプリを作ることもできる!
AWSのサーバーレスサービス
サービス名 | できること |
---|---|
AWS Lambda | サーバーなしでコードを実行できる(イベント駆動で動く) |
Amazon S3 | オブジェクトストレージ(ファイル保存) |
Amazon DynamoDB | NoSQL型のデータベース |
Amazon API Gateway | APIの管理(外部公開・認証・監視) |
Lambda(ラムダ)
コード(Lambda関数)を書けば、サーバーが実行できるサービス。
AWSが裏で勝手にサーバーを準備して、リクエストが来たら 必要な分だけ 実行してくれる。
イベント駆動型
何かのアクション(イベント)が発生したときに、それをトリガーにしてコードが動く仕組みになってる。
Lambdaの特徴
✅ サーバー管理不要 → インフラの設定や保守をしなくていい
✅ イベント駆動 → 特定の条件(S3, API Gateway, CloudWatchなど)でコードを自動実行
✅ スケール自動調整 → アクセスが増えても勝手にスケールする
✅ 使った分だけ課金 → 無駄なコストがかからない
Lambda関数とは?
Lambdaでは 「Lambda関数」 という単位でプログラムを実行する。
例えば、こんな感じのPythonコードを書いておけば、リクエストが来たときに自動で動く👇
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello from AWS Lambda!'
}
💡 Lambda関数のポイント
-
lambda_handler(event, context)
という関数がエントリーポイント(最初に実行される) -
event
にはトリガーの情報(リクエストのデータなど)が入る -
context
はLambdaの実行環境に関する情報 - 最後に
return
でレスポンスを返す
Lambdaはどんなときに使う?
Lambdaは 「何かのイベントが発生したら、それをトリガーにしてコードを実行したいとき」 に便利!
使い方 | トリガー(イベント) | 説明 |
---|---|---|
画像を処理 | S3 に画像アップロード | S3 に新しい画像が追加されたら、自動でリサイズ処理 |
APIのバックエンド | API Gateway のリクエスト | HTTPリクエストを受けてデータを処理し、レスポンスを返す |
定期実行 | CloudWatch Events | 毎日夜12時にデータを処理(バッチ処理) |
データの変更を検知 | DynamoDB Streams | データベースの更新を検知して通知を送る |
Lambdaの料金
Lambdaは 「使った分だけ」 課金される。
具体的には、関数が実行された回数 + 実行時間(秒単位) で料金が決まる。
💰 無料枠もある!
- 100万リクエスト/月 まで無料
- 320万秒/月 まで無料(メモリ設定による)
だから、小規模な処理なら ほぼ無料で使える のが強み!
Lambdaレイヤーとは?
「Lambdaレイヤー(Lambda Layer)」 は、AWS Lambdaで 共通のコードやライブラリをまとめて管理し、複数のLambda関数で使い回せる仕組み 。
普通にLambda関数を作ると、コードと一緒にライブラリ(外部パッケージ)も含めてアップロード しなきゃいけないけど、レイヤーを使えば ライブラリを別管理できるから、Lambda関数を軽くできるし、メンテナンスもしやすくなる!
Lambdaレイヤーのメリット
✅ コードの共通化 → 何度も同じライブラリをアップロードしなくていい
✅ Lambda関数を軽量化 → 関数ごとに不要なライブラリを持たなくて済む
✅ ライブラリのバージョン管理が楽 → 一箇所更新すれば、複数のLambda関数で最新バージョンを使える
✅ AWS公式レイヤーも使える → AWSが提供するランタイム(Python, Node.js, etc.)やツールも活用可能
Lambdaレイヤーの構成
レイヤーには、以下のようなファイルを含められる👇
レイヤーの内容 | 説明 |
---|---|
ライブラリ | 特定の機能を提供する便利なコードの集合。Pythonのrequests や Node.js の axios みたいな外部パッケージを共通化 |
設定ファイル | APIキーや環境変数を定義するファイル(セキュリティ的にはIAMやSecrets Manager推奨) |
実行ファイル | Lambda関数で共通して使うスクリプトやシェルスクリプト |
レイヤーは ZIPファイルにまとめてアップロード し、Lambda関数で参照する形になるよ!
Lambdaレイヤーの使い方
-
レイヤーを作成する
- まず、共通のライブラリやコードをZIPにまとめてS3にアップロード
- AWS Lambdaの「レイヤーの作成」からZIPを登録
-
Lambda関数でレイヤーを追加する
- 関数の設定から「レイヤーを追加」を選択
- 作成したレイヤーを適用
-
Lambda関数でレイヤーを利用
- Pythonなら
import
するだけで使える - Node.js なら
require()
で読み込める
- Pythonなら
Discussion