The Twelfe Factors
Webアプリケーション や Software as a Service と呼ばれる。Twelve-Factor Appは、次のようなSoftware as a Serviceを作り上げるための方法論である。
もともとはコンテナ活用、SaaS開発を実現するために、という指針だが今となってはコンテナネイティブ自体のほうが馴染みがあるので、個人的にざっくり要約すると以下。
アプリ=Dockerコンテナで提供できるようにする
同じバイナリ(コンテナイメージ)でdev, stg, prodで使う
実装をガイドラインの説明にするようで順番が逆だが、必然的にポートフォワーディング、環境変数、コードベース、並行、廃棄などをある程度満たす形になる。(元々そのためにどうするかというガイドだが…)
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
II. 依存関係
依存関係を明示的に宣言し分離する
III. 設定
設定を環境変数に格納する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
VII. ポートバインディング
ポートバインディングを通してサービスを公開する
VIII. 並行性
プロセスモデルによってスケールアウトする
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
XI. ログ
ログをイベントストリームとして扱う
XII. 管理プロセス
管理タスクを1回限りのプロセスとして実行する