<?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>The Ops Community ⚙️: Sarah Lean</title>
    <description>The latest articles on The Ops Community ⚙️ by Sarah Lean (@techielass).</description>
    <link>https://community.ops.io/techielass</link>
    <image>
      <url>https://community.ops.io/images/06HaIs7T_1b8V_btf3LEOxZ2QnHmzfLDGbHKnYh3AL4/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS83NS8xNDM3/NDVjYi1hNGI4LTRl/ODAtYWQxNi0wZDY0/NWM1MzZhNzAuanBn</url>
      <title>The Ops Community ⚙️: Sarah Lean</title>
      <link>https://community.ops.io/techielass</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/techielass"/>
    <language>en</language>
    <item>
      <title>How to use Terraform to generate secrets</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Tue, 22 Jul 2025 09:58:48 +0000</pubDate>
      <link>https://community.ops.io/techielass/how-to-use-terraform-to-generate-secrets-3059</link>
      <guid>https://community.ops.io/techielass/how-to-use-terraform-to-generate-secrets-3059</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/t6zWfJnsHHAoqx-quZP53qI0seAgrftB6vhUyNl1_CE/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2UzenI1/OHNtbTc3YjRsMmFz/bXduLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/t6zWfJnsHHAoqx-quZP53qI0seAgrftB6vhUyNl1_CE/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2UzenI1/OHNtbTc3YjRsMmFz/bXduLnBuZw" alt="How to use Terraform to generate secrets" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managing secrets like passwords or encryption keys is a critical part of deploying and managing a secure infrastructure. Doing it manually is risky and time-consuming and also can be error-prone. &lt;/p&gt;

&lt;p&gt;In this blog post, I’ll walk you through how you can automatically generate a secure password, set an expiry date, and then store it safely in Azure Key Vault all via Terraform.&lt;/p&gt;

&lt;p&gt;Let’s dive in.&lt;/p&gt;

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

&lt;p&gt;Before we start, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terraform v1.10.0 or later&lt;/li&gt;
&lt;li&gt;Access to an Azure subscription&lt;/li&gt;
&lt;li&gt;An existing Azure Key Vault&lt;/li&gt;
&lt;li&gt;Basic familiarity with Terraform and Azure resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What we're building
&lt;/h3&gt;

&lt;p&gt;In this blog post we’re going to do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a secure 20-character password&lt;/li&gt;
&lt;li&gt;Store the password in Azure Key Vault as a secret&lt;/li&gt;
&lt;li&gt;Sets an expiry date on the password when stored within Azure Key Vault&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Terraform random module
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://registry.terraform.io/providers/hashicorp/random/latest?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Terraform random provider&lt;/u&gt;&lt;/a&gt; is a handy tool for generating unpredictable values during your infrastructure deployments. &lt;/p&gt;

&lt;p&gt;It’s often used to create random strings, passwords, or unique names — which is perfect for when you need something secure or something that is non-repeating. &lt;/p&gt;

&lt;p&gt;In this example, we’re going to use the random_password resource to generate a strong 20-character password with a mix of upper-case letters, numbers, and special characters. It’s a simple but effective way to automate credential creation without hardcoding anything sensitive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Terraform code to generate a secret
&lt;/h3&gt;

&lt;p&gt;Let’s break it down step-by-step.  We start by setting the minimum version for the providers to ensure compatibility and stability:&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_version = "&amp;gt;= 1.10.0"
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "&amp;gt;= 3.71, &amp;lt; 5.0.0"
    }
    random = {
      source = "hashicorp/random"
      version = "&amp;gt;= 3.5.1, &amp;lt; 4.0.0"
    }
    azapi = {
      source = "Azure/azapi"
      version = "&amp;gt;= 2.2.0, &amp;lt; 3.0.0"
    }
    time = {
      source = "hashicorp/time"
      version = "~&amp;gt; 0.9"
    }
  }
}

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

&lt;/div&gt;



&lt;p&gt;We then configure the AzureRM and Azure AzAPI providers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "azapi" {
  # Configuration options
}

provider "azurerm" {
  features {}
  subscription_id = "XXXX-XXXX-XXXX-XXXX"
}

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

&lt;/div&gt;



&lt;p&gt;Next we need to start to pull in some useful data about our existing Azure Key Vault which is going to store our generated secret.  This helps Terraform understand which Azure Key Vault to use and who the current Azure user is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data "azurerm_key_vault" "key_vault" {
  name = var.key_vault_name
  resource_group_name = var.key_vault_rg
}

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

&lt;/div&gt;



&lt;p&gt;Next we create the resource, or strong password using the Random module.  This will create a random 20-character password that includes special characters, numbers and uppercase letters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Generate a random password
resource "random_password" "password" {
  length = 20
  special = true
  upper = true
  numeric = true
  sensitive = true
}

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

&lt;/div&gt;



&lt;p&gt;So the secret doesn’t live forever, we give them a 30-day expiry.  This code generates a date 30 days from now in RFC3339 format, perfect for use in Azure Key Vault.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "time_offset" "expiry" {
  offset_days = 30
}

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

&lt;/div&gt;



&lt;p&gt;And lastly we want to store the secret we’ve generated in the Azure Key Vault.  This code ensures the secret is stored security, will automatically expire and can be managed centrally in Azure Key Vault.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Store the generated password in the Key Vault
resource "azurerm_key_vault_secret" "passwordstorage" {
  name = "generated-password"
  value = random_password.password.result
  key_vault_id = data.azurerm_key_vault.key_vault.id
  expiration_date = time_offset.expiry.rfc3339
}

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

&lt;/div&gt;



&lt;p&gt;I also have a variables.tf file to store some variables with this Terraform code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
##
# Variables
##

variable "key_vault_rg" {
  description = "The resource group name of the key vault"
  type = string
  default = "rg-rk77"
}

variable "key_vault_name" {
  description = "The name of the key vault"
  type = string
  default = "kv-rk77"
}

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Best practices
&lt;/h3&gt;

&lt;p&gt;When you are working with secrets within your code it’s important to strike the right balance between automation and security. &lt;/p&gt;

&lt;p&gt;Within your Terraform code you want to make sure you mark any sensitive values like generated passwords as sensitive within outputs or variables.  This prevents Terraform from accidentally printing them within the CLI output or logs during pipeline runs.&lt;/p&gt;

&lt;p&gt;Also, remember that Terraform state files store &lt;em&gt;everything&lt;/em&gt;, including secret values. Using a secure remote backend, like an Azure Storage Account with encryption and access controls, is a must to avoid exposing credentials.&lt;/p&gt;

&lt;p&gt;Avoid using &lt;em&gt;terraform output&lt;/em&gt; to pass secrets to other systems. Instead, ensure applications securely retrieve secrets directly from Azure Key Vault, that’s ultimately what it’s designed for. &lt;/p&gt;

&lt;p&gt;Lastly, ensure you define an expiry date for your secrets and keys. In this example, I used a 30-day offset, but it’s important to build in a regular rotation process too. That could mean rerunning Terraform on a schedule or triggering updates via your CI/CD tool.&lt;/p&gt;

&lt;p&gt;These small steps can help keep your automation secure, scalable and production-ready. &lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;Automating your secret creation and management with Terraform helps to reduce manual effort and improve security.&lt;/p&gt;

&lt;p&gt;By generating secure passwords, applying sensible expiry policies and using something like Azure Key Vault to store those passwords in you are building a strong foundation for managing your sensitive data in the cloud.  &lt;/p&gt;

&lt;p&gt;This is just one example of how infrastructure as code can help build in those secure and repeatable patterns from here you can introduce rotation policies or even integrate with Azure services, happy automation!&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>azure</category>
    </item>
    <item>
      <title>What the terraform providers command tells you</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Thu, 10 Jul 2025 06:17:59 +0000</pubDate>
      <link>https://community.ops.io/techielass/what-the-terraform-providers-command-tells-you-1ndp</link>
      <guid>https://community.ops.io/techielass/what-the-terraform-providers-command-tells-you-1ndp</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/WOhK1oJfl4pY3pPo_1Rhua2M9WPNV6Z50izZuo_P7l8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2o1cDVm/MjlyYTBsdzE0Z2R4/aWZ4LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/WOhK1oJfl4pY3pPo_1Rhua2M9WPNV6Z50izZuo_P7l8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2o1cDVm/MjlyYTBsdzE0Z2R4/aWZ4LnBuZw" alt="What the terraform providers command tells you" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working with &lt;a href="https://www.techielass.com/tag/terraform" rel="noopener noreferrer"&gt;&lt;u&gt;Terraform&lt;/u&gt;&lt;/a&gt;, especially on complex projects, you can end up managing a lot of Azure services and knowing which Terraform providers you are using, how they are sourced and version can be key to ensuring you have Terraform code that is maintainable, easy to debug and easy to collaborate on. &lt;/p&gt;

&lt;p&gt;One of the simplest yet most powerful commands in your Terraform toolkit is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;terraform providers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But what does it actually &lt;em&gt;do&lt;/em&gt;? Let’s break it down.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Terraform provider?
&lt;/h3&gt;

&lt;p&gt;Before diving into the command, a quick refresher: Terraform &lt;strong&gt;providers&lt;/strong&gt; are plugins that let Terraform interact with APIs of various platforms like Azure, AWS, GitHub, or Kubernetes. They define the &lt;em&gt;resources&lt;/em&gt; you can create and manage.&lt;/p&gt;

&lt;p&gt;I have a Terraform file that deploys &lt;a href="https://www.techielass.com/deploy-azure-communication-services-with-terraform" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Communication Services&lt;/u&gt;&lt;/a&gt; and at the start of the code I have these providers defined:&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_version = "&amp;gt;= 1.10.0"
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "&amp;gt;= 3.71, &amp;lt; 5.0.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "&amp;gt;= 3.5.1, &amp;lt; 4.0.0"
    }
    azapi = {
      source  = "Azure/azapi"
      version = "&amp;gt;= 2.2.0, &amp;lt; 3.0.0"
    }
  }
}

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  What does the command terraform providers do?
&lt;/h3&gt;

&lt;p&gt;Running: terraform providers will list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All the providers used in your configuration.&lt;/li&gt;
&lt;li&gt;Which modules (if any) use which providers.&lt;/li&gt;
&lt;li&gt;Which versions are actually being used.&lt;/li&gt;
&lt;li&gt;Where the source of the provider is (e.g. hashicorp/azurerm).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is incredibly helpful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging provider version mismatches&lt;/li&gt;
&lt;li&gt;Auditing a repo for compliance&lt;/li&gt;
&lt;li&gt;Understanding inherited providers in large or multi-module environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example output from your configuration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using the &lt;a href="https://www.techielass.com/deploy-azure-communication-services-with-terraform" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Communication Services&lt;/u&gt;&lt;/a&gt; Terraform code, if I run terraform init and then terraform providers, this is the output I get. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/PLatEJCh57KI2CDZpllPWxa70Uws6pzfv6DmG1SIuMs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRDckF5UmVaU2Ju/Y3FtMVhyRzd2SE92/RC14WWZzNThJUFlJ/bTJwN0syOWNFbHdf/cHZ5bjFaYWgwVDVK/cjJhRmlyUlU3M3Vl/bjdBa0lOY3l6UHo2/VS1La2Nrejk4UU5k/OFl0WTVoeFl5R3BF/RlZzeGpZUWtaVENf/VHVfYXp5NUQ5cFhl/WjBTMlE_a2V5PXhL/WmJWcXRENmFwbGJa/RUZaWFc4VXZITg" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/PLatEJCh57KI2CDZpllPWxa70Uws6pzfv6DmG1SIuMs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRDckF5UmVaU2Ju/Y3FtMVhyRzd2SE92/RC14WWZzNThJUFlJ/bTJwN0syOWNFbHdf/cHZ5bjFaYWgwVDVK/cjJhRmlyUlU3M3Vl/bjdBa0lOY3l6UHo2/VS1La2Nrejk4UU5k/OFl0WTVoeFl5R3BF/RlZzeGpZUWtaVENf/VHVfYXp5NUQ5cFhl/WjBTMlE_a2V5PXhL/WmJWcXRENmFwbGJa/RUZaWFc4VXZITg" alt="What the terraform providers command tells you" width="800" height="408"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terraform providers command&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Terraform returns a structured view showing which providers your configuration and state currently rely on.&lt;/p&gt;

