Terraform: Difference between revisions
Jump to navigation
Jump to search
Line 74: | Line 74: | ||
** <code>terraform.tfvars</code> should be considered your way of setting variables for your deployment; if you're still editing <code>variables.tf</code> for every one of your unique deployments, then your stack still needs work before you can consider it ready to be shared with others | ** <code>terraform.tfvars</code> should be considered your way of setting variables for your deployment; if you're still editing <code>variables.tf</code> for every one of your unique deployments, then your stack still needs work before you can consider it ready to be shared with others | ||
* '''A bit murkier:''' Naming the file <code>variables.tf</code> is merely a convention. You could call it <code>yourname.tf</code> and it'll still work just fine. Terraform will read all <code>*.tf</code> files in the directory and treat the contents the same regardless of how the file is named. | * '''A bit murkier:''' | ||
** Naming the file <code>variables.tf</code> is merely a convention. You could call it <code>yourname.tf</code> and it'll still work just fine. Terraform will read all <code>*.tf</code> files in the directory and treat the contents the same regardless of how the file is named. | |||
* '''Murkier still:''' There are other files along with <code>terraform.tfvars</code> that can be used, but just like <code>terraform.tfvars</code>, only used in the root module's directory. | * '''Murkier still:''' | ||
** There are other files along with <code>terraform.tfvars</code> that can be used, but just like <code>terraform.tfvars</code>, only used in the root module's directory. | |||
* Those files follow a naming format of <code>*.auto.tfvars</code> or <code>*.auto.tfvars.json</code>. The former follow the same formatting rules as <code>terraform.tfvars</code>, whereas the latter need to follow standard JSON notation. | * Those files follow a naming format of <code>*.auto.tfvars</code> or <code>*.auto.tfvars.json</code>. The former follow the same formatting rules as <code>terraform.tfvars</code>, whereas the latter need to follow standard JSON notation. |
Revision as of 20:25, 16 July 2024
# wget -qO - terraform.gpg https://apt.releases.hashicorp.com/gpg\
# | sudo gpg --dearmor -o /usr/share/keyrings/terraform-archive-keyring.gpg
#
# sudo echo "deb [arch=$(dpkg --print-architecture)\
# signed-by=/usr/share/keyrings/terraform-archive-keyring.gpg]\
# https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/terraform.list
curl -fsSL https://apt.releases.hashicorp.com/gpg\
| sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
cat << EOF | sudo tee /etc/apt/sources.list.d/hashicorp.list >/dev/null
deb [arch=$(dpkg --print-architecture)\
signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg]\
https://apt.releases.hashicorp.com $(lsb_release -cs) main
EOF
sudo apt update && sudo apt list --upgradeable
sudo apt upgrade && sudo apt install terraform
terraform version
Structure
sdlc/
├─ main.tf # Main Terraform config file
├─ variables.tf # Variable declarations
├─ terraform.tfvars # Variable assigned
├─ outputs.tf # Output definitions
├─ provider.tf # Provider-specific config
├─ terraform.tfstate # Terraform state file
├─ dev.tf # Dev Env config for development
├─ prod.tf # Prod Env config for production
├─ modules/ # Directory for custom modules
│ ├─ module1/ # Custom module 1
│ │ ├─ main.tf # Module-specific Terraform config
│ │ ├─ variables.tf # Module-specific variables
│ │ └─ outputs.tf # Module-specific outputs
│ └─ module2/ # Custom module 2
│ ├─ main.tf
│ ├─ variables.tf
│ └─ outputs.tf
├─ environments/ # Directory for env
│ ├─ dev/ # Development env
│ │ ├─ main.tf # Env specific Terraform config
│ │ ├─ variables.tf
│ │ └─ outputs.tf
│ └─ prod/ # Production env
│ ├─ main.tf
│ ├─ variables.tf
│ └─ outputs.tf
├─ scripts/ # Scripts or utility for IaC
└── README.md
Summary
Playground
References |