<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yency Christopher</title>
    <description>The latest articles on DEV Community by Yency Christopher (@yency_christopher_ca4647b).</description>
    <link>https://dev.to/yency_christopher_ca4647b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3675906%2F19ea1972-a9fc-4993-93e2-51192bce7d8b.png</url>
      <title>DEV Community: Yency Christopher</title>
      <link>https://dev.to/yency_christopher_ca4647b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yency_christopher_ca4647b"/>
    <language>en</language>
    <item>
      <title>Azure Service Bus</title>
      <dc:creator>Yency Christopher</dc:creator>
      <pubDate>Mon, 16 Mar 2026 23:02:26 +0000</pubDate>
      <link>https://dev.to/yency_christopher_ca4647b/azure-service-bus-ngh</link>
      <guid>https://dev.to/yency_christopher_ca4647b/azure-service-bus-ngh</guid>
      <description>&lt;p&gt;Azure Service Bus is a fully managed cloud messaging service in Microsoft Azure that acts as a reliable intermediary between applications and services. Think of it as a post office in the cloud, senders drop off messages, and receivers pick them up when ready, with no need for both parties to be online at the same time.&lt;/p&gt;

&lt;p&gt;It supports two core messaging patterns: queues (point-to-point, one sender → one receiver) and topics/subscriptions (publish-subscribe, one sender → multiple receivers). Messages are stored durably until processed, making it ideal for decoupling distributed systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo1gg4jon1tg6mrrrd0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo1gg4jon1tg6mrrrd0z.png" alt=" " width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-world examples&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;E-commerce order processing&lt;br&gt;
When a customer places an order, the Order Service drops a message into a queue. The Payment Service picks it up independently. If payment processing is slow or briefly down, orders aren't lost they wait in the queue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inventory updates (pub-sub)&lt;br&gt;
When stock changes, the Inventory Service publishes a message to a topic. Three separate subscribers receive it simultaneously: a Warehouse app (to pick items), an Analytics service (to update dashboards), and an Email service (to notify customers). None of them needs to know about each other.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microservices decoupling&lt;br&gt;
In a large banking app, the Loan Service sends an approval message to the Service Bus. Downstream services like Document Generation, Notifications, and Auditing each consume that event independently — if one crashes, the others keep running.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Configuration Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc11h1vrfzgo1xcbjbp64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc11h1vrfzgo1xcbjbp64.png" alt=" " width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's make the configuration using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terraform
# variables.tf
variable "resource_group_name" {
description = "Your existing RG name"
type        = string
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;variable "location" {&lt;br&gt;
  description = "Azure region"&lt;br&gt;
  type        = string&lt;br&gt;
  default     = "eastus"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;variable "namespace_name" {&lt;br&gt;
  description = "Service Bus namespace name (globally unique)"&lt;br&gt;
  type        = string&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  main.tf
&lt;/h1&gt;

&lt;p&gt;terraform {&lt;br&gt;
  required_providers {&lt;br&gt;
    azurerm = {&lt;br&gt;
      source  = "hashicorp/azurerm"&lt;br&gt;
      version = "~&amp;gt; 3.0"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;provider "azurerm" {&lt;br&gt;
  features {}&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  Reference your EXISTING resource group (don't create a new one)
&lt;/h1&gt;

&lt;p&gt;data "azurerm_resource_group" "existing" {&lt;br&gt;
  name = var.resource_group_name&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  Service Bus Namespace
&lt;/h1&gt;

&lt;p&gt;resource "azurerm_servicebus_namespace" "sb_namespace" {&lt;br&gt;
  name                = var.namespace_name&lt;br&gt;
  location            = data.azurerm_resource_group.existing.location&lt;br&gt;
  resource_group_name = data.azurerm_resource_group.existing.name&lt;br&gt;
  sku                 = "Standard"   # Standard tier required for Topics&lt;/p&gt;

&lt;p&gt;tags = {&lt;br&gt;
    environment = "lab"&lt;br&gt;
    source      = "terraform"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  Topic
&lt;/h1&gt;

&lt;p&gt;resource "azurerm_servicebus_topic" "sb_topic" {&lt;br&gt;
  name         = "lab-topic"&lt;br&gt;
  namespace_id = azurerm_servicebus_namespace.sb_namespace.id&lt;/p&gt;

&lt;p&gt;enable_partitioning = true&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  Subscription
&lt;/h1&gt;

&lt;p&gt;resource "azurerm_servicebus_subscription" "sb_subscription" {&lt;br&gt;
  name               = "lab-subscription"&lt;br&gt;
  topic_id           = azurerm_servicebus_topic.sb_topic.id&lt;br&gt;
  max_delivery_count = 10&lt;br&gt;
}&lt;/p&gt;

&lt;h1&gt;
  
  
  terraform.tfvars
&lt;/h1&gt;

&lt;p&gt;resource_group_name = "your-existing-rg-name"&lt;br&gt;
namespace_name      = "sb-whizlab-namespace"   # must be globally unique&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy:&lt;/strong&gt; &lt;br&gt;
terraform init&lt;br&gt;
terraform plan&lt;br&gt;
terraform apply&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure PowerShell
── Variables ──────────────────────────────────────────────────
$ResourceGroupName  = "your-existing-rg-name"   # Your existing RG
$NamespaceName      = "sb-whizlab-namespace"     # Globally unique
$TopicName          = "lab-topic"
$SubscriptionName   = "lab-subscription"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;── Login (skip if already authenticated) ──────────────────────&lt;br&gt;
Connect-AzAccount&lt;/p&gt;

&lt;p&gt;── Get existing RG to inherit location ────────────────────────&lt;br&gt;
$rg = Get-AzResourceGroup -Name $ResourceGroupName&lt;br&gt;
$Location = $rg.Location&lt;/p&gt;

&lt;p&gt;── Create Service Bus Namespace ───────────────────────────────&lt;br&gt;
New-AzServiceBusNamespace &lt;code&gt;&lt;br&gt;
  -ResourceGroupName $ResourceGroupName&lt;/code&gt;&lt;br&gt;
  -Name              $NamespaceName &lt;code&gt;&lt;br&gt;
  -Location          $Location&lt;/code&gt;&lt;br&gt;
  -SkuName           "Standard"&lt;/p&gt;

&lt;p&gt;── Create Topic ───────────────────────────────────────────────&lt;br&gt;
New-AzServiceBusTopic &lt;code&gt;&lt;br&gt;
  -ResourceGroupName $ResourceGroupName&lt;/code&gt;&lt;br&gt;
  -NamespaceName     $NamespaceName &lt;code&gt;&lt;br&gt;
  -Name              $TopicName&lt;/code&gt;&lt;br&gt;
  -EnablePartitioning $true&lt;/p&gt;

&lt;p&gt;── Create Subscription ────────────────────────────────────────&lt;br&gt;
New-AzServiceBusSubscription &lt;code&gt;&lt;br&gt;
  -ResourceGroupName $ResourceGroupName&lt;/code&gt;&lt;br&gt;
  -NamespaceName     $NamespaceName &lt;code&gt;&lt;br&gt;
  -TopicName         $TopicName&lt;/code&gt;&lt;br&gt;
  -Name              $SubscriptionName `&lt;br&gt;
  -MaxDeliveryCount  10&lt;/p&gt;

&lt;h1&gt;
  
  
  ── Verify ─────────────────────────────────────────────────────
&lt;/h1&gt;

&lt;p&gt;Write-Host "`n✅ Resources created:" -ForegroundColor Green&lt;br&gt;
Get-AzServiceBusNamespace -ResourceGroupName $ResourceGroupName -Name $NamespaceName |&lt;br&gt;
  Select-Object Name, Location, Sku, ProvisioningState&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesiihvk5gpug8eevd09h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesiihvk5gpug8eevd09h.png" alt=" " width="733" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>cloud</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Terraform Module Troubleshooting Guide</title>
      <dc:creator>Yency Christopher</dc:creator>
      <pubDate>Wed, 24 Dec 2025 01:14:54 +0000</pubDate>
      <link>https://dev.to/yency_christopher_ca4647b/terraform-module-troubleshooting-guide-2h51</link>
      <guid>https://dev.to/yency_christopher_ca4647b/terraform-module-troubleshooting-guide-2h51</guid>
      <description>&lt;p&gt;Common Error: "Unsupported argument" or "Unsupported attribute."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error: An argument named "variable_name" is not expected here&lt;/li&gt;
&lt;li&gt;Error: This object does not have an attribute named "output_name"&lt;/li&gt;
&lt;li&gt;These errors occur even when variables/outputs appear to be correctly defined&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Root Causes &amp;amp; Solutions&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Stale Terraform Module Cache (Most Common)&lt;/strong&gt;&lt;br&gt;
When you modify module variables or outputs, Terraform may use cached information.&lt;/p&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslzfxur6ip5z06j5lmkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslzfxur6ip5z06j5lmkd.png" alt="powershell1" width="680" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When to use: After ANY changes to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Module variables (variables.tf)&lt;/li&gt;
&lt;li&gt;Module outputs (outputs.tf)&lt;/li&gt;
&lt;li&gt;Module source paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Empty or Corrupted Files (Critical Issue)&lt;/strong&gt;&lt;br&gt;
Files may appear in your directory but contain 0 bytes of data.&lt;br&gt;
How to check:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhczforhogg3rrfqsgeao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhczforhogg3rrfqsgeao.png" alt="powershell2" width="681" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look for files with Length: 0 or 0 bytes.&lt;br&gt;
Solution: Recreate the file using command line to ensure it saves:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcauy1obyuleki0eqps3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcauy1obyuleki0eqps3o.png" alt="powershell3" width="689" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fecnpxnfy9kksuok6mux9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fecnpxnfy9kksuok6mux9.png" alt="powershell3" width="667" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Missing Variable Definitions&lt;/strong&gt;&lt;br&gt;
Error indicates a variable that doesn't exist in the module's variables.tf.&lt;br&gt;
Solution: Add the missing variable to modules/module_name/variables.tf:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhpzvd5h088dmiq0xpva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhpzvd5h088dmiq0xpva.png" alt="powershell4" width="553" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then clear cache and reinitialize (see Solution #1).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Missing Output Definitions&lt;/strong&gt;&lt;br&gt;
Module doesn't expose the output being referenced.&lt;br&gt;
Solution: Add the output to modules/module_name/outputs.tf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;output "output_name" {
  description = "Description"
  value       = azurerm_resource.resource_name.id
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then clear cache and reinitialize.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnostic Workflow&lt;/strong&gt;&lt;br&gt;
Step 1: Verify File Structure&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58a8tgqf591tm8ysphmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58a8tgqf591tm8ysphmi.png" alt="powershell5" width="634" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All required files exist&lt;/li&gt;
&lt;li&gt;No files with 0 bytes&lt;/li&gt;
&lt;li&gt;Correct directory structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Verify File Contents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi5x2imgtk2hbgyvbwx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgi5x2imgtk2hbgyvbwx9.png" alt="powershell7" width="603" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Clear Cache and Reinitialize&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbd8uzjlnbunem1dzdog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbd8uzjlnbunem1dzdog.png" alt="powershell8" width="671" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Check Terraform Version&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvc2awp7xnkajtd0kcy9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbvc2awp7xnkajtd0kcy9.png" alt="powershell9" width="656" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example variables.tf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;variable "rg_name" {
  description = "Resource group name"
  type        = string
}

variable "location" {
  description = "Azure region"
  type        = string
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example outputs.tf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;output "resource_id" {
  description = "ID of the created resource"
  value       = azurerm_resource.name.id
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example module call in root main.tf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module "example" {
  source   = "./modules/module_name"
  rg_name  = "my-rg"
  location = "eastus"
}

# Reference module output
resource "other_resource" "example" {
  dependency_id = module.example.resource_id
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Common Mistakes to Avoid&lt;/strong&gt;&lt;br&gt;
❌ Don't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit files without saving (Ctrl+S in VSCode)&lt;/li&gt;
&lt;li&gt;Forget to run terraform init after module changes&lt;/li&gt;
&lt;li&gt;Use module outputs that aren't defined in outputs.tf&lt;/li&gt;
&lt;li&gt;Pass variables that aren't defined in variables.tf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always verify files saved correctly (check file size)&lt;/li&gt;
&lt;li&gt;Clear .terraform cache after module modifications&lt;/li&gt;
&lt;li&gt;Use terraform fmt to format code&lt;/li&gt;
&lt;li&gt;Use terraform validate to catch errors early&lt;/li&gt;
&lt;li&gt;Keep module interface (variables/outputs) stable&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Quick Reference Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk71gphebkyybxz9q4pnl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk71gphebkyybxz9q4pnl.png" alt=" " width="643" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When All Else Fails&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.Start fresh:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rjbwev4fku9gu8tgm0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rjbwev4fku9gu8tgm0n.png" alt=" " width="559" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Validate each module individually:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksy07s84ir4phor3e91v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksy07s84ir4phor3e91v.png" alt=" " width="618" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>azure</category>
      <category>infrastructureascode</category>
    </item>
  </channel>
</rss>
