
Learn Terraform and infrastructure as code to define, automate, and manage AWS resources from a beginner to intermediate level, using code, GitHub workflows, and best practices.
Develop a solid understanding of TerraForm and infrastructure as code and apply these concepts to build infrastructure with TerraForm, guided by best practices from an experienced DevOps instructor.
Explore infrastructure as code by writing and managing infrastructure with code, leveraging GitHub and JIRA for documentation, pull-request reviews, and auditability, while using Terraform for scalable deployments with dry runs.
Download the Windows Terraform binary from the releases link, unzip it, and add its folder to your path environment variable. Then run Terraform version to confirm 1.2.4 is installed.
Install Terraform on Mac or Linux by downloading the single binary, unzipping it, moving it to /usr/local/bin, updating PATH, and running Terraform version to confirm 1.2.4 is active.
Create an AWS IAM user with programmatic access, generate an access key and secret key, and configure a credentials profile for Terraform to read state and manage infrastructure.
Learn to use the Terraform core workflow—init, plan, apply, and destroy—via the CLI to provision and manage AWS infrastructure, validate changes, and track state with code and GitHub workflows.
Terraform workflows by inspecting provider and locals files, initializing projects, planning and applying changes, and destroying resources to align AWS EC2 infrastructure with code.
Terraform and IaC code serve as the source of truth for infrastructure, documenting the desired state and preventing drift from manual changes.
Discover how Terraform plan uses a dry run and execution plan to preview in-place updates, complete updates, or new resource creation, guided by the state file and provider.
Apply permanently commits infrastructure changes by running a plan in the background, comparing code to the current state, updating the state file, and confirming before applying.
Master advanced terraform init by understanding reconfigure, upgrade, and migrate state flags, how init caches providers and modules, initializes the state backend, and manages the dependency log.
Discover how Terraform providers act as plug-ins that connect Terraform to cloud platforms and tools, exposing resources, enabling multi cloud, and managing provider versions, binaries, and the HashiCorp registry.
Configure terraform providers with the required providers and provider blocks, using the local name, source, and version constraints, set the AWS region to us west, and authenticate with a profile.
Terraform dependency lock file records the provider version downloaded on the first Terraform init to ensure consistent, shared builds across teams by storing it in the GitHub repository.
Understand Terraform state: the state file maps resources, stores metadata, and enables drift checks and performance; contrast local versus remote state and how S3 remote storage enhances collaboration and security.
Configure terraform to use remote state in an s3 back end by defining bucket, key, region, in the top-level terraform block, then init and apply to store the state remotely.
Explore how to safely inspect, move, remove, and import resources in Terraform state using state commands, back up and push changes to a remote backend, and avoid resource duplication.
Import resources into the Terraform state to manage infrastructure created manually, using the proper resource address and import syntax to update the state without recreation.
Learn to write Terraform code in the HashiCorp Configuration Language, understand resource blocks and inputs, and apply best practices for readable, reusable infrastructure on AWS.
Build a new Terraform project to deploy serverless service that generates a random number with Lambda, stores results in Dynamo DB, and exposes a public API Gateway endpoint in us-west-2.
Initialize a new Terraform project, configure a remote S3 backend, define the AWS provider and region, set up locals with reusable tags, and format files with Terraform fmt.
Learn to create a private S3 bucket with Terraform, upload Lambda code as a zipped artifact using a data source, and manage resource dependencies end-to-end.
Define a Terraform DynamoDB table with pay-per-request mode, a single primary key random ID, and use merge to tag resources, preparing for the upcoming Lambda and API gateway steps.
Create an AWS lambda with Python 3.8, configure an IAM role with S3, DynamoDB, and CloudWatch permissions, and deploy via Terraform to test the API gateway.
Explore Terraform hcl concepts, including arithmetic, comparison, and logical operators, plus string interpolation and conditional expressions. Use count to control resource creation and access built-in functions like merge, max, min.
Explore how Terraform defines resources in code, applies changes to real environments, tracks state, detects drift, and uses lifecycle blocks like create before destroy, prevent destroy, and ignore changes.
Learn how data sources bring values into Terraform, acting as a templating engine to generate JSON policy documents and to pull in state from other projects, including AWS AMI details.
Deploy a production Terraform environment by separating development and production folders, using remote state, and applying region-specific configurations with modules for scalable infrastructure.
Learn how Terraform modules group resources into reusable packages to enforce best practices, enable tested, adaptable infrastructure, and simplify deployments across networks, apps, and routing.
Explore how Terraform module variables drive dynamic configurations, covering root and child modules, required versus optional inputs, data types, variable blocks, defaults, validations, and attributes like sensitive and nullable.
Set up a Terraform module project by creating a modules directory with VPC, VPC subnets, and compute resources. Establish dev and prod route modules and separate state backends.
Build a Terraform VPC module creating a VPC, optional internet gateway, and public and private routing tables. Expose outputs for VPC ID and routing table IDs for development and production.
Create a Terraform VPC subnets module that generates public and private subnets from a single list of objects. Use for_each to assign CIDR, name, availability zone, and route table associations.
Continue learning TerraForm and Terraform by building your own modules, exploring advanced data types, and evaluating open source tools like TerraForm Docs, Atlantis, Space Lift, and Infocus for cost awareness.
IaC is not a trend any longer, but the de-facto way in how companies of all sizes are managing their infrastructure. Terraform is the most popular tool in the IaC landscape, and is an extremely in demand skill. Don't believe me? Search for any Infrastructure engineer, Devops and SRE roles, and you'll see how often Terraform gets mentioned.
With this course, I will ramp you up from someone with no prior experience, to an intermediate user ready to create and manage infrastructure in Terraform. The goal is to make sure that you understand the inner workings of Terraform, and some of the most important concepts like what a Provider is, how does Terraform State work, and how to develop Modules to create infrastructure.
We will be using AWS as our cloud provider, to demonstrate the power of Terraform and what it can do. However, the skills you learn in this course is directly transferable to any cloud provider and platform. Prior experience in AWS is not required but helpful.
Learn the best practices of Terraform and what makes up a good Infrastructure engineer. Develop your own Modules to create reusable infrastructure, and understand how Modules are designed for efficiency. Take what you've learned in this course and directly apply it to your day to day work. Speak about Terraform confidently and comfortably.
This course gives you the foundations to continue learning about Terraform. This is a journey, not a one time stop gap.