Detailed Course Outline
Part 1: Infrastructure as Code
In this section, we will introduce the benefits that Infrastructure as Code (IaC) can bring to organizations and how IaC fits within modern DevOps best practices.
- DevOps and GitOps
 - Principles of Infrastructure as Code
 - Applying Infrastructure as Code in DevOps
 - Infrastructure as Code best practices
 - Benefits of Infrastructure as Code
 - The case for Terraform
 
Part 2: Terraform Overview
This section provides an overview of Terraform concepts and vocabulary and instructs how Terraform manages infrastructure configuration in cloud environments.
- Terraform configuration language overview
 - Terraform CLI
 - The lifecycle of a configuration
 - State storage – local versus remote
 - Connecting to Azure
 
Hands-on Labs:
- Setting up a Terraform project
 
Part 3: Azure Resources
In this section participants will be getting hands-on practice using Terraform to create a simple application environment in Azure, learning the essential constructs in Terraform for defining resources.
- Resource metadata and naming best practices
 - Subscription and resource group
 - Networking resources (VNet, subnet, network security group)
 - Compute resources (virtual machine)
 - Storage resources (storage account, file share, blob storage)
 - Database resources (SQL database)
 - Variables
 - Outputs
 
Hands-on Labs:
- Deploying a VNet
 - Adding a virtual machine into your VNet
 - Adding storage and a database
 - Including variables in your code
 - Using Terraform commands to validate and inspect your configuration
 
Part 4: Terraform Programming
This section introduces programming constructs within Terraform that enable you to add more control and flexibility in defining resources.
- Control operations (count, loops, conditional, depends_on, etc.)
 - Data structures (maps, lists, random_string, etc.)
 - Data sources
 - Functions (e.g., lookup, coalesce, join, merge, etc.)
 - Variable validation
 - Debugging Terraform
 
Hands-on Labs:
- Managing multiple resources through count and loops
 - Using maps and lists in your code
 - Using functions in your code
 - Using Terraform CLI and state manipulation to debug your configuration
 
Part 5: Modules
This section shows how modules can be used to create reusable components in Terraform and teaches best practices in organizing Terraform code.
- Purpose of modules
 - Modules code file organization structure
 - Module structure
 - Module sources and versioning
 - Nested modules
 - Publishing modules
 
Hands-on Labs:
- Refactoring your earlier lab code to a module
 - Using Azure modules (subscription, metadata, resource group, virtual network)
 
Part 6: Wrapping Up
This section wraps up the course with reviews to reinforce what you have learned.
- Reference material to learn more
 - Course review
 - Next steps