TL;DR
HashiCorp が開発した Infrastructure as Code のツール。クラウドやオンプレミスのリソースを人が読める設定ファイルで定義し、同じワークフローで構築、変更、バージョン管理する。
なぜ必要か
公式ドキュメントによると、Terraform はインフラを変更する前に実行計画を作り、承認を求めるので、安全に変更できる。最終的にあるべき状態を宣言的に書けば、そこに至る手順は Terraform が決める。設定ファイルはバージョン管理に置けるので、チームで共有しやすい。
仕組み
Terraform は、各サービスの API を通じてリソースを操作する。API とのやり取りはプロバイダというプラグインが受け持つ。
設定は HCL で .tf ファイルに書き、次の 3 段階で反映する。
- Write: リソースを定義する
- Plan: 設定と既存のインフラを比べ、作成、更新、削除する内容の実行計画を作る
- Apply: 承認された計画を、依存関係の順に実行する
実際のインフラはステートファイルで追跡し、設定と比べて変更の内容を決める。依存グラフを作るので、互いに依存しないリソースは並行して作られる。再利用できる構成はモジュールにまとめ、公開されたプロバイダやモジュールは Terraform Registry から探せる。