0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Terraform】ファイル構成まとめてみた

0
Posted at

はじめに

今回は、Terraformを使用する際に見かける各ファイルについてまとめてみました。
少しでもご参考になれば幸いです。

ファイルはTerraformコマンド実行時に作成/更新されるため、前提知識としてこちらの記事もぜひご参照ください。

全体構成イメージ

project/
├── main.tf
├── provider.tf
├── variables.tf
├── outputs.tf
├── dev.tfvars
├── stg.tfvars
├── prod.tfvars
├── backend.tf
├── modules/
│   ├── vpc/
│   │   ├── main.tf       
│   │   ├── variables.tf  
│   │   ├── outputs.tf
│   │
│   └── ec2/
│       ├── ec2.tf       
│   
├── terraform.tfstate
├── terraform.tfstate.backup
├── .terraform/
├── .terraform.lock.hcl
└── .gitignore

各ファイルまとめ

① .tf(メインの定義ファイル)

インフラの「設計書」そのものです。

以下のセクションで構成されています。
・Provider(操作対象の外部サービスを定義)
・Resource(EC2, S3など)
・Module(再利用構成)
・Backend(state保存先)

同じディレクトリ内の .tf は最終的に自動で一つに結合されます。
→そのため、ファイル名は自由です(例:main.tf, vpc.tf, ec2.tf)
※main.tfがよく使われますが、必須ではありません

実務では、.tfファイルは以下のように責務ごとに分割して定義されます。

main.tf        # 全体のエントリ(わかりやすくするため)
provider.tf    # provider定義
vpc.tf         # ネットワーク定義
ec2.tf         # サーバー定義
variables.tf   # 変数定義
outputs.tf     # 出力定義

② .tfvars(変数値ファイル)

.tfで定義したTerraformの変数(variable)に値を渡すための専用ファイルです。

使用例:

variables.tf
variable "instance_type" {
  type = string
}

variable "ami" {
  type = string
}
terraform.tfvars
instance_type = "t3.micro"
ami           = "ami-0abcdef1234567890"

環境ごとの差分管理(dev/prodなど)に最適です。

dev.tfvars
stg.tfvars
prod.tfvars

基本は-var-fileオプションで明示的に読み込みますが、ファイル名をterraform.tfvarsもしくは*.auto.tfvarsにすると、自動読み込みさせることができます。

zsh
// dev.tfvars使用時
terraform apply -var-file=dev.tfvars

// terraform.tfvars/*.auto.tfvars使用時
terraform apply

.tfvarsには機密情報を記載するケースが多いため、Git管理に注意が必要です(.gitignore推奨)

.gitignore
*.tfvars

また、本番環境では機密情報は外部から取得するのが推奨されています。

data "aws_secretsmanager_secret_version" "db" {
  secret_id = "prod/db/password"
}

③ .tfstate(状態ファイル)/.tfstate.backup

実際に作られているインフラの状態を記録するファイルです。
初回はterraform applyコマンド実行時に作成されます。
このファイルが、Terraformが「差分」を判断する基準となります。
破損すると復旧が困難なため、手動編集は基本NGです。
また、terraform destroyコマンド実行時に.tfstate.backupファイルが作成されます。

これらファイルも機密情報を含むため、Git管理に注意が必要です(.gitignore推奨)

.gitignore
*.tfstate
*.tfstate.backup

④ .terraform.lock.hcl(ロックファイル)

使用するProviderのバージョンを固定するためのファイルです。
npmのpackage-lock.jsonと同じ役割を持っています。

.terraform.lock.hcl
provider "registry.terraform.io/hashicorp/aws" {
  version = "5.0.0"
}

また、Terraformはコマンド実行の際にProviderへの接続情報としてこのファイルを参照しています。

このファイルはチームで同じバージョンを使うためGit管理します。

⑤ .terraform/ ディレクトリ

Terraformの内部管理用フォルダです。
providerのダウンロードファイルや、moduleのキャッシュなどが含まれます。

このディレクトリは環境依存かつ容量が大きいため、Git管理しません

.gitignore
.terraform/
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?