🕌

[AWS]サーバーレス・Lambdaについて

2025/02/28に公開

サーバーレス

サーバーがないのではなく、「サーバーの管理をしなくてよくしてくれる便利なサービス」のこと。
必要なサーバーの構築・保守を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レイヤーの使い方

  1. レイヤーを作成する

    • まず、共通のライブラリやコードをZIPにまとめてS3にアップロード
    • AWS Lambdaの「レイヤーの作成」からZIPを登録
  2. Lambda関数でレイヤーを追加する

    • 関数の設定から「レイヤーを追加」を選択
    • 作成したレイヤーを適用
  3. Lambda関数でレイヤーを利用

    • Pythonなら import するだけで使える
    • Node.js なら require() で読み込める

Discussion