<?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: Sarah Lean 🏴󠁧󠁢</title>
    <description>The latest articles on DEV Community by Sarah Lean 🏴󠁧󠁢 (@techielass).</description>
    <link>https://dev.to/techielass</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%2F494123%2F6363ab31-d425-4cb4-b21c-dcee321c758e.jpg</url>
      <title>DEV Community: Sarah Lean 🏴󠁧󠁢</title>
      <link>https://dev.to/techielass</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techielass"/>
    <language>en</language>
    <item>
      <title>Can you recover a deleted Microsoft Entra Tenant?</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 23 Dec 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/can-you-recover-a-deleted-microsoft-entra-tenant-1gin</link>
      <guid>https://dev.to/techielass/can-you-recover-a-deleted-microsoft-entra-tenant-1gin</guid>
      <description>&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%2Fi3gwz0g5xn90vm078tqm.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%2Fi3gwz0g5xn90vm078tqm.png" alt="Can you recover a deleted Microsoft Entra Tenant?" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A question I am often asked is: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;“If our Microsoft Entra tenant was ever deleted — could we recover it?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s an uncomfortable thought, isn’t it? It’s not a scenario anyone wants to think about, but it is something you do have to think about as we rely so heavily on identities being available and secure and the thought of them not being there could be disastrous. &lt;/p&gt;

&lt;p&gt;So let’s take the fear out of this topic and break down what’s really possible — and what needs to be planned for.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Reality: Deleted Tenants Don’t Come Back&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here’s the straightforward truth:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is no restore option for a deleted Microsoft Entra tenant.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once it’s gone, it’s gone. A tenant isn’t like a user account or group that has soft delete or recovery windows options. &lt;/p&gt;

&lt;p&gt;But before panic sets in, there’s something important to understand:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft has made deleting a tenant purposely difficult.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To delete a tenant multiple checks and conditions must be met first.  All bills and invoices must be paid for, no users are in the Entra tenant, if you are syncing users from on-premises must be turned off, all subscriptions for &lt;a href="https://www.techielass.com/tag/azure/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;, &lt;a href="https://www.techielass.com/tag/microsoft-365/" rel="noopener noreferrer"&gt;Microsoft 365&lt;/a&gt; etc must be removed.  It’s not something that a rogue admin can casually click into existence.&lt;/p&gt;

&lt;p&gt;Those safeguards are outlined here in Microsoft’s official guidance: &lt;a href="https://learn.microsoft.com/azure/active-directory/enterprise-users/directory-delete-howto?ref=techielass.com#prepare-the-organization" rel="noopener noreferrer"&gt;&lt;u&gt;https://learn.microsoft.com/azure/active-directory/enterprise-users/directory-delete-howto#prepare-the-organization&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still, even a very small possibility means organisations must treat tenant protection as a critical cybersecurity responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Defending the Irreplaceable&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There isn’t one magic setting that guarantees protection and that’s actually good news.  Instead, there are different layers that can be put in place to defend against the exact scenario we worry about.  Those layers include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break-glass accounts locked down with strict policies&lt;/li&gt;
&lt;li&gt;Privilege elevation that expires after use&lt;/li&gt;
&lt;li&gt;Risk-based access decisions powered by Identity Protection&lt;/li&gt;
&lt;li&gt;Conditional Access and multi-factor authentication (MFA) to stop one compromise becoming many&lt;/li&gt;
&lt;li&gt;Alerting on high-impact directory changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these significantly reduce the likelihood of a tenant-level disaster.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A Shared Responsibility&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It’s easy to assume that because Microsoft delivers the identity platform, they must also guarantee tenant-level recovery. But that isn’t how the cloud works. There is a &lt;a href="https://learn.microsoft.com/azure/security/fundamentals/shared-responsibility?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;shared responsibility model&lt;/u&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%2Flearn.microsoft.com%2Fen-us%2Fazure%2Fsecurity%2Ffundamentals%2Fmedia%2Fshared-responsibility%2Fshared-responsibility.svg" 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%2Flearn.microsoft.com%2Fen-us%2Fazure%2Fsecurity%2Ffundamentals%2Fmedia%2Fshared-responsibility%2Fshared-responsibility.svg" alt="Can you recover a deleted Microsoft Entra Tenant?" width="666" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Microsoft Azure Shared Responsibility Model&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Microsoft provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The platform&lt;/li&gt;
&lt;li&gt;The guard rails&lt;/li&gt;
&lt;li&gt;The tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Customers provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Their own risk-aligned configuration&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Operational recovery planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a partnership, and like any partnership, both sides have a role to play.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Planning for the conversation you hope you’ll never have&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Nobody wants to have those doom-and-gloom cybersecurity discussions.  But this one matters, because identity is the centre of your cloud universe.  So ask those uncomfortable questions, what would we do, who would respond, and how quickly could we act. &lt;/p&gt;

&lt;p&gt;It’s important to plan and ensure you have prevention in place, as prevention is your only true recovery plan.&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>How Pre-Sales Techies can use BANT to qualify opportunities effectively</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 16 Dec 2025 13:33:47 +0000</pubDate>
      <link>https://dev.to/techielass/how-pre-sales-techies-can-use-bant-to-qualify-opportunities-effectively-51d0</link>
      <guid>https://dev.to/techielass/how-pre-sales-techies-can-use-bant-to-qualify-opportunities-effectively-51d0</guid>
      <description>&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%2F27a7rare3mdpy75jt7cg.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%2F27a7rare3mdpy75jt7cg.png" alt="How Pre-Sales Techies can use BANT to qualify opportunities effectively" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you’re a pre-sales technical engineer who joins meetings with customers, you're often there to demo a product, answer technical questions, or validate that a proposed solution is the right fit.  But there’s another layer to these meetings.  The sales person needs to understand if this is a real opportunity worth pursuing. &lt;/p&gt;

&lt;p&gt;And that’s where BANT comes in. &lt;/p&gt;

&lt;p&gt;Even if you’re the technical expert in the room, knowing how BANT works lets you partner more effectively with the salesperson. You’ll notice key details, ask the right questions, and help move the project forward successfully.&lt;/p&gt;

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

&lt;p&gt;BANT is a simple framework used in sales to qualify opportunities. It stands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Budget&lt;/strong&gt; – Does the customer have money allocated to solve this problem?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authority&lt;/strong&gt; – Are we speaking to the people who can make the decision?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need&lt;/strong&gt; – What is the actual business problem we’re solving?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline&lt;/strong&gt; – When does the customer want to move forward?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sales person, it’s about knowing whether an opportunity is real. For techies, it’s about listening for clues and helping your sales person gather this information in a natural way.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Techies can help with BANT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Budget
&lt;/h3&gt;

&lt;p&gt;Customers often raise cost concerns when discussing technical options. As a techie, you might hear things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We already have Microsoft 365 E5 licenses, can we make use of any of that existing licensing? &lt;/li&gt;
&lt;li&gt;“We’ve got a lot of tools, so we’re looking to consolidate, not add more..”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are comments techies genuinely hear and signal whether money exists, whether cost savings matter, or whether the customer expects re-use of existing investments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authority
&lt;/h3&gt;

&lt;p&gt;You can often tell who has influence by the types of questions they ask. If someone digs into integration, security, or long-term support, they might be a decision maker or key influencer. &lt;/p&gt;

&lt;p&gt;To help techies spot influencers vs decision-makers, use clearer cues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People asking things like &lt;em&gt;“How will this integrate with our existing identity platform?”&lt;/em&gt; or &lt;em&gt;“What impact will this have on our security posture?”&lt;/em&gt; often hold technical authority.&lt;/li&gt;
&lt;li&gt;Someone asking &lt;em&gt;“Will this meet our compliance requirements?”&lt;/em&gt; or &lt;em&gt;“How does this align with our wider IT strategy?”&lt;/em&gt; is usually a senior stakeholder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These help the reader understand that authority isn’t always “the boss”, sometimes it’s the architect who holds the keys. &lt;strong&gt;Need&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where techies shine. When customers describe their current challenges, you can validate them and tie them back to outcomes. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer: “We’re spending too much time checking logs manually”&lt;/li&gt;
&lt;li&gt;Techie: “That’s driving up operational overhead, automation could free up your team for more valuable work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an example of a techie listening, and translating issues into solutions or outcomes. &lt;/p&gt;

&lt;h3&gt;
  
  
  Timeline
&lt;/h3&gt;

&lt;p&gt;Customers drop hints about timing all the time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“We need to present options to the CIO next month.”&lt;/li&gt;
&lt;li&gt;“Year-end change freeze starts soon - can this be implemented before then?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you hear these, take note. They are important details that you need to understand in order to help pull together a quote and understand how to prioritise this opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for keeping it natural
&lt;/h2&gt;

&lt;p&gt;You don’t need to sound like a salesperson to help with BANT. A few approaches that work well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ask clarifying questions&lt;/strong&gt; – e.g., “What’s driving that timeline?” or “Who else will need to be involved in this project?”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarise back to the customer&lt;/strong&gt; – “So the main issue is downtime, and that’s affecting customer orders?”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share observations with your sales person afterwards&lt;/strong&gt; – If something feels important in the conversation, mention it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The customer might come to the meeting and give you all the information on budget, authority, need and timeline and you won’t have to ask.  But if they don’t then make sure you do ask.  These are important pieces of information to have so you can provide the correct quote or information for a customer in order to win the deal or sale. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;BANT isn’t just a sales tool — it’s a framework that helps technical experts understand the bigger picture. When you listen for Budget, Authority, Need and Timeline, you’re not selling,  you’re helping the customer get to the right outcome faster. You make the conversation smoother, and you help shape solutions that genuinely solve problems.&lt;/p&gt;

&lt;p&gt;So next time you’re in a meeting, tune into the subtle hints customers drop. You’ll be surprised how much influence you have simply by noticing the details that others miss.&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>What is a tfvars file in Terraform and how do you use it?</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 16 Dec 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/what-is-a-tfvars-file-in-terraform-and-how-do-you-use-it-3l7o</link>
      <guid>https://dev.to/techielass/what-is-a-tfvars-file-in-terraform-and-how-do-you-use-it-3l7o</guid>
      <description>&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%2Fxwm2ypn27xvr2trl4tiw.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%2Fxwm2ypn27xvr2trl4tiw.png" alt="What is a tfvars file in Terraform and how do you use it?" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are using &lt;a href="https://developer.hashicorp.com/terraform?ref=techielass.com" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;, one of the key principles is that you can write reusable and scalable code that can be used in multiple environments without you having to rewrite or duplicate it.&lt;/p&gt;