&lt;p&gt;In my view, I have two sections, the first is the providers required by configuration sections tells us what providers are currently declared within my Terraform code. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;azapi: Used to interact with Azure REST APIs&lt;/li&gt;
&lt;li&gt;azurerm: The main provider for deploying Azure resources such as resource groups, etc.&lt;/li&gt;
&lt;li&gt;random: I use this within my code to help randomise the Azure region I use. &lt;/li&gt;
&lt;li&gt;module.naming: This module also uses the random provider independently, which is why it's listed under the module.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within my code, I have set a version range for each provider. This helps me safe within tested versions and avoid unexpected breaking changes when new versions are released. &lt;/p&gt;

&lt;p&gt;The section section is the providers required by state section which shows which providers are currently in use in the actual Terraform state file—that is, what has already been deployed.&lt;/p&gt;

&lt;p&gt;Ideally, what’s in your configuration and what’s in your state should match. In your case, they do, which means your project is in a healthy, expected state. If they didn’t match, it might mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You removed a provider from the config, but the resources it created are still managed in state.&lt;/li&gt;
&lt;li&gt;You updated a module or version but haven’t run terraform apply yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters in Real-Life Projects
&lt;/h2&gt;

&lt;p&gt;At first glance, the output from terraform providers might seem like just a list of technical details — something you could ignore once your infrastructure is up and running. But in real-world projects, especially as they grow in complexity or involve multiple teams, understanding this output becomes essential.&lt;/p&gt;

&lt;p&gt;One of the key benefits of this command is clarity. It gives you a precise view of which Terraform providers your configuration is depending on, and more importantly, what’s actually in use within your state file. This becomes particularly valuable when you're troubleshooting. &lt;/p&gt;

&lt;p&gt;By running terraform providers, you get a clear picture of all dependencies,  even the ones nested inside modules. This visibility helps you avoid version conflicts or issues where one part of your infrastructure behaves differently because it relies on a slightly older or newer version of a provider.&lt;/p&gt;

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

&lt;p&gt;The terraform providers command isn’t just for show — it’s a core part of understanding and controlling your project’s dependencies. Whether you're building advanced configurations or managing simpler infrastructure, this command gives you visibility into your project's backbone.&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>Azure Local Solution Categories explained: Validated Nodes, Integrated Systems, and Premier Solutions</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Wed, 07 May 2025 07:07:31 +0000</pubDate>
      <link>https://community.ops.io/techielass/azure-local-solution-categories-explained-validated-nodes-integrated-systems-and-premier-1pha</link>
      <guid>https://community.ops.io/techielass/azure-local-solution-categories-explained-validated-nodes-integrated-systems-and-premier-1pha</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/tHvkh8i0nwTao4mBwy2gz3UcE98hTzULYkNCX86zhK8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2s1amM4/ZjJmZ3V2dXVuM3pu/aXJiLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/tHvkh8i0nwTao4mBwy2gz3UcE98hTzULYkNCX86zhK8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2s1amM4/ZjJmZ3V2dXVuM3pu/aXJiLnBuZw" alt="Azure Local Solution Categories explained: Validated Nodes, Integrated Systems, and Premier Solutions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft launched Azure Local (formerly Azure Stack HCI) in December 2020, the launch marked a new operating system (OS) specifically designed for hyper-converged infrastructure (HCI) enabling organisations to run virtualisation workloads on-premises while integrating Azure services for hybrid cloud capabilities. &lt;/p&gt;

&lt;p&gt;The rename from Azure Stack HCI to Azure Local happened in November 2024. &lt;/p&gt;

&lt;p&gt;When evaluating an Azure Local deployment, it’s important to understand the three main solution categories available: &lt;strong&gt;Validated Nodes&lt;/strong&gt; , &lt;strong&gt;Integrated Systems&lt;/strong&gt; , and &lt;strong&gt;Premier Solutions&lt;/strong&gt;. Each offers different levels of integration, flexibility, and support.&lt;/p&gt;

&lt;p&gt;In this article, we’ll break down the differences to help you choose the best fit for your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Azure Local?
&lt;/h3&gt;

&lt;p&gt;Azure Local is a hybrid infrastructure solution that allows you to run virtual machines and container workloads on-premises while seamlessly connecting to Azure services. &lt;/p&gt;

&lt;p&gt;It’s built on a purpose-specific operating system designed for hyper-converged infrastructure (HCI), enabling organisations to modernise their data centres, extend their cloud capabilities, and maintain control over data locality. &lt;/p&gt;

&lt;p&gt;Whether you're running workloads in a branch office, data centre, or edge environment, &lt;a href="https://www.techielass.com/tag/azure-local/" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Local&lt;/u&gt;&lt;/a&gt; helps bridge the gap between on-premises and the cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/qPllBJPGg-sRXnR9Pl_5hsF0q7MyGZ28RBWSIIyY3DM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGMwTEpiakppaWVX/RlpyZmwyZlhIZDZO/d3NPcV81YmVyQmJ1/dEhzcmlMTWc3WWlX/YV8wTWhXTXo2S1Az/MFM5QUN0TS12aVpX/YkZXajhvUnUweWFs/VU81V1M4SnNRX0tx/b1huQzBtSnAzOTNX/STRSQTVkZEFSb3NT/MlpzMzNCM1hwVzlf/NzhQY3c_a2V5PTJx/ZmhCbjRnRlF2WHBt/c3EzYTVDY1NhdQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/qPllBJPGg-sRXnR9Pl_5hsF0q7MyGZ28RBWSIIyY3DM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGMwTEpiakppaWVX/RlpyZmwyZlhIZDZO/d3NPcV81YmVyQmJ1/dEhzcmlMTWc3WWlX/YV8wTWhXTXo2S1Az/MFM5QUN0TS12aVpX/YkZXajhvUnUweWFs/VU81V1M4SnNRX0tx/b1huQzBtSnAzOTNX/STRSQTVkZEFSb3NT/MlpzMzNCM1hwVzlf/NzhQY3c_a2V5PTJx/ZmhCbjRnRlF2WHBt/c3EzYTVDY1NhdQ" alt="Azure Local Solution Categories explained: Validated Nodes, Integrated Systems, and Premier Solutions" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Local&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Understanding Azure Local’s Solution Categories: Premier, Integrated, and Validated
&lt;/h3&gt;

&lt;p&gt;When you look at purchasing Azure Local there are three distinct solution categories to suit different needs and levels of integration: premier solutions, integrated systems or validated nodes. &lt;/p&gt;

&lt;p&gt;While they all provide a path to hybrid infrastructure, they differ in how much is pre-integrated, how updates are managed and how flexible your deployment can be.&lt;/p&gt;
&lt;h3&gt;
  
  
  What are validated nodes for Azure Local?
&lt;/h3&gt;

&lt;p&gt;Validated nodes give you the most flexibility. You can choose to purchase a complete setup from a hardware vendor, or build your own using individual components from the validated list. For example, if you have a spare server sitting in a cupboard but the network card isn’t on the Azure Local validated component list, you can simply swap it out for one that is. Once all components meet the requirements, you’ve got yourself a validated node ready for an Azure Local deployment.&lt;/p&gt;

&lt;p&gt;You're in full control with a validated node, the hardware, deploying the software, managing firmware, driver updates and keeping the Azure Local operating system up to date. &lt;/p&gt;

&lt;p&gt;For some end users this option might be daunting but for experienced IT teams or service providers who want a tailored experience this is a great option. &lt;/p&gt;
&lt;h3&gt;
  
  
  What are integrated systems for Azure Local?
&lt;/h3&gt;

&lt;p&gt;With integrated systems you have hardware that has been validated by the hardware vendor and Microsoft as being compatible and working with Azure Local.  And this validation happens anywhere between 2 and 4 times a year.  &lt;/p&gt;

&lt;p&gt;You get a solution that is tested and supported, but you may need to do a bit more work to apply firmware or driver updates for the hardware before applying any software updates. &lt;/p&gt;

&lt;p&gt;One of the advantages of the integrated system is the integrated support queues between Microsoft and the hardware vendor.  This means if you have an issue with your Azure Local deployment you can log a ticket with Microsoft who will help to triage it, and if it’s a hardware fault they will work with you and the hardware vendor.  And vice versa you could log the ticket with your hardware vendor and if they discover the issue is software related they can work with you and Microsoft to resolve it.  This avoids the need for you to log two tickets. &lt;/p&gt;

&lt;p&gt;The integrated system option gives you the reassurance of a validated setup but one still gets you some flexibility. &lt;/p&gt;
&lt;h3&gt;
  
  
  What are Premier Solutions for Azure Local?
&lt;/h3&gt;

&lt;p&gt;With the premier solutions you are getting the most integrated, streamlined path to deploy and manage Azure Local. &lt;/p&gt;

&lt;p&gt;There is a close partnership with the hardware vendors and Microsoft from the operating system, drivers, firmware and management tools.  The two teams are constantly talking and ensuring everything works together seamlessly. &lt;/p&gt;

&lt;p&gt;Updates for hardware and software are delivered in a coordinated way, reducing the risk of compatibility issues and also ensuring it’s a straightforward one step process to deploy those updates. &lt;/p&gt;

&lt;p&gt;The premier solution also has the advantage of the integrated support queues between Microsoft and the hardware vendor.  &lt;/p&gt;

&lt;p&gt;You also have proactive call-home support services available which could automatically alert Microsoft or the hardware vendor of faults. &lt;/p&gt;

&lt;p&gt;Microsoft partners already offer more than 100 Azure Local solutions in the &lt;a href="https://azurelocalsolutions.azure.microsoft.com/?ref=techielass.com#/catalog" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Local catalog&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  Choosing the right solution category
&lt;/h3&gt;

&lt;p&gt;It’s important to pick the right solution category for your needs and budget.  In very simplified terms you can look at the three options like this: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validated&lt;/strong&gt; = DIY and customisable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated&lt;/strong&gt; = Balance of control and support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Premier&lt;/strong&gt; = Turnkey, enterprise-ready solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can compare the different solution categories &lt;a href="https://azurelocalsolutions.azure.microsoft.com/?ref=techielass.com#/Learn" rel="noopener noreferrer"&gt;&lt;u&gt;here&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/VG93UwKOdrw3LQvHCahLMV1XLcuTo_Mp_yt5BPGbdM0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL25rZDgw/bTRjbXYzbnBvOHV6/Y25jLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/VG93UwKOdrw3LQvHCahLMV1XLcuTo_Mp_yt5BPGbdM0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL25rZDgw/bTRjbXYzbnBvOHV6/Y25jLnBuZw" alt="Azure Local Solution Categories explained: Validated Nodes, Integrated Systems, and Premier Solutions" width="800" height="505"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Local solution categories&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xeJHQht3_D4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Azure Local offers a flexible and modern path to hybrid infrastructure, and choosing the right solution category is key to a successful deployment and experience.  Whether you need full control or a balanced approach or a full turnkey solution there is an option to suit your business goals, skills and budget. &lt;/p&gt;

