<?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: Silas Stone</title>
    <description>The latest articles on DEV Community by Silas Stone (@skipstone1966).</description>
    <link>https://dev.to/skipstone1966</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%2F3725416%2Fb0050e96-dd4e-4139-ac03-436decbc3ddf.jpg</url>
      <title>DEV Community: Silas Stone</title>
      <link>https://dev.to/skipstone1966</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/skipstone1966"/>
    <language>en</language>
    <item>
      <title>"Did I just spend $2,000?" Adding "Cost Guardrails" to Terraform</title>
      <dc:creator>Silas Stone</dc:creator>
      <pubDate>Mon, 26 Jan 2026 15:46:11 +0000</pubDate>
      <link>https://dev.to/skipstone1966/did-i-just-spend-2000-adding-cost-guardrails-to-terraform-3m6h</link>
      <guid>https://dev.to/skipstone1966/did-i-just-spend-2000-adding-cost-guardrails-to-terraform-3m6h</guid>
      <description>&lt;h2&gt;
  
  
  The "SKU Blindness" Problem
&lt;/h2&gt;

&lt;p&gt;I was debugging a slow app last week and decided to bump the VM size to improve performance.&lt;/p&gt;

&lt;p&gt;I scanned the list and &lt;code&gt;Standard_D64s_v3&lt;/code&gt; looked perfect. I updated my Terraform code.&lt;/p&gt;

&lt;p&gt;But then came the context switching.&lt;/p&gt;

&lt;p&gt;I had to Alt-Tab out of my editor, open the Azure Pricing Calculator, select my region, search for the specific SKU, and do the math... just to figure out if this change was going to cost me an extra $50 or an extra &lt;strong&gt;$2,000&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It felt clunky. Hunting for pricing tables every time I changed a line of code wasn't a good idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Shift Left" Gap
&lt;/h2&gt;

&lt;p&gt;I looked at existing solutions (like Infracost). They are powerful, but they often feel like a separate layer on top of the workflow—requiring separate CLI binaries, API keys, or parsing JSON outputs in a CI pipeline.&lt;/p&gt;

&lt;p&gt;If the cost estimation happens inside the Terraform lifecycle, and treats cost just like any other resource attribute, it should catch expensive mistakes naturally during the plan phase, without needing external scripts.&lt;/p&gt;

&lt;p&gt;To solve this, I built an open-source provider: &lt;code&gt;terraform-provider-plancost&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Layers of Defense: Awareness &amp;amp; Blocking
&lt;/h3&gt;

&lt;p&gt;I designed this provider to help in two distinct ways:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The "Soft" Guardrail: Visual Awareness
&lt;/h4&gt;

&lt;p&gt;Because the cost is modeled as a resource in the Terraform state, we get Terraform's native visual diff for free.&lt;/p&gt;

&lt;p&gt;When you change that SKU from B2s to D64s, Terraform presents the financial impact side-by-side with your infrastructure changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"plancost_estimate"&lt;/span&gt; &lt;span class="s2"&gt;"this"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="nx"&gt;monthly_cost&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"$41.00"&lt;/span&gt; &lt;span class="nx"&gt;-&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"$3,200.00"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7700&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This immediate feedback acts as a sanity check: "Whoa, did I really mean to increase costs by 7000%?"&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The "Hard" Guardrail: Budget Blocking
&lt;/h4&gt;

&lt;p&gt;For the times when you (or a teammate) miss the visual warning, you can set a hard &lt;code&gt;budget_limit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If a planned deployment exceeds your defined threshold, the provider will block the deployment during the plan phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it (in 30 seconds)
&lt;/h2&gt;

&lt;p&gt;Here is how you can protect your wallet in 3 steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Add the provider
&lt;/h3&gt;

&lt;p&gt;(Currently supports Azure resources)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;plancost&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"plancost/plancost"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Define your cost budget
&lt;/h3&gt;

&lt;p&gt;Let's say this is a dev environment, and I don't want anyone creating resources that cost more than $500/month. We define a &lt;code&gt;plancost_estimate&lt;/code&gt; resource to enforce this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"plancost_estimate"&lt;/span&gt; &lt;span class="s2"&gt;"this"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;working_directory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;# The Safety Net: Block deployment if cost &amp;gt; $500&lt;/span&gt;
  &lt;span class="nx"&gt;guardrail&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"monthly_cost_budget"&lt;/span&gt;
    &lt;span class="nx"&gt;threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="nx"&gt;action&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"block"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run Plan
&lt;/h3&gt;

&lt;p&gt;Now, if I try to provision that expensive &lt;code&gt;Standard_D64s_v3&lt;/code&gt; VM, Terraform will stop me:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;terraform plan

