Terraformローカル実行環境の個人的ベストプラクティスが出来上がった・・・ぜ!!
— とっしー@インフラエンジニア (@Tocyuki) May 26, 2020
というわけで、Terraformのローカル実行環境の個人的なベストプラクティスなものが出来上がったのでご紹介したいと思います!!
今回やること
- Terraformで作成するリソースはVPCのみ
-
docker-compose
+make
によるTerraformローカル実行環境の構築
ディレクトリ構成
ディレクトリ構成はこんな感じでして、要約するとHashicorpの公式Terraform Dockerイメージを使って、Terraformの実行環境を用意してmake
コマンドでラップするという感じです!
.
├── LICENSE
├── Makefile
├── README.md
├── docker-compose.yml
└── terraform
├── main.tf
└── modules
└── aws
└── network
├── variables.tf
└── vpc.tf
各ファイルについて
vpc.tf
10.0.0.0/16
のVPCを作っているだけ!
resource "aws_vpc" "vpc" {
cidr_block = var.vpc_cidr
enable_dns_support = true
enable_dns_hostnames = true
}
docker-compose.yml
Hashicorp公式Dockerイメージを使ったdocker-compose.yml
!
version: '3.6'
services:
terraform:
image: hashicorp/terraform:0.12.24
container_name: terraform
volumes:
- ./terraform:/terraform
env_file: .env
working_dir: /terraform
ちなみに.env
にはAWSのクレデンシャルを記載するだけです!
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
Makefile
.PHONY: init plan apply destroy check
init: check
@docker-compose run --rm terraform init
plan: check
@docker-compose run --rm terraform plan
apply: check
@docker-compose run --rm terraform apply
destroy: check
@docker-compose run --rm terraform destroy
check:
@docker-compose run --rm terraform fmt -recursive
@docker-compose run --rm terraform fmt -check
@docker-compose run --rm terraform validate
Makefile
のおかげで以下のようにmake
コマンドで簡単にTerraformを実行できます!
➜ terraform-best-executable-env (master) ✗ make check
docker-compose run --rm terraform fmt -recursive
docker-compose run --rm terraform fmt -check
docker-compose run --rm terraform validate
Success! The configuration is valid.
というわけで
こんな感じで最近はAnsibleやPackerなども同様の手法でローカル実行環境を作成してます!
個人的にはかなりすっきりした感じでコマンド実行できて良い感じだなぁと思ってますので是非試して見てください^^
コードはGithubにあげてあって、ついでにGitHub ActionsでTerraformのCI環境を軽く作ってみたところめちゃ簡単にできたので気になる方は見てみてください〜!