Terraform Summary: Key Concepts and Workflow
Day 1: Introduction to Terraform
- Terraform Files (.tf): Used to define infrastructure as code.
- On-Demand vs. Reserved Resources: On-demand for unplanned needs, reserved for planned future use.
-
File Transfer: Use
scp
to copy files from a local machine to a Linux server using a PEM key for authentication. -
Terraform Init: Initializes the working directory, creating
.terraform
(environment setup) and a lock file (plugin version control). -
Terraform Blocks:
- Terraform Block: Specifies the provider (e.g., AWS, GCP).
-
Provider Block: Defines the region (e.g.,
us-east-1
). - Resource Block: Defines the resources to be created.
- Multi-Region VPC: Multiple VPCs in different regions can be created using aliases.
Day 2: Immutability and Resource Management
-
Terraform Apply vs. Plan: You can run
terraform apply
beforeterraform plan
, but it’s not recommended. - Resource Modification: Small changes (e.g., instance type) are modified in-place, while major changes (e.g., OS change) result in resource recreation.
-
Lifecycle Rules:
- Create Before Destroy: Ensures new resources are created before old ones are destroyed.
- Prevent Destroy: Prevents accidental deletion of resources.
-
Count: Used to create multiple instances of a resource (e.g.,
count = 5
creates 5 EC2 instances). -
For Each: Used for creating resources like S3 buckets where
count
is not applicable.
Day 3: Variables and State Management
-
State File: Stores the current state of the infrastructure. Changes made manually in the cloud console are not reflected in the state file unless
terraform refresh
is run. - Lifecycle Ignore Changes: Prevents Terraform from overwriting manual changes (e.g., tags).
- Depends On: Ensures resources are created in a specific order.
-
Variables: Declared in
var.tf
to avoid hardcoding values. Can be overridden via CLI or environment variables. -
Variable Precedence: Terraform looks for variables in the following order:
auto.tfvars
terraform.tfvars
- Environment variables
variable.tf
main.tf
Day 4: Advanced Variables and Outputs
- Lists and Maps: Used to define multiple values for variables (e.g., instance types).
-
File Variables: Use
file()
to include scripts or configuration files in resources. -
Sensitive Data: Mark variables as
sensitive = true
to hide sensitive information. -
Outputs: Use
output.tf
to display resource attributes (e.g., public IP of an EC2 instance). -
Local Variables: Use
locals
to define reusable values (e.g., tags).
Day 5: State Locking, Provisioners, and Workspaces
- State Locking: Prevents concurrent operations on the same state file using DynamoDB and S3.
-
Terraform Commands:
-
terraform show
: Displays the state file content. -
terraform state list
: Lists resources in the state file. -
terraform taint/untaint
: Marks a resource for recreation or removes the mark. -
terraform apply -target
: Applies changes to a specific resource.
-
-
Provisioners:
- Remote: Executes commands on a remote machine.
- Local: Executes commands locally.
- File: Transfers files to or from a remote machine.
- Workspaces: Used to manage multiple environments (e.g., prod, dev, staging) within the same configuration.
Key Takeaways
- Terraform is a powerful tool for managing infrastructure as code, offering flexibility through variables, lifecycle rules, and state management.
- Use
count
andfor_each
to manage multiple resources efficiently. - Leverage
output.tf
to extract and display resource attributes. - State locking and workspaces help manage complex environments and prevent conflicts.
- Provisioners allow for additional configuration and file transfers during resource creation.
This summary provides a high-level overview of Terraform's core concepts and workflows, making it easier to understand and implement infrastructure as code in real-world scenarios.
Top comments (0)