<rss version="2.0">
  <channel>
    <title>Azure on LLBBL Blog</title>
    <link>https://llbbl.blog/categories/azure/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Thu, 21 May 2026 10:00:00 -0500</lastBuildDate>
    
    <item>
      <title>When You Should Skip Terraform Entirely</title>
      <link>https://llbbl.blog/2026/05/21/when-you-should-skip-terraform.html</link>
      <pubDate>Thu, 21 May 2026 10:00:00 -0500</pubDate>
      
      <guid>http://llbbl.micro.blog/2026/05/21/when-you-should-skip-terraform.html</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://llbbl.blog/2026/05/20/opentofu-is-the-noregrets-default.html&#34;&gt;last post in this series&lt;/a&gt; made the case that OpenTofu is the no-regrets default for new infrastructure projects. That&amp;rsquo;s true for the broad case of cloud-agnostic or multi-cloud setups where HCL parity, provider breadth, and a Linux Foundation governance model matter.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also not the whole story. There are at least three common scenarios where the right answer in 2026 isn&amp;rsquo;t Terraform &lt;em&gt;or&lt;/em&gt; OpenTofu. It&amp;rsquo;s the cloud-native tool the hyperscaler ships with its platform. AWS has CloudFormation and the CDK. Azure has Bicep. GCP has Config Connector. Each one is technically superior to Terraform inside its own ecosystem, and each one removes a category of operational pain that Terraform inflicts.&lt;/p&gt;
