ステートレス

プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則

設計サーバーレス

ステートレスとは

ステートレスは、プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則である。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 つのインスタンスが壊れても他に影響がなく、耐障害性が高い。テストも入出力だけで完結し、デプロイ時に新旧インスタンスが共存できるため安全にリリースできる。

全体像を把握するには関連書籍も有用。

関連用語