&lt;p&gt;Take time to explore the &lt;a href="https://azurelocalsolutions.azure.microsoft.com/?ref=techielass.com#/catalog" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Local catalog&lt;/u&gt;&lt;/a&gt; and speak to your hardware partner or Microsoft representative to explore options and find the right fit for you.&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Terraform depends_on: What it is, When to use it, and Best Practices</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Wed, 07 May 2025 07:01:07 +0000</pubDate>
      <link>https://community.ops.io/techielass/terraform-dependson-what-it-is-when-to-use-it-and-best-practices-18ig</link>
      <guid>https://community.ops.io/techielass/terraform-dependson-what-it-is-when-to-use-it-and-best-practices-18ig</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/gsFhTcmTtUhS1Uu7slm6wip2qVaxGEf_Gayo7iuBHnI/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2d0cGpi/amVweDFmNmlqaDZo/MGFwLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/gsFhTcmTtUhS1Uu7slm6wip2qVaxGEf_Gayo7iuBHnI/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2d0cGpi/amVweDFmNmlqaDZo/MGFwLnBuZw" alt="Terraform depends_on: What it is, When to use it, and Best Practices" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working with &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;, managing resource dependencies effectively is key to avoiding deployment issues. Terraform is great at automatically determining the order of resource creation, but sometimes it needs a little help, this is where depends_on comes in.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll explain Terraform depends_on, how to use it, when to use it, and best practices for writing clean and efficient Terraform code. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Terraform depends_on?
&lt;/h2&gt;

&lt;p&gt;Terraform’s depends_on is a meta-argument that allows you to specify an explicit relationship between resources.  When you use it you can enforce an order in which resources should be created or updated.  &lt;/p&gt;

&lt;p&gt;When you configure Terraform, it analyses its dependency graph to understand the relationships between different resources. This graph helps Terraform determine the order in which resources should be created, updated, or destroyed. But, this might not always be enough when you are dealing with complex or non-obvious relationships between resources. &lt;/p&gt;

&lt;p&gt;This is where the Terraform depends_on meta-argument can be used to add explicit dependencies.  &lt;/p&gt;

&lt;h2&gt;
  
  
  How to use depends_on in Terraform
&lt;/h2&gt;

&lt;p&gt;Using the depends_on meta-argument in Terraform is straightforward.  Here is an example of syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
resource "azure_resource_type" "resource_name" {
  #resource configuration

  depends_on = [azure_resource_type.dependent_resource_name]
}

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

&lt;/div&gt;



&lt;p&gt;A bit more of a working example would be:&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_resource_group" "example" {
  name = "example-rg"
  location = "East US"
}

resource "azurerm_storage_account" "example" {
  name = "examplestoracct"
  resource_group_name = azurerm_resource_group.example.name
  location = azurerm_resource_group.example.location
  account_tier = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_virtual_machine" "example" {
  name = "example-vm"
  resource_group_name = azurerm_resource_group.example.name
  location = azurerm_resource_group.example.location
  network_interface_ids = []

  vm_size = "Standard_B1s"

  depends_on = [azurerm_storage_account.example]
}

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Now in the example above you don't necessarily need to ensure the storage account to be created before the virtual machine, but you may have a specific use case for doing this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Remember that the depends_on meta-argument will accept a list of resources, enabling you to tell the Terraform code that multiple dependencies exist. &lt;/p&gt;

&lt;h2&gt;
  
  
  When to use depends_on in Terraform
&lt;/h2&gt;

&lt;p&gt;You should only really use the depends_on within your Terraform code when the implicit dependencies are not enough.  &lt;/p&gt;

&lt;p&gt;Here are some situations where the depends_on will make sense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes resources take a long time to fully provision, you can use the depends_on to help you manage this timing issue. &lt;/li&gt;
&lt;li&gt;When working with Terraform provisioners (like local-exec and remote-exec) run scripts or commands during deployment.  Terraform doesn’t track script execution state so depends_on may help ensure things are deployed in the correct order. &lt;/li&gt;
&lt;li&gt;Terraform modules may not always recognise dependencies between separate module calls, you can use depend_on to force execution order. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best practices for Terraform depends_on
&lt;/h2&gt;

&lt;p&gt;The depends_on meta-argument is a powerful tool, however, overuse or incorrect use of it can lead to complications in your Terraform configurations. Here are some best practices to consider when working with it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rely on implicit dependencies whenever possible, only resort to depends_on when there is no other viable option. &lt;/li&gt;
&lt;li&gt;When you do use the depends_on option, make sure you document why so other team members, or you at a later date understand why it’s there and can avoid adding in unintended complexity. &lt;/li&gt;
&lt;li&gt;Be sure to check during version upgrades or providers or modules if any changes affect the implicit or explicit dependencies, as sometimes updates can lead to unexpected behaviour in your code. &lt;/li&gt;
&lt;li&gt;Best sure to test any dependencies you implement into your code and ensure it causes no issues. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Terraform’s depends_on meta-argument is a useful tool when implicit dependencies aren’t enough, ensuring that resources are created in the right order. &lt;/p&gt;

&lt;p&gt;By following best practices, such as relying on implicit dependencies where possible, documenting explicit dependencies, and testing your configurations, you can keep your Terraform code clean, efficient, and maintainable.&lt;/p&gt;

&lt;p&gt;Use depends_on wisely, and your Terraform deployments will be more reliable and predictable—helping you avoid unnecessary complexity and troubleshooting headaches.&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>Terraform Dependencies: Implicit vs. Explicit Explained</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Tue, 29 Apr 2025 09:25:53 +0000</pubDate>
      <link>https://community.ops.io/techielass/terraform-dependencies-implicit-vs-explicit-explained-fkh</link>
      <guid>https://community.ops.io/techielass/terraform-dependencies-implicit-vs-explicit-explained-fkh</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/Eh1UB9pfONYLgLNIcqbpoHXqzdr9Fthu8T_AoNxREi0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2I2ZXVr/NmFkaGJ1ODlteDB4/anhiLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Eh1UB9pfONYLgLNIcqbpoHXqzdr9Fthu8T_AoNxREi0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2I2ZXVr/NmFkaGJ1ODlteDB4/anhiLnBuZw" alt="Terraform Dependencies: Implicit vs. Explicit Explained" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are creating resources through &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; either you or our coding tool have to understand how each resource needs to be created.  Which order to deploy them in so they all deploy correctly. There are two ways of handling this challenge, implicit and explicit dependencies. In this blog post we’ll define what those two types of dependencies are, show you examples and share some best practices and common pitfalls. &lt;/p&gt;

&lt;h2&gt;
  
  
  What are Terraform dependencies?
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://www.techielass.com/tag/terraform/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;, dependencies define the order in which resources should be created, updated, or destroyed. Since many infrastructure components rely on others (e.g., a virtual machine needing a network to connect to), Terraform must understand these relationships to deploy resources in the correct order.&lt;/p&gt;

&lt;p&gt;Terraform has a built-in dependency management system that automatically determines the correct order for most resources. However, sometimes Terraform needs additional guidance, which is where explicit dependencies come into play.&lt;/p&gt;

&lt;p&gt;There are two types of dependencies in Terraform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implicit Dependencies&lt;/strong&gt; – Automatically detected when a resource references another resource’s attributes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Dependencies&lt;/strong&gt; – Manually defined using the &lt;a href="https://www.techielass.com/how-to-use-terraform-depends-on/" rel="noopener noreferrer"&gt;depends_on meta-argument&lt;/a&gt; when Terraform cannot infer dependencies correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implicit dependencies in Terraform
&lt;/h2&gt;

&lt;p&gt;An implicit dependency within Terraform is when Terraform automatically detects dependencies when a resource references another resource’s attributes. &lt;/p&gt;

&lt;p&gt;In the example below Terraform automatically understands that there is a dependency that the resource group needs to be greeted before the virtual network because we’ve referenced the resource group name in our virtual network configuration.&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_resource_group" "example" {
  name = "rg-example"
  location = "UK South"
}

resource "azurerm_virtual_network" "example" {
  name = "networking"
  resource_group_name = azurerm_resource_group.example.name
  location = azurerm_resource_group.example.location
  address_space = ["10.0.0.0/16"]
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explicit dependencies in Terraform
&lt;/h2&gt;

&lt;p&gt;An explicit dependency within Terraform is when Terraform doesn’t detect dependencies correctly and you need to use the depends_on meta-argument to ensure resources are created in the correct order. &lt;/p&gt;

&lt;p&gt;In the example below we are making sure Terraform makes absolutely sure that things are created in the right order with our depends_on. Even though Terraform should be able to figure it out from other references we’re making it crystal clear.&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_netapp_account" "example" {
  name = "example-netapp-account"
  location = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_netapp_pool" "example" {
  name = "example-netapp-pool"
  location = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  account_name = azurerm_netapp_account.example.name
  service_level = "Premium"
  size_in_tb = 4

  depends_on = [azurerm_netapp_account.example]
}

