今日学んだこと#
サーバーレスの概念、登場した背景、AWS Lambdaの特徴と制約について学びました。
学習内容#
サーバーレスとは#
サーバーレス(Serverless)とは、開発者がサーバーの管理やプロビジョニングを意識せずにアプリケーションを構築・実行できるクラウドコンピューティングの実行モデルです。
「サーバーがない」という意味ではなく、サーバーの存在を意識しなくてよいという意味です。クラウドプロバイダーがインフラの管理を担当し、開発者はコードに集中できます。
┌────────────────────────────────────────────────────────┐
│ 従来のサーバー運用 │
│ ┌──────────┐ 開発者が管理 │
│ │ サーバー │ ← OS・ミドルウェア・スケーリング・障害対応 │
│ └──────────┘ │
├────────────────────────────────────────────────────────┤
│ サーバーレス │
│ ┌──────────┐ クラウドが管理 │
│ │ 関数 │ ← 開発者はコードのみに集中 │
│ └──────────┘ │
└────────────────────────────────────────────────────────┘
サーバーレスが成立した背景#
サーバーレスは、クラウドサービスの段階的な進化の延長線上にあります。
| サービスモデル | 正式名称 | 管理範囲 | 具体例 |
|---|---|---|---|
| IaaS | Infrastructure as a Service | 仮想マシン | AWS EC2 |
| PaaS | Platform as a Service | アプリ実行環境 | Elastic Beanstalk |
| FaaS | Function as a Service | 関数単位の実行 | AWS Lambda |
| SaaS | Software as a Service | アプリケーション | Gmail, Slack |
クラウド普及による変化:
- 従量課金制の浸透:使った分だけ支払う仕組みが一般化
- 仮想化技術の成熟:コンテナ技術やマイクロサービスの発展
- ペットと家畜より「家畜」モデルの定着:サーバーを使い捨て可能なリソースとして扱う設計思想(Design for Failure)
- イベント駆動型アーキテクチャ:特定のイベントに応じて処理を実行する設計パターンの普及
代表的なサーバーレスサービス#
| プロバイダー | サービス名 |
|---|---|
| AWS | Lambda |
| Google Cloud | Cloud Functions |
| Microsoft Azure | Azure Functions |
AWS Lambdaの特徴#
AWS Lambdaは、AWSが提供するサーバーレスコンピューティングサービスです。イベント駆動型で、特定のトリガーに応じてコードを実行します。
# Lambda関数の基本構造
import json
def lambda_handler(event, context):
# eventからトリガー情報を取得
# contextから実行環境情報を取得
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
イベント駆動型とは?
Webのように「リクエストを受け取ったら」ではなく、「何かイベントを受け取ったら」という考え方です。テストボタンのクリック、S3へのファイルアップロード、API Gatewayからのリクエストなど、様々なイベントがトリガーとなります。
AWS Lambdaの制約#
| 項目 | 制限値 |
|---|---|
| 最大実行時間 | 15分(900秒) |
| メモリ割り当て | 128MB 〜 10,240MB |
| デプロイパッケージサイズ | 50MB(zip)/ 250MB(解凍後) |
| 一時ストレージ(/tmp) | 512MB 〜 10,240MB |
| 同時実行数(デフォルト) | 1,000(リージョンあたり) |
制約から考えるユースケース:
- 向いている:短時間で完了する処理、イベント駆動の処理、マイクロサービス
- 向いていない:15分以上かかる長時間処理、常時稼働が必要なサービス
サーバーレスのユースケース#
- APIバックエンド:API Gateway + Lambda で RESTful API を構築
- データ処理:S3へのファイルアップロードをトリガーに画像変換・データ加工
- イベント通知:特定イベント発生時にSlackやメールへ通知
- バッチ処理:定期的なデータ集計・レポート生成
- IoTデータ処理:センサーデータのリアルタイム処理
他サービスとの連携例:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ API Gateway │ ──→ │ Lambda │ ──→ │ DynamoDB │
└─────────────┘ └─────────────┘ └─────────────┘
HTTPリクエスト ビジネスロジック データ保存
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ S3 │ ──→ │ Lambda │ ──→ │ SNS │
└─────────────┘ └─────────────┘ └─────────────┘
ファイルアップロード サムネイル生成 通知送信
まとめ#
| 観点 | ポイント |
|---|---|
| 定義 | サーバー管理不要でコードに集中できる実行モデル |
| 背景 | クラウドの普及、従量課金制、イベント駆動型の定着 |
| 代表例 | AWS Lambda(FaaS) |
| メリット | コスト効率、自動スケーリング、開発速度向上 |
| 制約 | 実行時間15分、メモリ・パッケージサイズ制限 |
- サーバーレスは「銀の弾丸」ではなく、ユースケースに応じて従来型サーバー(EC2等)と使い分けることが重要
- 短時間のイベント駆動処理には最適だが、長時間処理や常時稼働が必要な場合は他の選択肢を検討する