&lt;p&gt;And this is where the tfvars file comes in.  This file allows you to define and customise variable values quickly and efficiently making your deployments more consistent and much easier to manager. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is a tfvars file in Terraform?
&lt;/h2&gt;

&lt;p&gt;A tfvars file in &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; is used to define input variable values for a Terraform configuration. This file allows you to supply values for variables, making it easy to customise deployments for different environments (such as dev, test, or prod).&lt;/p&gt;

&lt;p&gt;There are a number of ways you can customise variables within a Terraform deployment; however using a tfvars file is the most common and efficient. &lt;/p&gt;

&lt;h2&gt;
  
  
  How to use tfvars files?
&lt;/h2&gt;

&lt;p&gt;The best way to show you how to use a tfvars file is to walk through some example code.  Let’s set up a project to define an &lt;a href="https://www.techielass.com/tag/azure" rel="noopener noreferrer"&gt;Azure&lt;/a&gt; resource group,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Define the Resource Group
resource "azurerm_resource_group" "resource_rg" {
  name = "rg-example"
  location = "uksouth"
  tags = {
    Environment = "Demo"
    Owner   = "Sarah Lean"
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find the full code &lt;a href="https://github.com/weeyin83/terraform-tfvars-example?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;here&lt;/u&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This base code works, however, we’ve hard coded information here, that will make it hard for us to use within other environments and we’ll need to duplicate code and ultimately waste a lot of engineer time changing those hard code values. &lt;/p&gt;

&lt;p&gt;So let’s create some variables, we want variables for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The resource group name&lt;/li&gt;
&lt;li&gt;Location&lt;/li&gt;
&lt;li&gt;Tags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within your project folder, create a file called &lt;a href="http://variables.tf/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;variables.tf&lt;/u&gt;&lt;/a&gt; and we’ll define our variables in there.  Within each variable, we’ll include a description and a default value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;variable "Resource_group_name" {
  description = "The name of the resource group"
  type        = string
  default     = "azurergtechielass"
}
variable "Location" {
  description = "The Azure region to deploy resources in"
  type        = string
  default     = "Sweden Central"
}
variable "Environment" {
    description = "The environment for the resources"
    type        = string
    default     = "Demo"  
}
variable "Owner" {
    description = "The owner of the resources"
    type        = string
    default     = "Techie Lass"  
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that our variables are defined, we need to change the Terraform code to refer to the variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Define the Resource Group
resource "azurerm_resource_group" "resource_rg" {
  name     = var.Resource_group_name
  location = var.Location
  tags = {
    Environment = var.Environment
    Owner       = var.Owner
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if we were to deploy the Terraform code it would work fine and deploy an Azure resource group, using all the default values we defined in our &lt;a href="http://variables.tf/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;variables.tf&lt;/u&gt;&lt;/a&gt; file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s create a tfvars file
&lt;/h2&gt;

&lt;p&gt;Instead of using the default values, let’s define our own using the terraform.tfvars file. &lt;/p&gt;

&lt;p&gt;Within your project folder, create the terraform.tfvars file and assign a value to each variable like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resource_group_name = "techielass-demo-rg"
Location = "France Central"
Environment = "Blog"
Owner = "Sarah"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we run a terraform plan we’ll see that &lt;a href="https://www.techielass.com/introduction-to-terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; is now pulling in the values from the tfvars file and not using any of the default values that we set initially. &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%2Fxshhonth39rzn6y0uvtz.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%2Fxshhonth39rzn6y0uvtz.png" alt="What is a tfvars file in Terraform and how do you use it?" width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform plan command with tfvars file&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Using multiple tfvars files for different environments
&lt;/h2&gt;

&lt;p&gt;The benefit of using tfvars files for your variables means you can separate tfvars files for each environment, for example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev.tfvars&lt;/li&gt;
&lt;li&gt;Test.tfvars&lt;/li&gt;
&lt;li&gt;Prod.tfvars&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then when you are running your deployment, you change your plan and apply commands to point to the correct tfvars file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means you don’t have to rewrite your code for each environment, and tweaking a tfvars file requires minimal time, meaning deployments can be faster. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/techielass?ref=techielass.com" rel="noopener noreferrer"&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%2Fyt1dv26vwtn59s0xbrjk.png" alt="What is a tfvars file in Terraform and how do you use it?" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Using a tfvars file as part of your Terraform deployments makes your code more flexible, reusable and efficient.  By separating your variable values from your main configuration code you can avoid hardcoding values and make your code easier to maintain and scale across multiple environments.&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>How to use comments in Terraform</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Thu, 11 Dec 2025 13:36:03 +0000</pubDate>
      <link>https://dev.to/techielass/how-to-use-comments-in-terraform-5fgp</link>
      <guid>https://dev.to/techielass/how-to-use-comments-in-terraform-5fgp</guid>
      <description>&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%2Fxc0tezgimj3wry4ey664.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%2Fxc0tezgimj3wry4ey664.png" alt="How to Use Comments in Terraform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In any type of code, there are moments when comments are useful for adding context or clarification. They help others quickly understand the purpose behind your work, improving how they interact with the code and reducing confusion.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll look at the different types of comments you can use in &lt;a href="https://developer.hashicorp.com/terraform?ref=techielass.com" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; and how they can help keep your code clear and maintainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Types of comments in Terraform
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.techielass.com/tag/terraform" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; supports two main types of comments, both designed to help add context or explanations to your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single-line comments&lt;/strong&gt; :  Start with a # or // and are used for brief explanations or disabling specific lines of code. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-line comments&lt;/strong&gt; : These are enclosed in a comment block between /* and */ and are using longer explanations or commenting out blocks of code. &lt;/p&gt;

&lt;p&gt;Regardless of which type you use, Terraform ignores comments entirely—they have no impact on the execution of your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to add single-line comments in Terraform files
&lt;/h3&gt;

&lt;p&gt;Single-line comments either start with a # or //.  Both are supported, and you can use them interchangeably.  Which one you use is entirely up to your personal preference.  I personally use #. &lt;/p&gt;

&lt;p&gt;Let’s look at some examples: &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%2F52ig05qra7lpmj0i9hvn.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%2F52ig05qra7lpmj0i9hvn.png" alt="How to Use Comments in Terraform" width="529" height="240"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform comments example&lt;/em&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%2Frsvyvn6199zt09xx5p0m.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%2Frsvyvn6199zt09xx5p0m.png" alt="How to Use Comments in Terraform" width="366" height="124"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform comments example&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to add multi-line comments in Terraform files
&lt;/h3&gt;

&lt;p&gt;For multi-line comments, Terraform uses the standard /* ... */ syntax. Everything between these markers is treated as a comment and will not affect the execution of your code.&lt;/p&gt;

&lt;p&gt;Let’s take a look at an example: &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%2Ft56mzw322lxfj9x3uany.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%2Ft56mzw322lxfj9x3uany.png" alt="How to Use Comments in Terraform" width="721" height="283"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform multi-line comment example&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can also use multi-line comments to temporarily disable code. In the example, you can see a section commented out, and my editor (&lt;a href="https://www.techielass.com/tag/vs-code/" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;) changes the text colour to make that visually clear.&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%2F5riwh4kpsiwbm1uxnt2z.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%2F5riwh4kpsiwbm1uxnt2z.png" alt="How to Use Comments in Terraform" width="472" height="372"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform multi-line comment example&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;If you are enjoying this blog you might enjoy:   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.techielass.com/estimate-cloud-costs-with-terraform-and-infracost/" rel="noopener noreferrer"&gt;Estimate cloud costs with Terraform and Infracost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.techielass.com/what-are-terraform-modules/" rel="noopener noreferrer"&gt;What are Terraform modules and how to use them&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best practices for commenting in Terraform code
&lt;/h3&gt;

&lt;p&gt;Comments can be powerful when used well, helping future you (and your teammates) make sense of decisions, processes, and intent behind certain configurations. Below are some best practices to help keep your Terraform code clean and understandable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Focus on intent&lt;/strong&gt; : Your Terraform code should be mostly self-explanatory. Use comments only when they genuinely add value or explain decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual processes&lt;/strong&gt; : Some configurations require manual steps. Use comments to flag any actions that need to happen before the code is executed, helping ensure nothing is overlooked.. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid sensitive information&lt;/strong&gt; : Never include passwords, API keys, or other sensitive information in comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid over commenting&lt;/strong&gt; : Too many comments can clutter the code. Only include them where they genuinely help.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardise the comment style&lt;/strong&gt; : Use a consistent format for comments, especially when working in teams, to help reduce confusion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Comments can improve efficiency and collaboration, making your Terraform code easier to understand and maintain. The key is finding the right balance, too few comments and helpful context is lost, too many and your code becomes harder to read.&lt;/p&gt;

&lt;p&gt;Aim for a healthy balance between comments and documentation. Keep longer explanations in proper documentation, leaving your Terraform files clean, clear, and easy to follow.&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>Deploying an Azure VM into an Availability Zone with Terraform</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 09 Dec 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/deploying-an-azure-vm-into-an-availability-zone-with-terraform-562l</link>
      <guid>https://dev.to/techielass/deploying-an-azure-vm-into-an-availability-zone-with-terraform-562l</guid>
      <description>&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%2Fghz3kjtnn3gepigbrxu7.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%2Fghz3kjtnn3gepigbrxu7.png" alt="Deploying an Azure VM into an Availability Zone with Terraform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;High availability is a consideration that every Architect needs to think about when building cloud infrastructure.  In &lt;a href="https://azure.microsoft.com/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Azure&lt;/u&gt;&lt;/a&gt;, Availability Zones help you achieve resiliency by distributing your resources across physically separate locations within a region. This ensures that even if one zone experiences downtime, your resources remain available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.hashicorp.com/terraform?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Terraform&lt;/u&gt;&lt;/a&gt;, as an &lt;a href="https://www.techielass.com/tag/infrastructure-as-code/" rel="noopener noreferrer"&gt;&lt;u&gt;Infrastructure-as-Code (IaC)&lt;/u&gt;&lt;/a&gt; tool, makes deploying these resources simple, repeatable, and allows you to version control deployments. In this post, I’ll show you how to deploy an Azure Virtual Machine (VM) in a specific Availability Zone using &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;&lt;u&gt;Terraform&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you start, you’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An Azure subscription.&lt;/li&gt;
&lt;li&gt;Azure CLI is installed on your machine.&lt;/li&gt;
&lt;li&gt;Terraform is installed on your machine.&lt;/li&gt;
&lt;li&gt;Basic Terraform knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Terraform configuration overview
&lt;/h2&gt;

&lt;p&gt;I have uploaded the full Terraform configuration to GitHub so that you can retrieve the code from the &lt;a href="https://github.com/weeyin83/terraform-azure-vm-az?ref=techielass.com" rel="noopener noreferrer"&gt;repository there&lt;/a&gt;.  I’ve tried to keep it small and tidy, with just three files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;variables.tf – defines the availability zone&lt;/li&gt;
&lt;li&gt;main.tf – contains all the resource definitions&lt;/li&gt;
&lt;li&gt;outputs.tf – prints out some deployment information at the end&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing a zone: variables.tf
&lt;/h2&gt;

&lt;p&gt;We’ve defined a variable file, keeping it simple now, with the Azure Subscription ID and Azure Availability Zone in there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;variable "availability_zone" {
  description = "Azure availability zone (1, 2, or 3)"
  type        = string
  default     = "1"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This variable lets you choose which zone your VM should be placed in.&lt;/p&gt;

&lt;p&gt;Azure identifies zones with string values "1", "2", and "3", so the Terraform variable is a string rather than a number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Randomising the region: a quick detour
&lt;/h2&gt;

&lt;p&gt;Before we get to the VM, there’s a small but fun addition in main.tf: a random region selector.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;locals {
  azure_regions = [
    "ukwest",
    "westeurope",
    "francecentral",
    "swedencentral"
  ]
  selected_location = element(local.azure_regions, random_integer.region_index.result)
}
resource "random_integer" "region_index" {
  min = 0
  max = length(local.azure_regions) - 1
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each time you deploy, Terraform picks a random region from that list.  This is something I use more often than not in my demos, but it might not be something you want to do in production, as you will probably need the predictability of where your resources are deployed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Placing the VM in a zone: main.tf
&lt;/h2&gt;

&lt;p&gt;The main.tf file might look busy at first glance. That’s because it handles a complete virtual machine deployment with all the necessary components within the file, such as resource group, virtual network, subnet, network security group (NSG), NIC, virtual machine and also saving the private key for access to the VM. &lt;/p&gt;

&lt;p&gt;I’ve included all of this configuration to make it a great starter set for you; however if you already have existing networking, you can plug the VM into that.&lt;/p&gt;

&lt;p&gt;The key section we want to focus on is when you are defining the VM configuration, you can define the availability zone that the VM should deploy into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "azurerm_linux_virtual_machine" "vm" {
  name                = module.naming.linux_virtual_machine.name_unique
  resource_group_name = azurerm_resource_group.rg.name
  location            = azurerm_resource_group.rg.location
  size                = "Standard_B1s"
  admin_username      = "azureuser"
  network_interface_ids = [
    azurerm_network_interface.nic.id
  ]
  zone = var.availability_zone
  admin_ssh_key {
    username   = "azureuser"
    public_key = tls_private_key.vm_key.public_key_openssh
  }
  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }
  source_image_reference {
    publisher = "Canonical"
    offer     = "0001-com-ubuntu-server-jammy"
    sku       = "22_04-lts-gen2"
    version   = "latest"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to deploy
&lt;/h2&gt;

&lt;p&gt;To deploy this Terraform configuration, follow these steps:&lt;/p&gt;

&lt;p&gt;Open a terminal and download the code to your machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/weeyin83/terraform-azure-vm-az.git

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open up your favourite editor, I like VS Code, and open up the Terraform folder you’ve just copied. &lt;/p&gt;

&lt;p&gt;Create a new file named terraform.tfvars in the project folder. Add your details to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;azure_subscription_id = "your-subscription-id"
availability_zone     = "1"  # Options: "1", "2", or "3"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specifying your specific information and choices. &lt;/p&gt;

&lt;p&gt;Once you’ve saved the file. Open up your terminal again, this time you need to log in to your Azure subscription.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Az login

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once logged in you can start the Terraform deployment. Prepare Terraform and download provider modules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terraform init

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we can run the plan command to understand what the Terraform configuration will do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terraform plan

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you are happy, you can confirm the deployment using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terraform apply -auto-approve 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within a few minutes, the resources will have been deployed and you can SSH using the output information to the Linux VM.  And you can also check the Azure portal to check the availability zone deployment. &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%2F1i2rbokk0matx7npk09b.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%2F1i2rbokk0matx7npk09b.png" alt="Deploying an Azure VM into an Availability Zone with Terraform" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Deploying VMs in specific Availability Zones is a small Terraform configuration change, but can make a big difference in your resources’ resilience and allow you to follow design choices by your architects.  Terraform helps you automate and manage this process efficiently, ensuring your infrastructure is reliable and easy to maintain.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>terraform</category>
    </item>
    <item>
      <title>What is Chaos Engineering?</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 02 Dec 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/what-is-chaos-engineering-254o</link>
      <guid>https://dev.to/techielass/what-is-chaos-engineering-254o</guid>
      <description>&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%2F2e8y35rahwrv1vankp58.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%2F2e8y35rahwrv1vankp58.png" alt="What is Chaos Engineering?" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Technology has come a long way, but no system is ever completely safe from failure. Over the years, I’ve worked on and designed systems that try to reduce the risk of outages or failures, but nearly all systems experience some kind of downtime. Even the big companies are not immune to it, so how do they make sure their systems and services are reliable when something inevitably goes wrong? &lt;/p&gt;

&lt;p&gt;That’s where chaos engineering comes in.  It’s a practice that helps teams build more resilient systems by finding weaknesses before they cause real outages.  In this blog post, we’ll explain what chaos engineering is in simple terms, how it relates to &lt;a href="https://www.techielass.com/tag/devops/" rel="noopener noreferrer"&gt;DevOps&lt;/a&gt; and Site Reliability Engineering (SRE). &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Chaos Engineering?
&lt;/h2&gt;

&lt;p&gt;Chaos Engineering is a methodology that IT teams can use to identify vulnerabilities in complex systems by intentionally injecting failures into the system and observing how that system responds. &lt;/p&gt;

&lt;p&gt;Think of it like office fire drills, where they test that everyone knows where the fire exits are, fire alarm sounds, door opens etc. &lt;/p&gt;

&lt;p&gt;Chaos Engineering is rooted in the principle of intentionally introducing faults into the system to bring benefits to the system in the longer run, such as increased system resilience, improved incident response, and validation of redundancy and failover mechanisms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The evolution and history of Chaos Engineering
&lt;/h2&gt;

&lt;p&gt;Most people associate the creation of Chaos Engineering with Netflix, however an &lt;a href="https://www.techielass.com/tag/aws/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt; engineer called Jesse Robbins is also instrumental in the creation of chaos engineering practices. &lt;/p&gt;

&lt;p&gt;Jesse drew on his experiences of being a volunteer firefighter to introduce the concept of GameDay at Amazon in the early 2000s, to simulate major failures in Amazon’s systems, test and improve their resilience. &lt;/p&gt;

&lt;p&gt;Meanwhile, Netflix was looking at exploring ways to enhance resilience in their systems and in 2010 Netflix introduced a tool called Chaos Monkey which was designed to randomly terminate instances within their production environment to ensure that the system could tolerate failures without impacting users. &lt;/p&gt;

&lt;p&gt;While both were working independently, both contributions were essential in shaping the modern practices of chaos engineering that are widely adopted today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chaos Engineering in SRE and DevOps
&lt;/h2&gt;

&lt;p&gt;Chaos engineering is not just a testing technique; it’s a mindset that fits perfectly with Site Reliability Engineering (SRE) and DevOps practices.&lt;/p&gt;

&lt;p&gt;SRE teams focus on building systems that are reliable, scalable, and resilient. Chaos engineering gives SREs a proactive way to validate system reliability before real incidents occur.&lt;/p&gt;

&lt;p&gt;By running controlled chaos experiments, SRE teams can measure system reliability against SLIs (Service Level Indicators) and SLOs (Service Level Objectives), confirming that uptime and performance targets are met as well as identifying hidden weaknesses in infrastructure, dependencies, and failover mechanisms before they cause downtime.&lt;/p&gt;

&lt;p&gt;And chaos engineering complements DevOps by promoting a culture of collaboration, continuous improvement, and shared responsibility for system reliability.&lt;/p&gt;

&lt;p&gt;DevOps teams often integrate chaos experiments into &lt;a href="https://www.techielass.com/ci-cd-pipeline-tools/" rel="noopener noreferrer"&gt;CI/CD pipelines&lt;/a&gt;, running small, controlled tests after each deployment to ensure new code doesn’t break critical services. They may also run “game days”, where developers and operations staff deliberately trigger failures in a safe environment to practice response and improve system resilience.&lt;/p&gt;

&lt;p&gt;By embedding chaos engineering into everyday DevOps and SRE practices, teams learn to anticipate failures, respond faster, and deliver more reliable systems and software. &lt;/p&gt;

&lt;h2&gt;
  
  
  Azure Chaos Studio
&lt;/h2&gt;

&lt;p&gt;Chaos engineering is no longer just an experiment for a few tech giants, it’s becoming a standard practice for companies.&lt;/p&gt;

&lt;p&gt;Microsoft offers &lt;a href="https://www.techielass.com/tag/azure/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt; Chaos Studio, a managed service that enables teams to safely run chaos experiments in their Azure environments, helping organisations test resiliency across virtual machines, databases, and other cloud resources.&lt;/p&gt;

&lt;p&gt;You can configure tests to simulate real-world failures against your virtual machines, Kubernetes clusters, databases and network components, all within a safe and monitored environment.  You can run tests and leverage Azure Monitor and Application Insights to track system behaviour and understand the impact of failures. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/techielass?ref=techielass.com" rel="noopener noreferrer"&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%2F9m2iiamedvhhxldo0om6.png" alt="What is Chaos Engineering?" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Chaos engineering isn’t about breaking things for the sake of it, although that can be interesting; chaos engineering is focused on building confidence in your systems and making them more resilient before real incidents happen. &lt;/p&gt;

&lt;p&gt;By intentionally testing failures your IT, DevOps and SRE teams can identify weaknesses, improve incident response and validate redundancy mechanisms.  &lt;/p&gt;

&lt;p&gt;Have you introduced chaos engineering into your IT practices?&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Azure Storage Mover: How to migrate files from AWS S3 to Azure</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 25 Nov 2025 08:09:00 +0000</pubDate>
      <link>https://dev.to/techielass/azure-storage-mover-how-to-migrate-files-from-aws-s3-to-azure-3cep</link>
      <guid>https://dev.to/techielass/azure-storage-mover-how-to-migrate-files-from-aws-s3-to-azure-3cep</guid>
      <description>&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%2Fmqtbdz9qyulfkwwenen7.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%2Fmqtbdz9qyulfkwwenen7.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moving files between environments can be a headache. Whether it’s from on-premises to Azure, or from AWS to Azure, there’s always the same challenge: how do you do it securely, at scale, and without reinventing the wheel? Traditionally, you might reach for tools like &lt;a href="https://www.techielass.com/azcopy-not-finish-operation-within-specified-timeout/" rel="noopener noreferrer"&gt;AzCopy&lt;/a&gt;, Azure Data Box, or &lt;a href="https://www.techielass.com/tag/azure-migrate/" rel="noopener noreferrer"&gt;Azure Migrate&lt;/a&gt;, but there’s a new option designed to make migrations smoother: Azure Storage Mover.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through what Azure Storage Mover is, highlight its new cloud-to-cloud migration capability for moving data from &lt;a href="https://aws.amazon.com/s3/?ref=techielass.com" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt; to Azure Blob Storage, and show you how to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Azure Storage Mover?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/azure/storage-mover/service-overview?ref=techielass.com" rel="noopener noreferrer"&gt;Azure Storage Mover&lt;/a&gt; became generally available in February 2022, it was launched as a fully managed hybrid migration service that made moving your files and folders to Azure easy. &lt;/p&gt;

&lt;p&gt;Azure Storage Mover can scale to meet the size of the migration you are trying to run, and jobs can be run as one offs or they can be run multiple times meaning you can sync deltas of any changes. &lt;/p&gt;

&lt;p&gt;Earlier in 2025, a new feature was added to Azure Storage Mover, cloud-to-cloud migration. This allows you to securely transfer data from Amazon Simple Storage Service (&lt;a href="https://www.techielass.com/create-an-s3-bucket-using-aws-cloudformation/" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt;) to Azure Blob Storage. &lt;/p&gt;

&lt;p&gt;This feature is still in public preview, so is subject to change and there are some limitations to the product at the moment: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private networking is not currently supported. The cloud-to-cloud feature securely transfers data by limiting S3 access to trusted Azure IP ranges, thus ensuring a controlled move of data over the public internet. &lt;/li&gt;
&lt;li&gt;Each job supports the transfer of up to 10million objects. &lt;/li&gt;
&lt;li&gt;A maximum of 10 migration jobs can happen at one time within a subscription. &lt;/li&gt;
&lt;li&gt;If the data is stored within AWS Glacier or Deep Archive you must rehydrate it before you start the migration. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create Azure Storage Mover resource
&lt;/h2&gt;

&lt;p&gt;The first step you need to do to migrate data from AWS is create an Azure Storage Mover resource. &lt;/p&gt;

&lt;p&gt;Go to the Azure Portal and in the top search bar search for &lt;strong&gt;Storage Movers&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%2Fm4ajwzzcofpfujo468ys.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%2Fm4ajwzzcofpfujo468ys.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal, storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create&lt;/strong&gt; and you will be presented with the wizard asking for information about subscription, resource group, name and region for setting up the service.  Fill in the relevant information and click on Next. &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%2Fqud99kil2ajwmsj3vfp7.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%2Fqud99kil2ajwmsj3vfp7.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal, storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next question set in the wizard is about monitoring, I’d recommend setting up logs that are sent to a Log Analytics workspace so you have logs to troubleshoot if things don’t go to plan. &lt;/p&gt;

&lt;p&gt;The next screens within the wizard are about Azure Tags and confirming you are happy with the choices you have made. Click on &lt;strong&gt;Review + Create&lt;/strong&gt; when you are happy to create the resource. &lt;/p&gt;
&lt;h2&gt;
  
  
  Create a multicloud connector for AWS
&lt;/h2&gt;

&lt;p&gt;The next step is to connect a multicloud connector that allows you to securely connect AWS to Azure. &lt;/p&gt;

&lt;p&gt;Navigate within the Storage Mover resource you just created and click on &lt;strong&gt;Overview&lt;/strong&gt; then select the &lt;strong&gt;Multicloud migration&lt;/strong&gt; tab. &lt;/p&gt;

&lt;p&gt;Within the &lt;strong&gt;Multicloud migration&lt;/strong&gt; tab, click on &lt;strong&gt;Create multicloud connector&lt;/strong&gt; to open the &lt;strong&gt;Add AWS connector&lt;/strong&gt; page. &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%2Fo2m1bskziu4b36322a4u.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%2Fo2m1bskziu4b36322a4u.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal, storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Within this wizard you will be asked for information around resource group, subscription, the name of the connector, the Azure region and then which AWS account to associate the connector with and read resources from.   &lt;/p&gt;

&lt;p&gt;You have the option to pick a single account or use an organization account. For this example I am selecting a single account.&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%2Fe1syniism6x2c6ks33u2.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%2Fe1syniism6x2c6ks33u2.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal AWS Connector&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Within the next screen you are asked which solutions you’d like to use with this connector. You have the option of &lt;strong&gt;Inventory&lt;/strong&gt; , &lt;strong&gt;Arc onboarding&lt;/strong&gt; and &lt;strong&gt;Storage - data management&lt;/strong&gt;.  For this example we’re going to add &lt;strong&gt;Inventory&lt;/strong&gt; and &lt;strong&gt;Storage - data management&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%2F5isbpt0cp725tda9wf3p.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%2F5isbpt0cp725tda9wf3p.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal AWS Connector&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you add the inventory solution you will be asked questions like which AWS services you wish to discover, which permissions you wish the connector to have, how often to want the scan to occur and which regions you want included in the scan. &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%2Fafw33tlf36ckpr9sd0xh.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%2Fafw33tlf36ckpr9sd0xh.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal AWS Connector&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Configure as appropriate to your organisation and needs. &lt;/p&gt;

&lt;p&gt;On the next screen, you will be given an &lt;a href="https://www.techielass.com/aws-cloudformation-template-explained/" rel="noopener noreferrer"&gt;&lt;u&gt;AWS CloudFormation template&lt;/u&gt;&lt;/a&gt; to download or copy. You should take this and deploy it within your AWS environment, then come back and complete the wizard within Azure. &lt;/p&gt;

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

&lt;p&gt;This CloudFormation template sets up AWS IAM roles and an OIDC identity provider to allow Microsoft Azure services to securely access AWS resources. Azure authenticates via the OIDC provider using a connector ID, and the template outputs the ARNs of both roles for easy reference.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configure source and target endpoints
&lt;/h2&gt;

&lt;p&gt;Now that your AWS connector is set up and configured.  You need to concentrate on your source and target endpoints.  Now it’s assumed that you already have an endpoint in AWS, which will be an S3 account filled with files and folders. &lt;/p&gt;

&lt;p&gt;If you don’t already have an Azure Storage account set up to receive the data, now is the time to do that. Also set up a container or file share within the storage account that you want the data to move to. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/techielass?ref=techielass.com" rel="noopener noreferrer"&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%2Fk34qi9mc1mdj0d2uu68u.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Configure project and job definitions
&lt;/h2&gt;

&lt;p&gt;The setup is now complete, so it’s time to create a migration project and job definition. &lt;/p&gt;

&lt;p&gt;A project allows you to organise large migrations into smaller, more manageable chunks, while a job describes resources and migration options.  For example you can have a job set up to migrate a specific folder within the S3 bucket to a specific Azure Storage blob container and then set up another job to move other folders to an Azure Storage file share. &lt;/p&gt;

&lt;p&gt;Within your Storage Mover resource click on &lt;strong&gt;Project Explorer&lt;/strong&gt; on the left hand side. Then click on &lt;strong&gt;Create Project&lt;/strong&gt;.  Give your project a name and description and create. &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%2Fb55cpuwwkaiok26umeky.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%2Fb55cpuwwkaiok26umeky.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once your project is created, click within it and then click on &lt;strong&gt;Create job definition&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%2F20uvuv3o01067gh8h597.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%2F20uvuv3o01067gh8h597.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You’ll first be asked to give your job a name and description then asked to define the migration type, in this example we’re using &lt;strong&gt;cloud to cloud (preview).&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%2Fizte9qmqrukymiexqlmc.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%2Fizte9qmqrukymiexqlmc.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next questions ask about the source, this is where you can define which S3 bucket you are moving data from.  You have the option to take the whole bucket, or specific folders. &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%2Fjlaz47fjpj743fs4zbl8.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%2Fjlaz47fjpj743fs4zbl8.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve configured this move to the next screen to configure the target, or Azure storage account you wish the files to move to.  You have the choice of moving them to a Blob container or a File share within the storage account.  And you also have the choice of defining a specific folder within either to move the files.&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%2Fk2xphusec2hsflkfdpds.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%2Fk2xphusec2hsflkfdpds.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The last screen you need to select an option in is what type of copy you want to do, a &lt;strong&gt;Merger content into target&lt;/strong&gt; or &lt;strong&gt;Mirror source to target&lt;/strong&gt;. Understand which option suits your scenario best. &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%2Fu84w7g2ih2nuphnc7ih1.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%2Fu84w7g2ih2nuphnc7ih1.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal storage mover&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mirror source to target:&lt;/strong&gt; Makes the target an exact copy of the source. Extra files in the target are deleted, and everything else is updated to match the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merge content into target:&lt;/strong&gt; Updates files in the target to match the source but keeps any extra files already in the target. Renamed folders can sometimes create duplicates.&lt;/p&gt;

&lt;p&gt;Once you’ve configured the job and it’s created you can now start it running.&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%2Fqbfd20rbjhucw57wrzsk.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%2Fqbfd20rbjhucw57wrzsk.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Storage Mover&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Monitor migration progress
&lt;/h2&gt;

&lt;p&gt;Within the Azure Storage Mover blade itself, you can see some visual progress of your jobs, successful jobs, failed jobs, files copied, files failed, etc. &lt;/p&gt;

&lt;p&gt;And if you set up logs to go Log Analytics you are able to query logs there as well. &lt;/p&gt;

&lt;p&gt;If you run the KQL query &lt;strong&gt;StorageMoverJobRunLogs&lt;/strong&gt; within your Log Analytics workspace you will see all the jobs that have run, success or failure. &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%2Fyfc9xjq9gcnffu3b20vq.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%2Fyfc9xjq9gcnffu3b20vq.png" alt="Azure Storage Mover: How to migrate files from AWS S3 to Azure" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Log Analytics&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For more sample KQL queries to use, you can check out the &lt;a href="https://learn.microsoft.com/azure/storage-mover/log-monitoring?ref=techielass.com#sample-kusto-queries" rel="noopener noreferrer"&gt;&lt;u&gt;official documentation&lt;/u&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;
  
  
  Running regular syncs
&lt;/h2&gt;

&lt;p&gt;The Azure Storage Mover is great if you need to sync files once, and you can do multiple syncs.  For example, you can run the job initially to get the files into Azure, but then if you want to do a delta sync a week later, you can run your job manually again. &lt;/p&gt;

&lt;p&gt;If you wish to run the job on a schedule or automate the running of it. You can use the Azure CLI command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az storage-mover job-definition start-job \
  --resource-group &amp;lt;resource-group-name&amp;gt; \
  --storage-mover-name &amp;lt;storage-mover-name&amp;gt; \
  --project-name &amp;lt;project-name&amp;gt; \
  --job-definition-name &amp;lt;job-definition-name&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or you can use the PowerShell command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start-AzStorageMoverJobDefinition `
  -ResourceGroupName &amp;lt;resource-group-name&amp;gt; `
  -StorageMoverName &amp;lt;storage-mover-name&amp;gt; `
  -ProjectName &amp;lt;project-name&amp;gt; `
  -JobDefinitionName &amp;lt;job-definition-name&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both commands need the following parameters defined:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--resource-group&lt;/strong&gt; : The name of the resource group containing your Storage Mover resource.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--storage-mover-name&lt;/strong&gt; : The name of your Storage Mover resource.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--project-name&lt;/strong&gt; : The name of the project within your Storage Mover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--job-definition-name&lt;/strong&gt; : The name of the job definition you wish to execute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Azure Storage Mover can help make cloud migrations easier, more secure and flexible.  Whether you need to move files from on-premises, another cloud or sync deltas regularly, Storage Mover gives you a fully managed and scalable solution. &lt;/p&gt;

&lt;p&gt;The new cloud-to-cloud migration feature even though still in preview simplifies the transfer of data from Amazon S3 to Azure Blog Storage while still maintaining security and cloud.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>aws</category>
    </item>
    <item>
      <title>Cost Optimization in Azure: Using the FinOps Toolkit to Save Money</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Thu, 06 Nov 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/cost-optimization-in-azure-using-the-finops-toolkit-to-save-money-3mig</link>
      <guid>https://dev.to/techielass/cost-optimization-in-azure-using-the-finops-toolkit-to-save-money-3mig</guid>
      <description>&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%2Fvwrulkcwcjlld7gfnlh9.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%2Fvwrulkcwcjlld7gfnlh9.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cost optimisation.  It’s important in all walks of life, whether you are looking after your household bills or your cloud environment. &lt;/p&gt;

&lt;p&gt;When we look at Azure there are tools and mechanisms that can help you monitor your costs, from &lt;a href="https://learn.microsoft.com/azure/advisor/advisor-get-started?ref=techielass.com" rel="noopener noreferrer"&gt;Azure Advisor&lt;/a&gt; to Cost Alerts.&lt;/p&gt;

&lt;p&gt;Within this blog post we’ll look at some of the resources with the &lt;a href="https://microsoft.github.io/finops-toolkit/?ref=techielass.com#-available-tools" rel="noopener noreferrer"&gt;&lt;u&gt;Azure FinOps toolkit&lt;/u&gt;&lt;/a&gt; that can be deployed to help keep a monitor of your costs. &lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Azure FinOps Toolkit for cost optimization in Azure?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://microsoft.github.io/finops-toolkit/?ref=techielass.com#-available-tools" rel="noopener noreferrer"&gt;&lt;u&gt;Azure FinOps toolkit&lt;/u&gt;&lt;/a&gt; is a set of resources that can help you manage your Azure Costs and &lt;a href="https://www.techielass.com/tag/finops/" rel="noopener noreferrer"&gt;FinOps&lt;/a&gt; journey.  There are alerts, &lt;a href="https://www.techielass.com/azure-dashboards-azure-workbooks-power-bi/" rel="noopener noreferrer"&gt;workbooks&lt;/a&gt; and &lt;a href="https://www.techielass.com/tag/powerbi/" rel="noopener noreferrer"&gt;PowerBI&lt;/a&gt; reports that can be deployed.  &lt;/p&gt;

&lt;p&gt;It is an open-source project that is maintained and owned by Microsoft but the community over the years has also contributed to it. &lt;/p&gt;

&lt;p&gt;There are two resources within the toolkit that I would recommend you look at as the very minimum you can do for cost optimisation. &lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the FinOps Toolkit Alerts for Azure Cost Savings
&lt;/h2&gt;

&lt;p&gt;Within the toolkit is something called “FinOps alerts”.  This resource is a Logic App than can be scheduled to run regularly and check if you have any of the following that might be costing you money unnecessarily: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Idle App Gateways&lt;/li&gt;
&lt;li&gt;Idle disks&lt;/li&gt;
&lt;li&gt;Idle IP Address&lt;/li&gt;
&lt;li&gt;Idle Load Balancers&lt;/li&gt;
&lt;li&gt;Disk snapshots older than 30 days&lt;/li&gt;
&lt;li&gt;Stopped virtual machines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Logic App checks the subscriptions you tell it to and if it finds any of the above resources it generates an email that you can send to a person in your team or your IT Service Desk to action. &lt;/p&gt;

&lt;p&gt;It’s a light weight deployment that can be up and running within 5-10minutes. &lt;/p&gt;

&lt;p&gt;Let’s walk you through the deployment. &lt;/p&gt;

&lt;p&gt;The first step is to visit: &lt;a href="https://microsoft.github.io/finops-toolkit/alerts?ref=techielass.com#deploy" rel="noopener noreferrer"&gt;&lt;u&gt;https://microsoft.github.io/finops-toolkit/alerts#deploy&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Click on the correct Deploy button on the website, in this example I am selecting &lt;strong&gt;Deploy to Azure&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%2F9lzxmd3x7czzmsqazpc9.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%2F9lzxmd3x7czzmsqazpc9.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure FinOps Toolkit&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This will launch the Azure ARM template custom deployment within the Azure portal.  You will be asked which subscription, resource group, Azure region, and the name you wish to use for the Logic App. &lt;/p&gt;

&lt;p&gt;Once you’ve filled in the information click on &lt;strong&gt;Review + Create&lt;/strong&gt;. Then click on &lt;strong&gt;Create.&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%2Fcawtgj4kaja24kpk2u8m.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%2Fcawtgj4kaja24kpk2u8m.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal custom deployment&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It will take a few minutes for the deployment to complete.  Once it has there are some things you need to configure for the Logic App to work. &lt;/p&gt;

&lt;p&gt;Go into the Logic App and click on &lt;strong&gt;Edit&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%2Fl057y3z49xtrt8ltj3e0.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%2Fl057y3z49xtrt8ltj3e0.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Logic App&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you click on the &lt;strong&gt;Recurrence&lt;/strong&gt; step you can configure how often you want the Logic App to run, by default it will run once a week.  &lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;Set alert recipient&lt;/strong&gt; step.  Within the value section, enter the email address where you want the email to be sent. &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%2F5c4gdylw1w07lhpwoija.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%2F5c4gdylw1w07lhpwoija.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Logic App&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now click on &lt;strong&gt;Included subscriptions&lt;/strong&gt; , within the value section enter the subscription ID or IDs you want the Logic App to scan. &lt;/p&gt;

&lt;p&gt;The format for just one subscription should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;["12345678-aaaa-bbbb-cccc-1234567890ab"]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The format for multiple subscription IDs should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  "11111111-1111-1111-1111-111111111111",
  "22222222-2222-2222-2222-222222222222",
  "33333333-3333-3333-3333-333333333333"
]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fvshyrghq3m3ky58z3pvk.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%2Fvshyrghq3m3ky58z3pvk.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Logic App&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If there are any subscriptions you’d like to exclude from being scanned, make sure you enter that information within the &lt;strong&gt;Excluded subscriptions&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Next scroll down to the bottom of the Logic App and click on the &lt;strong&gt;Send an email (v2)&lt;/strong&gt; step. Click on &lt;strong&gt;change connection&lt;/strong&gt; , then select ** Add new**.  It will ask you to sign into your M365 account and confirm the connection with your M365 to be able to send the email. &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%2Fk4j1lp12xmbe7rfiw6oa.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%2Fk4j1lp12xmbe7rfiw6oa.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Logic App&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Don’t forget to click on &lt;strong&gt;Save&lt;/strong&gt; after you have made the changes. &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%2Fl74paotau08e4tqd2p3y.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%2Fl74paotau08e4tqd2p3y.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Logic App&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can now manually start the Logic App by clicking on &lt;strong&gt;Run&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Analysing Azure Costs with FinOps Toolkit Workbooks
&lt;/h2&gt;

&lt;p&gt;Azure workbooks can provide an interactive way to view and analyse data.  Within the Azure FinOps toolkit are two workbooks, one called Governance and one called Optimisation. &lt;/p&gt;

&lt;p&gt;The Optimisation workbook gives you a comprehensive overview of your Azure environment's resource usage, aligning with the Well-Architected Framework Cost Optimisation pillar.&lt;/p&gt;

&lt;p&gt;The Governance one provides a comprehensive overview of the governance posture of your Azure environment. &lt;/p&gt;

&lt;p&gt;To deploy these workbooks, head over to &lt;a href="https://microsoft.github.io/finops-toolkit/workbooks?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;https://microsoft.github.io/finops-toolkit/workbooks&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Click on the deploy button for you, in this example, I am going to select &lt;strong&gt;Deploy to Azure&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%2Fp0i5gytll3rvp8xyiyzm.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%2Fp0i5gytll3rvp8xyiyzm.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure FinOps Toolkit&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This will launch the Azure Portal and the custom Azure ARM template deployment.  You’ll be asked to select a subscription, a resource group, an Azure region and a name to prefix each workbook with. &lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Review + Create.&lt;/strong&gt; Then click on &lt;strong&gt;Create.&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%2F89m0jwsqrx9f1pesyb3c.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%2F89m0jwsqrx9f1pesyb3c.png" alt="Cost Optimization in Azure: Using the FinOps Toolkit to Save Money" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure custom deployment within the Azure Portal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It will take a few minutes for the workbooks to be deployed.  You can go to the deployed resources and start to view and interact with the workbooks. &lt;/p&gt;

&lt;p&gt;They are great for spotting issues with your governance and also where you can make some cost savings and optimisations within your environment. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts on Cost Optimization in Azure
&lt;/h2&gt;

&lt;p&gt;The Azure FinOps toolkit is a powerful collection of resources to help you implement FinOps practices and monitor cost optimization in your Azure environment. Even using just the alerts and workbooks, you can quickly identify idle resources, spot opportunities to save money, and keep your cloud spending under control.&lt;/p&gt;

&lt;p&gt;Take the time to explore the &lt;a href="https://microsoft.github.io/finops-toolkit/?ref=techielass.com#-available-tools" rel="noopener noreferrer"&gt;&lt;u&gt;toolkit&lt;/u&gt;&lt;/a&gt;, experiment with its features, and tailor it to your organisation’s needs. By proactively monitoring your environment, you’ll not only reduce costs but also gain better visibility into your cloud resources, a key step toward more efficient, sustainable cloud operations.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>finops</category>
    </item>
    <item>
      <title>Automating Azure SFTP deployment with Terraform</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 04 Nov 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/automating-azure-sftp-deployment-with-terraform-4355</link>
      <guid>https://dev.to/techielass/automating-azure-sftp-deployment-with-terraform-4355</guid>
      <description>&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%2Fsiegu9jyygnn0g99e695.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%2Fsiegu9jyygnn0g99e695.png" alt="Automating Azure SFTP deployment with Terraform" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a &lt;a href="https://www.techielass.com/set-up-sftp-in-azure" rel="noopener noreferrer"&gt;previous blog&lt;/a&gt;, I walked through how to set up SFTP on &lt;a href="https://www.techielass.com/tag/azure/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt; step-by-step through the Azure Portal. That’s a great way to get familiar with the service, but if you're deploying this regularly, across different environments, for multiple clients, or as part of a DevOps process, you need a way to automate it.&lt;/p&gt;

&lt;p&gt;That’s where &lt;a href="https://developer.hashicorp.com/terraform?ref=techielass.com" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; comes in. &lt;/p&gt;

&lt;p&gt;Terraform is an &lt;a href="https://www.techielass.com/infrastructure-as-code-the-benefits-and-the-tools/" rel="noopener noreferrer"&gt;Infrastructure as Code (IaC)&lt;/a&gt; tool that allows you to define and deploy Azure resources using configuration files.  This means you can create your Azure SFTP setup in a version controlled way and replicate it in multiple environments with minimal effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Terraform Code
&lt;/h2&gt;

&lt;p&gt;I’ve published a &lt;a href="https://github.com/weeyin83/sftp-azure-terraform?ref=techielass.com" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; containing the &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; configuration you need to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An Azure resource group&lt;/li&gt;
&lt;li&gt;A premium block blob storage account&lt;/li&gt;
&lt;li&gt;SFTP enabled on that storage account&lt;/li&gt;
&lt;li&gt;A local SFTP user with password authentication&lt;/li&gt;
&lt;li&gt;An initial container for file storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can clone the repo and follow the tutorial below to deploy the SFTP setup to suit your needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/weeyin83/sftp-azure-terraform.git
cd sftp-azure-terraform

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pre-requisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An Azure subscription&lt;/li&gt;
&lt;li&gt;Basic understanding of Azure&lt;/li&gt;
&lt;li&gt;Basic understanding of Terraform&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/?ref=techielass.com" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; (or similar) installed on your machine&lt;/li&gt;
&lt;li&gt;Azure CLI installed on your machine&lt;/li&gt;
&lt;li&gt;Terraform installed on your machine&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customising the deployment
&lt;/h2&gt;

&lt;p&gt;Within the GitHub repo I have created the following files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;main.tf - Main Terraform configuration&lt;/li&gt;
&lt;li&gt;variables.tf - Variable definitions&lt;/li&gt;
&lt;li&gt;outputs.tf - Output definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within the variables.tf file, I have defined defaults for each variable that needs inputs. You can either change that file directly, or, the way I prefer to work, create a .tfvars file and define the variable details there.&lt;/p&gt;

&lt;p&gt;To do that, create a new file and name it something like &lt;em&gt;prod.tfvars&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Within the file copy the following and then replace them with values that make sense for your deployment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;location = "yourazurelocation"
account_replication_type = "LRSorZRS"
container_name = "containername"
sftp_local_user = "username"
tag_environment = "environmentname"
tag_project = "projectname"
tag_creator = "creatorname”
azure_subscription_id = "azuresubscriptionid"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this file in place we can start to deploy the Terraform code. Ensure that you are are logged into your Azure environment through your command line tool.  First, run &lt;strong&gt;&lt;em&gt;terraform init&lt;/em&gt;&lt;/strong&gt; in the command line. This will download any required providers needed to deploy the Terraform code.&lt;/p&gt;

&lt;p&gt;Then run &lt;strong&gt;&lt;em&gt;terraform plan -var-file="prod.tfvars"&lt;/em&gt;&lt;/strong&gt;. This will plan out any changes and new resources that need created within your environment to match the template file.&lt;/p&gt;

&lt;p&gt;Then you can run _ &lt;strong&gt;terraform apply -var-file=”prod.tfvars”&lt;/strong&gt; &lt;em&gt;, if you add on _-auto-approve&lt;/em&gt; then it will deploy the resources without any further prompts or confirmation from yourself.&lt;/p&gt;

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

&lt;p&gt;If you need a refresher on Terraform and the deployment process you can check out my &lt;a href="https://www.techielass.com/introduction-to-terraform/" rel="noopener noreferrer"&gt;&lt;u&gt;"Introduction to Terraform”&lt;/u&gt;&lt;/a&gt; blog post. &lt;/p&gt;

&lt;p&gt;Once the deployment is finished, the console will output the SFTP hostname and username you need to connect. The password will not be shown initially, as it is a sensitive value.&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%2Flh7-rt.googleusercontent.com%2Fdocsz%2FAD_4nXfdOs5ouzRT-nmHdJmUuRw3qyc4DNQCHemGnTtDzNnAUW6B_FxwJPx8FRHFVoUAz7MNpA6APclCAGLe90YAdx1yCU_NjQY7T7Zhh6gwLmLr__h_n4S-rCuF-y7sHPWhTyyXMGtz%3Fkey%3DmES29aq2eS_BdANProww-A" 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%2Flh7-rt.googleusercontent.com%2Fdocsz%2FAD_4nXfdOs5ouzRT-nmHdJmUuRw3qyc4DNQCHemGnTtDzNnAUW6B_FxwJPx8FRHFVoUAz7MNpA6APclCAGLe90YAdx1yCU_NjQY7T7Zhh6gwLmLr__h_n4S-rCuF-y7sHPWhTyyXMGtz%3Fkey%3DmES29aq2eS_BdANProww-A" alt="Automating Azure SFTP deployment with Terraform" width="961" height="289"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform output&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To see the password you can type the following into the console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform output -raw sftp_password

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will display the password in clear text for you. &lt;/p&gt;

&lt;p&gt;You have now created the Azure SFTP setup and have the information required to connect to it and upload, download and share files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing costs
&lt;/h2&gt;

&lt;p&gt;Just like I mentioned in the manual setup guide, remember SFTP in Azure costs $0.30/hour while it’s enabled. If you don’t need it running 24/7, consider automating the enable/disable process. This can be handled with the Azure CLI, PowerShell, an Azure Automation Runbook, or you could even re-run the Terraform template, changing line 69 of the main.tf file to “false” to disable the SFTP feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Using Terraform to deploy Azure SFTP means you can spin up secure file transfer endpoints quickly and consistently.  However, if you are new to the Azure SFTP offering, I recommend checking out my original blog post for a deeper explanation of what SFTP is, how Azure supports it, and how to connect.&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>azure</category>
    </item>
    <item>
      <title>What is Grafana?</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Thu, 30 Oct 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/what-is-grafana-194f</link>
      <guid>https://dev.to/techielass/what-is-grafana-194f</guid>
      <description>&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%2F8vk2oqpzsyxrprhy8ujk.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%2F8vk2oqpzsyxrprhy8ujk.png" alt="What is Grafana?" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Monitoring is essential to the health and performance of any IT system, whether it’s running in the cloud, on-premises, or somewhere in between. Without the right visibility into your environment, issues can go unnoticed until they cause downtime or impact your users.&lt;/p&gt;

&lt;p&gt;In this blog post, let’s explore one of the monitoring tools, &lt;a href="https://grafana.com/?ref=techielass.com" rel="noopener noreferrer"&gt;Grafana&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Grafana?
&lt;/h3&gt;

&lt;p&gt;Grafana is an open-source analytics and interactive monitoring platform. It allows you to ingest data from a variety of sources, query it, create alerts, and build dashboards to visualise trends and performance metrics.&lt;/p&gt;

&lt;p&gt;The visualisations and alerts help you transform raw metrics into actionable insights, allowing you to identify patterns, troubleshoot issues, and keep your infrastructure and applications healthy.&lt;/p&gt;

&lt;p&gt;Grafana is fully open-source and backed by a large, active community. This gives you the flexibility to develop and share your own plugins or take advantage of those built by others.&lt;/p&gt;

&lt;p&gt;You can choose to self-host Grafana, managing updates, backups, and scaling, or opt for a managed solution like &lt;a href="https://azure.microsoft.com/products/managed-grafana?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Managed Grafana&lt;/u&gt;&lt;/a&gt;, which handles all of that for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  What data sources does Grafana use?
&lt;/h3&gt;

&lt;p&gt;Grafana supports a wide variety of data sources, both out of the box and through community-developed plugins. Out of the box, the built-in data sources Grafana supports are&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud platforms&lt;/strong&gt; : AWS CloudWatch, &lt;a href="https://www.techielass.com/configure-azure-monitor-diagnostic-settings/" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Monitor&lt;/u&gt;&lt;/a&gt;, Google Cloud Monitoring&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time-series databases&lt;/strong&gt; : InfluxDB, Graphite, OpenTSDB, Prometheus&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL databases&lt;/strong&gt; : Microsoft SQL Server, MySQL, PostgreSQL&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tracing &amp;amp; logging&lt;/strong&gt; : Jaeger, Zipkin, Tempo, Loki&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other tools&lt;/strong&gt; : Alertmanager, Elasticsearch, Pyroscope, TestData&lt;/p&gt;

&lt;h3&gt;
  
  
  Grafana features
&lt;/h3&gt;

&lt;p&gt;Grafana has a rich set of features designed to make monitoring and data visualisation intuitive and powerful.  You can create highly customisable dashboards, these dashboards provide a central place to view your infrastructure and application health at a glance.  Complementing this is the alerting system that allows you to set up rules based on your data queries so you can receive timely notifications through channels like email or Slack, helping you to act on issues quickly.  &lt;/p&gt;

&lt;p&gt;For teams that want to integrate monitoring into their workflow or automate management tasks Grafana offers a comprehensive API that lets you programmatically manage dashboards, data sources and users.  And sharing is straightforward too, you can easily share live dashboards or snapshots with colleagues helping to foster collaboration and work on troubleshooting any issues together. &lt;/p&gt;

&lt;p&gt;In addition to those core features, Grafana supports templating to create dynamic dashboards, annotations to mark significant events on graphs, and a wide range of plugins for extended functionality. &lt;/p&gt;

&lt;h3&gt;
  
  
  When should Grafana be used?
&lt;/h3&gt;

&lt;p&gt;Grafana shines when you need to aggregate data from multiple sources and visualise it in one unified dashboard. It excels at querying time-series events, analysing logs, and building custom queries to surface the exact insights you’re after.&lt;/p&gt;

&lt;p&gt;Even if you only have a single data source, Grafana is still a powerful tool. It helps you track infrastructure utilisation, application performance, or even website user activity—all from one interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Monitor dashboards with Grafana
&lt;/h3&gt;

&lt;p&gt;In 2025, Microsoft introduced &lt;a href="https://learn.microsoft.com/azure/azure-monitor/visualize/visualize-grafana-overview?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Monitor dashboards with Grafana&lt;/u&gt;&lt;/a&gt; in public preview. This feature allows you to create Grafana dashboards &lt;u&gt;free&lt;/u&gt; using data from Azure Monitor, metrics, logs, traces, Azure Monitor managed service for Prometheus and Azure Resource Graph data sources. &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%2Fsicy69zd7dr61vrydplp.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%2Fsicy69zd7dr61vrydplp.png" alt="What is Grafana?" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dashboards with Grafana&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This preview feature enables you to use Grafana’s powerful visualisations without the burden of managing or paying for a full Grafana deployment. You can create and edit dashboards directly in the Azure portal or deploy them using ARM or Bicep templates. You can build dashboards from scratch or import existing ones from the Grafana community. &lt;/p&gt;

&lt;p&gt;There are some limitations with this feature as it doesn’t support Grafana evaluated alerts, reports, library panels, snapshots, playlists, app plugins, and copying panels across different dashboards.&lt;/p&gt;

&lt;p&gt;While available at no extra cost in preview, usage may incur charges depending on the underlying data sources and Azure Monitor usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Managed Grafana
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/azure/managed-grafana/overview?ref=techielass.com" rel="noopener noreferrer"&gt;Azure Managed Grafana&lt;/a&gt; is a fully managed Grafana service operated and supported by Microsoft. It’s optimised for Azure, with built-in support for Azure Monitor and Azure Data Explorer, along with integrated user authentication via Microsoft Entra. This makes it ideal for organisations that want to use Grafana’s full capabilities without the operational overhead of managing infrastructure, updates, or scaling.&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%2Fxz4u5oz7l5dcgxzapuxx.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%2Fxz4u5oz7l5dcgxzapuxx.png" alt="What is Grafana?" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Managed Grafana&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With high availability, automated upgrades, and integration into the Azure ecosystem, Azure Managed Grafana is a great option for teams focused on observability but short on time or resources for managing self-hosted deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Monitoring is a critical part of maintaining a healthy environment, and Grafana offers a powerful, flexible platform to visualise and understand your data — no matter the system or source.&lt;/p&gt;

&lt;p&gt;If you’re already using Azure Monitor, the Azure Monitor dashboards with Grafana preview is an excellent way to start exploring Grafana’s capabilities without the setup burden. Why not try creating your first Grafana dashboard today and see how it can transform your approach to monitoring?&lt;/p&gt;

</description>
      <category>azure</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>How to onboard a Windows Server to Azure Arc</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Wed, 29 Oct 2025 08:01:00 +0000</pubDate>
      <link>https://dev.to/techielass/how-to-onboard-a-windows-server-to-azure-arc-18fg</link>
      <guid>https://dev.to/techielass/how-to-onboard-a-windows-server-to-azure-arc-18fg</guid>
      <description>&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%2F6l2jjouzeaenjl8ma0zd.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%2F6l2jjouzeaenjl8ma0zd.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managing servers across on-premises, multi-cloud, and edge environments can quickly become complex. Microsoft Azure Arc helps solve this challenge by extending Azure’s management and security capabilities to servers running outside of Azure. In this guide, we’ll walk you through the process of onboarding a Windows Server to Azure Arc, from registering the required Azure resource providers to installing the Arc agent. Whether you’re testing with a single machine or rolling out at scale, you’ll see the different options available and how to get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://learn.microsoft.com/en-gb/azure/azure-arc/servers/prerequisites?ref=techielass.com#supported-operating-systems" rel="noopener noreferrer"&gt;&lt;u&gt;Windows Server (2012 or later)&lt;/u&gt;&lt;/a&gt; with outbound internet access or proxy setup.&lt;/li&gt;
&lt;li&gt;An active Microsoft Azure subscription&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Register Azure resource providers
&lt;/h3&gt;

&lt;p&gt;An Azure resource provider is a collection of REST operations that provide functionality for an Azure service.  &lt;/p&gt;

&lt;p&gt;To use Azure Arc-enabled servers, the following Azure resource providers must be registered in your subscription:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft.HybridCompute&lt;/li&gt;
&lt;li&gt;Microsoft.GuestConfiguration&lt;/li&gt;
&lt;li&gt;Microsoft.HybridConnectivity&lt;/li&gt;
&lt;li&gt;Microsoft.AzureArcData&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To enable them, you can use Azure PowerShell, Azure CLI or the Azure portal.  We’re going to use Azure CLI this time. &lt;/p&gt;

&lt;p&gt;Head over to &lt;a href="https://shell.portal.com/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;https://shell.portal.com&lt;/u&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%2F2lx9gpnyu0haqh2xa290.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%2F2lx9gpnyu0haqh2xa290.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal CLI&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Paste the following code into your shell window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az provider register --namespace 'Microsoft.HybridCompute'
az provider register --namespace 'Microsoft.GuestConfiguration'
az provider register --namespace 'Microsoft.HybridConnectivity'
az provider register --namespace 'Microsoft.AzureArcData'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmxei7xra5qsny7jygeqn.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%2Fmxei7xra5qsny7jygeqn.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal CLI&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Options to onboard a Windows Server
&lt;/h3&gt;

&lt;p&gt;There are multiple ways to install the Azure Arc agent onto an existing Windows server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a single server&lt;/li&gt;
&lt;li&gt;Add multiple servers&lt;/li&gt;
&lt;li&gt;Add Windows Server with the installer&lt;/li&gt;
&lt;li&gt;Add servers from AWS&lt;/li&gt;
&lt;li&gt;Use the built-in Azure Arc Setup within Windows Server 2022 and later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the “add a single server” and “add multiple servers” options, both require you to run a script on the server.  The single server option is a script that is run on the target server and prompts you for your Azure login, so this is great for small environments, or maybe trying to get the agent installed on a troublesome server, but it’s not ideal if you have a large number of servers to get the Agent rolled out to. &lt;/p&gt;

&lt;p&gt;The multiple server option is a script that handles authentication through a service principal, and you have the ability to use the script as something you run on servers manually, or run through tools like Configuration Manager, Group Policy or Ansible, enabling you to scale quickly and easily with your roll out of the agent. &lt;/p&gt;

&lt;p&gt;The option to download a Windows Server Arc installer downloads an EXE that you run within the server and it will give you a graphical user interface to interact with to ensure the Arc agent is installed and registered to your Azure environment. &lt;/p&gt;

&lt;p&gt;With the multicloud connector within the Azure portal, you can connect AWS resources to Azure using the Azure Arc agent. &lt;/p&gt;

&lt;p&gt;And the last option available for Windows is within Windows Server itself.  Since Windows Server 2022 an option has been built into the management of the server that allows you to walk through a wizard and connect your server to Azure using the Azure Arc agent. You can find the option to do that within the Server Manager.&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%2Fsusvg4vbt1itc957fi9z.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%2Fsusvg4vbt1itc957fi9z.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Azure Arc on a single Windows server
&lt;/h3&gt;

&lt;p&gt;From the &lt;strong&gt;Azure Portal&lt;/strong&gt; , search for &lt;strong&gt;Server - Azure Arc&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%2Ff5wy9q68bgt7zyexyvk1.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%2Ff5wy9q68bgt7zyexyvk1.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;generate script&lt;/strong&gt; box below &lt;strong&gt;Add a single server&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%2Ftfxgycg4kan8mkt8iq3p.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%2Ftfxgycg4kan8mkt8iq3p.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You will be met with a wizard asking for some information. You are asked to select the subscription, resource group, operating system (OS), connectivity and region.  For this tutorial, ensure you select Windows as the OS and move to the next step.&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%2Fsc1f1vpdarnbveyc8fj3.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%2Fsc1f1vpdarnbveyc8fj3.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next step is to populate any values for the suggested tags, or you can create your own.&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%2Fte5ixp78mdfeelkkkluf.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%2Fte5ixp78mdfeelkkkluf.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The last screen will show you the command to run on the Windows server. Copy this script and head over to your server.&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%2Fvmk91h3x5itp2mkkgqor.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%2Fvmk91h3x5itp2mkkgqor.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Open the &lt;strong&gt;Terminal&lt;/strong&gt; on your server and paste in the script. &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%2F4ymlt49m6ow9z8qhmpcv.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%2F4ymlt49m6ow9z8qhmpcv.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The script will run through and will open a browser for you to authenticate to your Azure environment. &lt;/p&gt;

&lt;p&gt;Once the script has finished running, it will have installed the Azure Arc agent and connected it to your Azure environment. &lt;/p&gt;

&lt;p&gt;If you head back into the Azure portal, you will see it listed as a connected server. &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%2Fgui6p67ql9ut2dd0r4ng.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%2Fgui6p67ql9ut2dd0r4ng.png" alt="How to onboard a Windows Server to Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Portal Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What now?
&lt;/h2&gt;

&lt;p&gt;With your servers Azure Arc enabled you have a lot of new avenues open to you. One of the biggest advantages is the ability to manage your on-premises and multi-cloud Windows Servers using the same Azure tools you already rely on in the cloud, such as Azure Policy, Defender for Cloud, etc. &lt;/p&gt;

&lt;p&gt;If you are using Windows Server licences with Software Assurance (SA) you can also look at enabling &lt;a href="https://www.techielass.com/windows-server-management-enabled-by-azure-arc/" rel="noopener noreferrer"&gt;&lt;u&gt;Advanced Windows Server Management capabilities&lt;/u&gt;&lt;/a&gt;, which will give you access to things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Update Manager&lt;/li&gt;
&lt;li&gt;Azure Change Tracking and Inventory&lt;/li&gt;
&lt;li&gt;Azure Machine Configuration&lt;/li&gt;
&lt;li&gt;Remote Support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re running older versions of Windows Server 2012, SQL Server 2012, or SQL Server 2014 Azure Arc can make obtaining and applying &lt;a href="https://learn.microsoft.com/en-us/windows-server/get-started/extended-security-updates-overview?ref=techielass.com" rel="noopener noreferrer"&gt;Extended Security Updates (ESU)&lt;/a&gt; much easier. Traditionally, ESUs required Software Assurance and a fair bit of manual setup and commercial negotiating, but with Azure Arc you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seamlessly enable ESUs on eligible servers through the Azure portal.&lt;/li&gt;
&lt;li&gt;Centralise billing for ESUs alongside your other Azure resources.&lt;/li&gt;
&lt;li&gt;Automate patch delivery by combining ESUs with Azure Update Manager, reducing the risk of missed critical updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This integration means you can keep legacy systems secure while planning migrations or modernisation projects, without sacrificing visibility or adding extra complexity.&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Estimate cloud costs with Terraform and Infracost</title>
      <dc:creator>Sarah Lean 🏴󠁧󠁢</dc:creator>
      <pubDate>Tue, 28 Oct 2025 08:17:23 +0000</pubDate>
      <link>https://dev.to/techielass/estimate-cloud-costs-with-terraform-and-infracost-16kd</link>
      <guid>https://dev.to/techielass/estimate-cloud-costs-with-terraform-and-infracost-16kd</guid>
      <description>&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%2Fwm6cvo8xtigwa7oityiz.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%2Fwm6cvo8xtigwa7oityiz.png" alt="Estimate cloud costs with Terraform and Infracost" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Costing out your infrastructure has always been a challenge. Trying to compare vendors and options.  It can be very time-consuming.  &lt;/p&gt;

&lt;p&gt;In this blog post, I aim to demonstrate how you can integrate a tool called Infracost into your &lt;a href="https://www.techielass.com/tag/infrastructure-as-code/" rel="noopener noreferrer"&gt;Infrastructure as Code (IaC)&lt;/a&gt; workflow to help you accurately estimate cloud costs. &lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://www.infracost.io/?ref=techielass.com" rel="noopener noreferrer"&gt;Infracost&lt;/a&gt; is a tool designed to estimate the cost of your infrastructure based on what you are deploying via your Infrastructure as Code (IaC) configurations. &lt;/p&gt;

&lt;p&gt;It analyses what is being defined and deployed within your IaC files and provides a detailed overview of what costs you will encounter.  When using Infracost, it allows your engineering teams to understand what impact deploying those resources will have and allow them to have the correct information to make informed decisions. &lt;/p&gt;

&lt;p&gt;Currently, Infracost works with Azure, AWS and Google Cloud, but only works with &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;.  But the team is hoping to extend support to Pulumi, &lt;a href="https://www.techielass.com/tag/aws-cloudformation/" rel="noopener noreferrer"&gt;CloudFormation&lt;/a&gt; and Kubernetes. It can also be integrated into your CI/CD tooling, and support &lt;a href="https://www.techielass.com/tag/github/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://about.gitlab.com/?ref=techielass.com" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; and &lt;a href="https://www.techielass.com/tag/azure-devops/" rel="noopener noreferrer"&gt;Azure Repos&lt;/a&gt;.   &lt;/p&gt;

&lt;h2&gt;
  
  
  How to install Infracost and register
&lt;/h2&gt;

&lt;p&gt;There are a few options in terms of how to install Infracost.  I run Windows and use Chocolatey to help me install software so I am going to use that. For the other options, see the &lt;a href="https://www.infracost.io/docs/?ref=techielass.com#1-install-infracost" rel="noopener noreferrer"&gt;&lt;u&gt;official documentation&lt;/u&gt;&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;choco install infracost -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing it, make sure it works by checking the version of it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infracost –version

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have the software installed, you need to register to be able to use the tool.  You can either sign up using your GitHub or Google account by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infracost auth login

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Estimating cloud costs with Infracost and Terraform
&lt;/h2&gt;

&lt;p&gt;Now let’s use Infracost to estimate the cost of an Azure deployment defined in Terraform.&lt;/p&gt;

&lt;p&gt;Let’s prepare some Terraform to estimate the cost of.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~&amp;gt; 3.0"
    }
    azapi = {
      source = "Azure/azapi"
      version = "&amp;gt;= 2.2.0, &amp;lt; 3.0.0"
    }
  }
backend "azurerm" {
    resource_group_name = "rg-terraformstate"
    storage_account_name = "terraformstatetechielass"
    container_name = "tfstate"
    key = "tfdemo.env0.tfstate"
  }
}

provider "azurerm" {
  features {}
}

provider "azapi" {
  # Configuration options
}

resource "azurerm_resource_group" "rg" {
  name = "rg-demo-vm"
  location = "UK South"
}

resource "azurerm_virtual_network" "vnet" {
  name = "vnet-demo"
  address_space = ["10.0.0.0/16"]
  location = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
}

resource "azurerm_subnet" "subnet" {
  name = "subnet-demo"
  resource_group_name = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes = ["10.0.1.0/24"]
}

resource "azurerm_network_interface" "nic" {
  name = "nic-demo"
  location = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name

  ip_configuration {
    name = "internal"
    subnet_id = azurerm_subnet.subnet.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_windows_virtual_machine" "vm" {
  name = "win-vm-demo"
  resource_group_name = azurerm_resource_group.rg.name
  location = azurerm_resource_group.rg.location
  size = "Standard_D4s_v3"
  admin_username = "azureuser"
  admin_password = "P@ssword1234!"
  network_interface_ids = [
    azurerm_network_interface.nic.id,
  ]

  os_disk {
    caching = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer = "WindowsServer"
    sku = "2019-Datacenter"
    version = "latest"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We're creating an Azure Virtual Machine (VM) and supporting resources within our Terraform. Using that, let’s look at what the cost will look like for them. To do that, you must first go to the directory that holds your configuration files and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;infracost breakdown -- path .

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fuoq54quv94ew5ccjikl6.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%2Fuoq54quv94ew5ccjikl6.png" alt="Estimate cloud costs with Terraform and Infracost" width="800" height="362"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Infracost output of estimated costs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is also a &lt;a href="https://marketplace.visualstudio.com/items?itemName=Infracost.infracost&amp;amp;ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;VS Code Extension&lt;/u&gt;&lt;/a&gt; available for Infracost.  It can help show you as you write the code what the price of your resources will be.  &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%2Ffuft8xlsr342vmrr03oo.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%2Ffuft8xlsr342vmrr03oo.png" alt="Estimate cloud costs with Terraform and Infracost" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Infracost within VS Code showing estimated costs&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Infracost Pricing
&lt;/h2&gt;

&lt;p&gt;There are several plans available depending on how you want to use Infracost.  There is a free plan with limited functionality that can be great for individual engineers or home projects.  However, there are two paid plans available for those seeking more functionality and for larger teams. &lt;/p&gt;

&lt;p&gt;The paid plans offer the ability to create dashboards, tagging policies, &lt;a href="https://www.techielass.com/tag/finops/" rel="noopener noreferrer"&gt;FinOps&lt;/a&gt;policies, Jira integration, custom price books, and much more, which will improve your FinOps practices. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.infracost.io/?ref=techielass.com" rel="noopener noreferrer"&gt;Infracost&lt;/a&gt; brings much needed cost visibility into your infrastructure workflow. Whether you are experimenting on your own projects or working on production workloads. It's a great way to align technical decisions with financial impact.&lt;/p&gt;

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