resource "azurerm_netapp_volume" "example" {
  name = "example-netapp-volume"
  location = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  account_name = azurerm_netapp_account.example.name
  pool_name = azurerm_netapp_pool.example.name
  volume_path = "examplevolume"
  service_level = "Premium"
  subnet_id = azurerm_subnet.example.id
  protocol = "NFSv4.1"

  depends_on = [
    azurerm_netapp_account.example,
    azurerm_netapp_pool.example
  ]
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common pitfalls and best practices
&lt;/h2&gt;

&lt;p&gt;Implicit dependencies should be your first port of call in Terraform since they are automatically detected and Terraform handles the ordering and deployment for you.  To minimise potential issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always document why you’ve included an explicit dependency in your code so others looking at your code can understand why it was included. &lt;/li&gt;
&lt;li&gt;Try to use implicit dependencies as much as possible and avoid over use of explicit dependencies as it can add in complexity when it is not needed.&lt;/li&gt;
&lt;li&gt;Think about how you write your code, sometimes organising your resources into modules can help management dependencies more efficiently. &lt;/li&gt;
&lt;li&gt;Remember to run &lt;em&gt;terraform plan&lt;/em&gt; before applying changes as this can help detect any misconfigurations around dependencies. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Terraform can automatically handle dependencies based on resource references but sometimes it needs help and you have to manually build dependencies into your code using the depends_on meta-argument. &lt;/p&gt;

&lt;p&gt;However, if you understand the concepts of implicit and explicit dependencies you can help to build smoother Terraform deployments and more robust infrastructure.&lt;/p&gt;

</description>
      <category>terraform</category>
    </item>
    <item>
      <title>Microsoft Defender for Storage: Threat Detection &amp; Protection for Your Data</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Mon, 21 Apr 2025 10:07:00 +0000</pubDate>
      <link>https://community.ops.io/techielass/microsoft-defender-for-storage-threat-detection-protection-for-your-data-3716</link>
      <guid>https://community.ops.io/techielass/microsoft-defender-for-storage-threat-detection-protection-for-your-data-3716</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/0l2Y4ZWLtXVqQ_digt-IPlevkH7rztR5b64P4CgoP3U/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL283NW5p/Y2U3Ym50Y2ozZDQ0/YXZoLmpwZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/0l2Y4ZWLtXVqQ_digt-IPlevkH7rztR5b64P4CgoP3U/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL283NW5p/Y2U3Ym50Y2ozZDQ0/YXZoLmpwZw" alt="Microsoft Defender for Storage: Threat Detection &amp;amp; Protection for Your Data" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensuring your environment is secure goes beyond just installing an anti-virus security product on your servers. You need to think about protecting your storage, your apps, containers, databases, identity and much more… And you need to pick the right product to protect those workloads. &lt;/p&gt;

&lt;p&gt;In this article, we’ll explore how Defender for Storage works, its key features, pricing, and how to enable it within the Azure portal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Microsoft Defender for Storage?
&lt;/h2&gt;

&lt;p&gt;Microsoft Defender for Storage is a cloud-native security solution that is designed to protect Azure Storage accounts from various threats.  It provides threat detection by analysing data access patterns, scanning for malware and leveraging Microsoft’s threat intelligence. &lt;/p&gt;

&lt;p&gt;Defender for Storage supports Azure Blob Storage, Azure Files, Azure Data Lake Storage and Azure Queues and Tables. &lt;/p&gt;

&lt;p&gt;Defender for Storage integrates with Microsoft Defender for Cloud, ensuring you receive security alerts and recommendations to enhance your cloud security posture. &lt;/p&gt;

&lt;h2&gt;
  
  
  How Defender for Storage works
&lt;/h2&gt;

&lt;p&gt;Defender for Storage provides multiple layers of protection. One of the layers is malware scanning. It scans any files uploaded to Azure Blob storage for known threats and also uses Microsoft’s threat intelligence database to detect and prevent malware distribution.&lt;/p&gt;

&lt;p&gt;Another layer of protection is &lt;strong&gt;anomaly detection&lt;/strong&gt;. Defender for Storage will identify any unusual access patterns that might indicate an insider threat or a cyberattack.  It will look for anomalies such as massive file downloads, data exfiltration or repeated failed access attempts. &lt;/p&gt;

&lt;p&gt;The other area of protection Defender for Storage offers is &lt;strong&gt;threat intelligence integration&lt;/strong&gt; , where it leverages Microsoft’s global security insights to detect threats.  An example would be if a known malicious IP tries to interact with a storage account. &lt;/p&gt;

&lt;p&gt;The generated alerts or recommendations are displayed within Microsoft Defender for Cloud and can be integrated into Microsoft Sentinel for automated security responses if necessary. &lt;/p&gt;

&lt;h2&gt;
  
  
  Defender for Storage pricing
&lt;/h2&gt;

&lt;p&gt;Defender for Storage can be enabled at the resource level or at the subscription level and you do have the ability to exclude specific storage accounts from being included if you wish. &lt;/p&gt;

&lt;p&gt;Defender for Storage is charged per storage account per month. Currently, the price is $10 per storage account per month (US Dollars).&lt;/p&gt;

&lt;p&gt;It’s worth noting that malware scanning is an add-on and is charged at $0.15/GB of data scanned.  But you can configure a &lt;a href="https://learn.microsoft.com/azure/defender-for-cloud/defender-for-storage-introduction?ref=techielass.com#malware-scanning---billing-per-gb-monthly-capping-and-configuration" rel="noopener noreferrer"&gt;&lt;u&gt;monthly cap&lt;/u&gt;&lt;/a&gt; so that costs are predictable. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enable Defender for Storage with the Azure portal
&lt;/h2&gt;

&lt;p&gt;You can enable Defender for Storage at the subscription level or at an individual storage account level.  It is recommended you enable it at the subscription level to ensure full coverage within your environment. &lt;/p&gt;

&lt;p&gt;To enable it at the subscription level follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign in to the Azure portal.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Microsoft Defender for Cloud&lt;/strong&gt; management blade.&lt;/li&gt;
&lt;li&gt;Expand &lt;strong&gt;Management&lt;/strong&gt; then select &lt;strong&gt;Environment settings&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/UNOaxFJvkTd6xlYCUM1y5p8fkIz0lnrxAzLaC590y6k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3U4cHdn/NnRuYjFobWd5Mzcz/MHp2LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/UNOaxFJvkTd6xlYCUM1y5p8fkIz0lnrxAzLaC590y6k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3U4cHdn/NnRuYjFobWd5Mzcz/MHp2LnBuZw" alt="Microsoft Defender for Storage: Threat Detection &amp;amp; Protection for Your Data" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Microsoft Defender for Cloud&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the subscription for which you want to enable Defender for Storage.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;three dots&lt;/strong&gt; on the right and then choose the &lt;strong&gt;Edit settings&lt;/strong&gt; option.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/atwfvsH38NGYBI64sl6LvshEgM92bEpnekeDVZNNeSs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3QwdzRk/YmlzZnd2dWplZnox/ZmM0LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/atwfvsH38NGYBI64sl6LvshEgM92bEpnekeDVZNNeSs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3QwdzRk/YmlzZnd2dWplZnox/ZmM0LnBuZw" alt="Microsoft Defender for Storage: Threat Detection &amp;amp; Protection for Your Data" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Microsoft Defender for Cloud environment settings&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Defender plans page, locate &lt;strong&gt;Storage&lt;/strong&gt; in the list and select &lt;strong&gt;On and Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/GVcUuotzW5_WAlrsfsyBY8xwkyalk9eK2wKzln1Unhk/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL294dTlx/M2F1Z3puc2t1YnF4/NXlhLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/GVcUuotzW5_WAlrsfsyBY8xwkyalk9eK2wKzln1Unhk/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL294dTlx/M2F1Z3puc2t1YnF4/NXlhLnBuZw" alt="Microsoft Defender for Storage: Threat Detection &amp;amp; Protection for Your Data" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Microsoft Defender for Cloud environment settings&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Defender for Storage is now enabled across your subscription, including the malware protection.  You can turn this off by going back into settings and turning it off. &lt;/p&gt;

&lt;p&gt;Any storage accounts that are created after enabling Defender for Storage will be protected up to 24 hours after creation. &lt;/p&gt;

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

&lt;p&gt;Securing your environment requires a well-thought-out strategy and goes beyond traditional anti-virus solutions.  Microsoft Defender for Storage provides a cloud-native solution to detect threats, prevent malware, and leverage Microsoft’s threat intelligence to keep your Azure Storage accounts secure. &lt;/p&gt;

&lt;p&gt;In today’s landscape, choosing the right security tools is essential, and Defender for Storage is a powerful addition to your overall security strategy.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>security</category>
    </item>
    <item>
      <title>Dev Container Setup for Hugo</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Fri, 18 Apr 2025 10:06:29 +0000</pubDate>
      <link>https://community.ops.io/techielass/dev-container-setup-for-hugo-54p2</link>
      <guid>https://community.ops.io/techielass/dev-container-setup-for-hugo-54p2</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/TTTyIQLlHPfyN7xpvUjWaFrmqNpVNoDD5ARXftbmppA/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzUybm4z/OWFiMTI3a3Z5cG9p/eGt5LmpwZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/TTTyIQLlHPfyN7xpvUjWaFrmqNpVNoDD5ARXftbmppA/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzUybm4z/OWFiMTI3a3Z5cG9p/eGt5LmpwZw" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine a development environment where you never have to worry about mismatched library versions, missing dependencies, or spending hours setting up a new project. &lt;a href="https://www.techielass.com/what-are-dev-containers" rel="noopener noreferrer"&gt;Dev containers&lt;/a&gt; in Visual Studio Code (VS Code) are here to make that a reality. These Docker-powered environments are tailored to your codebase, ensuring everything runs smoothly, consistently, and with minimal setup.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through the process of setting up a dev container from scratch and setting it up for your &lt;a href="https://www.techielass.com/tag/hugo/" rel="noopener noreferrer"&gt;&lt;u&gt;Hugo&lt;/u&gt;&lt;/a&gt; project.  Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Dev containers in VS Code?
&lt;/h2&gt;

&lt;p&gt;Development containers, or dev containers within Visual Studio Code (VS Code), are Docker containers configured to provide a fully featured development environment you can work within.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the point of Dev containers?
&lt;/h2&gt;

&lt;p&gt;Dev containers can configured to run an application, to have separate tools, libraries runtimes, dependencies, or whatever is needed to run your codebase. &lt;/p&gt;

&lt;p&gt;How many times have you worked on a project and had problems trying to set up your laptop to have the right version of a library or runtime and had trouble and wasted hours?  If you set up a dev container you can be sure the environment is set up for that codebase, and better yet you can share the dev container with colleagues making their life easier to work on that codebase as well. &lt;/p&gt;

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

&lt;p&gt;Whether you are a macOS user or a Windows user, you need to have the following installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio Code (VS Code)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&amp;amp;ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Dev Containers extension installed&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;_I have prepared this guide as a Windows user, steps may be different for macOS users. _&lt;/p&gt;

&lt;h2&gt;
  
  
  Dev Container Setup
&lt;/h2&gt;

&lt;p&gt;In the bottom left-hand corner of VS Code click on the container button. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/xpAKB527aw0EhaXzCiTgOJouXLEQ9DJExiShaNd5a3o/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGY2bE1EOHlXRmZF/ckdPcFZOQ2hUanBJ/bi1BQmszaUEwREpX/dlBZTVRuTVl2MnlH/WGRENDNWZUxRY3dK/VWM5RGpZNDBJR1hm/b1hqQkFoZnZfNTZL/bDVFSGxpc3JnQVpO/dHRsbGVhdzc2TGk4/N0lDdk9NaGNSRjU5/MmJKZFZ2bnNfRVJt/amdCOGc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/xpAKB527aw0EhaXzCiTgOJouXLEQ9DJExiShaNd5a3o/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGY2bE1EOHlXRmZF/ckdPcFZOQ2hUanBJ/bi1BQmszaUEwREpX/dlBZTVRuTVl2MnlH/WGRENDNWZUxRY3dK/VWM5RGpZNDBJR1hm/b1hqQkFoZnZfNTZL/bDVFSGxpc3JnQVpO/dHRsbGVhdzc2TGk4/N0lDdk9NaGNSRjU5/MmJKZFZ2bnNfRVJt/amdCOGc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The setup wizard will pop up at the top of your screen. &lt;/p&gt;

&lt;p&gt;When it does click on &lt;strong&gt;New Dev Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/q_1m0jbWh-f5-sMlk0WsdN9DbhS-724CXnxuZdtfu0k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNQSDhXY2hwUVJF/b1E4aWFmVFdKczJ0/cVdpdGVyVUpyemJn/Z1R2R0RDbnlVaUt5/N1lIYThaUWFsMHJD/Z0UzYmZEYzVJdTRw/SUwySnZYdmt2ZXRL/M0RKRnAybnZFWEVz/djVRb2NGZ0s4UE9N/ZVV6RTFVa0V4X3Fk/UlJCVVU1WmJfaDRh/QWNoP2tleT1FVWxx/WEkzNzc0NVk4LWRt/M0xPRkJFSU0" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/q_1m0jbWh-f5-sMlk0WsdN9DbhS-724CXnxuZdtfu0k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNQSDhXY2hwUVJF/b1E4aWFmVFdKczJ0/cVdpdGVyVUpyemJn/Z1R2R0RDbnlVaUt5/N1lIYThaUWFsMHJD/Z0UzYmZEYzVJdTRw/SUwySnZYdmt2ZXRL/M0RKRnAybnZFWEVz/djVRb2NGZ0s4UE9N/ZVV6RTFVa0V4X3Fk/UlJCVVU1WmJfaDRh/QWNoP2tleT1FVWxx/WEkzNzc0NVk4LWRt/M0xPRkJFSU0" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The setup wizard will check if Docker is already installed, if it’s not it will ask if you want to install &lt;strong&gt;Docker within WSL&lt;/strong&gt; , say &lt;strong&gt;Install&lt;/strong&gt; , as this will install Docker within the Windows Subsystem for Linux. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/ancBvcg6NFdzaO8nR--rhnfBkJ0K67h1hjVLMhgy6PM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZwcUFXYlZiSVpM/WERhQnJrTXR0dUlh/d1BLdVNBa0RBOURp/djFZalVCQU1KT1h4/MkRvWFhXQWlIdG9o/Mi1SdmptcHVyOWFP/WWkyS2trWGN0Y3Yy/dE9OMHZmOVA0UFVR/OUtPYXlxRnU1UDVr/RmxodEJVajNRdnJL/QXhQQVVTWmZlSTZN/c1lzWnc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/ancBvcg6NFdzaO8nR--rhnfBkJ0K67h1hjVLMhgy6PM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZwcUFXYlZiSVpM/WERhQnJrTXR0dUlh/d1BLdVNBa0RBOURp/djFZalVCQU1KT1h4/MkRvWFhXQWlIdG9o/Mi1SdmptcHVyOWFP/WWkyS2trWGN0Y3Yy/dE9OMHZmOVA0UFVR/OUtPYXlxRnU1UDVr/RmxodEJVajNRdnJL/QXhQQVVTWmZlSTZN/c1lzWnc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="462" height="214"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once the installation has been completed, restart your laptop and relaunch VS Code. &lt;/p&gt;

&lt;p&gt;Click on the button in the button in the left-hand corner of VS Code again. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/aliicG4AboNxLXnI4F0uqyLyf70ILCEqzEalco4oLAM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZkOVZ5Q2x1TEpu/cFhkVkZaUHlOUUxB/T05ZUWZPOTlXVXo4/NEMzUC1HY1l2T2RK/cFZzUnFOdlFVMGxq/bXNTTlJOS2dHV3Z4/NkpUVnNaMmQ0UzRi/UGJzNjNDRi0xUHZq/TnlDaGNBaG5NY2pr/Z2EzRmE1UElrQnc2/cDZFZm5xYVZtOFFi/Q2MyYmc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/aliicG4AboNxLXnI4F0uqyLyf70ILCEqzEalco4oLAM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZkOVZ5Q2x1TEpu/cFhkVkZaUHlOUUxB/T05ZUWZPOTlXVXo4/NEMzUC1HY1l2T2RK/cFZzUnFOdlFVMGxq/bXNTTlJOS2dHV3Z4/NkpUVnNaMmQ0UzRi/UGJzNjNDRi0xUHZq/TnlDaGNBaG5NY2pr/Z2EzRmE1UElrQnc2/cDZFZm5xYVZtOFFi/Q2MyYmc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The setup wizard will pop up at the top of your screen. &lt;/p&gt;

&lt;p&gt;When it does click on &lt;strong&gt;New Dev Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/-aWGUfa5p7b_LQsCXym5P8AwJoMAzm_WrsKbmTWJhrs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRfYUYxVGNVdFhu/MjVKdVlsbnpZU2xj/dm0zdlFwZmNHTlRI/U01rNGRnc0tYSnpX/Zi1QdzE0aFpCcEt4/ejVrQWFHbGZ4ZzZ4/SS1xRWxaVDJhNmhy/bFN5d1UxcE05OWN3/bGZYRFIxQWFCTEFV/WGRpU0RLNEtULTBK/MDFrMWNHdjEwellT/bDZFP2tleT1FVWxx/WEkzNzc0NVk4LWRt/M0xPRkJFSU0" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/-aWGUfa5p7b_LQsCXym5P8AwJoMAzm_WrsKbmTWJhrs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRfYUYxVGNVdFhu/MjVKdVlsbnpZU2xj/dm0zdlFwZmNHTlRI/U01rNGRnc0tYSnpX/Zi1QdzE0aFpCcEt4/ejVrQWFHbGZ4ZzZ4/SS1xRWxaVDJhNmhy/bFN5d1UxcE05OWN3/bGZYRFIxQWFCTEFV/WGRpU0RLNEtULTBK/MDFrMWNHdjEwellT/bDZFP2tleT1FVWxx/WEkzNzc0NVk4LWRt/M0xPRkJFSU0" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The next step is to select the template you would like to use.  In this case, I am going to select the &lt;strong&gt;Ubuntu&lt;/strong&gt; configuration template.   This template already has Git installed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/diK2ttL0x6COg0uWC32pT1xFLm2TSuTbDxm7ZJ8QsKM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZsSnRZN2hITTRK/d0lidUtwVlhqeVp5/aDFXSUhMaU9JUy10/WVRDWVA1MUVpU2dx/eHFsZXlTLXQ3cmsx/b3RGYUZXdWVlelZj/RDBpQkpfVEYtdlIw/MXU2LVYyUkgtNWtf/RDlfNHJBZlV5NWdv/Z2ZOVU9IRVpfVzMw/N2RNYjFlU19HSjFw/RXlEUmc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/diK2ttL0x6COg0uWC32pT1xFLm2TSuTbDxm7ZJ8QsKM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZsSnRZN2hITTRK/d0lidUtwVlhqeVp5/aDFXSUhMaU9JUy10/WVRDWVA1MUVpU2dx/eHFsZXlTLXQ3cmsx/b3RGYUZXdWVlelZj/RDBpQkpfVEYtdlIw/MXU2LVYyUkgtNWtf/RDlfNHJBZlV5NWdv/Z2ZOVU9IRVpfVzMw/N2RNYjFlU19HSjFw/RXlEUmc_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The container will launch and start to set up the necessary parts for it to be usable. &lt;/p&gt;

&lt;p&gt;When it finishes loading click on the container button in the left-hand corner again.  This will pop up the menu again.  Be sure to select &lt;strong&gt;Configure Container Features&lt;/strong&gt;.  We are now going to install Hugo and Go. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/KKyaUrugyEPbFpLsMLzR5MsEriaSCtwhslQg8uRbQ0k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNhZzg4N2VrY2Zt/Zzd6V2xUY0JYb1hx/aEJVOGxqVnBfQlVv/Tko3LVhnQkJ1Rmh4/NklQQktMZXlzYnFq/SzRxblhqb1FKaXY5/SkRzRlJmVVl1cjJa/ejl3UzdzbnZULVVs/dEN5UEpMOENZcGN4/ZlhUcUx3bFJvUVVx/ZFhOeU9wRHZPWFBI/LWhCV3c_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/KKyaUrugyEPbFpLsMLzR5MsEriaSCtwhslQg8uRbQ0k/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNhZzg4N2VrY2Zt/Zzd6V2xUY0JYb1hx/aEJVOGxqVnBfQlVv/Tko3LVhnQkJ1Rmh4/NklQQktMZXlzYnFq/SzRxblhqb1FKaXY5/SkRzRlJmVVl1cjJa/ejl3UzdzbnZULVVs/dEN5UEpMOENZcGN4/ZlhUcUx3bFJvUVVx/ZFhOeU9wRHZPWFBI/LWhCV3c_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Search for &lt;strong&gt;Go&lt;/strong&gt;. There are several options, but I use the official dev containers version. Click *&lt;em&gt;OK. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/l65Fo5wskn_u4jINQd2yCdCTMompGMk3Nicq2XCfCeg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRVbEo1RW9zRWot/U2JiSDVyZVZsdFVk/MkNKZ3lYX1ZNWFEw/cl95czlNUENXOXJU/M0ZJWHF2Q0VTTVlP/eU9FenB5RGFVTWo5/RlJwNV90QXlOV1hy/bk43R05RNVRqSDhm/VnJEQ0pXaXkxc0xR/ckRqOWplbU9HMUtp/RlYyZlFxWURWTzky/UVprV0E_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/l65Fo5wskn_u4jINQd2yCdCTMompGMk3Nicq2XCfCeg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGRVbEo1RW9zRWot/U2JiSDVyZVZsdFVk/MkNKZ3lYX1ZNWFEw/cl95czlNUENXOXJU/M0ZJWHF2Q0VTTVlP/eU9FenB5RGFVTWo5/RlJwNV90QXlOV1hy/bk43R05RNVRqSDhm/VnJEQ0pXaXkxc0xR/ckRqOWplbU9HMUtp/RlYyZlFxWURWTzky/UVprV0E_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You’ll be asked how you want to configure this installation, select *&lt;em&gt;Keep Defaults. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next search for &lt;strong&gt;Hugo.&lt;/strong&gt;  There should only be one option, select it and click *&lt;em&gt;OK. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This time you want to select *&lt;em&gt;Configure options. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Select the version you want to install, I always go for the &lt;strong&gt;latest.&lt;/strong&gt; Next, you will be asked if you want to install the extended version of Hugo or not, again I always select yes to this as some themes need it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/Kfww38Z9QKkjHaw3R3zjSBE643VVJGEm8YZIYHATDYY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZHb3BpcHQ2NTZi/cE03TEJ3M0UtWXN6/V0pGMlZHaXRubjhL/dWdXb09XbnpENDJH/V1M4OThjNDRVaDla/RUFQZm5Sa1NTUV9X/MWpMWEVaOGhhamM2/eklXR0lLUFVyX1Bt/SW05TnFyS3ZsUl9X/T25MMExzX1RMNmRq/OHBGd1VqTWtqMXpy/MHhNSkE_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Kfww38Z9QKkjHaw3R3zjSBE643VVJGEm8YZIYHATDYY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGZHb3BpcHQ2NTZi/cE03TEJ3M0UtWXN6/V0pGMlZHaXRubjhL/dWdXb09XbnpENDJH/V1M4OThjNDRVaDla/RUFQZm5Sa1NTUV9X/MWpMWEVaOGhhamM2/eklXR0lLUFVyX1Bt/SW05TnFyS3ZsUl9X/T25MMExzX1RMNmRq/OHBGd1VqTWtqMXpy/MHhNSkE_a2V5PUVV/bHFYSTM3NzQ1WTgt/ZG0zTE9GQkVJTQ" alt="Dev Container Setup for Hugo" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;VS Code dev container setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When you’ve selected these options, VS Code will alert you that your container configuration has changed and needs to be rebuilt. Be sure to rebuild it. &lt;/p&gt;

&lt;p&gt;&amp;lt;!--kg-card-begin: html--&amp;gt;&amp;lt;br&amp;gt;
     (adsbygoogle = window.adsbygoogle || []).push({});&amp;lt;br&amp;gt;
&amp;lt;!--kg-card-end: html--&amp;gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Create Hugo website
&lt;/h2&gt;

&lt;p&gt;First of all, we have to create a new site. In the root folder then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hugo new site . --force

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

&lt;/div&gt;



&lt;p&gt;In the project I have created, I have installed Hugo bigspring-light theme. Let’s see how.&lt;/p&gt;

&lt;p&gt;In the root folder run:&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/gethugothemes/bigspring-light-hugo themes/bigspring-light

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

&lt;/div&gt;



&lt;p&gt;And the last step, let’s copy the example content located in &lt;em&gt;mynewsite/themes/bigspring-light/exampleSite/&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp -r themes/bigspring-light/exampleSite/* .

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

&lt;/div&gt;



&lt;p&gt;We are now ready to build and serve our new site. Let’s run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hugo server

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

&lt;/div&gt;



&lt;p&gt;The VS Code dev container will automatically configure any port forwarding for you.  &lt;em&gt;It’s worth noting that this Hugo theme shows the example website at &lt;a href="https://ipadress:port/bigspring/site" rel="noopener noreferrer"&gt;https://ipadress:port/bigspring/site&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If we want to automate the building and the serving actions, we can add a &lt;strong&gt;postStartCommand&lt;/strong&gt; property, with Hugo server set, to the devcontainer.json file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "name": "Ubuntu",
    // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
    "image": "mcr.microsoft.com/devcontainers/base:jammy",
    "features": {
        "ghcr.io/devcontainers/features/go:1": {
            "version": "latest"
        },
        "ghcr.io/devcontainers/features/hugo:1": {
            "extended": true,
            "version": "latest"
        }
    },
    "postStartCommand": "hugo server"
}

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

&lt;/div&gt;



&lt;p&gt;In this way, the next time you start the container again, the hugo server command will be run automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap Up
&lt;/h2&gt;

&lt;p&gt;Dev containers in &lt;a href="https://code.visualstudio.com/?ref=techielass.com" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt; can be a game changer for engineers working on multiple projects as it offers a consistent, reliable and shareable environment for your individual project.  By following this guide, you’ve learned how to set up a dev container from scratch, configure it for a Hugo project, and even automate tasks like building and serving your site.&lt;/p&gt;

&lt;p&gt;Whether you’re working on a team or solo, dev containers eliminate the headaches of environment mismatches and setup struggles. Plus, the ability to share your container configuration ensures everyone can hit the ground running.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>hugo</category>
    </item>
    <item>
      <title>What Are Dev Containers?</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Wed, 26 Mar 2025 08:08:31 +0000</pubDate>
      <link>https://community.ops.io/techielass/what-are-dev-containers-2cpp</link>
      <guid>https://community.ops.io/techielass/what-are-dev-containers-2cpp</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/qZQ4Ycoy-NwIMJrHG8-EUwKvXFQuc0TWC1wIxN_2Ymg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3Y5MGt4/dGdlZWtoZHBmaDh6/MmU0LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/qZQ4Ycoy-NwIMJrHG8-EUwKvXFQuc0TWC1wIxN_2Ymg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3Y5MGt4/dGdlZWtoZHBmaDh6/MmU0LnBuZw" alt="What are Dev Containers?" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With modern development it can be complex, Engineers and developers juggle multiple projects, each with unique tools, dependencies, and configurations. Switching between these environments or collaborating with others often leads to frustration and wasted time. &lt;/p&gt;

&lt;p&gt;This is where Dev Containers can play a huge role. In this article, we’ll explore what Dev Containers are, why they’re worth using, and how they can simplify your workflow while boosting collaboration and productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are Dev Containers?
&lt;/h3&gt;

&lt;p&gt;Have you ever heard the phrase, “It works on my machine”?, it’s a common frustration among software developers, or anyone who works within development environments. &lt;/p&gt;

&lt;p&gt;Maintaining a development environment that works for all your projects can be a frustrating and never-ending battle. &lt;/p&gt;

&lt;p&gt;This is where Dev Containers can help, no matter what machine you are working on. &lt;/p&gt;

&lt;p&gt;Dev Containers are portable, lightweight environments configured using Docker containers.  They allow engineers to define and share their development environment through configuration files. &lt;/p&gt;

&lt;p&gt;With Dev Containers your entire environment - all the dependencies, tools, and extensions are defined within code and that means it’s easy to spin up a container and reproduce that environment and share it with colleagues to ensure consistency. So we can stop hearing that “it works on my machine” phrase. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why Use Dev Containers?
&lt;/h3&gt;

&lt;p&gt;Beyond the consistency reason to use Dev Containers there are a number of benefits you can see if you start to work with them. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Solve dependency issues:&lt;/strong&gt;  We’ve all faced it. Mismatched library versions or incompatible runtime environments. When we encapsulate our environment all inside a Dev Container those issues don’t exist, you can spend time working on the code instead of trying to find the right library to install. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability:&lt;/strong&gt; Maybe you have a Windows laptop and a MacBook you work on.  Dev Containers work on either, you can switch between those two machines, fire up your Dev Container and have a consistent environment to work on, regardless of the hardware you are using or the operating system. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experimentation without risk:&lt;/strong&gt; If you want to try a new tool or new library or framework, you can spin up a Dev Container and try it without breaking your local environment. Experiment without causing issues is a great way of learning. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless integration with tools&lt;/strong&gt; : Dev Containers work seamlessly with tools like &lt;a href="https://code.visualstudio.com/?ref=techielass.com" rel="noopener noreferrer"&gt;Visual Studio Code (VS Code)&lt;/a&gt;, if you install the &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&amp;amp;ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;Dev Containers extension&lt;/u&gt;&lt;/a&gt; within VS Code it will automatically detect the Dev Containers configuration file and sets up the environment for you. 
&amp;lt;!--kg-card-begin: html--&amp;gt;
 (adsbygoogle = window.adsbygoogle || []).push({});
&amp;lt;!--kg-card-end: html--&amp;gt;
### Best Practices for Using Dev Containers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you are running Dev Containers there are some best practices you should follow: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Include your .devcontainer folder in your version control system, this ensures that everyone on your team can access the same configuration and changes to it are tracked. &lt;/li&gt;
&lt;li&gt;Only include tools and dependencies you actually need, don’t make it to complex. &lt;/li&gt;
&lt;li&gt;When you are creating your devcontainer.json configuration file make sure you add in comments so that others can understand the setup and stay informed of any changes to it. &lt;/li&gt;
&lt;li&gt;Containers can sometimes introduce performance overhead, particularly on systems with limited resources. Optimize your Docker settings and ensure that your base image is lightweight.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Dev Containers can be game changers to ensure that everyone has a consistent and reliable workspace to develop within.  &lt;/p&gt;

&lt;p&gt;Whether you are collaborating with a large team, working on open-source projects, or even just looking for a cleaner way to manage your development environment, Dev Containers are work exploring.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Visualising data with KQL</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Thu, 13 Mar 2025 08:34:32 +0000</pubDate>
      <link>https://community.ops.io/techielass/visualising-data-with-kql-5ep1</link>
      <guid>https://community.ops.io/techielass/visualising-data-with-kql-5ep1</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/7OrKBN4-c7ThQj44TDDZvt_VFQbUpEc3c4BlyQg23QM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2Jtd2Zk/ZzJjcGlyc2F1dTNn/OHlxLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/7OrKBN4-c7ThQj44TDDZvt_VFQbUpEc3c4BlyQg23QM/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2Jtd2Zk/ZzJjcGlyc2F1dTNn/OHlxLnBuZw" alt="Visualising data with KQL" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever struggled to make sense of endless rows of raw data? With Kusto Query Language (KQL), you don’t have to. Built-in data visualisation tools allow you to turn complex datasets into intuitive charts and graphs, making insights easier to grasp and share. Read on to explore how to harness these features and take your data storytelling to the next level.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is data visualisation in KQL
&lt;/h3&gt;

&lt;p&gt;Kusto Query Language (KQL) has data visualisation capabilities built into the language.  So you can turn raw data into graphical representations. This can include charts, graphs, and other visual formats that make the data more comprehensible and actionable.&lt;/p&gt;

&lt;p&gt;With this feature, it means you can start to build out &lt;a href="https://www.techielass.com/azure-dashboards-azure-workbooks-power-bi/" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Monitor workbooks or Azure Dashboards&lt;/u&gt;&lt;/a&gt; visualisations to help make the raw data more accessible to a wider audience and easier to understand at a quick glance. &lt;/p&gt;

&lt;h3&gt;
  
  
  KQL Render Operator
&lt;/h3&gt;

&lt;p&gt;The render operator within the KQL language has eleven different options for rendering your data. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anomaly Chart&lt;/li&gt;
&lt;li&gt;Area Chart&lt;/li&gt;
&lt;li&gt;Bar Chart&lt;/li&gt;
&lt;li&gt;Card&lt;/li&gt;
&lt;li&gt;Column Chart&lt;/li&gt;
&lt;li&gt;Line Chart&lt;/li&gt;
&lt;li&gt;Pie Chart&lt;/li&gt;
&lt;li&gt;Scatter Chart&lt;/li&gt;
&lt;li&gt;Stacked Area Chart&lt;/li&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;Time Chart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The render operator should be the last operator used in any of your queries. It can only be used with queries that produce a single tabular data stream result. The render operator doesn’t modify the data; instead, it injects a visualisation into the query result’s extended properties. &lt;/p&gt;

&lt;p&gt;An example query would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;StormEvents
| summarize EventCount = count() by State
| sort by EventCount desc
| where State != ""
| take 10
| render columnchart

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://community.ops.io/images/emsdAh4FN_EsRxwD9bA7SGLe29VHGLa63j8IBK_7KoY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGMtYnAta3ExT2hr/ZWtLSWk2d3VLTFB1/N3NHek95WFpidEtK/TzlpbVAtb194UEtM/SWhRMG1KRDFlbk4y/cEo2WG1MamsxUXJx/eDRJYU1VVi1VcmNP/Mm95LTJ3VXRzSll5/Z2FrM20wYlRKMVUw/dGtKZHkybnRGdTBh/cnJUSXdKcW5PemNB/N0VvP2tleT1iYTU4/NktIeUExWnlsN05p/b2pKN2ZwTjE" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/emsdAh4FN_EsRxwD9bA7SGLe29VHGLa63j8IBK_7KoY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGMtYnAta3ExT2hr/ZWtLSWk2d3VLTFB1/N3NHek95WFpidEtK/TzlpbVAtb194UEtM/SWhRMG1KRDFlbk4y/cEo2WG1MamsxUXJx/eDRJYU1VVi1VcmNP/Mm95LTJ3VXRzSll5/Z2FrM20wYlRKMVUw/dGtKZHkybnRGdTBh/cnJUSXdKcW5PemNB/N0VvP2tleT1iYTU4/NktIeUExWnlsN05p/b2pKN2ZwTjE" alt="Visualising data with KQL" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Data Explorer data visualisation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Other supported properties are optional for you to build your chart as well.  If we look at the query below we can elaborate on the render line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;StormEvents
| summarize sum(DamageProperty)by State
| lookup PopulationData on State
| project-away State
| render scatterchart with (xtitle="State population", title="Property damage by state", legend=hidden)

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

&lt;/div&gt;



&lt;p&gt;The render line of the query carries out the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a scatter chart to visualise the data.&lt;/li&gt;
&lt;li&gt;X-axis (xtitle) represents the state population.&lt;/li&gt;
&lt;li&gt;Y-axis implicitly represents property damage (from DamageProperty).&lt;/li&gt;
&lt;li&gt;The chart title is set to "Property damage by state."&lt;/li&gt;
&lt;li&gt;The legend is hidden for a cleaner visualisation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/tXMD_z6ulUX_Y-wuIAHp_Nv2xVFLUTtuCb1qtaz2CDY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNUMUtGanNkOFV1/N3FPbkFCU1ZPUVFh/VE9UajZYTUNVUk5C/dEFuZTAxZjh6SEdx/Mm1rYmV1VnJSWDVs/Mk4zajFhMWJ3MFFo/enYzN0gtNzZuUHJF/S3ZCOXBaVUcyM0RH/aVJQLUphenRFMHlE/bXFLZXkxNXJBLTRj/V0wwNTcxYmViOU1h/UXRtQUE_a2V5PWJh/NTg2S0h5QTFaeWw3/Tmlvako3ZnBOMQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/tXMD_z6ulUX_Y-wuIAHp_Nv2xVFLUTtuCb1qtaz2CDY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9saDct/cnQuZ29vZ2xldXNl/cmNvbnRlbnQuY29t/L2RvY3N6L0FEXzRu/WGNUMUtGanNkOFV1/N3FPbkFCU1ZPUVFh/VE9UajZYTUNVUk5C/dEFuZTAxZjh6SEdx/Mm1rYmV1VnJSWDVs/Mk4zajFhMWJ3MFFo/enYzN0gtNzZuUHJF/S3ZCOXBaVUcyM0RH/aVJQLUphenRFMHlE/bXFLZXkxNXJBLTRj/V0wwNTcxYmViOU1h/UXRtQUE_a2V5PWJh/NTg2S0h5QTFaeWw3/Tmlvako3ZnBOMQ" alt="Visualising data with KQL" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;KQL data visualisation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;!--kg-card-begin: html--&amp;gt;&amp;lt;br&amp;gt;
     (adsbygoogle = window.adsbygoogle || []).push({});&amp;lt;br&amp;gt;
&amp;lt;!--kg-card-end: html--&amp;gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data visualisation in PowerBI
&lt;/h3&gt;

&lt;p&gt;While you can build Azure Monitor Workbooks or Azure Dashboards using the KQL queries and visualisations there are times when you might want to visualise the data in PowerBI. &lt;/p&gt;

&lt;p&gt;You can pull data from your KQL databases or Azure Resource Graph from your Azure environment into a PowerBI report. &lt;/p&gt;

&lt;p&gt;Check out the video tutorial showing you how to pull in Azure Resource Graph data into PowerBI. &lt;/p&gt;

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

&lt;p&gt;KQL’s data visualisation capabilities open up a world of possibilities for transforming raw data into meaningful insights. Whether you’re using Azure Monitor Workbooks, Dashboards, or PowerBI, these tools make it easier to understand and communicate your data’s story. &lt;/p&gt;

&lt;p&gt;Ready to dive deeper into &lt;a href="https://www.techielass.com/tag/kusto/" rel="noopener noreferrer"&gt;&lt;u&gt;KQL&lt;/u&gt;&lt;/a&gt;? Check out my other blogs for more tips and examples, and don’t forget to subscribe to stay updated with the latest content. Let’s unlock the full potential of your data together!&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Advanced Windows Server Management Enabled by Azure Arc</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Fri, 07 Mar 2025 15:26:03 +0000</pubDate>
      <link>https://community.ops.io/techielass/advanced-windows-server-management-enabled-by-azure-arc-2k16</link>
      <guid>https://community.ops.io/techielass/advanced-windows-server-management-enabled-by-azure-arc-2k16</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/sDvEkD1qn3xjQ1IvPJW2gD5H0FAY66NpCqW7XJurg4Q/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3BnbHpv/cmlia3B4ZTZzazkx/Znk5LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/sDvEkD1qn3xjQ1IvPJW2gD5H0FAY66NpCqW7XJurg4Q/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3BnbHpv/cmlia3B4ZTZzazkx/Znk5LnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At Microsoft Ignite 2024 Microsoft announced the general availability of Windows Server management enabled by &lt;a href="https://www.techielass.com/tag/azure-arc/" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Arc&lt;/u&gt;&lt;/a&gt;.  This allows &lt;a href="https://www.techielass.com/tag/windows-server/" rel="noopener noreferrer"&gt;&lt;u&gt;Windows Server&lt;/u&gt;&lt;/a&gt; customers with Software Assurance access to certain Azure management services at no extra cost and add some additional management features that are only available through this offering. &lt;/p&gt;

&lt;p&gt;Also as part of this announcement, you can now buy Windows Servers licenses for your Arc Arc enabled servers on a Pay As You Go basis through the Azure Portal.&lt;/p&gt;

&lt;p&gt;Let’s break down what these announcements mean and how you can actually make them work for you within your environment. &lt;/p&gt;

&lt;h2&gt;
  
  
  Windows Server Pay-as-you-go licensing
&lt;/h2&gt;

&lt;p&gt;Licensing can be complicated and also expensive. And depending on your procurement processes purchasing a new Windows Server license may take too long for your project timeline.&lt;/p&gt;

&lt;p&gt;This is where the new Azure Arc Pay-as-you-go licensing option for Windows Server 2025 can be quite useful. &lt;/p&gt;

&lt;p&gt;You can deploy a Windows Server device on-premises, Arc enable the device and then license it, and you only pay for as much as you use.  So if that new Windows Server 2025 device is live for 30 days and then deleted, you only pay for the license for those days. &lt;/p&gt;

&lt;p&gt;The charges will be billed via your Azure subscription.&lt;/p&gt;

&lt;p&gt;While I am no expert in licensing and you should also check the documentation or consult your licensing provider there are some things you should be aware of with the Pay-as-you-go license:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are no client access licenses (CALs) required for standard functionality. However, Remote Desktop Services (RDS) CALs are still required.&lt;/li&gt;
&lt;li&gt;It doesn’t provide additional rights for virtual machines (VMs) running on the same server. &lt;/li&gt;
&lt;li&gt;Pay-as–you-go licensing is only available for Windows Server 2025 Standard or Datacenter edition. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set up Windows Server Pay-as-you-go
&lt;/h2&gt;

&lt;p&gt;When you install Windows Server 2025 the setup will ask you the licensing method you wish to use, ensure you select Pay-as-you-go, this will allow you to continue the install without providing a product key. &lt;/p&gt;

&lt;p&gt;Once the operating system is installed on your device, you need to install the &lt;a href="https://www.techielass.com/install-azure-arc-onto-your-server/" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Arc agen&lt;/u&gt;&lt;/a&gt;t onto the server. &lt;/p&gt;

&lt;p&gt;The next step is to enable the license via the Azure Portal. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head to &lt;a href="https://portal.azure.com/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;https://portal.azure.com&lt;/u&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Locate the &lt;strong&gt;Azure Arc&lt;/strong&gt; management blade&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Azure Arc resources&lt;/strong&gt; &amp;gt; &lt;strong&gt;Machines&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select the machine you wish to license&lt;/li&gt;
&lt;li&gt;Expand &lt;strong&gt;Licenses&lt;/strong&gt; &amp;gt; &lt;strong&gt;Windows Server&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/iUVS3XH2OK002VZvizFRGTyzkBuogl8la50ovn09hUE/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzFnczR3/MDJiY2JkMmZmdmpn/enFsLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/iUVS3XH2OK002VZvizFRGTyzkBuogl8la50ovn09hUE/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzFnczR3/MDJiY2JkMmZmdmpn/enFsLnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Windows Server Pay-as-you-go licensing via Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tick the &lt;strong&gt;Pay-as-you-go with Azure&lt;/strong&gt; box&lt;/li&gt;
&lt;li&gt;Click Confirm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/roiRmjOP-O2wGmKk_lZE8niJGE7zVahjl5IP2xA13_I/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3k4azEz/OXhhcjF4MXBnOGw1/djNuLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/roiRmjOP-O2wGmKk_lZE8niJGE7zVahjl5IP2xA13_I/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3k4azEz/OXhhcjF4MXBnOGw1/djNuLnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Windows Server Pay-as-you-go licensing via Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The server is now licensed and you will be billed via your Azure subscription. &lt;/p&gt;

&lt;h2&gt;
  
  
  Key features and benefits for Windows Server Management enabled by Azure Arc
&lt;/h2&gt;

&lt;p&gt;If you are using Windows Server Pay-as-you-go licensing or have Windows Server licenses with Software Assurance (SA) Microsoft are offering a lot of management services within Azure, many of which are included at no additional cost. Additionally, some new management features are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure Update Manager:&lt;/strong&gt; This feature allows you to assess the update status of your servers and deploy updates ensuring you are always up-to-date with the latest security patches and improvements. _Available to Windows Server 2012 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Change Tracking and Inventory:&lt;/strong&gt; This tool within Azure allows you to monitor changes made to your server such as software, services, files and registry helping you to quickly identify any changes that have been made. ** ** With this there are additional costs of storing data within Log Analytics. _Available to Windows Server 2012 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Machine Configuration:&lt;/strong&gt; This feature allows you to configure machine properties using Azure Policy, ensuring a consistent configuration across all servers. ** ** _Available to Windows Server 2012 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows Admin Centre in Azure for Arc:&lt;/strong&gt;  This tool allows you to be able to manage your server from anywhere, without the need for VPNs or public IP addresses.  It includes capabilities like RDP, Hyper-V management and event viewer. _Available to Windows Server 2016 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote Support:&lt;/strong&gt; This feature offers professional support with just-in-time access, revocation rights and more. ** ** _Available to Windows Server 2016 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network HUD:&lt;/strong&gt;   A host networking diagnostics and operational tool that runs spot checks, health checks, and cluster-wide checks to ensure optimal network setup. Available to Windows Server 2025 only.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Practices Assessment:&lt;/strong&gt; This collects and analyses server data to help provide guidance on how to optimise performance, security, and adhere to best practices. ** ** With this there are additional costs of storing data within Log Analytics. _Available to Windows Server 2016 and above. _&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Site Recovery Configuration:&lt;/strong&gt; Helps to configure Azure Site Recovery to ensure business continuity and provides replications and data resilience for critical workloads. With this there are additional costs with the VM replication. _Available to Windows Server 2016 and above. _&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set up Windows Server Management enabled by Azure Arc
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;From your browser head to &lt;a href="https://portal.azure.com/?ref=techielass.com" rel="noopener noreferrer"&gt;&lt;u&gt;https://portal.azure.com&lt;/u&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Azure Arc&lt;/strong&gt; management blade. &lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Licenses&lt;/strong&gt; select &lt;strong&gt;Windows Server Azure benefits and licenses&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/D5ECcRSJbuNT82bmHAhfOVUB5X7VOvq2GdShVYU04IA/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzd2bnlx/eGw3MGNjZHc5cm50/Z3VkLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/D5ECcRSJbuNT82bmHAhfOVUB5X7VOvq2GdShVYU04IA/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzd2bnlx/eGw3MGNjZHc5cm50/Z3VkLnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Set up Windows Server Management enabled by Azure Arc&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the Azure Arc-enabled servers that are eligible for enrolment (those that have Windows Server Software Assurance licenses or using the Pay-as-you-go licensing) &lt;/li&gt;
&lt;li&gt;Now select &lt;strong&gt;Activate Azure benefits&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/ZphgvC6ubinLJwGm7hjThTjYTsbNhed_C4SKAB6K2aQ/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3VkZGtx/M3Fpd2h1amdqYWwx/czN0LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/ZphgvC6ubinLJwGm7hjThTjYTsbNhed_C4SKAB6K2aQ/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3VkZGtx/M3Fpd2h1amdqYWwx/czN0LnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Activate Windows Server Management benefits&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review the terms and select the checkbox&lt;/li&gt;
&lt;li&gt;Now select &lt;strong&gt;Activate&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/R6IGUiwpkgCfGZijoy8xfrwwxofpOBZk8gB4JWCrlYc/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzNmbjdt/bWFrNzllcTRyMWNz/anR5LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/R6IGUiwpkgCfGZijoy8xfrwwxofpOBZk8gB4JWCrlYc/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzNmbjdt/bWFrNzllcTRyMWNz/anR5LnBuZw" alt="Advanced Windows Server Management Enabled by Azure Arc" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Activate Azure benefits&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It may take up to 10 mins for the activation to happen. &lt;/p&gt;

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

&lt;p&gt;The introduction of Pay-as-you-go licensing for Windows Server 2025, alongside the expanded benefits for Windows Server Software Assurance customers, provides greater flexibility and cost efficiency for organisations. With enhanced management capabilities through Azure Arc, businesses can streamline operations, improve security, and simplify licensing.&lt;/p&gt;

&lt;p&gt;If you haven’t yet Arc-enabled your on-premises servers, now is the perfect time to explore these new capabilities and make the most of what Azure Arc has to offer.&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Documenting your KQL queries</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Fri, 28 Feb 2025 20:01:47 +0000</pubDate>
      <link>https://community.ops.io/techielass/documenting-your-kql-queries-gh3</link>
      <guid>https://community.ops.io/techielass/documenting-your-kql-queries-gh3</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/iJW6OibDPw8LYtMoiVJjho1FQ_VGMtCyov__DuRUkD0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2Ntajg1/ZmpuNzYyY2g0MXNr/cWcwLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/iJW6OibDPw8LYtMoiVJjho1FQ_VGMtCyov__DuRUkD0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2Ntajg1/ZmpuNzYyY2g0MXNr/cWcwLnBuZw" alt="Documenting your KQL queries" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation is important.  It helps your colleagues to understand why you did something.  It helps you later on remember why you did something. &lt;/p&gt;

&lt;p&gt;Documenting your &lt;a href="https://www.techielass.com/tag/kusto/" rel="noopener noreferrer"&gt;Kusto Query Language (KQL)&lt;/a&gt; queries is just important. &lt;/p&gt;

&lt;p&gt;In this blog, we’ll explore why documenting your queries matters, how to write effective comments in KQL, and practical tips for maintaining clarity and structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why documenting queries matters
&lt;/h3&gt;

&lt;p&gt;There are several benefits to documenting your queries. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When something breaks, clear comments and documentation make troubleshooting faster.&lt;/li&gt;
&lt;li&gt;Team members can quickly understand your query logic, even if they didn’t write it.&lt;/li&gt;
&lt;li&gt;Documentation reduces the learning curve for new team members.&lt;/li&gt;
&lt;li&gt;Clear notes help you (or someone else) understand the query’s purpose months or years later.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Imagine encountering this query months after writing it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SecurityEvent 
| where EventID == 4625 
| summarize count() by AccountName

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

&lt;/div&gt;



&lt;p&gt;Without comments, you might not remember the query’s purpose. Proper documentation solves this problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to add comments in KQL
&lt;/h3&gt;

&lt;p&gt;Within KQL you can denote a comment using two forward slashes: //&lt;/p&gt;

&lt;p&gt;You can use this either on a single line or multiple lines. &lt;/p&gt;

&lt;p&gt;An example query would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Filter for failed login attempts
SecurityEvent
| where EventID == 4625

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

&lt;/div&gt;



&lt;p&gt;Alternatively, you could write a more in-depth description in your query like this:// Show Microsoft Defender for Cloud pricing per subscription&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Returns Microsoft Defender plans’ pricing per subscription.
// 
// The query uses 'project' to show the listed properties in the results. You can add or remove properties.
// 
securityresources
| where type == 'microsoft.security/pricings'
| project Subscription= subscriptionId, Azure_Defender_plan= name, Status= properties.pricingTier

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

&lt;/div&gt;



&lt;p&gt;Every line that you want to to write a comment on, or if you are leaving blank lines need to start with the two forward slashes. If not they might be mistaken as part of the query, which could cause problems when you run the query. &lt;/p&gt;

&lt;p&gt;You can also add comments per line such as this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SecurityEvent // The dataset
| where TimeGenerated &amp;gt; ago(1h) // Activity in the last hour
| where EventID == 4624 // Successful logon
| where AccountType =~ "user" // case insensitive

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

&lt;/div&gt;



&lt;p&gt;Over the years I’ve learnt that well-placed documentation or comments in queries can be really helpful.  Some of the things I include in comments on my queries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The purpose of the query and what it is trying to achieve.&lt;/li&gt;
&lt;li&gt;Explaining key steps, especially on multi step or complex queries. &lt;/li&gt;
&lt;li&gt;Assumptions or limitations.  For example if a time or date is part of the query, I explain if it’s using American date format (MM/DD/YYYY) or if it’s using European/International date format (DD/MM/YYYY). &lt;/li&gt;
&lt;li&gt;Who created the query and when. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Documenting your KQL queries isn’t just best practice - it’s necessary to help with collaboration, debugging and future-proofing. &lt;/p&gt;

&lt;p&gt;Add purposeful comments to your queries and they’ll become a valuable library over time.  &lt;/p&gt;

&lt;p&gt;Start documenting your queries today, and share your favourite tips in the comments!&lt;/p&gt;

</description>
      <category>azure</category>
    </item>
    <item>
      <title>Azure Local licensing explained</title>
      <dc:creator>Sarah Lean</dc:creator>
      <pubDate>Thu, 20 Feb 2025 08:30:50 +0000</pubDate>
      <link>https://community.ops.io/techielass/azure-local-licensing-explained-4aci</link>
      <guid>https://community.ops.io/techielass/azure-local-licensing-explained-4aci</guid>
      <description>&lt;p&gt;&lt;a href="https://community.ops.io/images/CQUVKTfZSNudtWUlLzKGyV25MOZDYeBbHWUYxT6P5zs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzlpeTBy/cjdseDk4bzNpaHdj/aWQxLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/CQUVKTfZSNudtWUlLzKGyV25MOZDYeBbHWUYxT6P5zs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzlpeTBy/cjdseDk4bzNpaHdj/aWQxLnBuZw" alt="Azure Local licensing explained" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When planning your hybrid cloud strategy, it's crucial to consider not just the technical capabilities but also the costs involved. &lt;a href="https://learn.microsoft.com/azure/azure-local/overview?ref=techielass.com" rel="noopener noreferrer"&gt;Azure Local&lt;/a&gt; (formerly Azure Stack HCI) is an excellent solution for organisations looking to run virtualised, containerised, and virtual desktop workloads while maintaining a hybrid setup. &lt;/p&gt;

&lt;p&gt;By bridging on-premises systems with Azure, it provides flexibility for workloads that can't—or shouldn't—be fully moved to the cloud. &lt;/p&gt;

&lt;p&gt;However, understanding the hardware and licensing costs is vital to properly budgeting for your Azure Local deployment. In this post, we’ll break down the various licensing options available and how they can impact your overall costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Local hardware costs
&lt;/h3&gt;

&lt;p&gt;There is of course the cost of the hardware. Which you would buy direct from the hardware vendor, whether that be Dell, HP, Lenovo, or another vendor.  &lt;/p&gt;

&lt;p&gt;Microsoft provides an up-to-date &lt;a href="https://azurelocalsolutions.azure.microsoft.com/?ref=techielass.com#/catalog" rel="noopener noreferrer"&gt;catalog&lt;/a&gt; of certified Azure Local solutions, making it easy to find options that suit your budget and computing needs.&lt;/p&gt;

&lt;p&gt;There are lots of options available to suit your budget, location and computing needs. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/Zyov0GhdBi3mO9_xTY3iH5g3TPsuWbNOggZT00EIN20/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2xuam4z/amdtZnBxb2N3amxx/d29mLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Zyov0GhdBi3mO9_xTY3iH5g3TPsuWbNOggZT00EIN20/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2xuam4z/amdtZnBxb2N3amxx/d29mLnBuZw" alt="Azure Local licensing explained" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Azure Local catalog&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Local licensing models
&lt;/h3&gt;

&lt;p&gt;Beyond the hardware costs you need to think about the software or licensing costs. &lt;/p&gt;

&lt;p&gt;It costs to run Azure Local. But there are a number of ways you can pay for that. &lt;/p&gt;

&lt;h4&gt;
  
  
  Per-core licensing
&lt;/h4&gt;

&lt;p&gt;With per-core licensing, purchased directly from Microsoft, costs are calculated based on the physical processor cores in your hardware.&lt;/p&gt;

&lt;p&gt;This option is priced at $10 USD per month per physical processor core.  &lt;/p&gt;

&lt;p&gt;_This cost doesn’t include the guest operating system (OS) licensing for any virtual machines (VM) running within the Azure Local configuration. _&lt;/p&gt;

&lt;h4&gt;
  
  
  OEM licensing
&lt;/h4&gt;

&lt;p&gt;The &lt;a href="https://learn.microsoft.com/azure/azure-local/license-billing?ref=techielass.com" rel="noopener noreferrer"&gt;OEM licensing option&lt;/a&gt; is something that exclusively comes from your OEM partner.  It is a pre-installed license that is activated in Azure. &lt;/p&gt;

&lt;p&gt;The license is valid for the lifetime of the hardware that the Azure Local is installed on. &lt;/p&gt;

&lt;h4&gt;
  
  
  Azure Hybrid Benefits
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/windows-server/get-started/azure-hybrid-benefit?tabs=azure&amp;amp;ref=techielass.com" rel="noopener noreferrer"&gt;Azure Hybrid Benefit&lt;/a&gt; was first introduced to help reduce the costs of running your workloads in the cloud. Enabling those customers who had purchased Windows Server with Software Assurance to use that license in Azure and avoid having to pay licensing costs on any virtual machines there. &lt;/p&gt;

&lt;p&gt;Since Azure Local is considered an Azure service, you can access Azure Hybrid Benefits on Azure Local.  &lt;/p&gt;

&lt;p&gt;But it goes one step further, as it waives the Azure Local host costs as well. &lt;/p&gt;

&lt;p&gt;So let’s look at this in terms of a real-world example.  You are refreshing your on-premises virtualisation solution.  For non-Microsoft solutions you will need to consider both the hardware and hypervisor licensing costs. And hypervisor licenses can be expensive and you still need to purchase any Windows Server licenses you need for your Windows workloads.  This means your total cost includes hardware, hypervisor licensing, and Windows Server licensing.&lt;/p&gt;

&lt;p&gt;With Azure Local, you can use your Windows Server Datacenter licenses with Software Assurance to cover the hypervisor license and the Windows server workload costs as well. So you only have the HARDWARE costs to consider.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How to buy Azure Local licenses
&lt;/h3&gt;

&lt;p&gt;Depending on the license type that you wish to use there are different people you need to talk to. &lt;/p&gt;

&lt;p&gt;For the per-core licensing, you can buy that direct through the Azure portal. &lt;/p&gt;

&lt;p&gt;For the OEM licensing your hardware vendor should be able to facilitate that cost and conversation with you. &lt;/p&gt;

&lt;p&gt;And for Windows Server licenses with Software Assurance you should chat to your Licensing Solution Provider (LSP).  They’ll be able to advise you of what licenses you currently have and quote for any additional licenses you need. &lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Licensing can be complex and nuanced.  &lt;/p&gt;

&lt;p&gt;There are lots of caveats and gotchas in each licensing model for Azure Local, so be sure to speak to the relevant people. Read the terms and conditions, the small print. And understand it fully for your scenario.   &lt;/p&gt;

&lt;p&gt;This blog post is intended to be an explainer to the licensing options you have, so you can cost up your Azure Local project properly and be able to compare it to other options out there fairly. It's not intended to be a deep dive into all the options and small print. &lt;/p&gt;

&lt;p&gt;&amp;lt;!--kg-card-begin: html--&amp;gt;&amp;lt;br&amp;gt;
     (adsbygoogle = window.adsbygoogle || []).push({});&amp;lt;br&amp;gt;
&amp;lt;!--kg-card-end: html--&amp;gt;&lt;/p&gt;

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

&lt;p&gt;Azure Local provides a powerful and flexible solution for hybrid cloud scenarios, allowing you to modernise your infrastructure while leveraging existing investments like Windows Server licenses with Software Assurance. &lt;/p&gt;

&lt;p&gt;But remember to make a truly information decision you need to understand the licensing models and ensure the option you choose aligns with your organisation’s needs.  &lt;/p&gt;

&lt;p&gt;To ensure success, consult with hardware vendors, Licensing Solution Providers, and Microsoft to evaluate your licensing needs and calculate costs effectively. When approached thoughtfully, Azure Local can be a cost-effective and future-ready solution for your hybrid cloud journey.&lt;/p&gt;

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