╷
│ Error: Guardrail Violation
│ 
│   with plancost_estimate.this,
│   on main.tf line 0, &lt;span class="k"&gt;in &lt;/span&gt;resource &lt;span class="s2"&gt;"plancost_estimate"&lt;/span&gt; &lt;span class="s2"&gt;"this"&lt;/span&gt;:
│ 
│ Monthly cost &lt;span class="nv"&gt;$1250&lt;/span&gt;.00 exceeds budget &lt;span class="nv"&gt;$500&lt;/span&gt;.00.
╵
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The plan fails. The bad infrastructure is never created. Crisis averted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this? (The "Cost as a Resource" Pattern)
&lt;/h2&gt;

&lt;p&gt;I built this to experiment with the idea of treating FinOps data as a logical resource within the Terraform state (&lt;code&gt;terraform.tfstate&lt;/code&gt;), rather than just metadata printed to the console.&lt;/p&gt;

&lt;p&gt;It’s fully open-source (MPL 2.0) and available on the Registry.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/plancost/terraform-provider-plancost" rel="noopener noreferrer"&gt;plancost/terraform-provider-plancost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform Registry&lt;/strong&gt;: &lt;a href="https://registry.terraform.io/providers/plancost/plancost/latest" rel="noopener noreferrer"&gt;plancost/plancost&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>terraform</category>
      <category>azure</category>
      <category>devops</category>
      <category>finops</category>
    </item>
    <item>
      <title>See Cloud Costs Directly Inside terraform plan with plancost</title>
      <dc:creator>Silas Stone</dc:creator>
      <pubDate>Thu, 22 Jan 2026 12:45:35 +0000</pubDate>
      <link>https://dev.to/skipstone1966/see-cloud-costs-directly-inside-terraform-plan-with-plancost-5h8p</link>
      <guid>https://dev.to/skipstone1966/see-cloud-costs-directly-inside-terraform-plan-with-plancost-5h8p</guid>
      <description>&lt;p&gt;We've all experienced "Terraform Apply Anxiety."&lt;/p&gt;

&lt;p&gt;You write your infrastructure code, the plan looks green, and you hit apply. A month later, the CFO (or your manager) slack messages you asking why the cloud bill just spiked by 40%.&lt;/p&gt;

&lt;p&gt;For a long time, the solution to this was using external CLI tools. You know the drill: install a separate binary, wrap your CI pipeline, export the plan to JSON, parse it, and send it to a dashboard. It works, but it breaks the workflow. It feels like an add-on, not part of the infrastructure itself.&lt;/p&gt;

&lt;p&gt;I built &lt;code&gt;plancost&lt;/code&gt; to change that.&lt;/p&gt;

&lt;p&gt;Today, I’m excited to announce the release of the &lt;strong&gt;plancost Terraform Provider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  What is plancost?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;plancost&lt;/code&gt; allows you to estimate, track, and optimize cloud costs directly within your Terraform workflow.&lt;/p&gt;

&lt;p&gt;Unlike other tools that function as CLI wrappers, &lt;code&gt;plancost&lt;/code&gt; is a genuine Terraform Provider. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Zero Extra Install: No &lt;code&gt;brew install&lt;/code&gt;, no &lt;code&gt;curl&lt;/code&gt; scripts, no separate binaries. It downloads with &lt;code&gt;terraform init&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Native Experience: Cost estimates appear directly in your standard &lt;code&gt;terraform plan&lt;/code&gt; output.&lt;/li&gt;
&lt;li&gt;  Cost as State: Cost data is stored in your state file, accessible to other resources.&lt;/li&gt;
&lt;li&gt;  Instant Diff: See exactly how much a change (like upgrading a VM SKU) will cost before you apply it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start: Seeing is Believing
&lt;/h2&gt;

&lt;p&gt;Let's see it in action. You don't need to sign up for anything to try it locally.&lt;/p&gt;

&lt;p&gt;Here is a demo where I downgrade an &lt;strong&gt;Azure Kubernetes Service (AKS)&lt;/strong&gt; node pool to save money. Notice how &lt;code&gt;plancost&lt;/code&gt; catches the price difference instantly inside the plan output.&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%2Fraw.githubusercontent.com%2Fplancost%2Fterraform-provider-plancost%2Fmain%2Fimages%2Fterraform-plan.gif" 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%2Fraw.githubusercontent.com%2Fplancost%2Fterraform-provider-plancost%2Fmain%2Fimages%2Fterraform-plan.gif" alt="plancost demo" width="1920" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Configuration
&lt;/h3&gt;

&lt;p&gt;It takes seconds to set up. Just add the provider and the estimate resource to your &lt;code&gt;main.tf&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;plancost&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"plancost/plancost"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;azurerm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hashicorp/azurerm"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# This single resource enables cost estimation for your module&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"plancost_estimate"&lt;/span&gt; &lt;span class="s2"&gt;"this"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;working_directory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Result
&lt;/h3&gt;

