ステートレス
プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則
設計サーバーレス
ステートレスとは
ステートレスは、プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則である。Twelve-Factor App の第 6 原則。Lambda は本質的にステートレスで、水平スケーリングと耐障害性の基盤。
ステートフル vs ステートレス
| 観点 | ステートフル | ステートレス |
|---|---|---|
| 状態の保持 | プロセス内 | 外部ストレージ |
| スケーリング | 困難 (状態の同期が必要) | 容易 (インスタンスを追加するだけ) |
| 障害復旧 | 状態が失われる | 別のインスタンスで即座に復旧 |
| テスト | 状態に依存して複雑 | 入出力だけでテスト |
状態の保存先
| 状態 | 保存先 |
|---|---|
| セッション | DynamoDB |
| キャッシュ | ElastiCache (Redis) |
| ファイル | S3 |
| 一時データ | Lambda /tmp (エフェメラル) |
| ジョブの進捗 | Step Functions |
Lambda のステートレス性
リクエスト 1 → Lambda インスタンス A → DynamoDB
リクエスト 2 → Lambda インスタンス B → DynamoDB
リクエスト 3 → Lambda インスタンス C → DynamoDB
→ どのインスタンスが処理しても同じ結果
→ インスタンスが破棄されてもデータは DynamoDB に残る
ステートレスのメリット
インスタンスが状態を持たないため、水平スケーリングでインスタンスを自由に増減できる。1 つのインスタンスが壊れても他に影響がなく、耐障害性が高い。テストも入出力だけで完結し、デプロイ時に新旧インスタンスが共存できるため安全にリリースできる。
全体像を把握するには関連書籍も有用。