1. サーバーレス入門 MOC
- サーバーレスとは
- サーバーレスコンピューティングの定義 (サーバーの管理を開発者が意識する必要のないクラウド実行モデル)
"サーバーレス"は"サーバーがない"という意味ではない
- サーバーレスの核心的価値 (ビジネスロジックへの集中、インフラ管理からの解放)
- サーバーレスの主要なカテゴリ
- なぜサーバーレスが注目されるか
- 従来のサーバー管理の課題 (プロビジョニング, スケーリング, パッチ適用)
- 開発サイクルの高速化と俊敏性の向上
- コスト効率の改善 (従量課金)
- サーバーレスの基本原則
インフラの抽象化
イベント駆動アーキテクチャ
ステートレスなコンピューティング
自動スケーリングと弾力性
従量課金モデル
- サーバーレス vs. 他のアーキテクチャ
サーバーレス vs. コンテナ (Kubernetes)
サーバーレス vs. PaaS (Platform as a Service)
サーバーレス vs. 仮想マシン (IaaS)
- サーバーレスの学習ロードマップ (例)
2. Function-as-a-Service (FaaS) MOC
2.1. FaaSの基本概念 MOC
- FaaSの定義 (イベントに応じてコード(関数)を実行し、実行時間に対してのみ課金されるサービス)
- FaaSの構成要素
[[関数 (Function)]] (実行されるコードの単位)
イベントソース (Event Source) / トリガー (Trigger) (関数を起動するきっかけ)
実行コンテキスト (Execution Context)
- FaaSのライフサイクル
デプロイ (パッケージングとアップロード)
呼び出し (Invocation) (同期呼び出し vs. 非同期呼び出し)
スケーリング (自動スケールアウト/イン)
- コールドスタート (Cold Start) とウォームスタート (Warm Start)
コールドスタートの発生原因と影響 (レイテンシ)
コールドスタートの緩和策 (プロビジョニング済み同時実行、ウォームアップ戦略)
- FaaSの制限
実行時間制限
メモリサイズ制限
デプロイパッケージサイズ制限
2.2. AWS Lambda MOC
Lambdaの概要と特徴
- Lambda関数の作成と設定
サポートされるランタイム (Node.js, Python, Java, Go, Ruby, .NETなど)
カスタムランタイム
メモリとタイムアウトの設定
環境変数とシークレット管理
デプロイパッケージ (.zip, コンテナイメージ)
- Lambdaのトリガー (イベントソース)
API Gateway (HTTPリクエスト)
S3 (オブジェクト作成/削除)
DynamoDB Streams
SQS (Simple Queue Service)
EventBridge (CloudWatch Events)
その他のAWSサービス
- IAMロールとLambdaの実行権限
- VPC内リソースへのアクセス
- Lambdaの同時実行数とスケーリング
プロビジョニング済み同時実行 (Provisioned Concurrency)
Lambda Layers (ライブラリと依存関係の共有)
Lambda Extensions (モニタリングツールなどとの統合)
- (オプション) Lambda@Edge (CloudFrontエッジでの実行)
2.3. Azure Functions MOC
Azure Functionsの概要と特徴
- 関数アプリ (Function App) とホスティングプラン
従量課金プラン (Consumption Plan)
Premiumプラン, App Serviceプラン
- トリガーとバインディング
トリガー (HTTP, Timer, Queue, Blobなど)
入力バインディングと出力バインディング
- “function.json
ファイル
Durable Functions (ステートフルなオーケストレーション)
Azure Functionsのローカル開発とデバッグ
2.4. Google Cloud Functions MOC
Cloud Functionsの概要と特徴
- 関数の世代 (1st gen vs. 2nd gen)
- トリガーの種類
HTTPトリガー
イベント駆動トリガー (Pub/Sub, Cloud Storage, Firestoreなど)
Cloud Functionsのセキュリティ (IAM)
Cloud Functionsと他のGCPサービスとの連携
2.5. FaaSプラットフォームの比較 (AWS vs. Azure vs. GCP)
ランタイムサポートの比較
設定可能なパラメータ (メモリ, タイムアウト) の比較
エコシステムとサービス統合の比較
料金体系の比較
開発者体験の比較
3. Backend-as-a-Service (BaaS) MOC
- BaaSの定義と目的 (モバイル/Webアプリのバックエンド機能をAPIとして提供)
- BaaSが提供する一般的な機能
認証 (Authentication)
データベース (Database)
ファイルストレージ (File Storage)
プッシュ通知 (Push Notifications)
ホスティング (Hosting)
- 主要なBaaSプラットフォーム
- Firebase (Google) MOC
Firebase Authentication
Cloud Firestore / Realtime Database
Cloud Storage for Firebase
Cloud Functions for Firebase
- AWS Amplify MOC
- Supabase (オープンソースFirebase代替)
- BaaSの利点と欠点 (開発速度向上 vs. ベンダーロックイン、柔軟性の制限)
4. サーバーレスアーキテクチャとデザインパターン MOC
- サーバーレスアーキテクチャの基本原則
ステートレスな関数の設計
イベント駆動
外部サービスによる状態管理
- 一般的なサーバーレスアーキテクチャパターン
- サーバーレスAPIバックエンド MOC
API Gateway + Lambda + DynamoDB (AWSの例)
- イベント駆動データ処理パイプライン MOC
S3 -> Lambda -> SQS -> Lambda -> DynamoDB (AWSの例)
- リアルタイムファイル処理 MOC (画像リサイズ、動画変換など)
- Webアプリケーションバックエンド MOC (認証、データアクセス)
- リアルタイムアプリケーションバックエンド MOC (チャット、IoT)
API Gateway WebSocket API + Lambda
- スケジュール実行タスク (サーバーレスCron) MOC
EventBridge (CloudWatch Events) + Lambda
- サーバーレスなETLジョブ
- ストラングラーFIGパターン (Strangler Fig Pattern) とサーバーレス
- モノリシックアプリケーションの部分的なサーバーレス化
- (オプション) サーバーレスマイクロサービス
- (オプション) イベントソーシングとCQRSのサーバーレス実装
5. サーバーレス開発とツール MOC
- サーバーレスフレームワーク MOC
Serverless Framework (プロバイダー非依存)
AWS SAM (Serverless Application Model)
AWS CDK (Cloud Development Kit) (プログラミング言語によるIaC)
- ローカル開発とテスト
サーバーレスフレームワークのローカル実行機能
SAM CLI
コンテナ (Docker) を利用したLambda関数のローカルテスト
[[モックとスタブの活用]]
- CI/CD for Serverless
サーバーレスアプリケーションのデプロイ戦略
CI/CDパイプラインの構築 (GitHub Actions, GitLab CI, AWS CodePipelineなど)
Blue/Greenデプロイメントとカナリアリリース (Lambdaエイリアス, API Gatewayステージ)
- Infrastructure as Code (IaC) とサーバーレス (Terraform, SAM, Serverless Framework)
6. サーバーレスの運用と管理 MOC
- サーバーレスの監視 (Monitoring) MOC
- 主要なメトリクス (呼び出し回数, 実行時間, エラーレート, スロットリング数)
AWS CloudWatch Metrics
Azure Monitor
Google Cloud's operations suite (旧Stackdriver)
- サーバーレスのロギング (Logging) MOC
AWS CloudWatch Logs
構造化ロギングの重要性
ログ集約と分析
- サーバーレスのトレーシング (Tracing) MOC
分散トレーシングの必要性 (複数のサービス連携)
AWS X-Ray
Azure Application Insights
Google Cloud Trace
- サーバーレスのデバッグ MOC
ログからのデバッグ
トレースデータの分析
リモートデバッグとステップ実行 (一部プラットフォームでサポート)
- アラートと通知
- エラーレートやレイテンシの閾値に基づくアラート設定
- (オプション) サードパーティ監視ツール (Datadog, New Relic, Lumigoなど)
7. サーバーレスのパフォーマンスとコスト MOC
- パフォーマンスの考慮事項
- コールドスタートの分析と対策 (再掲・深掘り)
言語ランタイムの選択 (コンパイル言語 vs. インタプリタ言語)
メモリ割り当てとCPUパフォーマンス
プロビジョニング済み同時実行
ウォームアッププラグイン/スクリプト
依存関係の最小化とパッケージサイズの削減
- タイムアウト設定の最適化
- メモリ設定の最適化
- コネクションプーリング (データベース、外部API)
- コストモデルと最適化
- 従量課金の仕組み (リクエスト数 + 実行時間(GB秒))
- コストの見積もりと計算
- コスト削減戦略
適切なメモリサイズの選択
コードの効率化による実行時間短縮
アーキテクチャの見直し (例: SQSによるバッチ処理)
Savings Plans / コミットメント割引の利用
- コスト監視とアラート
8. サーバーレスセキュリティ MOC
- サーバーレスの攻撃対象領域 (イベントソース、関数、IAMロール、依存関係、バックエンドサービス)
- IAMによる最小権限の原則
各Lambda関数に専用のIAMロールを割り当てる
必要な権限のみを付与する
- イベントインジェクション攻撃とその対策
API Gateway, S3イベントなどからの入力値の厳格な検証
- 依存関係の脆弱性管理 (SCAツールの利用)
- シークレット管理 (Secrets Management)
AWS Secrets Manager, AWS Systems Manager Parameter Store, Azure Key Vault, Google Secret Manager
環境変数に直接シークレットを置かない
- ネットワークセキュリティ
VPC内での関数の実行とセキュリティグループ
API Gatewayの認証・認可機能 (APIキー, IAM, Cognito, Lambda Authorizer)
- ロギングと監視による脅威検知
- OWASP Serverless Top 10 (概要)
9. サーバーレスの利点と欠点 (まとめ) MOC
- 利点
インフラ管理コストの削減
スケーラビリティと弾力性
コスト効率 (従量課金)
開発サイクルの高速化
ビジネスロジックへの集中
- 欠点・課題
ベンダーロックインのリスク
コールドスタートによるレイテンシ
実行時間とリソースの制限
ローカルでのテストとデバッグの複雑さ
状態管理の難しさ
監視とトレーシングの複雑さ (分散システム)
ツールの未成熟さ (過去の話になりつつある)
10. サーバーレスの将来とトレンド MOC
- コンテナ技術との融合 (Cloud Run, Fargateなど)
- エッジコンピューティングとサーバーレス (Lambda@Edge, Cloudflare Workers)
- WebAssembly (Wasm) とサーバーレス (WASI)
- ステートフルサーバーレスの進化 (Durable Functionsなど)
- サーバーレスデータベースの普及 (Aurora Serverless, DynamoDB, Firestore)
- AIOpsによるサーバーレス運用の自動化
- サーバーレスがもたらすアーキテクチャと思考の変化