&lt;p&gt;When you run &lt;code&gt;terraform plan&lt;/code&gt;, &lt;code&gt;plancost&lt;/code&gt; scans your resources (like the AKS cluster below) and generates a cost breakdown.&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%2Fc1aqsjhmcth7dvo165gm.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%2Fc1aqsjhmcth7dvo165gm.png" alt="terraform plan" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output is a native resource, so it shows up beautifully in your terminal or CI logs.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of "Native Diff"
&lt;/h2&gt;

&lt;p&gt;The real magic happens when you modify existing infrastructure. Because &lt;code&gt;plancost&lt;/code&gt; is a resource, Terraform treats cost changes just like configuration changes.&lt;/p&gt;

&lt;p&gt;In the example below, I am downgrading the AKS Node Pool from &lt;code&gt;Standard_D2d_v4&lt;/code&gt; to &lt;code&gt;Standard_A2_v2&lt;/code&gt;. Terraform shows the config change, and &lt;code&gt;plancost&lt;/code&gt; shows the money.&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%2Ff64p28uov9z4gs0seaxo.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%2Ff64p28uov9z4gs0seaxo.png" alt="terraform plan diff" width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  True "Cost as Code": Guardrails
&lt;/h2&gt;

&lt;p&gt;Since we are inside the HCL configuration, we can enforce policies using code. No external policy engines (like OPA) are strictly necessary for basic checks.&lt;/p&gt;

&lt;p&gt;You can define &lt;strong&gt;Guardrails&lt;/strong&gt; to block a deployment if it exceeds your budget or if the cost spikes too aggressively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"plancost_estimate"&lt;/span&gt; &lt;span class="s2"&gt;"this"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;working_directory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;abspath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="c1"&gt;# Fail the plan if total cost exceeds $1000&lt;/span&gt;
  &lt;span class="nx"&gt;guardrail&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"monthly_cost_budget"&lt;/span&gt;
    &lt;span class="nx"&gt;threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
    &lt;span class="nx"&gt;action&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"block"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;# Warn me if this specific plan increases cost by more than $50&lt;/span&gt;
  &lt;span class="nx"&gt;guardrail&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"monthly_cost_increase_amount"&lt;/span&gt;
    &lt;span class="nx"&gt;threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
    &lt;span class="nx"&gt;action&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"warning"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you violate the guardrail, &lt;code&gt;terraform plan&lt;/code&gt; will actually fail with a clear error message:&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%2Ffwc60dz25iaaxrnuojdk.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%2Ffwc60dz25iaaxrnuojdk.png" alt="guardrail error" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Simplifies CI/CD
&lt;/h2&gt;

&lt;p&gt;This is my favorite part. If you have ever tried to integrate cost tools into GitHub Actions or GitLab CI, you know the pain of managing API keys, downloading binaries, and scripting comments.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;plancost&lt;/code&gt;, if your pipeline can run &lt;code&gt;terraform plan&lt;/code&gt;, it can run cost estimation. It works out of the box in Atlantis, Terraform Cloud, GitHub Actions, Jenkins, etc.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;We are launching with robust support for &lt;strong&gt;Microsoft Azure&lt;/strong&gt;, covering over 500+ resources—from standard VMs and SQL Databases to complex networking components.&lt;/p&gt;

&lt;p&gt;👉 Check out the full list here: &lt;a href="https://registry.terraform.io/providers/plancost/plancost/latest/docs/guides/supported-resources" rel="noopener noreferrer"&gt;Supported Resources Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  🚧 &lt;strong&gt;AWS Support&lt;/strong&gt; (Coming soon)&lt;/li&gt;
&lt;li&gt;  🚧 &lt;strong&gt;GCP Support&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  ✨ &lt;strong&gt;More Optimization Recommendations&lt;/strong&gt; (Advanced right-sizing advice)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Try it out!
&lt;/h2&gt;

&lt;p&gt;I’d love for you to try it out and let me know what you think. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Registry:&lt;/strong&gt; &lt;a href="https://registry.terraform.io/providers/plancost/plancost" rel="noopener noreferrer"&gt;registry.terraform.io/providers/plancost/plancost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/plancost/terraform-provider-plancost" rel="noopener noreferrer"&gt;github.com/plancost/terraform-provider-plancost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://plancost.io" rel="noopener noreferrer"&gt;plancost.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment below if you have any feature requests or questions about the implementation! Happy coding (and saving)! 💸&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>azure</category>
      <category>devops</category>
      <category>finops</category>
    </item>
  </channel>
</rss>
