YouTube Summaries | Complete Terraform Course - From Beginner to Pro (Parts 1 - 3)
October 28th, 2023
This summary will cover the first 3 parts of the Complete Terraform Course video seen above. As with other summaries, I like to create these to further cement the learnings from the original video or article discussed, so while this summary will hopefully be somewhat helpful for you, I always recommend that you watch the original video discussed.
TL;DW:
- Terraform automates cloud infrastructure with code.
- Basic terraform commands include
init,
plan
apply
anddestroy
. - Providers link to cloud platforms.
- State files store infrastructure status.
Plan
shows changes before applying.Apply
makes changes.Destroy
removes resources.- Terraform Cloud offers ease but may have a cost.
- Self-managed backends, like AWS S3, offer control.
Introduction to Terraform:
- Terraform as an Infrastructure as Code (IaC) tool used to automate the provisioning and management of cloud resources.
- Terraform is declarative, which allows users to define the desired infrastructure state in code.
- Terraform supports various cloud providers, making it a versatile tool for infrastructure management.
Understanding Terraform Concepts:
- Terraform configurations are written in HashiCorp Configuration Language (HCL).
- Providers are introduced as plugins that enable Terraform to interact with various cloud platforms.
- Terraform state files store information about the managed infrastructure.
Terraform Init Command:
-
Initialization of a Working Directory: When you start a new Terraform project or work on an existing one, terraform
init
is the first step. It sets up your working directory for Terraform operations. -
Downloading Providers: Terraform uses “providers” to interact with different cloud or infrastructure platforms (e.g., AWS, Azure, or VMware). During the
init
process, it downloads the required provider plugins from the official Terraform Registry or other configured sources. -
Local Backend Initialization: If you’ve configured a local backend for your project (not recommended for collaborative or production use),
init
prepares the backend settings and structure. The local backend stores your state file on your local machine. -
Remote Backend Initialization: If you’re using a remote backend (a more robust approach, suitable for teams and production environments),
init
establishes the connection to the remote storage location. This may involve configuring settings such as AWS S3, Google Cloud Storage, or Terraform Cloud, depending on the backend you’re using. -
Downloading Modules: If your Terraform project includes modules (reusable configurations),
init
retrieves and installs these modules and their dependencies. -
Creating Hidden Directories:
init
generates a.terraform
directory in your working directory, which includes subdirectories for providers, modules, and other relevant Terraform files. These directories are used during the planning and applying phases. -
Initializing Workspace: In Terraform Cloud,
init
associates your local project with a remote workspace, allowing for collaboration, state storage, and version history.
Terraform State File:
- The Terraform state file is the representation of the infrastructure’s current state, using JSON format.
- It contains information about resources and data objects managed by Terraform.
- Securing and encrypting the state file is important, especially due to sensitive data that it stores.
Terraform Plan and Apply Commands:
- The
plan
command provides a comparison between the desired state defined in Terraform configuration and the actual state in the Terraform state. - An execution plan shows the differences between the desired and actual states.
- The
apply
command actually makes changes to the infrastructure based on the plan.
Terraform Destroy Command:
- The
destroy
command is a way to clean up and remove all resources associated with a project. destroy
should not be run for live projects but only for cleanup at the end.
Local vs. Remote Backend:
- Remote backends allow for encryption, collaboration, and automation possibilities.
- Terraform Cloud and self-managed backends (e.g., AWS with S3 and DynamoDB) are two primary remote backend options
- Bootstrapping allows the provisioning of remote backend resources with Terraform.