ITとかCockatielとか

技術のこととか。飼鳥(オカメインコ)のこととか。気になったこととか。基本的には備忘録。

The Tweleve-Factor App(The 12Factor App)とは

今回は「The Tweleve-Factor App」について。 The 12Factor App と書かれたり、シンプルに 12Factor と言われたりもします。

The Tweleve-Factor App とは?

  • Heroku社の中の人が書いた、SaaS(Software as a Service)を作り上げるための方法論をまとめたもの。
  • その名の通り、12要素でまとめられている。
  • 日本語版も日本語版が公開されている。
  • クラウドアプリケーションのベストプラクティスや、マイクロサービスの話題の中で引き合いに出されることが多い。

f:id:sik_bug:20191220231556p:plain

どんな内容なの?

上記リンク先を見てもらえればよいが、それぞれ簡単にまとめる。

I. コードベース

バージョン管理されている1つのコードベースと複数のデプロイ f:id:sik_bug:20191220231607p:plain

II. 依存関係

依存関係を明示的に宣言し分離する

III. 設定

設定を環境変数に格納する

IV. バックエンドサービス

バックエンドサービスをアタッチされたリソースとして扱う f:id:sik_bug:20191220231619p:plain

V. ビルド、リリース、実行

ビルド、リリース、実行の3つのステージを厳密に分離する f:id:sik_bug:20191220231629p:plain

VI. プロセス

アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する

VII. ポートバインディング

ポートバインディングを通してサービスを公開する

VIII. 並行性

プロセスモデルによってスケールアウトする f:id:sik_bug:20191220231644p:plain

IX. 廃棄容易性

高速な起動とグレースフルシャットダウンで堅牢性を最大化する

X. 開発/本番一致

開発、ステージング、本番環境をできるだけ一致させた状態を保つ

XI. ログ

ログをイベントストリームとして扱う

XII. 管理プロセス

管理タスクを1回限りのプロセスとして実行する

難しい内容か?

いつ作られたのか?

ソースコードGitHub(heroku/12factor)で公開されている。 最初のコミットは2011年。 f:id:sik_bug:20191220231656p:plain

その後、公開されたのは2012年である。 既に数年経過しているが、いまだに参照は多いものと思われる。

ちょっと古くない・・・?

  1. One codebase, one application(1つのコードベース、1つのアプリケーション)
  2. API first(APIファースト)
  3. Dependency management(依存関係管理)
  4. Design, build, release, and run(設計、構築、リリース、実行)
  5. Configuration, credentials, and code(構成、資格情報、およびコード)
  6. Logs(ログ)
  7. Disposability(廃棄可能性)
  8. Backing services(バッキングサービス)
  9. Environment parity(環境パリティ
  10. Administrative processes(管理プロセス)
  11. Port binding(ポートバインディング
  12. Stateless processes(ステートレスプロセス)
  13. Concurrency(並行性)
  14. Telemetry(テレメトリー
  15. Authentication and authorization(認証と承認)

参考