Introduction and motivation#
Welcome to my course on Hashicorp Terraform! My humble goal with this course is to prepare you for the Terraform Associate Certification. What can I bring to the table that none of the other thousands of courses available online can’t give you? I believe my unique1 teaching style might give you different perspectives on a few topics. Maybe you can learn something new even if you are a seasoned Terraform expert? I hope so.
The Terraform Associate Certification is soon2 available in a new version, numbered 0033. I have passed the current version, which I suppose must be numbered 002, but I am not sure. Anyway, I have been using Terraform to and from for a few years. If I do a project in Azure I would normally use Azure Bicep, and if I do a project in AWS I would normally use CloudFormation or AWS CDK. However, if I ever did a project in GCP I would use Terraform (because GCP Deployment Manager is not an alternative). I would also use Terraform whenever I need to interact with an API outside of the big cloud providers.
I think Terraform is a good infrastructure as code tool, but every now and then I find it a bit less than ideal to work with. However, this is true for any tool that you use, eventually you find yourself in a situation where it feels like you are using a saw when a hammer would be the right tool. We’ll see if I can provide some anecdotes along the way through this course where I think Terraform could have been improved in some way.
Course content#
In this course I will go through the Exam review available at developer.hashicorp.com, and repeated in the table below. I will not necessarily follow the guide in the order that it is presented there, instead I will present the concepts in an order that makes sense to me. I will try to list each topic from this list that is covered in each lesson, so that it is clear how the content relates to the overall certification goal.
| Part | Content |
|---|---|
| 1 | Understand Infrastructure as Code (IaC) concepts |
| (a) | Explain what IaC is |
| (b) | Describe advantages of IaC patterns |
| 2 | Understand the purpose of Terraform (vs other IaC) |
| (a) | Explain multi-cloud and provider-agnostic benefits |
| (b) | Explain the benefits of state |
| 3 | Understand Terraform basics |
| (a) | Install and version Terraform providers |
| (b) | Describe plugin-based architecture |
| (c) | Write Terraform configuration using multiple providers |
| (d) | Describe how Terraform finds and fetches providers |
| 4 | Use Terraform outside the core workflow |
| (a) | Describe when to use terraform import to import existing infrastructure into your Terraform state |
| (b) | Use terraform state to view Terraform state |
| (c) | Describe when to enable verbose logging and what the outcome/value is |
| 5 | Interact with Terraform modules |
| (a) | Contrast and use different module source options including the public Terraform Module Registry |
| (b) | Interact with module inputs and outputs |
| (c) | Describe variable scope within modules/child modules |
| (d) | Set module version |
| 6 | Use the core Terraform workflow |
| (a) | Describe Terraform workflow ( Write -> Plan -> Create ) |
| (b) | Initialize a Terraform working directory (terraform init) |
| (c) | Validate a Terraform configuration (terraform validate) |
| (d) | Generate and review an execution plan for Terraform (terraform plan) |
| (e) | Execute changes to infrastructure with Terraform (terraform apply) |
| (f) | Destroy Terraform managed infrastructure (terraform destroy) |
| (g) | Apply formatting and style adjustments to a configuration (terraform fmt) |
| 7 | Implement and maintain state |
| (a) | Describe default local backend |
| (b) | Describe state locking |
| (c) | Handle backend and cloud integration authentication methods |
| (d) | Differentiate remote state back end options |
| (e) | Manage resource drift and Terraform state |
| (f) | Describe backend block and cloud integration in configuration |
| (g) | Understand secret management in state files |
| 8 | Read, generate, and modify configuration |
| (a) | Demonstrate use of variables and outputs |
| (b) | Describe secure secret injection best practice |
| (c) | Understand the use of collection and structural types |
| (d) | Create and differentiate resource and data configuration |
| (e) | Use resource addressing and resource parameters to connect resources together |
| (f) | Use HCL and Terraform functions to write configuration |
| (g) | Describe built-in dependency management (order of execution based) |
| 9 | Understand Terraform Cloud capabilities |
| (a) | Explain how Terraform Cloud helps to manage infrastructure |
| (b) | Describe how Terraform Cloud enables collaboration and governance |
After a first look at this table you might feel that this task is a bit daunting, but fear not! I believe this is a relatively doable certification even if you do not have years of experience writing infrastructure with Terraform. If you have never seen Terraform before, then you will have a more difficult time going through the certification journey than if you have at least used Terraform a few times in a real project.
Teaching style#
For this course I will try to keep the content very hands-on with much focus on writing Terraform code, and using the terraform command line tool. Where required I will fill in theoretical details. I will focus on the important things, and if I think the official documentation or any other source can provide deeper insights that could be useful, but not strictly necessary, then I will provide links to these sources. The focus is to stick to the essential parts!
Summary#
Not much to summarize in this part. I believe it is time to get started! See you in the next part.
