็ฐๅขใๅขใใฆใใใจใใฏใใกใใใใชใฝใผใน้ใฎๅฝฑ้ฟๅบฆใๆธใใใใใซstateใๅๅฒใใใจใใใฎใฏTerraformใๅฉ็จใใฆใใใจใใใใใใจใ ใจๆใใพใใ
ใใฎstateใๅขใใใจใใฎๅ้กใซๅฏพๅฆใใใใใstate็ฎก็ใฎๆนๆณใใพใจใใฆใฟใพใใใใใฒๅ่ใซใใฆใฟใฆใใ ใใ
stateใๅขใใใจ่ตทใใใใจ
ใพใใใใใใไฝใ่ตทใใใญใใจใใๆนใใใใใจๆใใฎใงใใใใใ่งฃ่ชฌใใพใใ
ไพใใฐ็ฐๅขใ่คๆฐไฝใๅ ดๅใmoduleใไฝฟใใฐmain.tfใฏๅ
ฑ้ๅใงใใพใใใprovider.tfใbackend.tfใterraform.tfใชใฉใฎ่จญๅฎใฏใstateใๆใค็ฐๅขใใจใซ็จๆใใๅฟ
่ฆใใใใพใใ
็ต่ซ
็ต่ซใใๆธใใพใใ
็ฎก็ๆนๆณใฏใฟใคใใซใฎ้ใใmodulesใbackend-configใworkspacesใTerragruntใฎ4ใคใงๆฏ่ผใใฆใฟใพใใใ
ไธ่จ4ใคใฎๆฏ่ผ็ตๆใๅบๆฌใฏmodulesใฎใฟใฎ้็จใงใใใจๆใใพใใใใใฎไธใง็ฐๅขใๅคง้ใซๅขใใใใจใจใ็ฐๅขๅทฎๅใใใ็จๅบฆ่ฆ่พผใใใฎใงใใใฐใTerragruntใๅฐๅ ฅใใฆใใใใ ใใใจใใใฎใ็งใฎ็ต่ซใงใใ
backend-configใworkspacesใฏไฝฟใใชใใจใใใใจใฏใชใใใฎใฎใๅฉ็จใทใผใณใฏใใชใ้ๅฎใใใใใชใจๆใใพใใ
ๆฏ่ผ่กจ
ไฝใฃใฆใฟใพใใใ
- rootๅ ฑ้ๅ๏ผroot moduleใงใใใซๅใใณใผใใๆธใใชใ๏ผDRY๏ผใงๆธใใ
- ใณใผใ้๏ผ็ด็ฒใชใณใผใ้ใๅฐใชใๆธใใงใใใ
- ่ช็ฑๅบฆ๏ผๅ ฑ้ๅใใใใจใงๅคฑใใใ่ช็ฑๅบฆ / ใพใใฏใใฎ่ช็ฑๅบฆใๅฉ็จใใใใใฎๆ้
| ้ ็ฎ | modules | backend-config | workspaces | Terragrunt |
|---|---|---|---|---|
| rootๅ ฑ้ๅ | ร | โณ | โฏ | โฏ |
| ใณใผใ้ | ร | โณ | โฏ | โณ |
| ่ช็ฑๅบฆ | โฏ | ร | โณ | โณ |
็ฎก็ๆนๆณ
ใงใฏๅฎ้ใซ4ใคใฎ็ฎก็ๆนๆณใงใใใmodulesใbackend-configใworkspacesใTerragruntใ็ขบ่ชใใฆใใใพใใใใ
ไปๅไฝฟใฃใใณใผใใฏใใกใใฎใชใใธใใชใง็ขบ่ชใงใใพใใ
modules
ใพใใฏmodulesใใใงใใใใใฏ็ฎก็ๆนๆณใจใใใใในใฆใฎๅบๆบใซใชใใใใใฉใซใใฟใใใชใใฎใ ใจๆใฃใฆใใ ใใใๅพ่ฟฐใฎ็ฎก็ๆนๆณใใคใกใผใธใใใใใชใใใใซใใใฆๆธใใฆใใใพใใ
ใใฃใฌใฏใใชๆงๆ
.
โโโ env1
โ โโโ main.tf
โ โโโ provider.tf
โ โโโ terraform.tf
โ โโโ terraform.tfstate
โโโ env2
โ โโโ main.tf
โ โโโ provider.tf
โ โโโ terraform.tf
โ โโโ terraform.tfstate
โโโ modules
โโโ s3-bucket
โโโ main.tf
โโโ variables.tf
ใstateใๅขใใใจ่ตทใใใใจใใง่งฃ่ชฌใใ้ใใใใใคใใฎใใฃใฌใฏใใชใ้่คใใฆใใพใฃใฆใใพใใใพใใใใใฏไธญ่บซใใพใฃใใๅใใใกใคใซใงใใๅฎ้ใซใฏenv้
ไธใซ.terraformใใใฃใฆใใใซๅคงๅฎน้ใฎproviderใฎใใกใคใซใๅญๅจใใพใใ
backend-config
ๆฌกใฏbackend-configใงใใใใใฏinitใใใฐstateใ่ช็ฑใซๅใๆฟใใใใจใใงใใๆฉ่ฝใงใใ
ใใฃใฌใฏใใช
.
โโโ backend.tf
โโโ backends
โ โโโ bucket_1.backend
โ โโโ bucket_2.backend
โโโ main.tf
โโโ provider.tf
โโโ terraform.tf
โโโ terraform.tfstate.d
โโโ tfstate
โ โโโ bucket_1.tfstate
โ โโโ bucket_2.tfstate
โโโ tfvars
โ โโโ bucket_1.tfvars
โ โโโ bucket_2.tfvars
โโโ variables.tf
ใณใใณใ
terraform init -backend-config=backends/bucket_1.backend
terraform apply -var-file=tfvars/bucket_1.tfvars
tfvarsใๆใคใจใใกใคใซใ2ใคไฝใใชใใจใใใชใใใใณใใณใๅ ใงใใใกใคใซๆๅฎใๅฟ ่ฆใซใชใใฎใงใใพใใใใจใฏ่จใใชใใใใงใใ้ใซ่จใใฐๅคๆฐใๆใใชใๅฎๅ จๅไธใฎ็ฐๅขใ่ค่ฃฝใใใใใใฎใงใใใฐใไฝฟใฃใฆใใใใใใงใใ
workspaces
ๅๆใจใใฆใ็ฐๅขใใใฃใกใๅใใใ็จ้ใซใฏๅใใชใใฎใงใใฉใคใใซไฝฟใใใฎใ ใจ่ใใพใใใใ
้่ฆ:ใฏใผใฏในใใผในใฏใใทในใใ ใฎๅ่งฃใใๅๅฅใฎ่ช่จผๆ ๅ ฑใจใขใฏใปในๅถๅพกใๅฟ ่ฆใจใใใใใญใคใกใณใใซใฏ้ฉใใฆใใพใใใ่ฉณ็ดฐใจๆจๅฅจใใใไปฃๆฟๆๆฎตใซใคใใฆใฏใTerraform CLI ใใญใฅใกใณใใฎใใฆใผในใฑใผในใใๅ็ งใใฆใใ ใใใ
ใใฃใฌใฏใใช
.
โโโ backend.tf
โโโ main.tf
โโโ provider.tf
โโโ terraform.tf
โโโ terraform.tfstate.d
โ โโโ 3
โ โ โโโ terraform.tfstate
โ โโโ 4
โ โโโ terraform.tfstate
โโโ tfvars
โ โโโ bucket_3.tfvars
โ โโโ bucket_4.tfvars
โโโ variables.tf
ใณใใณใ
terraform init
terraform workspace new 3
terraform workspace select 3
terraform apply -var-file=tfvars/bucket_3.tfvars
ใใฃใฌใฏใใชใใณใใณใใฏใใใใใใใใฆ็ถบ้บใชใ ใใซๆใใใงใใญใไฝฟใๅๆ่ชไฝใฏใใใใใชใฎใงใๅไบบใงไฝฟใฃใใใใตใผใในใจใใฆ้็จใใชใใใฎใชใฉใซใฏไฝฟใฃใฆใใใใจๆใใพใใ
Terragrunt
Terragruntใฏไปใฎ็ฎก็ๆนๆณใจใฏๅฐใๆฏ่ฒใ้ใฃใฆใใฆใใพใใคใณในใใผใซใๅฟ ่ฆใงใใใพใ่จ่ฟฐใฎไปๆนใ็ฌ็นใชใใฎใซใชใฃใฆใใใฎใงใใใฎ็่งฃใๅฟ ่ฆใซใชใใพใใ
ใใฃใฌใฏใใช
.
โโโ bucket_5
โ โโโ terragrunt.hcl
โโโ bucket_6
โ โโโ terragrunt.hcl
โโโ modules
โ โโโ s3-bucket
โ โโโ main.tf
โ โโโ variables.tf
โโโ root.hcl
ใณใใณใ
# ็ฐๅขๅไฝ
terragrunt init
terragrunt apply
# ็ฐๅขๅ
จไฝ
terragrunt run-all init
terragrunt run-all apply
Terragruntใๆงๆใใณใใณใใฏใทใณใใซใงใใๅ
ฑ้ๅใใใใใฎใฏroot.hclใๅบๆใฎๅคๆฐใชใฉใฏterragrunt.hclใซๆธใใฆใใพใใใพใใrun-allใง็ฐๅขไธๆฌๆไฝใใงใใใใใพใใ
ใใ ใใณใผใใฎไธญ่บซใๅฐใ็ฌ็นใชใฎใงๅฎ้ใซใฟใฆใฟใพใใใใ
remote_state {
backend = "local"
config = {
path = "${path_relative_to_include()}/terraform.tfstate"
}
}
# ใใญใใคใใผใญใฃใใทใฅใฎๅ
ฑๆ่จญๅฎ
terraform {
extra_arguments "plugin_cache" {
commands = [
"init",
"plan",
"apply",
"destroy",
]
env_vars = {
TF_PLUGIN_CACHE_DIR = "${get_parent_terragrunt_dir()}/.terraform-plugin-cache"
}
}
}
generate "versions" {
path = "versions.tf"
if_exists = "overwrite"
contents = <<-EOT
terraform {
required_version = "= 1.14.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "6.23.0"
}
}
backend "local" {}
}
EOT
}
generate "provider" {
path = "provider.tf"
if_exists = "overwrite"
contents = <<-EOT
provider "aws" {
region = "ap-northeast-1"
profile = "test-profile"
}
EOT
}
include "root" {
path = find_in_parent_folders("root.hcl")
}
terraform {
source = "../modules/s3-bucket"
}
inputs = {
name = "5"
}
ใใใใใใใ ใใใงใใใใใEOTใใใฃใใใใฆๅฐใใฏใปใใใใพใใใพใใproviderใใคใใชใฎๅ
ฑๆใซใฏใใณใกใณใใขใฆใใฎ# ใใญใใคใใผใญใฃใใทใฅใฎๅ
ฑๆ่จญๅฎ็ฎๆใฎ่จ่ฟฐใๅฟ
่ฆใงใใใ
ไปฅไธใงใ๏ผ็ต่ซใฏๅ้ ญใซ่จ่ฟฐใใใฎใงใใใพใง่ชญใใ ใใๆนใใฆ็ต่ซใ่ชญใใงใใใ ใใใฐใจๆใใพใใ
ๆฌ่จไบใง่จ่ผใใ็ฎก็ๆนๆณใ็่งฃใใฆใ่ชๅใฎ็ฐๅขใซ้ฉๅใชstate็ฎก็ๆนๆณใ้ธๆใใพใใใ
โป ่ฃ่ถณ / Terraform Stacks
HCP TerraformใงใใใฐใTerraform Stacksใจใใใฎใใใใพใใๅ่ใพใงใซใ
Comments
Let's comment your feelings that are more than good