Terraform構成プラクティス:現場で役立つファイル設計と分割戦略 ver1
TerraformでIaCを記載する前に、プラクティスが気になり調べたところこちらの記事が目に止まり、IaaCに情熱を持ちかなり凄い方のようで、記事の内容を学んでみようと思います
個人的には 構成部分 が特に気になっているので、そちらに重点を置いてみていきます
筆者 Flavius Dinuさん、Sumeet Ninaweさんはどんなお方?
-
Flavius Dinuさん
https://spacelift.io/blog/author/flaviusd
Docker公式からの表彰実績や、HashiCorp認定Terraform Associateを取得している凄い方です 👏
-
Sumeet Ninaweさん
https://spacelift.io/blog/author/sumeetn
スタートアップから大企業まで14年の経験を持つすごいエンジニアです。
クラウドネイティブ技術やDevOpsの分野で活躍していて、**「Let’s Do Tech」**というサイトの創設者でもあります。
3行に要約して各章を説明しいてきます
Terraformの設定ファイルって何?
- TerraformはHCLで書かれた
.tf
ファイルを使ってインフラを定義し、自動化します - これらのファイルは変更を追跡し、ロールバック可能にするためにバージョン管理で管理されるべき
- 💡 github等のバージョン管理ツールを使おう
- 以下は、Terraformファイルがどのように見えるかの例
# main.tf
resource "aws_vpc" "this" {
cidr_block = var.vpc_cidr
}
プロジェクト構造とファイルタイプについて
- Terraformプロジェクトはコードとしてのインフラストラクチャ(IaC)を管理します
- プロバイダのセットアップ・リソース・ステートファイル・変数・モジュールの再利用の要素を含んでいます
- セキュリティ標準・コラボレーション・CICD・も含まれています
- ベスプラクティスに従うために、特定のTerraformファイルがプロジェクトルートに作成されます
Terraformのファイルタイプ
- main.tf — 対象のクラウドに作成されるリソースを定義する
- variables.tf — リソースブロックで使用される変数宣言
- provider.tf — Terraformブロック、S3バックエンド定義、プロバイダ設定、エイリアスを含む
- output.tf — apply操作の成功時に生成される出力
- *.tfvars — 変数のデフォルト値
以下にれいが記載されています
Terrafformプロジェクトに追加される他のファイル
CICD workflow の自動化スクリプトや定義ファイル、README等が追加されます
.gitignore file
githubにアップロードを除外するべきファイルの指定です
大規模プロジェクト向けにTerraformファイルを整理する方法は?
本質的な目的は 「分析しやすく、保守しやすい状態を保つ」ことです!!
-
main.tf が肥大化する問題
- 多くのリソースを管理すると、main.yfにコードが集中して可読性が低下します
-
変数の渡し方
-
.tfvars
ファイルや CLI、環境変数で渡せる。 -
terraform.tfvars
は自動で読み込まれる。 -
.auto.tfvars
も自動で読み込まれる。 -
それ以外のファイルは
var-file
で明示的に指定する必要がある。 -
優先順位は以下の通り:
terraform.tfvars > *.auto.tfvars > 手動で指定したファイル
-
-
ファイル分割の戦略
-
サービス単位:特定のビジネスサービスに必要な構成(DB、ネットワークなど)を1つのファイルにまとめる。
- ⇒ RCA(原因調査)時にどのファイルを見るべきか明確。
- コンポーネント単位:リソースの種類ごとにファイルを分ける(DB、ネットワーク リソースなど)。
-
サービス単位:特定のビジネスサービスに必要な構成(DB、ネットワークなど)を1つのファイルにまとめる。
-
サブディレクトリ注意点
- Terraform はサブディレクトリ内の
.tf
ファイルを自動では読み込まない。 - モジュールを使うことで対応可能(後述予定)。
- Terraform はサブディレクトリ内の
次のブログでは 「Terraformプロジェクトを構造化するためのベストプラクティス」をまとめようと思います
Discussion