🚀

Terraform構成プラクティス:現場で役立つファイル設計と分割戦略 ver1

に公開

https://spacelift.io/blog/terraform-files?utm_source=chatgpt.com#best-practices-for-structuring-terraform-projects

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の設定ファイルって何?

  1. TerraformはHCLで書かれた .tf ファイルを使ってインフラを定義し、自動化します
  2. これらのファイルは変更を追跡し、ロールバック可能にするためにバージョン管理で管理されるべき
    1. 💡 github等のバージョン管理ツールを使おう
  3. 以下は、Terraformファイルがどのように見えるかの例
# main.tf
resource "aws_vpc" "this" {
 cidr_block = var.vpc_cidr
}

プロジェクト構造とファイルタイプについて

  • Terraformプロジェクトはコードとしてのインフラストラクチャ(IaC)を管理します
    • プロバイダのセットアップ・リソース・ステートファイル・変数・モジュールの再利用の要素を含んでいます
  • セキュリティ標準・コラボレーション・CICD・も含まれています
  • ベスプラクティスに従うために、特定のTerraformファイルがプロジェクトルートに作成されます

Terraformのファイルタイプ

  1. main.tf — 対象のクラウドに作成されるリソースを定義する
  2. variables.tf — リソースブロックで使用される変数宣言
  3. provider.tf — Terraformブロック、S3バックエンド定義、プロバイダ設定、エイリアスを含む
  4. output.tf — apply操作の成功時に生成される出力
  5. *.tfvars — 変数のデフォルト値

以下にれいが記載されています

https://spacelift.io/blog/terraform-files?utm_source=chatgpt.com#project-structure-and-file-types-explained

Terrafformプロジェクトに追加される他のファイル

CICD workflow の自動化スクリプトや定義ファイル、README等が追加されます

https://spacelift.io/blog/terraform-files?utm_source=chatgpt.com#additional-file-types-in-terraform-projects

.gitignore file

githubにアップロードを除外するべきファイルの指定です

https://spacelift.io/blog/terraform-files?utm_source=chatgpt.com#gitignore-file

大規模プロジェクト向けにTerraformファイルを整理する方法は?

本質的な目的は 「分析しやすく、保守しやすい状態を保つ」ことです!!

  • main.tf が肥大化する問題

    • 多くのリソースを管理すると、main.yfにコードが集中して可読性が低下します
  • 変数の渡し方

    • .tfvars ファイルや CLI、環境変数で渡せる。

    • terraform.tfvars は自動で読み込まれる。

    • .auto.tfvars も自動で読み込まれる。

    • それ以外のファイルは var-file で明示的に指定する必要がある。

    • 優先順位は以下の通り:

      terraform.tfvars > *.auto.tfvars > 手動で指定したファイル
      
  • ファイル分割の戦略

    • サービス単位:特定のビジネスサービスに必要な構成(DB、ネットワークなど)を1つのファイルにまとめる。
      • ⇒ RCA(原因調査)時にどのファイルを見るべきか明確。
    • コンポーネント単位:リソースの種類ごとにファイルを分ける(DB、ネットワーク リソースなど)。
  • サブディレクトリ注意点

    • Terraform はサブディレクトリ内の .tf ファイルを自動では読み込まない。
    • モジュールを使うことで対応可能(後述予定)。

次のブログでは 「Terraformプロジェクトを構造化するためのベストプラクティス」をまとめようと思います

Discussion