{"id":4217,"date":"2017-01-11T00:00:00","date_gmt":"2017-01-11T00:00:00","guid":{"rendered":"https:\/\/azure.microsoft.com\/blog\/azure-virtual-machine-internals-part-1"},"modified":"2025-06-11T05:29:24","modified_gmt":"2025-06-11T12:29:24","slug":"azure-virtual-machine-internals-part-1","status":"publish","type":"post","link":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/","title":{"rendered":"Azure Virtual Machine Internals \u2013 Part 1"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"introduction\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Azure cloud services are composed of elements from Compute, Storage, and Networking. The compute building block is a Virtual Machine (VM), which is the subject of discussion in this post. Web search will yield large amounts of documentation regarding the commands, APIs and UX for creating and managing VMs. This is not a 101 or \u2018How to\u2019 and the reader is for the most part expected to already be familiar with the topics of VM creation and management. The goal of this series is to look at what is happening under the covers as a VM goes thru its various states.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Azure provides IaaS and PaaS VMs; in this post when we refer to a VM we mean the IaaS VM. There are two control plane stacks in Azure, Azure Service Management (ASM) and Azure Resource Manager (ARM). We will be limiting ourselves to ARM since it is the forward looking control plane.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ARM exposes resources like VM, NIC but in reality ARM is a thin frontend layer and the resources themselves are exposed by lower level resource providers like Compute Resource Provider (CRP), Network Resource Provider (NRP) and Storage Resource Provider (SRP). Portal calls ARM which in turn calls the resource providers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-started\">Getting Started<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For most of the customers, their first experience creating a VM is in the <a href=\"https:\/\/portal.azure.com\/\">Azure Portal<\/a>. I did the same and created a VM of size \u2018Standard DS1 v2\u2019 in the West US region. I mostly stayed with the defaults that the UI presented but chose to add a \u2018CustomScript\u2019 extension. When prompted I provided a local file \u2018Sample.ps\u2019 as the PowerShell script for the \u2018CustomScript\u2019 extension. The PS script itself is a single line Get-Process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The VM provisioned successfully but the overall ARM template deployment failed (bright red on my Portal dashboard). Couple clicks showed that the \u2018CustomScript\u2019 extension had failed and the Portal showed this message:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n{\n  \"status\": \"Failed\",\n  \"error\": {\n    \"code\": \"ResourceDeploymentFailure\",\n    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\n    \"details\": [\n      {\n        \"code\": \"DeploymentFailed\",\n        \"message\": \"At least one resource deployment operation failed. Please list deployment operations for details. Please see https:\/\/aka.ms\/arm-debug for usage details.\",\n        \"details\": [\n          {\n            \"code\": \"Conflict\",\n            \"message\": \"{rn  \"status\": \"Failed\",rn  \"error\": {rn    \"code\": \"ResourceDeploymentFailure\",rn    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",rn    \"details\": [rn      {rn        \"code\": \"VMExtensionProvisioningError\",rn        \"message\": \"VM has reported a failure when processing extension 'CustomScriptExtension'. Error message: \"Finished executing command\".\"rn      }rn    ]rn  }rn}\"\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">It wasn\u2019t immediately clear what had gone wrong. We can dig from here and as is often true, failures teach us more than successes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I RDPed to the just provisioned VM. The logs for the VM Agent are in C:WindowsAzureLogs. The VM Agent is a system agent that runs in all IaaS VMs (customers can opt out if they would like). The VM Agent is necessary to run extensions. Let\u2019s peek into the logs for the CustomScript Extension:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nC:WindowsAzureLogsPluginsMicrosoft.Compute.CustomScriptExtension1.8CustomScriptHandler\n\n[1732+00000001] [08\/14\/2016 06:19:17.77] [INFO] Command execution task started. Awaiting completion...\n\n[1732+00000001] [08\/14\/2016 06:19:18.80] [ERROR] Command execution finished. Command exited with code: -196608\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The fact that the failure logs are cryptic hinted that something catastrophic had happened. So I re-looked at my input and realized that I had the file extension for the PS script wrong. I had it as Sample.ps when it should have been Sample.ps1. I updated the VM this time specifying the script file with the right extension. This succeeded as shown by more records appended to the log file mentioned above.<br>&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n[3732+00000001] [08\/14\/2016 08:42:24.04] [INFO] HandlerSettings = ProtectedSettingsCertThumbprint: , ProtectedSettings: {}, PublicSettings: {FileUris: [https:\/\/iaasv2tempstorewestus.blob.core.windows.net\/vmextensionstemporary-10033fff801becb5-20160814084130535\/simple.ps1?sv=2015-04-05&sr=c&sig=M3qa7lS%2BZwp%2B8Tytqf1VEew4YaAKvvYn1yzGrPfSwyw%3D&se=2016-08-15T08%3A41%3A30Z&sp=rw], CommandToExecute: powershell -ExecutionPolicy Unrestricted -File simple.ps1 }\n\n[3732+00000001] [08\/14\/2016 08:42:24.04] [INFO] Downloading files specified in configuration...\n\n[3732+00000001] [08\/14\/2016 08:42:24.05] [INFO] DownloadFiles: fileUri = https:\/\/iaasv2tempstorewestus.blob.core.windows.net\/vmextensionstemporary-10033fff801becb5-20160814084130535\/simple.ps1?sv=2015-04-05&sr=c&sig=M3qa7lS+Zwp+8Tytqf1VEew4YaAKvvYn1yzGrPfSwyw=&se=2016-08-15T08:41:30Z&sp=rw\n\n[3732+00000001] [08\/14\/2016 08:42:24.05] [INFO] DownloadFiles: Initializing CloudBlobClient with baseUri = https:\/\/iaasv2tempstorewestus.blob.core.windows.net\/\n\n[3732+00000001] [08\/14\/2016 08:42:24.22] [INFO] DownloadFiles: fileDownloadPath = Downloads\n\n[3732+00000001] [08\/14\/2016 08:42:24.22] [INFO] DownloadFiles: asynchronously downloading file to fileDownloadLocation = Downloadssimple.ps1\n\n[3732+00000001] [08\/14\/2016 08:42:24.24] [INFO] Waiting for all async file download tasks to complete...\n\n[3732+00000001] [08\/14\/2016 08:42:24.29] [INFO] Files downloaded. Asynchronously executing command: 'powershell -ExecutionPolicy Unrestricted -File simple.ps1 '\n\n[3732+00000001] [08\/14\/2016 08:42:24.29] [INFO] Command execution task started. Awaiting completion...\n\n[3732+00000001] [08\/14\/2016 08:42:25.29] [INFO] Command execution finished. Command exited with code: 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The CustomScript extension takes a script file which can be provided as a file in a Storage blob. Portal offers a convenience where it accepts a file from the local machine. I had provided Simple.ps1 which was in my temp folder. Behind the scenes Portal uploads the file to a blob, generates a shared access signature (SAS) and passes it on to CRP. From the logs above you can see that <a href=\"https:\/\/iaasv2tempstorewestus.blob.core.windows.net\/vmextensionstemporary-10033fff801becb5-20160814084130535\/simple.ps1?sv=2015-04-05&amp;sr=c&amp;sig=M3qa7lS+Zwp+8Tytqf1VEew4YaAKvvYn1yzGrPfSwyw=&amp;se=2016-08-15T08:41:30Z&amp;sp=rw\">URI<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This URI is worth understanding. It is a Storage blob SAS with the following attributes for an account in West US (which is the same region where my VM is deployed):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">se=2016-08-15T08:41:30Z means that the SAS is valid until that time (UTC). Comparing it to the timestamp on the corresponding record in log (08\/14\/2016 08:42:24.05) it is clear that the SAS is being generated for a period of 24 hours.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Sr=c means that this is container level policy.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Sp=rw means that the access is for both read and write.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">The <a href=\"https:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/storage-dotnet-shared-access-signature-part-1\/\">shared access signature (SAS)<\/a> has the full descriptions<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I asserted above that this is a storage account in West US. That may be apparent from the naming of the storage account (iaasv2tempstorewestus) but is not a guarantee. So how can you verify that this storage account (or any other storage account) is in the region it claims to be in?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple nslookup on the blob DNS URL reveals this<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nC:Usersyunusm>nslookup iaasv2tempstorewestus.blob.core.windows.net\n\nServer: PK5001Z.PK5001Z\n\nAddress: 192.168.0.1\n\nNon-authoritative answer:\n\nName: blob.by4prdstr03a.store.core.windows.net\n\nAddress: 40.78.112.72\n\nAliases: iaasv2tempstorewestus.blob.core.windows.net\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The blob URL is a CNAME to a canonical DNS blob.by4prdstr03a.store.core.windows.net. Experimentation will show that more than one storage accounts maps to a single canonical DNS URL. The \u2018by4\u2019 in the name gives a hint to what region it is located. As per the&nbsp;<a href=\"https:\/\/azure.microsoft.com\/en-us\/regions\/\">Azure Regions<\/a>&nbsp;page, the West US region is in California. Looking up the geo location of the IP address (40.78.112.72) indicates a more specific area within California.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"understanding-the-vm\">Understanding the VM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now that we have a healthy VM, let\u2019s understand it more. As per the Azure VM Sizes page, this is the VM that I just created:<br><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><thead><tr><th>Size<\/th><th>CPU Cores<\/th><th>Memory<\/th><th>NICs (Max)<\/th><th>Max. disk size<\/th><th>Max. data disks (1023 GB each)<\/th><th>Max. IOPS (500 per disk)<\/th><th>Max network bandwidth<\/th><\/tr><\/thead><tbody><tr><td>Standard_D1_v2<\/td><td>1<\/td><td><br>3.5 GB<\/td><td>1<\/td><td>Temporary (SSD) =50 GB<\/td><td>2<\/td><td>2\u00d7500<\/td><td>moderate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This information can be fetched programmatically by doing a&nbsp;<a href=\"https:\/\/management.azure.com\/subscriptions\/f028f547-f912-42b0-8892-89ea6eda4c5e\/resourceGroups\/BlogRG\/providers\/Microsoft.Compute\/virtualMachines\/BlogWindowsVM\/vmSizes?api-version=2016-03-30\">GET<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Returns this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n{\n\n\"name\": \"Standard_DS1_v2\",\n\n\"numberOfCores\": 1,\n\n\"osDiskSizeInMB\": 1047552,\n\n\"resourceDiskSizeInMB\": 7168,\n\n\"memoryInMB\": 3584,\n\n\"maxDataDiskCount\": 2\n\n}\n\nDoing a GET on the VM we created\nReturns the following. Let\u2019s understand this response in some detail. I have annotated inline comments preceded and followed by \/\/\n{\n  \"properties\": {\n    \"vmId\": \"694733ec-46a0-4e0b-a73b-ee0863a0f12c\",\n    \"hardwareProfile\": {\n      \"vmSize\": \"Standard_DS1_v2\"\n    },\n    \"storageProfile\": {\n      \"imageReference\": {\n        \"publisher\": \"MicrosoftWindowsServer\",\n        \"offer\": \"WindowsServer\",\n        \"sku\": \"2012-R2-Datacenter\",\n        \"version\": \"latest\"\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The interesting field here is the version. Publishers can have multiple versions of the same image at any point of time. Popular images are revved typically on a monthly frequency with the security patches. Major new versions are released as new SKUs. The Portal has defaulted me to the latest version. As a customer, I can chose to pick a specific version as well, whether I deploy thru Portal or thru an ARM template using the CLI or REST API; the latter being the preferred method for automated scenarios. The problem with specifying a particular version is that it can render the ARM template fragile. The deployment will break if the publisher unpublishes that specific version in one or more regions, as a publisher can do. So unless there is a good reason not to, the preferred value for the version setting is latest. As an example, the following images of the SKU 2012-R2-Datacenter are currently in the WestUS region, as returned by the CLI command azure vm image list.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20151120     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20151120\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20151214     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20151214\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20160126     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20160126\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20160229     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20160229\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20160430     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20160430\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20160617     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20160617\nMicrosoftWindowsServer  WindowsServer  2012-R2-Datacenter                      Windows  4.0.20160721     westus    MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:4.0.20160721\n\n      },\n      \"osDisk\": {\n        \"osType\": \"Windows\",\n        \"name\": \"BlogWindowsVM\",\n        \"createOption\": \"FromImage\",\n        \"vhd\": {\n          \"uri\": https:\/\/blogrgdisks562.blob.core.windows.net\/vhds\/BlogWindowsVM2016713231120.vhd\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The OS disk is a page blob and starts out as a copy of the source image that the Publisher has published. Looking at the meta data of this blob and correlating it to what the VM itself has is instructive. Using the Cloud Explorer in Microsoft Visual Studio the blob\u2019s property window:<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp\" alt=\"graphical user interface, application\" class=\"wp-image-10170 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp\"><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This is a regular page blob that is functioning as an OS disk over the network. You will observe that the Last Modified date pretty much stays with NOW() most of the time \u2013 the reason being as long as the VM is running there are some flushes happening to the disk regularly. The size of the OS disk is 127 GB; the max allowed OS disk in Azure is 1 TB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/azurestorageexplorer.codeplex.com\/\">Azure Storage Explorer<\/a>&nbsp;shows more properties for the same blob than the VS Cloud Explorer.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/4c830573-c8ad-480f-b5ad-55411454b6a0.webp\" alt=\"graphical user interface, text, application, email\" class=\"wp-image-10172 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/4c830573-c8ad-480f-b5ad-55411454b6a0.webp\"><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The interesting properties are the Lease properties. It shows the blob as leased with an infinite duration. Internally to VM creation, when a page blob is configured to be an OS\/data disk for a VM, we take a lease on that blob before attaching it to the VM. This is so that the blob for a running VM is not deleted out of band. If you see a disk-backing blob has no lease while it shows as attached to a VM then that would be an inconsistent state and will need to be repaired.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RDPing in the VM itself, we can see two drives mounted and the OS drive is about the same size as the page blob in Storage. The pagefile is on D drive; so that faulted pages are fetched locally rather than over the network from Blob Storage. The temporary storage can be lost in case of events that case a VM to be relocated to a different node.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/ba3a6fae-87d6-4b17-80ac-659d3b0b2573.webp\" alt=\"graphical user interface, text, application, email\" class=\"wp-image-10174 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/ba3a6fae-87d6-4b17-80ac-659d3b0b2573.webp\"><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n},\n  \"caching\": \"ReadWrite\"\n},\n\"dataDisks\": []\nthere are no data disks yet but we will add some soon\n\n},\n\"osProfile\": {\n  \"computerName\": \"BlogWindowsVM\",\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The name we chose for the VM in Portal is the hostname as well. The VM is DHCP enabled and gains its DIP address thru DHCP. The VM is registered in an internal DNS and has a generated FQDN.<br><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\nC:Usersyunusm>ipconfig \/all\n\nWindows IP Configuration\n\n   Host Name . . . . . . . . . . . . : BlogWindowsVM\n   Primary Dns Suffix  . . . . . . . :\n   Node Type . . . . . . . . . . . . : Hybrid\n   IP Routing Enabled. . . . . . . . : No\n   WINS Proxy Enabled. . . . . . . . : No\n   DNS Suffix Search List. . . . . . : qkqr4ajgme4etgyuajvm1sfy3h.dx.internal.cl\noudapp.net\nEthernet adapter:\n\n   Connection-specific DNS Suffix  . : qkqr4ajgme4etgyuajvm1sfy3h.dx.internal.cl\noudapp.net\n   Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter\n   Physical Address. . . . . . . . . : 00-0D-3A-33-81-01\n   DHCP Enabled. . . . . . . . . . . : Yes\n   Autoconfiguration Enabled . . . . : Yes\n   Link-local IPv6 Address . . . . . : fe80::980c:bf29:b2de:8a05%12(Preferred)\n   IPv4 Address. . . . . . . . . . . : 10.1.0.4(Preferred)\n   Subnet Mask . . . . . . . . . . . : 255.255.255.0\n   Lease Obtained. . . . . . . . . . : Saturday, August 13, 2016 11:14:58 PM\n   Lease Expires . . . . . . . . . . : Wednesday, September 20, 2152 6:24:34 PM\n   Default Gateway . . . . . . . . . : 10.1.0.1\n   DHCP Server . . . . . . . . . . . : 168.63.129.16\n   DHCPv6 IAID . . . . . . . . . . . : 301993274\n   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-1F-41-C4-70-00-0D-3A-33-81-01\n\n   DNS Servers . . . . . . . . . . . : 168.63.129.16\n   NetBIOS over Tcpip. . . . . . . . : Enabled\n\n\"adminUsername\": \"yunusm\",\n\"windowsConfiguration\": {\n  \"provisionVMAgent\": true,\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This is a hint to install a guest agent that does a bunch of config and runs the extensions. The guest agent binaries are here \u2013 C:WindowsAzurePackages<br>&#8220;enableAutomaticUpdates&#8221;: true<br>Windows VMs by default are set to receive auto updates from Windows Update Service. There is a nuance to grasp here regarding availability and auto updates. If you have an Availability Set with multiple VMs with the purpose of getting high SLA against unexpected faults, then you do not want to have correlated actions (like Windows Updates) that can take down VMs across the Availability Set.<br><\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/ce389ebe-a664-48f1-8ea3-b9ca517db447.webp\" alt=\"Windows Update Confirmation Message\" class=\"wp-image-10176 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/ce389ebe-a664-48f1-8ea3-b9ca517db447.webp\"><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n},\n\n\"secrets\": []\n\n},\n\n\"networkProfile\": {\n\n\"networkInterfaces\": [\n\n{\n\n\"id\": \"\/subscriptions\/f028f547-f912-42b0-8892-89ea6eda4c5e\/resourceGroups\/BlogRG\/providers\/Microsoft.Network\/networkInterfaces\/blogwindowsvm91\"\nNIC is a standalone resource, we are not discussing networking resources yet.\n\n    }\n  ]\n},\n\"diagnosticsProfile\": {\n  \"bootDiagnostics\": {\n    \"enabled\": true,\n    \"storageUri\": \"https:\/\/blogrgdiag337.blob.core.windows.net\/\"\n  }\nBoot diagnostics have been enabled. Portal has a way of viewing the screenshot. You can get the URL for the screenshot from CLI:\n\nC:Program Files (x86)Microsoft SDKsAzureCLIbin>node azure vm get-serial-output\n\ninfo: Executing command vm get-serial-output\n\nResource group name: blogrg\n\nVirtual machine name: blogwindowsvm\n\n+ Getting instance view of virtual machine \"blogwindowsvm\"\n\ninfo: Console Screenshot Blob Uri:\n\nhttps:\/\/blogrgdiag337.blob.core.windows.net\/bootdiagnostics-blogwindo-694733ec-46a0-4e0b-a73b-ee0863a0f12c\/BlogWindowsVM.694733ec-46a0-4e0b-a73b-ee0863a0f12c.screenshot.bmp\n\ninfo: vm get-serial-output command OK\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The boot screenshot can be viewed in Portal. However, the URL for the screenshot bmp file does not render in a browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What gives? It is due to the authentication on the storage account which blocks anonymous access. For any blob or container in Azure Storage it is possible to&nbsp;<a href=\"https:\/\/azure.microsoft.com\/en-us\/documentation\/articles\/storage-manage-access-to-resources\/\">configure anonymous read access<\/a>. Please do this with caution and only in cases where secrets will not be exposed. It is a useful capability for sharing data that is not confidential without having to generate SAS signatures. Once anonymous access is enabled on the container the screenshot renders in any browser outside of the portal.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/750bf908-68e3-4803-b338-16b9f8e37437.webp\" alt=\"graphical user interface, application\" class=\"wp-image-10178 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/750bf908-68e3-4803-b338-16b9f8e37437.webp\"><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; auto-links: false; gutter: false; title: ; quick-code: false; notranslate\" title=\"\">\n },\n    \u201cprovisioningState\u201d: \u201cSucceeded\u201d\n  },\n  \u201cresources\u201d: [\n    {\n      \u201cproperties\u201d: {\n        \u201cpublisher\u201d: \u201cMicrosoft.Compute\u201d,\n        \u201ctype\u201d: \u201cCustomScriptExtension\u201d,\n        \u201ctypeHandlerVersion\u201d: \u201c1.7\u201d,\n        \u201cautoUpgradeMinorVersion\u201d: true,\n\nIt is usually safe for extensions to be auto updated on the minor version. There have been very few surprises in this regard though you have an option to not auto update.\n\n        \"settings\": {\n          \"fileUris\": [\n            https:\/\/iaasv2tempstorewestus.blob.core.windows.net\/vmextensionstemporary-10033fff801becb5-20160814084130535\/simple.ps1?sv=2015-04-05&sr=c&sig=M3qa7lS%2BZwp%2B8Tytqf1VEew4YaAKvvYn1yzGrPfSwyw%3D&se=2016-08-15T08%3A41%3A30Z&sp=rw\nAs discussed earlier this is the SAS key for the powershell script. You will see this as a commonly used pattern to sharing files and data \u2013 upload to a blob, generate a SAS key and pass around.\n\n          ],\n          \"commandToExecute\": \"powershell -ExecutionPolicy Unrestricted -File simple.ps1  \"\n        },\n        \"provisioningState\": \"Succeeded\"\n      },\n      \"id\": \"\/subscriptions\/f028f547-f912-42b0-8892-89ea6eda4c5e\/resourceGroups\/BlogRG\/providers\/Microsoft.Compute\/virtualMachines\/BlogWindowsVM\/extensions\/CustomScriptExtension\",\n      \"name\": \"CustomScriptExtension\",\n      \"type\": \"Microsoft.Compute\/virtualMachines\/extensions\",\n      \"location\": \"westus\"\n    },\n    {\n      \"properties\": {\n        \"publisher\": \"Microsoft.Azure.Diagnostics\",\n        \"type\": \"IaaSDiagnostics\",\n        \"typeHandlerVersion\": \"1.5\",\n        \"autoUpgradeMinorVersion\": true,\n        \"settings\": {\n          \"xmlCfg\": ,\n          \"StorageAccount\": \"blogrgdiag337\"\n        },\n        \"provisioningState\": \"Succeeded\"\n      },\n      \"id\": \"\/subscriptions\/f028f547-f912-42b0-8892\u00ac-89ea6eda4c5e\/resourceGroups\/BlogRG\/providers\/Microsoft.Compute\/virtualMachines\/BlogWindowsVM\/extensions\/Microsoft.Insights.VMDiagnosticsSettings\",\n      \"name\": \"Microsoft.Insights.VMDiagnosticsSettings\",\n      \"type\": \"Microsoft.Compute\/virtualMachines\/extensions\",\n      \"location\": \"westus\"\n    }\n  ],\n  \"id\": \"\/subscriptions\/f028f547-f912-42b0-8892-89ea6eda4c5e\/resourceGroups\/BlogRG\/providers\/Microsoft.Compute\/virtualMachines\/BlogWindowsVM\",\n  \"name\": \"BlogWindowsVM\",\n  \"type\": \"Microsoft.Compute\/virtualMachines\",\n  \"location\": \"westus\"\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"to-be-continued\">To Be Continued<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We will carry on with what we can learn from a single VM and then move on to other topics.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Peek under the covers of how an Azure VM works and get to know some of the internal details.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","footnotes":"","msx_community_cta_settings":[]},"categories":[1491],"tags":[],"audience":[3057,3055,3053,3056],"content-type":[1511],"product":[],"tech-community":[],"topic":[],"coauthors":[1171],"class_list":["post-4217","post","type-post","status-publish","format-standard","hentry","category-storage","audience-data-professionals","audience-developers","audience-it-decision-makers","audience-it-implementors","content-type-best-practices","review-flag-1680286581-295","review-flag-1680286581-56","review-flag-1680286581-364","review-flag-1-1680286581-825","review-flag-2-1680286581-601","review-flag-3-1680286581-173","review-flag-4-1680286581-250","review-flag-5-1680286581-950","review-flag-6-1680286581-909","review-flag-7-1680286581-146","review-flag-new-1680286579-546","review-flag-vm-1680286585-143"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog<\/title>\n<meta name=\"description\" content=\"Learn more about the Azure Virtual Machine internal elements when you create a VM.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog\" \/>\n<meta property=\"og:description\" content=\"Learn more about the Azure Virtual Machine internal elements when you create a VM.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Azure Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/microsoftazure\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-11T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T12:29:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png\" \/>\n<meta name=\"author\" content=\"Yunus Mohammed\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@azure\" \/>\n<meta name=\"twitter:site\" content=\"@azure\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yunus Mohammed\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\"},\"author\":[{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/yunus-mohammed\/\",\"@type\":\"Person\",\"@name\":\"Yunus Mohammed\"}],\"headline\":\"Azure Virtual Machine Internals \u2013 Part 1\",\"datePublished\":\"2017-01-11T00:00:00+00:00\",\"dateModified\":\"2025-06-11T12:29:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\"},\"wordCount\":1599,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png\",\"articleSection\":[\"Storage\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\",\"name\":\"Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png\",\"datePublished\":\"2017-01-11T00:00:00+00:00\",\"dateModified\":\"2025-06-11T12:29:24+00:00\",\"description\":\"Learn more about the Azure Virtual Machine internal elements when you create a VM.\",\"breadcrumb\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp\",\"width\":1239,\"height\":686,\"caption\":\"graphical user interface, application\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog home\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Storage\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/storage\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Azure Virtual Machine Internals \u2013 Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"name\":\"Microsoft Azure Blog\",\"description\":\"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.\",\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\",\"name\":\"Microsoft Azure Blog\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"width\":512,\"height\":512,\"caption\":\"Microsoft Azure Blog\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/microsoftazure\",\"https:\/\/x.com\/azure\",\"https:\/\/www.instagram.com\/microsoftdeveloper\/\",\"https:\/\/www.linkedin.com\/company\/16188386\",\"https:\/\/www.youtube.com\/user\/windowsazure\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117\",\"name\":\"shakir\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"caption\":\"shakir\"},\"sameAs\":[\"https:\/\/azure.microsoft.com\"],\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog","description":"Learn more about the Azure Virtual Machine internal elements when you create a VM.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog","og_description":"Learn more about the Azure Virtual Machine internal elements when you create a VM.","og_url":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/","og_site_name":"Microsoft Azure Blog","article_publisher":"https:\/\/www.facebook.com\/microsoftazure","article_published_time":"2017-01-11T00:00:00+00:00","article_modified_time":"2025-06-11T12:29:24+00:00","og_image":[{"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png","type":"","width":"","height":""}],"author":"Yunus Mohammed","twitter_card":"summary_large_image","twitter_creator":"@azure","twitter_site":"@azure","twitter_misc":{"Written by":"Yunus Mohammed","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#article","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/"},"author":[{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/yunus-mohammed\/","@type":"Person","@name":"Yunus Mohammed"}],"headline":"Azure Virtual Machine Internals \u2013 Part 1","datePublished":"2017-01-11T00:00:00+00:00","dateModified":"2025-06-11T12:29:24+00:00","mainEntityOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/"},"wordCount":1599,"commentCount":0,"publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png","articleSection":["Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/","name":"Azure Virtual Machine Internals \u2013 Part 1 | Microsoft Azure Blog","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.png","datePublished":"2017-01-11T00:00:00+00:00","dateModified":"2025-06-11T12:29:24+00:00","description":"Learn more about the Azure Virtual Machine internal elements when you create a VM.","breadcrumb":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#primaryimage","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2017\/01\/128643e7-4a67-4b74-b446-379975c63585.webp","width":1239,"height":686,"caption":"graphical user interface, application"},{"@type":"BreadcrumbList","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/azure-virtual-machine-internals-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog home","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/"},{"@type":"ListItem","position":2,"name":"Storage","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/storage\/"},{"@type":"ListItem","position":3,"name":"Azure Virtual Machine Internals \u2013 Part 1"}]},{"@type":"WebSite","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","name":"Microsoft Azure Blog","description":"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.","publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization","name":"Microsoft Azure Blog","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","width":512,"height":512,"caption":"Microsoft Azure Blog"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/microsoftazure","https:\/\/x.com\/azure","https:\/\/www.instagram.com\/microsoftdeveloper\/","https:\/\/www.linkedin.com\/company\/16188386","https:\/\/www.youtube.com\/user\/windowsazure"]},{"@type":"Person","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117","name":"shakir","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4","url":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","caption":"shakir"},"sameAs":["https:\/\/azure.microsoft.com"],"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/"}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Azure Blog","distributor_original_site_url":"https:\/\/azure.microsoft.com\/en-us\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/4217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/comments?post=4217"}],"version-history":[{"count":3,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/4217\/revisions"}],"predecessor-version":[{"id":41421,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/4217\/revisions\/41421"}],"wp:attachment":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media?parent=4217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/categories?post=4217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tags?post=4217"},{"taxonomy":"audience","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/audience?post=4217"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/content-type?post=4217"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/product?post=4217"},{"taxonomy":"tech-community","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tech-community?post=4217"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/topic?post=4217"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/coauthors?post=4217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}