Welcome to the Intermediate Tier. The true advantage of using a general-purpose programming language for IaC is access to native control flow. In this episode, we will dynamically generate Subnets and Security Group rules using native array mapping and conditional logic based on environment flags.
Hardcoding values like instance sizes and database passwords into your TypeScript code is a severe anti-pattern. In this episode, we learn how to decouple configuration from code using the Pulumi Config system, allowing the exact same codebase to deploy vastly different Staging and Production architectures.
In Terraform, you write declarative configuration blocks. In Pulumi, you instantiate Object-Oriented classes. This episode explores how to declare complex resources like an AWS VPC, Security Group, and EC2 instance using pure TypeScript, while leveraging your IDE’s IntelliSense for maximum productivity.
Managing state files in Terraform is notoriously difficult, requiring external buckets and DynamoDB locks. Pulumi solves this out-of-the-box using the Pulumi Service. In this episode, we explore how State is managed, and how to use Stacks to deploy identical infrastructure to Staging and Production environments safely.
It is time to leave YAML behind. In this episode, we will install the Pulumi CLI, scaffold a brand new TypeScript project, and understand the anatomy of the generated files. You will learn how Pulumi securely integrates with your cloud provider credentials.
Running ’terraform plan’ is not enough to guarantee your infrastructure works. In this final episode, we bridge the gap between DevOps and Software Engineering by writing automated Golang tests using Terratest. We will programmatically provision infrastructure, assert its correctness, and tear it down.
As your Terraform codebase scales across dozens of microservices and environments, you will find yourself copy-pasting the same ‘backend’ and ‘provider’ blocks repeatedly. Terragrunt is a powerful wrapper that eliminates this repetition, allowing you to define global configurations once.
Refactoring HCL code is dangerous. If you rename a resource block, Terraform will attempt to destroy the old resource and recreate it. In this episode, we learn how to use ‘moved’ blocks and the state CLI to refactor code safely, preventing catastrophic database deletions.
Welcome to Tier 3: Advanced Platform Engineering. You now know how to write reusable modules and store state remotely. But how do you safely deploy identical infrastructure to both Staging and Production without them colliding? We explore Workspaces and Directory Isolation.
Local state files are fine for solo learning, but catastrophic for team environments. In this episode, we will solve the ‘state file drift’ problem by configuring a Remote Backend on AWS S3, and preventing simultaneous executions using DynamoDB locking.