&lt;p&gt;If you reflexively reach for Terraform every time, you&amp;rsquo;re probably overpaying in complexity for a multi-cloud option you&amp;rsquo;ll never exercise.&lt;/p&gt;
&lt;h2 id=&#34;the-small-aws-native-startup-use-cdk&#34;&gt;The Small AWS-Native Startup: Use CDK&lt;/h2&gt;
&lt;p&gt;If your engineering team is small, you&amp;rsquo;re shipping a SaaS product, and you&amp;rsquo;re 100% on AWS, you should probably ignore Terraform entirely. The right tool is the AWS Cloud Development Kit, layered on top of CloudFormation.&lt;/p&gt;
&lt;p&gt;The fundamental win is that &lt;strong&gt;CloudFormation eliminates state management&lt;/strong&gt;. There is no &lt;code&gt;terraform.tfstate&lt;/code&gt; file. No S3 bucket to provision. No DynamoDB lock table. No state-encryption configuration to figure out. The state lives in the AWS control plane, AWS manages locking and consistency, and your CI pipeline doesn&amp;rsquo;t need to know about any of that. For a small team, that&amp;rsquo;s a meaningful operational tax you don&amp;rsquo;t pay.&lt;/p&gt;
&lt;p&gt;The CDK is the part that makes this pleasant. It lets you define infrastructure in TypeScript, Python, Java, C#, or Go; so the languages your application engineers already know. There&amp;rsquo;s no HCL learning curve, no Sentinel policy DSL, no jq-in-bash to manipulate plan output. You write code, the CDK synthesizes CloudFormation templates, CloudFormation provisions the infrastructure.&lt;/p&gt;
&lt;p&gt;The objection people raise is &amp;ldquo;what if you go multi-cloud later?&amp;rdquo; In practice, most SaaS startups don&amp;rsquo;t. They get acquired, they pivot, or they grow large enough to have a dedicated platform team that does the migration deliberately. Optimizing for a hypothetical multi-cloud future that 90% of teams will never need is the textbook definition of premature abstraction. If you&amp;rsquo;re an AWS-native startup with fewer than 50 engineers and no concrete plans to leave AWS, the cost of running Terraform-as-multi-cloud-insurance is higher than the cost of a future migration that probably won&amp;rsquo;t happen.&lt;/p&gt;
&lt;h2 id=&#34;the-azure-enterprise-bicep-unless-you-need-more&#34;&gt;The Azure Enterprise: Bicep, Unless You Need More&lt;/h2&gt;
&lt;p&gt;For organizations heavily invested in Microsoft&amp;rsquo;s stack, so Azure for compute, Azure DevOps for CI/CD and EntraID for identity; Bicep is the technically correct choice for most workloads.&lt;/p&gt;
&lt;p&gt;Bicep is Azure&amp;rsquo;s domain-specific language for infrastructure, designed as a replacement for the verbose ARM JSON templates everyone hated. Like CloudFormation, it&amp;rsquo;s &lt;strong&gt;stateless&lt;/strong&gt;. You submit a desired-state Bicep file to the ARM control plane and ARM reconciles. No state file, no remote backend, no risk of corruption. Authentication is whatever RBAC permissions the deploying identity already has, with no provider credential configuration required.&lt;/p&gt;
&lt;p&gt;Bicep also gets &lt;strong&gt;day-zero feature support&lt;/strong&gt; for new Azure capabilities. When Microsoft ships a new service, you can use it in Bicep the same day. The Terraform AzureRM provider has historically lagged by weeks or months, occasionally longer.&lt;/p&gt;
&lt;p&gt;The catch is &lt;strong&gt;scope&lt;/strong&gt;. Bicep manages Azure. That&amp;rsquo;s the entire surface area. Larger organizations tend to need management of things outside Azure too: GitHub repositories and branch protection, EntraID groups, Datadog monitors, PagerDuty escalation policies, whatever SaaS services your platform touches. Bicep has no answer for any of that.&lt;/p&gt;
&lt;p&gt;That leaves two paths. The first is a hybrid: Bicep for Azure, separate tools for everything else, accept the cost of context-switching and the inability to express cross-domain dependencies in a single deployment. The second is Terraform or OpenTofu for everything, accepting the heavier operational tax of stateful IaC, in exchange for one tool that can do all of it. Neither is wrong; they&amp;rsquo;re different tradeoffs against the same constraint.&lt;/p&gt;
&lt;p&gt;The decision rule: if you&amp;rsquo;re managing only Azure resources, use Bicep. If you have cross-domain provisioning needs and you&amp;rsquo;d rather not maintain two parallel IaC stacks, Terraform (or OpenTofu) earns its keep.&lt;/p&gt;
&lt;h2 id=&#34;the-gcpkubernetes-shop-hybrid-by-design&#34;&gt;The GCP/Kubernetes Shop: Hybrid by Design&lt;/h2&gt;
&lt;p&gt;For organizations heavily committed to Google Cloud and running most workloads on GKE, the right architecture isn&amp;rsquo;t either/or. It&amp;rsquo;s a hybrid that uses Terraform for the foundation and &lt;strong&gt;Config Connector&lt;/strong&gt; for the application layer.&lt;/p&gt;
&lt;p&gt;Config Connector is a GCP-shipped Kubernetes add-on. It lets you manage GCP resources — Cloud SQL instances, Pub/Sub topics, storage buckets, service accounts — as standard Kubernetes Custom Resources. You write a YAML manifest, you &lt;code&gt;kubectl apply&lt;/code&gt;, and a controller in the cluster reconciles the real-world GCP resource to match.&lt;/p&gt;
&lt;p&gt;The differentiator is &lt;strong&gt;continuous reconciliation&lt;/strong&gt;. Terraform is episodic: it checks state at &lt;code&gt;plan&lt;/code&gt; and &lt;code&gt;apply&lt;/code&gt; time, and the rest of the time your infrastructure is unmonitored. If someone clicks around in the GCP console and manually changes a setting, Terraform won&amp;rsquo;t notice until the next pipeline run. Config Connector runs a controller loop that polls continuously. Manual drift gets reverted in real time.&lt;/p&gt;
&lt;p&gt;The right architectural boundary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Platform layer (Terraform/OpenTofu):&lt;/strong&gt; VPCs, subnets, foundational IAM, the GKE clusters themselves. These are slow-moving, security-critical, and you want a deliberate pipeline approval flow for them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application layer (Config Connector):&lt;/strong&gt; Application-specific buckets, databases, service accounts, Pub/Sub topics. Application teams own these via the same YAML manifests they use for their pods, with the same GitOps workflow they already understand.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This pattern gives platform teams strict guardrails on the foundation while letting application developers self-serve the resources their services need, without filing a Terraform PR every time they want a new bucket.&lt;/p&gt;
&lt;h2 id=&#34;the-decision-rule&#34;&gt;The Decision Rule&lt;/h2&gt;
&lt;p&gt;The honest version of all of this: Terraform/OpenTofu is the right answer when you need cross-domain or cross-cloud governance. For everything else, the cloud-native tool is usually less work, more current with the platform, and avoids the operational tax of state management.&lt;/p&gt;
&lt;p&gt;A reasonable decision tree:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single-cloud, small team, AWS:&lt;/strong&gt; AWS CDK + CloudFormation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-cloud, single-domain, Azure:&lt;/strong&gt; Bicep.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GCP with heavy Kubernetes use:&lt;/strong&gt; Hybrid — Terraform/OpenTofu for foundation, Config Connector for application resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cloud, or cross-domain platform engineering (GitHub + cloud + identity + monitoring):&lt;/strong&gt; OpenTofu.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The mistake I think most teams are making is to default to Terraform because it&amp;rsquo;s the tool the senior engineer learned in their last job. The platform-engineering pitch &amp;hellip; &amp;ldquo;we&amp;rsquo;ll standardize on Terraform so we can move to any cloud later&amp;rdquo; is correct in theory but almost never exercised in practice. If your team isn&amp;rsquo;t using the cross-cloud capability today, you&amp;rsquo;re paying for an insurance policy you&amp;rsquo;ll never collect on.&lt;/p&gt;
&lt;p&gt;Next post in this series digs into the other side of that calculation: what HCP Terraform actually costs in 2026, and why even teams that need cloud-agnostic IaC are looking for the exit from the commercial orchestration platforms.&lt;/p&gt;
&lt;h2 id=&#34;sources&#34;&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.synextra.co.uk/knowledge-base/bicep-vs-terraform/&#34;&gt;Bicep Vs Terraform: Choosing The Best IaC Tool For Azure&lt;/a&gt; — Synextra&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://exodata.io/terraform-vs-bicep-vs-arm-templates&#34;&gt;Terraform vs Bicep vs ARM Templates 2026 Compared&lt;/a&gt; — Exodata&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/azure/developer/terraform/comparing-terraform-and-bicep&#34;&gt;Comparing Terraform and Bicep&lt;/a&gt; — Microsoft Learn&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.vaibhavgujral.com/terraform-vs-bicep-vs-arm-lessons-from-the-trenches-8b759d49faa6&#34;&gt;Terraform vs Bicep vs ARM: Lessons from the Trenches&lt;/a&gt; — Vaibhav Gujral&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oneuptime.com/blog/post/2026-02-23-how-to-use-the-gcp-config-connector-with-terraform/view&#34;&gt;How to Use the GCP Config Connector with Terraform&lt;/a&gt; — OneUptime&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/blog/products/devops-sre/how-config-connector-compares-for-infrastructure-management/&#34;&gt;How Config Connector compares for infrastructure management&lt;/a&gt; — Google Cloud Blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/qodea/are-terraforms-days-numbered-a9a15ec0435a&#34;&gt;Are Terraform&amp;rsquo;s days numbered?&lt;/a&gt; — Alistair Grew&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;d appreciate a follow. You can subscribe with your email below. The emails go out once a week, or you can find me on Mastodon at &lt;a href=&#34;https://micro.blog/llbbl?remote_follow=1&#34;&gt;@logan@llbbl.blog&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>