<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Peter Olanrewaju Fadeyi</title>
    <description>The latest articles on DEV Community by Peter Olanrewaju Fadeyi (@pirrezz).</description>
    <link>https://dev.to/pirrezz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3743695%2Fd56b1716-130e-4fca-a981-897f2bdd44d5.jpg</url>
      <title>DEV Community: Peter Olanrewaju Fadeyi</title>
      <link>https://dev.to/pirrezz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pirrezz"/>
    <language>en</language>
    <item>
      <title>Azure Management Task 6: Cleanup Resources</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:48:36 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-6-cleanup-resources-12bl</link>
      <guid>https://dev.to/pirrezz/azure-management-task-6-cleanup-resources-12bl</guid>
      <description>&lt;p&gt;After completing the previous exercises, several Azure resources were created, including a virtual machine, virtual network, storage account, and other supporting services. To avoid unnecessary charges and keep the environment organized, it is important to properly clean up resources once they are no longer needed.&lt;/p&gt;

&lt;p&gt;In this final task, you will remove resource locks and delete the resource group that contains all the resources created during the project. This demonstrates how Azure administrators safely decommission infrastructure while ensuring no protected resources block the deletion process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEPS&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Remove delete locks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you attempt to delete a resource that has a &lt;strong&gt;delete lock&lt;/strong&gt;, Azure will prevent the operation and display a warning that the resource cannot be removed. To proceed with deletion, the lock must first be removed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to Microsoft Azure at &lt;a href="https://dev.tourl"&gt;https://portal.azure.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, search for and select &lt;strong&gt;virtual machines&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pxcbfj895h89j1xes2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pxcbfj895h89j1xes2y.png" alt="vm" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;virtual machine&lt;/strong&gt; created earlier.
Example:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand the &lt;strong&gt;Settings&lt;/strong&gt; submenu and select &lt;strong&gt;Locks&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Delete&lt;/strong&gt; on the line for the &lt;strong&gt;VM-delete-lock and confirm **delete&lt;/strong&gt; on the pop-up**&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3c49d9z50u3phjmftu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3c49d9z50u3phjmftu9.png" alt="delete" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the delete lock is removed, the virtual machine can now be deleted if needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If additional locks were created during the exercise, remove tem before continuing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Delete the project resource group&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the advantages of using &lt;strong&gt;Resource groups&lt;/strong&gt; in Azure is the ability to delete multiple resources at once. When a resource group is deleted, all the resurces inside it are removed automatically.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal home page, search for and select &lt;strong&gt;resource groups&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkq5282yga6bbyq2wnlnf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkq5282yga6bbyq2wnlnf.png" alt="rg" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;Resource group&lt;/strong&gt; create during the project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-rg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08f2wykzats1k2weo8vo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08f2wykzats1k2weo8vo.png" alt="RG" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Delete resource group&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the resource group name to confirm deletion.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resource group name: guided-project-rg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;Force delete&lt;/strong&gt; option ensures that all resources created during the project are removed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzr0wxkgrvygdcy0zab03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzr0wxkgrvygdcy0zab03.png" alt="delete" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm the deletion when prompted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5j03l8gm1yq3ox4c4ln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5j03l8gm1yq3ox4c4ln.png" alt="delete" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztxc3gatggqyiqgygihs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztxc3gatggqyiqgygihs.png" alt="delete" width="537" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Delete the NetworkWatcherRG(if necessary)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure automatically creates a resource group call &lt;strong&gt;NetworkWatcherRG&lt;/strong&gt; when networking features such as &lt;strong&gt;Virtual Networks&lt;/strong&gt; are used. This resource group contains diagnostic tools used for monitoring network activity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, search fr and select &lt;strong&gt;resource groups&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the resource group named:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;NetworkWatcherRG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Delete resource group&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the resource group name in the confirmation box.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;NetworkWatcherRG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Delete&lt;/strong&gt; and confirm the action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddhlgjgpww5m52lamvsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddhlgjgpww5m52lamvsm.png" alt="watcher" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q7phzbwqo10x0h4u0cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q7phzbwqo10x0h4u0cl.png" alt="network" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the &lt;strong&gt;NetworkWatcherRG&lt;/strong&gt; resource group existed before the project began, you may choose to leave it in place.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this final task, you completed the cleanup process by removing resource locks and deleting the resource group used during the project. This ensured that all deployed resources were safely removed from the Azure environment.&lt;/p&gt;

&lt;p&gt;Cleaning up unused resources is an important administrative practice in cloud environments. It helps prevent unnecessary costs, maintains a well-organized infrastructure, and ensures that temporary lab resources do not remain active after they are no longer needed.&lt;/p&gt;

&lt;p&gt;By completing this step, you have successfully finished the &lt;strong&gt;Azure Management Tasks project&lt;/strong&gt;, gaining practical experience with resource deployment, configuration, storage management, tagging, resource locks, and environment cleanup in Microsoft Azure.&lt;/p&gt;

</description>
      <category>resources</category>
      <category>azurefunctions</category>
      <category>infrastructure</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Azure Management Task 5: Manage Tags and Locks</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:33:25 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-5-manage-tags-and-locks-233e</link>
      <guid>https://dev.to/pirrezz/azure-management-task-5-manage-tags-and-locks-233e</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After configuring the virtual network, virtual machine, and storage resources in the previous exercises, the next step is to improve how these resources are organized and protected. As cloud environments grow, managing resources efficiently becomes increasingly important for administrators.&lt;/p&gt;

&lt;p&gt;Azure provides features such as &lt;strong&gt;tags&lt;/strong&gt; and &lt;strong&gt;resource locks&lt;/strong&gt; to help with this. Tags allow resources to be categorized using key-value pairs, making it easier to track things like department ownership or resource purpose. Resource locks help prevent accidental deletion or modification of critical resources, adding an extra layer of protection.&lt;/p&gt;

&lt;p&gt;In this exercise, you will add tags to organize resources and apply a resource lock to protect the virtual machine from accidental deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Add tags to a virtual machine&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start by adding a pair of tags to the virtual machine. One tag will identify the purpose of the virtual machine and the other will indicate the &lt;strong&gt;department&lt;/strong&gt; the machine supports.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to Microsoft Azure at &lt;a href="https://dev.tourl"&gt;https://portal.azure.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, search for and &lt;strong&gt;select virtual machines&lt;/strong&gt; created earlier.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa63pwwd5s0x4rb1p2e9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa63pwwd5s0x4rb1p2e9o.png" alt="vm" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;guided-project-vm&lt;/strong&gt; virtual machine and from the menu pane, select &lt;strong&gt;Tags&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enter the following values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nl"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Department&lt;/span&gt;
&lt;span class="nl"&gt;Value&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Customer Service&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add another tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nl"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Purpose&lt;/span&gt;
&lt;span class="nl"&gt;Value&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;FTP Server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then select &lt;strong&gt;Apply&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg51pzojiqjt9i3x43nzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg51pzojiqjt9i3x43nzx.png" alt="tag" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add a resource lock to a VM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand the &lt;strong&gt;Settings&lt;/strong&gt; submenu and select &lt;strong&gt;Locks&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ Add&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configure the lock using the following values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name: VM-delete-lock
Lock Type: Delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may optionally enter a &lt;strong&gt;note&lt;/strong&gt; describing the reason for the lock.&lt;br&gt;
Then select &lt;strong&gt;ok&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmebzbi5vt4ig13ltibk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmebzbi5vt4ig13ltibk0.png" alt="lock" width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now the VM is protected from accidental deletion and also has tags assigned to help track its use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Add tags to network resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal home page, navigate to the &lt;strong&gt;virtual network&lt;/strong&gt; created earlier.
Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;From the menu pane, select &lt;strong&gt;Tags&lt;/strong&gt;.
Ener the following values:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nl"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Department&lt;/span&gt;
&lt;span class="nl"&gt;Value&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;IT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then select &lt;strong&gt;Apply&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uupfx56b691ocyd714d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uupfx56b691ocyd714d.png" alt="tags" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now both the &lt;strong&gt;virtual machine&lt;/strong&gt; and the &lt;strong&gt;virtual network&lt;/strong&gt; are organized using tags, making them easier to identify and manage within the Azure environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this exercise, you improved the organization and protection of Azure resources by using &lt;strong&gt;tags&lt;/strong&gt; and &lt;strong&gt;resource locks&lt;/strong&gt;. Tags help administrators categorize resources based on attributes such as department or purpose, while resource locks prevent accidental deletion or modification of important infrastructure. These features help maintain better structure and control when managing resources in Azure environments.&lt;/p&gt;

</description>
      <category>azurefunctions</category>
      <category>management</category>
      <category>cloud</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Azure Management Task 4: Controlling Storage Access</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:24:28 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-4-controlling-storage-access-4bj4</link>
      <guid>https://dev.to/pirrezz/azure-management-task-4-controlling-storage-access-4bj4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern cloud environments rely heavily on secure and scalable storage solutions. Cloud administrators must understand how to store files, manage access permissions, and control how data is shared across services and users.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Microsoft Azure&lt;/strong&gt;, storage accounts provide several services such as &lt;strong&gt;Blob storage&lt;/strong&gt;, &lt;strong&gt;file shares&lt;/strong&gt;, and secure access mechanisms that allow administrators to manage data efficiently.&lt;/p&gt;

&lt;p&gt;In this exercise, we will work with Azure storage services by creating a storage container, uploading files, configuring access tiers, and creating a file share. We will also generate a **Shared Access Signature (SAS) **token to securely share files and learn how to revoke access by rotating storage account keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a storage container&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to Microsoft Azure at &lt;a href="https://dev.tourl"&gt;https://azure.portal.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Azure portal&lt;/strong&gt; home page, search for and select &lt;strong&gt;storage accounts&lt;/strong&gt; under services.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bankdmd8tu0m886i9gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bankdmd8tu0m886i9gl.png" alt="storage" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the storage account created during the &lt;strong&gt;Prepare&lt;/strong&gt; exercise (for example

&lt;code&gt;guideprojectsan&lt;/code&gt;

).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensure the storage account is associated with the resource group, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;guided-project-rg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79vkmj080tq9e6ax42kb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79vkmj080tq9e6ax42kb.png" alt="link" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Data storage&lt;/strong&gt;, select &lt;strong&gt;Containers&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ Add container&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the new container:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;storage-container&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5pe4rcajmbcr2fjnrlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5pe4rcajmbcr2fjnrlp.png" alt="Icontainer" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Upload a file to the storage container&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open&lt;/strong&gt; the container you just created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Upload&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Browse for files&lt;/strong&gt;, select a file from your computer, and upload it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zxz49co8tizdtg6tmuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zxz49co8tizdtg6tmuf.png" alt="files" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the upload is complete, you will notice that the file is assigned to an &lt;strong&gt;Access tier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvie9860jayxqsp3a4lgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvie9860jayxqsp3a4lgs.png" alt="hot" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Change the access tier&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Storage tiers help optimise cost depending on how frequently files are accessed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select the uploaded file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Change tier&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0uuxshyaftbrhc1aidra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0uuxshyaftbrhc1aidra.png" alt="tier" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;Cold&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulgt6upma4qdy361q1pr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulgt6upma4qdy361q1pr.png" alt="cold" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create a file share&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Azure file shares allow files to be accessed using standard file protocols.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;From the &lt;strong&gt;Azure portal&lt;/strong&gt;, search for and select &lt;strong&gt;storage accounts&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcvrbn02uas3g54jpxwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcvrbn02uas3g54jpxwl.png" alt="storage" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select the storage account you created earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Data storage&lt;/strong&gt;, select &lt;strong&gt;File share&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;+ File share&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqgqx01lkx3i610d12lj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqgqx01lkx3i610d12lj.png" alt="fileshare" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter a &lt;strong&gt;name&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrbwzzsgwti9ahlffz4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrbwzzsgwti9ahlffz4q.png" alt="name" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On the &lt;strong&gt;Backup&lt;/strong&gt; tab, &lt;strong&gt;uncheck&lt;/strong&gt; Enable backup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt;, then &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqiqm60fwgv4pa7cvlhoc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqiqm60fwgv4pa7cvlhoc.png" alt="review" width="800" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the &lt;strong&gt;file share&lt;/strong&gt; is created, select &lt;strong&gt;Upload&lt;/strong&gt;.
&lt;em&gt;Upload the same file you uploaded to the blob storage or a different file&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnf927h6agongqc7gg3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnf927h6agongqc7gg3u.png" alt="file" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Create a shared Access Signature (SAS)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A &lt;strong&gt;Shared Access Signature (SAS)&lt;/strong&gt; allows controlled access to storage resources without exposing accounts credentials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to the storage account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Storage browser&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expand &lt;strong&gt;Blob containers&lt;/strong&gt; and open the container you created earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;three dots(...)&lt;/strong&gt; next to the uploaded file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Generate SAS&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs12xu4ftcp7jl0x6ynbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs12xu4ftcp7jl0x6ynbp.png" alt="uploaded" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure the following settings:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;Signing&lt;/span&gt; &lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;Account&lt;/span&gt; &lt;span class="nt"&gt;key&lt;/span&gt;
&lt;span class="nt"&gt;Signing&lt;/span&gt; &lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;key&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;Stored&lt;/span&gt; &lt;span class="nt"&gt;access&lt;/span&gt; &lt;span class="nt"&gt;policy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;None&lt;/span&gt;
&lt;span class="nt"&gt;Permissions&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;Read&lt;/span&gt;
&lt;span class="nt"&gt;Allowed&lt;/span&gt; &lt;span class="nt"&gt;protocols&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;Https&lt;/span&gt; &lt;span class="nt"&gt;only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Generate SAS token and URL&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5k224b5s9ccxosblfq6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5k224b5s9ccxosblfq6.png" alt="generate" width="585" height="876"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copy&lt;/strong&gt; the &lt;strong&gt;Blob SAS URL&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec73y72bpugrj7ii1f06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec73y72bpugrj7ii1f06.png" alt="url" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste copied URL into a new browser tab. The uploaded file should become accessible.
&lt;em&gt;Keep this tab or window open.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1i9900s8bf9b2viibqwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1i9900s8bf9b2viibqwx.png" alt="spanner" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Rotate access keys&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rotating storage accounts keys helps revoke access granted through SAS tokens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate through to your &lt;strong&gt;Storage accounts&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Security + networking&lt;/strong&gt;, select &lt;strong&gt;Access keys&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Key 1&lt;/strong&gt;, select &lt;strong&gt;Rotate key&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm by selecting &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fper8l3f1q0yti40tpb7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fper8l3f1q0yti40tpb7j.png" alt="rotate" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the key rotation is complete, return to the browser tab where youu opened the &lt;strong&gt;SAS URL&lt;/strong&gt; and refresh the page. You should now receive an &lt;strong&gt;authentication failed&lt;/strong&gt; error, confirming that the previously generated SAS token is no longer valid.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fswgws94zpzimymkazh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fswgws94zpzimymkazh.png" alt="error" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this exercise, we explored how to manage storage resources in Azure. We created a storage container, uploaded files, and configured storage tiers to optimize data access and cost management. We also created an Azure file share to support structured file storage.&lt;/p&gt;

&lt;p&gt;Additionally, we generated a Shared &lt;strong&gt;Access Signature (SAS)&lt;/strong&gt; token to securely share storage resources without exposing account credentials. Finally, we rotated the storage account access key to invalidate the SAS token and demonstrate how administrators can revoke access when necessary.&lt;/p&gt;

&lt;p&gt;These storage management skills are essential for maintaining secure and scalable data storage in &lt;strong&gt;Microsoft Azure&lt;/strong&gt; environments.&lt;/p&gt;

</description>
      <category>control</category>
      <category>management</category>
      <category>cloudcomputing</category>
      <category>azure</category>
    </item>
    <item>
      <title>Azure Management Task 3: Managing Virtual Machines</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:17:08 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-3-managing-virtual-machines-2dn5</link>
      <guid>https://dev.to/pirrezz/azure-management-task-3-managing-virtual-machines-2dn5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the previous task, we updated the virtual network by creating a new subnet and configuring a network security group to control inbound traffic. This network segmentation allows workloads to be isolated and managed more securely within &lt;strong&gt;Microsoft Azure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the network configuration in place, the next step is to manage the virtual machine itself. Cloud administrators often need to adjust virtual machine settings to meet changing workload requirements, optimize performance, or reduce operational costs.&lt;/p&gt;

&lt;p&gt;In this task, we will move the existing virtual machine to the newly created subnet, resize the virtual machine to provide additional resources, attach a new data disk for storage, and configure automatic shutdown to control daily operating costs. These tasks simulate common administrative operations performed when managing compute resources in a cloud environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Move the virtual machine network to the new subnet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to Microsoft Azure at &lt;a href="https://dev.tourl"&gt;https://portal.azure.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Azure portal&lt;/strong&gt; home page, search for and select &lt;strong&gt;virtual machines&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53lwxp9qr5uftlsmlnoy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53lwxp9qr5uftlsmlnoy.png" alt="vm" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;virual machine&lt;/strong&gt; created earlier.
Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If the VM is running, select &lt;strong&gt;Stop&lt;/strong&gt; and confirm the prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0byq5oda8mesn4n4kiw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0byq5oda8mesn4n4kiw4.png" alt="stop" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait until the &lt;strong&gt;Status&lt;/strong&gt; field shows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nt"&gt;Stopped&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;deallocated&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under the &lt;strong&gt;Networking&lt;/strong&gt; section, select &lt;strong&gt;Network settings&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Network interface / IP configuration&lt;/strong&gt; link.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfspzzc1t5idm4s6dcri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfspzzc1t5idm4s6dcri.png" alt="interface" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;IP Configurations&lt;/strong&gt; page, update  &lt;strong&gt;Subnet&lt;/strong&gt; to:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ftpSubnet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt; Select &lt;strong&gt;Apply&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftc9rpkvfh5j111ej567o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftc9rpkvfh5j111ej567o.png" alt="configuration" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Vertically scale the virtual machine&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scalling a &lt;em&gt;Virtual Machine&lt;/em&gt; allows administrator to increase computer resources such as CPU and memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal home page, search for and select &lt;strong&gt;virtual machines&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foavc4w1yui349phxjsvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foavc4w1yui349phxjsvd.png" alt="vm" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the virtual machine:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25rti85xmlg1s5mqff0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25rti85xmlg1s5mqff0g.png" alt="vm" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Availability + scale&lt;/strong&gt;, select &lt;strong&gt;Size&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose a larger VM size such as:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;D2s_v5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select  &lt;strong&gt;Resize&lt;/strong&gt;.
(&lt;em&gt;If this exact size is unavailable in your region, select a similar  option&lt;/em&gt;.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq86lzfo1ra48kemf8k97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq86lzfo1ra48kemf8k97.png" alt="resize" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Attach a data disk to the virtual machine&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Additional disks can be attached to increase storage capacity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Navigate through the Azure portal and select the VM:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Under settings, select &lt;strong&gt;Disks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5ykew0aldypk09snyxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5ykew0aldypk09snyxa.png" alt="disks" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ Create and attach a new disk&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the following:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;Disk name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ftp-data-disk&lt;/span&gt;
&lt;span class="na"&gt;Size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;20 Gib&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Leave the remaining settings as defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Apply&lt;/strong&gt; to create the and attach the disk.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuozqt485vdyjr9xfca78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuozqt485vdyjr9xfca78.png" alt="size" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The VM now has additional strage available to support&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Configure automatic shutdown&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Automatic shutdown helps reduce cloud cost by turning off unused resources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the virtual machine:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under the &lt;strong&gt;Operations&lt;/strong&gt;, select &lt;strong&gt;Auto-shutdown&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set shutdown time to :&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nl"&gt;7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;15:00 PM&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmkr6tyvqb6vvwoh2xy9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmkr6tyvqb6vvwoh2xy9.png" alt="time" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This ensures the virtual machine automatically stops at the time each day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this exercise, we performed several management operations on the virtual machine. First, we moved the VM to the newly created subnet to ensure it operates within the correct network segment. We then vertically scaled the virtual machine to provide additional compute resources.&lt;/p&gt;

&lt;p&gt;To support file uploads, we attached a new data disk to increase storage capacity. Finally, we configured automatic shutdown to help reduce operational costs by ensuring the virtual machine does not run continuously when it is not needed.&lt;/p&gt;

&lt;p&gt;In the next task, we will focus on &lt;strong&gt;controlling storage access&lt;/strong&gt;, including managing permissions and securing access to storage containers and file shares.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>virtualmachine</category>
      <category>infrastructure</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Azure Management Task 2: Updating the Virtual Network</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 11:04:15 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-2-updating-the-virtual-network-5ag8</link>
      <guid>https://dev.to/pirrezz/azure-management-task-2-updating-the-virtual-network-5ag8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the previous task, we prepared the Azure environment by creating the core resources required for this guided project, including a resource group, virtual network, virtual machine, and storage account in &lt;strong&gt;Microsoft Azure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the environment ready, the next step is to update the network configuration. Proper network segmentation is important when managing cloud infrastructure because it allows administrators to control traffic flow, apply security policies, and isolate workloads.&lt;/p&gt;

&lt;p&gt;In this task, we will create a new subnet and configure network security settings that will later support the deployment of an FTP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You are assisting an Azure administrator with maintaining cloud resources. While you are not responsible for managing the entire infrastructure, the administrator may assign you specific operational tasks.&lt;/p&gt;

&lt;p&gt;Currently, there is an existing Linux virtual machine that is underutilized, and a new Linux machine needs to be deployed to function as an FTP server. To properly monitor network flow and resource usage for this server, the administrator has requested the creation of a &lt;strong&gt;new subne&lt;/strong&gt;t within the existing virtual network.&lt;/p&gt;

&lt;p&gt;The current subnet must remain unchanged because there are plans to deploy additional virtual machines in it later. Therefore, a separate subnet will be provisioned specifically for the FTP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEPS&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Create a new subnet on an existing virtual network (vNet)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Login to Microsoft Azure at &lt;a href="https://dev.tourl"&gt;https://portal.azure.com/auth/login&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, search for and select &lt;strong&gt;virtual networks&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5sx8nc5v1e1h3fbjbsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5sx8nc5v1e1h3fbjbsr.png" alt="vn" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the

&lt;code&gt;guided-project-vnet&lt;/code&gt;

virtual network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx664zsiybvi4e70nkp7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx664zsiybvi4e70nkp7a.png" alt="select" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Settings&lt;/strong&gt;, select &lt;strong&gt;Subnets&lt;/strong&gt; and click &lt;strong&gt;+ Subnet&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave &lt;strong&gt;Subnet purpose&lt;/strong&gt; as &lt;strong&gt;Default&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter a name for the subnet. Example:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ftpSubnet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Keep the remaining settings as default and select &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu9ml1eayt3ch58dsngj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu9ml1eayt3ch58dsngj.png" alt="subnet" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create a network security group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal, search for and select &lt;strong&gt;virtual networks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi23d6mbocda58stzygke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi23d6mbocda58stzygke.png" alt="vn" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Network security groups&lt;/strong&gt;, then select &lt;strong&gt;+ create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzgg25t4h8msletsiq67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzgg25t4h8msletsiq67.png" alt="create" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Confirm the &lt;strong&gt;subscription&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the previously created resource group:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-rg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Enter a name for the network security group:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ftpNSG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt;, then &lt;strong&gt;create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm4ych8if3wjeq58broj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm4ych8if3wjeq58broj.png" alt="ten" width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once deployment is complete, select &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nmbuuq9o4sygcukk3se.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nmbuuq9o4sygcukk3se.png" alt="deploy" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Create an inbound security rule&lt;/strong&gt;&lt;br&gt;
Within the &lt;strong&gt;Network Security Group&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;Inbound security rules&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ Add&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change the &lt;strong&gt;Destination port ranges&lt;/strong&gt; from 8080 to:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Protocol&lt;/strong&gt; to &lt;strong&gt;TCP&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide a name, for example:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ftpInbound&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjb786a66wgkso2lf8tc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjb786a66wgkso2lf8tc.png" alt="inbound" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Associate the Network Security Group with the subnet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, search for and select &lt;strong&gt;virtual networks&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;guided-project-vnet&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fbmvkz6zcwhv0hf2j30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fbmvkz6zcwhv0hf2j30.png" alt="vnet" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Under settings, select &lt;strong&gt;Subnets&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the newly created subnet &lt;strong&gt;ftpSubnet&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Security&lt;/strong&gt; section, select the &lt;strong&gt;Network security group:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ftpNSG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuqfccoiggs2uac13azf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuqfccoiggs2uac13azf.png" alt="subnet" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this exercise, we updated the virtual network by creating a new subnet and configuring a network security group to control inbound traffic. Segmenting the network in this way allows administrators to isolate workloads and apply security policies specific to different services.&lt;/p&gt;

&lt;p&gt;By associating the network security group with the newly created subnet, we ensured that only approved traffic can reach resources deployed within that network segment.&lt;/p&gt;

&lt;p&gt;In the next task, we will focus on &lt;strong&gt;managing virtual machines&lt;/strong&gt;, including modifying configurations and preparing the infrastructure for additional workloads.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>network</category>
      <category>virtualmachine</category>
      <category>management</category>
    </item>
    <item>
      <title>Azure Management Task 1: Preparing Resources for Update and Maintenance</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Fri, 13 Mar 2026 02:22:37 +0000</pubDate>
      <link>https://dev.to/pirrezz/azure-management-task-1-preparing-resources-for-update-and-maintenance-phg</link>
      <guid>https://dev.to/pirrezz/azure-management-task-1-preparing-resources-for-update-and-maintenance-phg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloud environments require regular updates and ongoing maintenance to ensure resources remain secure, organized, and efficient. In this guided project based on exercises from Microsoft Learn, we perform a series of management tasks in Microsoft Azure.&lt;/p&gt;

&lt;p&gt;The objective of this project is to simulate real administrative work by creating and managing core Azure resources such as resource groups, virtual networks, virtual machines, and storage accounts. These resources will later be modified and managed throughout the remaining exercises in the series.&lt;/p&gt;

&lt;p&gt;In this first task, we prepare the environment by provisioning the foundational resources required for the rest of the lab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this guided project, you will perform a series of administrative tasks to manage resources in Microsoft Azure. The exercises simulate common responsibilities of a cloud administrator, such as organizing resources, configuring networking, managing compute instances, and controlling storage access.&lt;/p&gt;

&lt;p&gt;Throughout the project, you will:&lt;/p&gt;

&lt;p&gt;i. Modify and manage a virtual network&lt;/p&gt;

&lt;p&gt;ii. Move a virtual machine between subnets&lt;/p&gt;

&lt;p&gt;iii. Configure access to storage containers and file shares&lt;/p&gt;

&lt;p&gt;iv. Apply resource tags for better organization&lt;/p&gt;

&lt;p&gt;v. Use resource locks to protect important resources&lt;/p&gt;

&lt;p&gt;These tasks demonstrate practical resource management techniques that are commonly used when maintaining cloud infrastructure in Azure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing the Azure Environment
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Before performing the management tasks, we first need to create the core resources that will be used throughout the lab.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Set up the Environment&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;If you already have a Microsoft Azure account to use for this lab, skip to Login to Microsoft Azure. If you need to create an Azure account, complete the following steps.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to the &lt;a href="https://azure.microsoft.com/en-us/pricing/purchase-options/azure-account?icid=dotnet" rel="noopener noreferrer"&gt;Azure free&lt;/a&gt; account page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Try Azure for free&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complete the sign-up process for an Azure account.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Login to Azure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;strong&gt;Azure portal&lt;/strong&gt; &lt;a href="https://dev.tourl"&gt;https://portal.azure.com/auth/login/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sign in with your Azure account credentials&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Create a resource group&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;A resource group acts as a container that holds related Azure resources.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal home page, in the search box, enter &lt;strong&gt;resource groups&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Resource groups&lt;/strong&gt; under services.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiz7sorlxdtr6mo8pd8f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiz7sorlxdtr6mo8pd8f2.png" alt="resource group" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select  &lt;strong&gt;+ create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sgv4qrlbrd3wmr0ifvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sgv4qrlbrd3wmr0ifvq.png" alt="create" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter a name for the &lt;strong&gt;Resource group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-rg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Leave the default &lt;strong&gt;Region&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt; and then click &lt;strong&gt;create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mfl2alzhr4mzypn7owd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mfl2alzhr4mzypn7owd.png" alt="RG" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once completed, a notification will confirm that the resource group was created successfully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create a virtual network&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;A virtual network (VNet) enables Azure resources to communicate securely with each other.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal home page, search for and select &lt;strong&gt;virtual networks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg67eqkmhxku2zdp3trie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg67eqkmhxku2zdp3trie.png" alt="vn" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ex3qr2x4wsc2826c0ma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ex3qr2x4wsc2826c0ma.png" alt="Icreate" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Instance details&lt;/strong&gt;, enter a name for the virtual network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt; then &lt;strong&gt;create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34ka1bunmkqwb2303sby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34ka1bunmkqwb2303sby.png" alt="instance" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once deployment is complete, return to the &lt;strong&gt;Home&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Create a virtual machine&lt;/strong&gt;&lt;br&gt;
Next, we deploy a &lt;strong&gt;Linex virtual machine&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure portal, search for and select &lt;strong&gt;virtual machines&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y0axlbl0gn84ifern3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y0axlbl0gn84ifern3w.png" alt="vm" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt; → &lt;strong&gt;Virtual machine&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff502dla4tl6i4fom91g1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff502dla4tl6i4fom91g1.png" alt="Ivm" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Choose the  &lt;strong&gt;Resource group&lt;/strong&gt; created earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter a &lt;strong&gt;Virtual machine&lt;/strong&gt; a name.&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;Image&lt;/strong&gt;, select:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu Server 24.04 LTS - x64 Gen2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;If the default size is unavailable in your region, select another available size.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Administrator account&lt;/strong&gt; section:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Authentication type: &lt;strong&gt;Password&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example Username:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;guided-project-admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter and confirm your password.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave the remaining settings as defaults.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71ft56nq6aze4ttlqxnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71ft56nq6aze4ttlqxnv.png" alt="review" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt; and select &lt;strong&gt;create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Azure will display an estimated &lt;strong&gt;hourly cost&lt;/strong&gt; for running the VM&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f877zgq36xxw56nyryj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f877zgq36xxw56nyryj.png" alt="create" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Create a Storage account&lt;/strong&gt;&lt;br&gt;
Finally, we create a storage acount to manage the storage resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From the &lt;strong&gt;Azure portal&lt;/strong&gt;, search for and select &lt;strong&gt;storage accounts&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqksp05k7t98edq1ovpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqksp05k7t98edq1ovpf.png" alt="storage" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Entr a &lt;strong&gt;Storage account name&lt;/strong&gt;.&lt;br&gt;
Storage account must be &lt;strong&gt;globally unique&lt;/strong&gt;, so you may need to try multiple variations.&lt;br&gt;
&lt;em&gt;Leave the default settings&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + create&lt;/strong&gt;, then &lt;strong&gt;create&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb7uafss2v1f0sshoz0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb7uafss2v1f0sshoz0p.png" alt="san" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once deployment is complete, return to the portal &lt;strong&gt;home&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this task, we prepared the Azure environment by creating the foundational resources required for the rest of the guided project. This included setting up a resource group, deploying a virtual network, provisioning a virtual machine, and creating a storage account.&lt;/p&gt;

&lt;p&gt;These resources will be used in the following exercises to perform administrative tasks such as updating network configurations, managing virtual machines, controlling storage access, and applying resource governance.&lt;/p&gt;

&lt;p&gt;In the next task, we will &lt;strong&gt;update the virtual network configuration by creating a new subnet to support additional infrastructure requirements&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>resources</category>
      <category>azure</category>
      <category>microsoft</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Provisioning a Virtual Network and Virtual Machine in Azure with Azure CLI</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Wed, 11 Mar 2026 23:30:04 +0000</pubDate>
      <link>https://dev.to/pirrezz/provisioning-a-virtual-network-and-virtual-machine-in-azure-with-azure-cli-5f1g</link>
      <guid>https://dev.to/pirrezz/provisioning-a-virtual-network-and-virtual-machine-in-azure-with-azure-cli-5f1g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In a previous guide, I demonstrated how to set up a development environment using &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, configure the &lt;strong&gt;Azure CLI&lt;/strong&gt;, and interact with &lt;strong&gt;Microsoft Azure&lt;/strong&gt; from the terminal using &lt;strong&gt;Bash&lt;/strong&gt; and &lt;strong&gt;PowerShell&lt;/strong&gt;. We also created a Resource Group to organize and manage our cloud resources.&lt;/p&gt;

&lt;p&gt;With the environment ready, the next step is to begin deploying actual infrastructure in Azure.&lt;/p&gt;

&lt;p&gt;In this guide, we will create a &lt;strong&gt;Virtual Network&lt;/strong&gt; and deploy a &lt;strong&gt;Virtual Machine&lt;/strong&gt; using Azure CLI. A Virtual Network provides a secure and isolated environment where Azure resources can communicate with each other, while a Virtual Machine allows us to run operating systems and applications in the cloud.&lt;/p&gt;

&lt;p&gt;By the end of this walkthrough, you will understand how to provision networking resources and launch a virtual machine directly from the terminal, continuing the process of building cloud infrastructure using command-line tools.&lt;/p&gt;

&lt;p&gt;Before we begin, we can verify that our Azure account is active and correctly configured by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az account show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeb5e35f40esgx70cg18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeb5e35f40esgx70cg18.png" alt="info" width="785" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This command displays the currently active subscription and account details.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now, let's walk through the process step by step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a Resource Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set a variable&lt;/strong&gt; for the resource group.
&lt;em&gt;This prevents typos throughout the rest of the lab and makes the script easily reusable.&lt;/em&gt;
Since we are using Bash, we can define variables once and reuse them throughout the commands. 
This helps prevent typos and makes the script easier to maintain. 
We can define multiple variables using a line continuation character ().
For example, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"azurecli-11-rg"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;LOCATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"koreacentral"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcqfc29b6e92xxwq5bng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcqfc29b6e92xxwq5bng.png" alt="resource" width="591" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the resource group.
&lt;em&gt;Azure requires every resource to live inside a resource group. They make it easy to manage, monitor, and delete everything together at the end of the lab.&lt;/em&gt;
Run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az group create &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nv"&gt;$LOCATION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kindly check the &lt;strong&gt;provisioningState&lt;/strong&gt; for confirmation.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcl125j1gp4oiod59rynn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcl125j1gp4oiod59rynn.png" alt="create" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can also check if the resource group was created by running:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az group list &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskzn6uq1ec9wxp4hdyze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskzn6uq1ec9wxp4hdyze.png" alt="list" width="695" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;2. Create a Virtual Network&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual Machines and other infrastructure need a secure, isolated private network to communicate with each other.
Kindly notice the provisioningState, location and name to confirm that it was created. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To create this, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network vnet create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-vnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--address-prefix&lt;/span&gt; 10.0.0.0/16 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nv"&gt;$LOCATION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw47emsjxuihrtr2yjguy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw47emsjxuihrtr2yjguy.png" alt="vnet" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can check by running:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network vnet list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrh2mzfix2n8aex0pjh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrh2mzfix2n8aex0pjh0.png" alt="list" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can also check by navigating to the &lt;strong&gt;Azure portal&lt;/strong&gt; to check.
On the &lt;strong&gt;Azure portal&lt;/strong&gt;, you will also notice the &lt;strong&gt;resource group&lt;/strong&gt; we created earlier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvlxbsqvhhiu8lysp9f5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvlxbsqvhhiu8lysp9f5.png" alt="portal" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Create a subnet&lt;/strong&gt;&lt;br&gt;
Segmenting networks allows you to apply different routing and firewall rules to different types of resources. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create the &lt;strong&gt;subnet&lt;/strong&gt;, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network vnet subnet create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vnet-name&lt;/span&gt; lab-vnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-subnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--address-prefix&lt;/span&gt; 10.0.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Check the provisioningState to confirm creation. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can as well check from the Azure portal to confirm if it was created or not.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0slw51v5xq9szbpmj9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0slw51v5xq9szbpmj9g.png" alt="subnet" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can as well check from the Azure portal to confirm if it was created or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Create a Network Security Group (NSG).&lt;/strong&gt;&lt;br&gt;
If a Network Security Group is not configured, Azure blocks all inbound traffic by default while allowing outbound traffic. &lt;br&gt;
&lt;em&gt;Creating an NSG allows us to define specific firewall rules that control which traffic is allowed into the network.&lt;/em&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create NSG, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network nsg create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-nsg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhbf9fe3z3x3frq8x8vw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhbf9fe3z3x3frq8x8vw.png" alt="nsg" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can as well run:

&lt;code&gt;az network nsg list&lt;/code&gt;

to check.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Create open port 22 (SSH)&lt;/strong&gt;&lt;br&gt;
You'll need SSH to log in and configure the server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network nsg rule create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--nsg-name&lt;/span&gt; lab-nsg &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; AllowSSH &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--priority&lt;/span&gt; 1000 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--destination-port-ranges&lt;/span&gt; 22 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--access&lt;/span&gt; Allow &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--protocol&lt;/span&gt; Tcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--direction&lt;/span&gt; Inbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check to confirm creation.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8v6s6b6i7nuw8awar7u.png" alt="nsg rule" width="800" height="321"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Create port 80 (HTTP)&lt;/strong&gt;&lt;br&gt;
Port 80 &lt;strong&gt;allows&lt;/strong&gt; HTTP traffic, which enables users &lt;strong&gt;to access&lt;/strong&gt; web pages hosted &lt;strong&gt;on&lt;/strong&gt; the virtual machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create HTTP, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network nsg rule create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--nsg-name&lt;/span&gt; lab-nsg &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; AllowHTTP &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--priority&lt;/span&gt; 1010 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--destination-port-ranges&lt;/span&gt; 80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--access&lt;/span&gt; Allow &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--protocol&lt;/span&gt; Tcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--direction&lt;/span&gt; Inbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Confirm provisioningState, priority, destination range and other things to be sure it was created successfully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkbt0bmo6t44g8h7xo5z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkbt0bmo6t44g8h7xo5z.png" alt="http" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Attach NSG to Subnet&lt;/strong&gt;&lt;br&gt;
Applying the NSG to the subnet ensures that &lt;em&gt;any&lt;/em&gt; VM created in that subnet automatically inherits those exact firewall rules — protecting the entire subnet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To attach, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network vnet subnet update &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vnet-name&lt;/span&gt; lab-vnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-subnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--network-security-group&lt;/span&gt; lab-nsg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnb42nug2dm52scy12vp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnb42nug2dm52scy12vp2.png" alt="update" width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Provision a Linux Virtual Machine
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Allocate a Public IP&lt;/strong&gt;&lt;br&gt;
Without a public IP, the VM can only be accessed internally through the VNet or a VPN. You need this to reach your web server from your browser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To allocate a public IP, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network public-ip create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-public-ip &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--allocation-method&lt;/span&gt; Static &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--sku&lt;/span&gt; Basic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Confirm that the public IP address has been allocated successfully. 
&lt;em&gt;You may also notice a warning message about future changes in Azure's default behavior when no availability zone is specified.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3ungfrwp7r3nx6my452.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3ungfrwp7r3nx6my452.png" alt="ip" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can as well confirm from your &lt;strong&gt;Azure portal&lt;/strong&gt; or run

&lt;code&gt;az network public-ip list&lt;/code&gt;

to confirm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jeqeuqxywldhquoldro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jeqeuqxywldhquoldro.png" alt="list" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create the VM&lt;/strong&gt;&lt;br&gt;
This is the actual cloud compute instance that will run your web application code without you having to run it on your system.&lt;br&gt;
One common challenge when deploying virtual machines is that certain VM sizes may not be available in all Azure regions. &lt;br&gt;
&lt;em&gt;If the selected size is unavailable, Azure will return a capacity restriction error.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To create a VM, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az vm create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-vm &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; Ubuntu2204 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--size&lt;/span&gt; Standard_B2ats_v2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--admin-username&lt;/span&gt; azureuser &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--generate-ssh-keys&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vnet-name&lt;/span&gt; lab-vnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--subnet&lt;/span&gt; lab-subnet &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--public-ip-address&lt;/span&gt; lab-public-ip &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--nsg&lt;/span&gt; lab-nsg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Confirm the status of the VM. Also note the  important information written on yellow about the resource storage and the location.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18umps2o0ozflvthnccb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18umps2o0ozflvthnccb.png" alt="vm" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can as well run:&lt;br&gt;
&lt;br&gt;
&lt;code&gt;az vm list&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
to confirm if the VM was created with the CLI. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;strong&gt;Azure portal&lt;/strong&gt; to confirm too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Retrieve the public IP&lt;/strong&gt;&lt;br&gt;
The public IP is needed to access the VM and to test the web application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To retrieve, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az network public-ip show &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-public-ip &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; ipAddress &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; tsv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4b00lu39quroc2bg760.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4b00lu39quroc2bg760.png" alt="confirm the ip" width="639" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Verify the VM is running&lt;/strong&gt;&lt;br&gt;
Always verify provisioning success before attempting connections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To verify, run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az vm show &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; &lt;span class="nv"&gt;$RG&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lab-vm &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--show-details&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'{Name:name, State:powerState, IP:publicIps}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The VM query staus shows running and it shows the public ip too.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnc38i2ivs48a8t6o4owm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnc38i2ivs48a8t6o4owm.png" alt="query" width="709" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this guide, we used &lt;strong&gt;Azure CLI&lt;/strong&gt; to provision core infrastructure components in &lt;strong&gt;Microsoft Azure&lt;/strong&gt;. We created a Resource Group, configured a Virtual Network and subnet, defined firewall rules using a Network Security Group, and deployed a Linux Virtual Machine connected to the network.&lt;/p&gt;

&lt;p&gt;By performing these steps through the command line instead of the Azure portal, we gain a deeper understanding of how cloud resources are structured and managed programmatically. This approach is especially useful for automation, scripting, and infrastructure-as-code workflows commonly used in cloud engineering and DevOps environments.&lt;/p&gt;

&lt;p&gt;With the virtual machine now running and accessible through its public IP address, the next step is to connect to the server and configure services such as a web server. In future guides, we will continue building on this environment by installing and managing applications inside the virtual machine.&lt;/p&gt;

</description>
      <category>virtualmachine</category>
      <category>cli</category>
      <category>infrastructure</category>
      <category>networking</category>
    </item>
    <item>
      <title>Switching from PowerShell to Bash: Setting Up WSL and Running Azure CLI in Visual Studio Code</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Wed, 11 Mar 2026 01:50:06 +0000</pubDate>
      <link>https://dev.to/pirrezz/switching-from-powershell-to-bash-setting-up-wsl-and-running-azure-cli-in-visual-studio-code-1823</link>
      <guid>https://dev.to/pirrezz/switching-from-powershell-to-bash-setting-up-wsl-and-running-azure-cli-in-visual-studio-code-1823</guid>
      <description>&lt;p&gt;&lt;em&gt;If you’ve been using PowerShell but keep seeing tutorials written for Bash, switching environments can feel confusing. In this guide, I show how I installed Windows Subsystem for Linux, opened Bash inside Visual Studio Code, and used Azure CLI to create and manage resources in Microsoft Azure.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Setting up a development environment is often one of the first steps when working with cloud platforms and command-line tools. In a previous guide, I configured my environment using Visual Studio Code and explored how to run commands through the default PowerShell terminal while interacting with Microsoft Azure using Azure CLI.&lt;/p&gt;

&lt;p&gt;While working with variables and commands in PowerShell, I ran into several syntax-related errors. One of the most common issues was forgetting that PowerShell requires variables to begin with the $ symbol. These small syntax rules caused unexpected errors and made me realize how much command behavior can differ between shell environments.&lt;/p&gt;

&lt;p&gt;This curiosity led me to explore another widely used shell in development and cloud environments: Bash. Many Linux systems and cloud tutorials rely on Bash, so understanding how it works is an important skill for anyone working with servers, DevOps tools, or cloud platforms.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk through &lt;strong&gt;how I switched from the default PowerShell terminal to Bash&lt;/strong&gt; using &lt;strong&gt;Windows Subsystem for Linux inside Visual Studio Code&lt;/strong&gt;. Along the way, I’ll show how to install WSL, open a Bash terminal, and run Azure CLI commands while highlighting the key differences between PowerShell and Bash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering Shell Differences
&lt;/h2&gt;

&lt;p&gt;After encountering repeated syntax issues, I became curious about how different shell environments handle variables and commands. This led me to explore another shell commonly used in development environments — &lt;strong&gt;Bash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Many cloud platforms and Linux-based systems commonly use &lt;strong&gt;Bash&lt;/strong&gt;, so I decided to switch my terminal to &lt;strong&gt;Bash&lt;/strong&gt; to explore the differences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Switching from PowerShell to Bash
&lt;/h2&gt;

&lt;p&gt;Switching between these shells helped me better understand why some commands worked in one environment but produced errors in another.&lt;br&gt;
To use Bash on Windows, I first needed to install Windows Subsystem for Linux (WSL), which allows Linux tools and distributions to run directly inside Windows.&lt;br&gt;
&lt;strong&gt;STEPS:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Installing Windows Subsystem for Linux&lt;/strong&gt;&lt;br&gt;
To install WSL, open &lt;strong&gt;PowerShell&lt;/strong&gt; as an administrator and run &lt;code&gt;wsl --install&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmidhqyiupf8ctpyfbxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmidhqyiupf8ctpyfbxo.png" alt="update features" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the WSL Installation Behavior&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When running the &lt;code&gt;wsl --install&lt;/code&gt; command for the first time, the installation process may not immediately download &lt;strong&gt;Ubuntu&lt;/strong&gt;. This happens when the required Windows features needed to run Linux environments are not yet enabled on the system.&lt;/p&gt;

&lt;p&gt;If &lt;strong&gt;Windows Subsystem for Linux&lt;/strong&gt; and &lt;strong&gt;Virtual Machine Platform&lt;/strong&gt; are disabled, the command will first prepare the system by enabling these features.&lt;/p&gt;

&lt;p&gt;During this stage, the command will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable the required Windows components needed to support WSL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Display a message indicating that the changes will not take effect until the system is restarted.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, Ubuntu has not yet been installed. After restarting the computer, running the &lt;code&gt;wsl --install&lt;/code&gt; command again will continue the installation process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Another way to install WSL&lt;/strong&gt;&lt;br&gt;
Click the Windows Start icon and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;search for and open &lt;strong&gt;Turn Windows features on or off&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;wait for the popup then, scroll down and tick &lt;strong&gt;Windows Subsystem for Linux&lt;/strong&gt; and &lt;strong&gt;Virtual Machine Platform&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;select ** Ok*&lt;em&gt;, then click **Restart&lt;/em&gt;*.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l8rucvzkd8cfqooebmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l8rucvzkd8cfqooebmr.png" alt="ok" width="590" height="493"&gt;&lt;/a&gt;&lt;br&gt;
After that, you can open &lt;strong&gt;PowerShell&lt;/strong&gt; and run &lt;code&gt;wsl --install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The system will then&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Download the Ubuntu distribution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install the Linux environment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prompt you to create a UNIX username and password to complete the setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This will serve as your Linux environment login credentials.&lt;br&gt;
&lt;em&gt;Note that the password may not appear while you are typing. This is normal and is done for security reasons&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93ixsad14qzwv2mty3st.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93ixsad14qzwv2mty3st.png" alt="success" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Opening the Bash Terminal in Visual Studio Code&lt;/strong&gt;&lt;br&gt;
After installing WSL and completing the Ubuntu setup, we can now open a &lt;strong&gt;Bash&lt;/strong&gt; terminal inside &lt;strong&gt;Visual Studio Code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Visual Studio Code automatically detects installed Linux distributions and allows them to be used as a terminal profile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEPS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open Visual Studio Code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Terminal in the top menu&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select New Terminal&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click the dropdown arrow next to the plus icon in the terminal panel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjsw935knp2gf75dj4js.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjsw935knp2gf75dj4js.png" alt="terminal" width="800" height="120"&gt;&lt;/a&gt;&lt;br&gt;
Select Ubuntu (WSL)&lt;/p&gt;

&lt;p&gt;The terminal will now switch from PowerShell to Bash.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Bash Terminal&lt;/strong&gt;, you should see something similar to: &lt;code&gt;username@DESKTOP:~$&lt;/code&gt; depending on your system configuration.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprsuxqyfq6fczayxjkdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprsuxqyfq6fczayxjkdb.png" alt="switch" width="800" height="120"&gt;&lt;/a&gt;&lt;br&gt;
If you already created folder earlier, you can run &lt;code&gt;cd "Linux Servers"&lt;/code&gt; to switch the terminal to that directory.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhoh1mdh0r99vvxwcs3nm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhoh1mdh0r99vvxwcs3nm.png" alt="changed" width="800" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To shorten the Bash prompt so it only shows the hostname and the current folder, you can modify the &lt;code&gt;PS1&lt;/code&gt; variable by running &lt;code&gt;PS1='\h:\W$ '&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bjhuj1mbt054l4pfme3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bjhuj1mbt054l4pfme3.png" alt="short" width="796" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The long prompt appears because Bash displays the full directory path by default. Since the folder was created inside the Windows file system, Bash shows the path beginning with &lt;code&gt;/mnt/c/&lt;/code&gt;.&lt;br&gt;
Modifying the &lt;code&gt;PS1&lt;/code&gt; variable allows you to shorten the prompt so it displays only the hostname and the current directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## PowerShell vs Bash Variable Syntax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One of the first differences I noticed between &lt;strong&gt;PowerShell&lt;/strong&gt; and &lt;strong&gt;Bash&lt;/strong&gt; was how variables are defined. In PowerShell, variables must begin &lt;strong&gt;with&lt;/strong&gt; the &lt;strong&gt;$&lt;/strong&gt; symbol while in &lt;strong&gt;Bash&lt;/strong&gt;, variables are defined &lt;strong&gt;without&lt;/strong&gt; the &lt;strong&gt;$&lt;/strong&gt; symbol.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Resource Group with Azure CLI
&lt;/h2&gt;

&lt;p&gt;Now that the Azure CLI is installed and authenticated, we can create a Resource Group directly from the terminal.&lt;/p&gt;

&lt;p&gt;A Resource Group in Azure is a container that holds related resources for an application such as virtual machines, storage accounts, and databases.&lt;br&gt;
&lt;strong&gt;STEPS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define your variables.
You can define variables on separate lines like this:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Testing-10-rg"&lt;/span&gt;
&lt;span class="nv"&gt;LOCATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"eastus"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can also define them together using the line continuation character :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Testing-10-rg"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;LOCATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"eastus"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This allows you to organize variables across multiple lines when writing longer commands&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv8682sec1o97yfnx31u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv8682sec1o97yfnx31u.png" alt="variables" width="656" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write the command to create the resource group. For example, run &lt;code&gt;az group create --name $RG --location $LOCATION&lt;/code&gt;
When referencing a variable in a command, you must prefix it with the $ symbol so Bash knows to substitute the variable’s value. Also check the provisioningState to know if the resource group was created or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febdtwlr4a1m8h33nwjgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febdtwlr4a1m8h33nwjgl.png" alt="run" width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can also run &lt;code&gt;az group list --output table&lt;/code&gt; to see the resource group on Visual Studio Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzmwfe3szditu0lhn6ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzmwfe3szditu0lhn6ed.png" alt="check" width="624" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now navigate to the &lt;strong&gt;Azure portal&lt;/strong&gt;, search for and select &lt;strong&gt;Resource group&lt;/strong&gt; to confirm from there too.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjrlypr3dw4wdjawx0r4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjrlypr3dw4wdjawx0r4.png" alt="resource" width="800" height="280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Now you can create different Azure resource depending on your task.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete Resource through the Visual Studio Code&lt;/strong&gt;&lt;br&gt;
Just as you can create resources through &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, you can also delete them from the terminal. For example, to delete the Resource group created, run &lt;code&gt;az group delete --name $RG&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Azure will ask for confirmation: Are you sure you want to perform this operation? (y/n)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter yes or y to confirm deletion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;strong&gt;Azure portal&lt;/strong&gt; to confirm.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mpsmwm4slzn1zl6b1w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mpsmwm4slzn1zl6b1w2.png" alt="delete" width="800" height="368"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Switching between shell environments can feel confusing at first, especially when small syntax differences cause commands to behave unexpectedly. Moving from PowerShell to Bash helped me better understand how different shells handle variables, commands, and filesystem navigation.&lt;/p&gt;

&lt;p&gt;By installing Windows Subsystem for Linux and using it inside Visual Studio Code, I was able to run a Linux-based Bash environment directly on Windows while still managing resources in Microsoft Azure through Azure CLI.&lt;/p&gt;

&lt;p&gt;Although the transition introduced some challenges—such as differences in variable syntax and directory paths—it also made me more comfortable working across multiple terminal environments. These skills are especially useful when working with cloud infrastructure, Linux servers, and automation tools.&lt;/p&gt;

&lt;p&gt;Understanding how both PowerShell and Bash work gives developers and cloud engineers more flexibility when working across different systems.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
vbnet
If you're also learning Azure or DevOps tools, feel free to share what confused you the most when switching between PowerShell and Bash.



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

&lt;/div&gt;

</description>
      <category>azure</category>
      <category>bash</category>
      <category>ubuntu</category>
      <category>devops</category>
    </item>
    <item>
      <title>Setting Up Visual Studio Code and Azure CLI on Windows Using PowerShell</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Tue, 10 Mar 2026 23:53:23 +0000</pubDate>
      <link>https://dev.to/pirrezz/setting-up-visual-studio-code-and-azure-cli-on-windows-using-powershell-2l2d</link>
      <guid>https://dev.to/pirrezz/setting-up-visual-studio-code-and-azure-cli-on-windows-using-powershell-2l2d</guid>
      <description>&lt;p&gt;Setting up a development environment is one of the first steps when starting any technical project. However, the process can sometimes be confusing, especially when different tools, terminals, and command-line environments are involved.&lt;/p&gt;

&lt;p&gt;As I began exploring cloud technologies and command-line tools, I needed to prepare my local environment to interact with Microsoft Azure. This meant installing a code editor, configuring a terminal environment, and setting up Azure CLI so that I could manage cloud resources directly from my computer.&lt;/p&gt;

&lt;p&gt;In this article, I will walk through how I installed Visual Studio Code, opened and used the integrated PowerShell terminal, and installed Azure CLI to connect to Microsoft Azure. Along the way, I’ll demonstrate a few basic terminal commands and explain some small syntax details that can sometimes cause confusion when working in PowerShell.&lt;/p&gt;

&lt;p&gt;If you're new to cloud tools or command-line environments, this guide will help you set up a simple and functional development environment on Windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Below is a clean walkthrough you can follow in your blog after the introduction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Installing Visual Studio Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To begin setting up the development environment, I installed Visual Studio Code, a popular and lightweight code editor used by developers. From your browser, search for, download and install &lt;strong&gt;Visual Studio Code&lt;/strong&gt; depending on your operating system (I will be working with Windows).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6t0epscx0a5r4yjie8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6t0epscx0a5r4yjie8n.png" alt="Installation" width="800" height="314"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzew3vtwk9auuvsij8t7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzew3vtwk9auuvsij8t7.jpg" alt="Installation" width="712" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Launching Visual Studio Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the installation is complete, click &lt;strong&gt;Finish&lt;/strong&gt; to open Visual Studio Code. &lt;br&gt;
You can also launch it later by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clicking the Start Menu, searching for &lt;strong&gt;Visual Studio Code&lt;/strong&gt; and open it.
&lt;em&gt;When the editor opens, you will see the main workspace interface&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvv14l4mnrnb808sqo4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvv14l4mnrnb808sqo4k.png" alt="upload" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Opening a Project Folder&lt;/strong&gt;&lt;br&gt;
Before using the terminal, it is good practice to create and open a working folder.&lt;br&gt;
&lt;strong&gt;STEPS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On your welcome screen, search for and select &lt;strong&gt;File&lt;/strong&gt; and from the drop-down menu, select &lt;strong&gt;Open Folder&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On your system folder, select &lt;strong&gt;New folder&lt;/strong&gt; at the top left, name it and click &lt;strong&gt;Select folder&lt;/strong&gt;.&lt;br&gt;
This folder will serve as your working directory for commands and files used during the setup.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5sxc2wb98h9uzupdm0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5sxc2wb98h9uzupdm0y.png" alt="folder" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Opening the Integrated Terminal&lt;/strong&gt;&lt;br&gt;
After creating and opening a working folder, the next step is to access the integrated terminal inside &lt;strong&gt;Visual Studio Code&lt;/strong&gt;. The integrated terminal allows you to run command-line instructions without leaving the editor, making it easier to manage files and execute commands in one place.&lt;br&gt;
&lt;em&gt;Do not forget to close the Welcome message and the chat box page on the screen.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;STEPS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From the top menu bar, click &lt;strong&gt;Terminal&lt;/strong&gt; then &lt;strong&gt;New Terminal&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A terminal panel will open at the bottom of the editor.&lt;br&gt;
By default on Windows systems, the terminal opens using Windows PowerShell.&lt;br&gt;
You should see something similar to:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z42hgziwiasq3wualka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z42hgziwiasq3wualka.png" alt="Terminal" width="800" height="426"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The PS prefix indicates that the terminal is running PowerShell.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Install Azure CLI&lt;/strong&gt;&lt;br&gt;
First, install Azure CLI, which is the command-line tool used to manage resources in Microsoft Azure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEPS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open your web browser and search for Azure CLI download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll down and copy the installer package for your operating system, but in my case I'm downloading i for Windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79dgv36clehrl2hefw56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79dgv36clehrl2hefw56.png" alt="Install CLI" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Paste the command into the terminal in Visual Studio Code and press Enter to complete the setup.&lt;br&gt;
&lt;em&gt;In my case,  already have it installed.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcyec82b7oulietjaylj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcyec82b7oulietjaylj.png" alt="Install" width="800" height="84"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify the installation by typing az &lt;code&gt;--version&lt;/code&gt; and press enter.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If the installation worked correctly, it will display the installed Azure CLI version.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F319bedpry6nrz1fhfl0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F319bedpry6nrz1fhfl0x.png" alt="verify" width="703" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Log in to Azure&lt;/strong&gt;&lt;br&gt;
Next, authenticate your CLI with Microsoft Azure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run: &lt;code&gt;az login&lt;/code&gt; and sign in or select the Azure account you want to log into.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgmimac63rwiz6zebfoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgmimac63rwiz6zebfoa.png" alt="login" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return a JSON output showing your subscription details.
NOTE: you need to select your subscription number(type 1 or any other number depending on your subscription and press enter).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxm8vqf2buv6gso5j0mt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxm8vqf2buv6gso5j0mt8.png" alt="output" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case you noticed, the Terminal shows &lt;code&gt;PS C:\Users\Fadeyi Peter&amp;gt;&lt;/code&gt; instead of showing the folder we created earlier. To correct the Directory, Run &lt;strong&gt;cd "your folder name"&lt;/strong&gt; for example: &lt;code&gt;cd "Linux Servers"&lt;/code&gt;. Then your Terminal shows it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futowa23o2n15dtbm7i5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futowa23o2n15dtbm7i5v.png" alt="directory" width="800" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Confirm Your Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can verify your active account by running: &lt;code&gt;az account show&lt;/code&gt;&lt;br&gt;
This displays the state and the currently active subscription in Azure CLI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlgxbplwgwnvoapvu0ff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlgxbplwgwnvoapvu0ff.png" alt="confrm" width="682" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Running Basic Commands in PowerShell&lt;/strong&gt;&lt;br&gt;
After successfully signing in to Microsoft Azure using Azure CLI, it is helpful to run a few basic commands to understand how the terminal works.&lt;/p&gt;

&lt;p&gt;Since the integrated terminal in Visual Studio Code opens Windows PowerShell by default on Windows, we can begin by testing a few simple commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display the Current Directory.
Run &lt;code&gt;pwd&lt;/code&gt; to see the current working directory.
&lt;em&gt;This command shows the folder where your terminal is currently operating.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2dwyc09aeej6jsbf1l0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2dwyc09aeej6jsbf1l0.png" alt="test" width="631" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List Files and Folders
To display the files and folders in the current directory, run: &lt;code&gt;ls&lt;/code&gt;.
&lt;em&gt;If the folder is empty, nothing will be displayed. Once files are created, they will appear in the list&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq0tr063f3mz1e0825cb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq0tr063f3mz1e0825cb.png" alt="list" width="631" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Test File.
You can create a simple file using: &lt;code&gt;New-Item test.txt&lt;/code&gt; and Run &lt;code&gt;ls&lt;/code&gt; again and it should now display the file you just created.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2q4loxa1kv2aqy6bsyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2q4loxa1kv2aqy6bsyk.png" alt="new" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can display Text in the Terminal. Another simple command like running &lt;code&gt;echo "PowerShell is working"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prints text to the terminal, confirming that commands are being executed correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvio6k1b93599ioz81m85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvio6k1b93599ioz81m85.png" alt="display" width="711" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Defining Variables in PowerShell&lt;/strong&gt;&lt;br&gt;
While experimenting with commands, I attempted to define variables within the PowerShell environment. However, I quickly ran into several errors because PowerShell requires a specific syntax when declaring variables.&lt;/p&gt;

&lt;p&gt;In PowerShell, variables must begin with the $ symbol.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firispa11jyqv8lhl47pc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firispa11jyqv8lhl47pc.png" alt="name" width="800" height="56"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the $ symbol is omitted, PowerShell does not recognize the variable and returns an error. This small syntax requirement initially caused confusion and led to several failed command attempts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd3bvy30jjnrsy073om3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmd3bvy30jjnrsy073om3.png" alt="name" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating a Resource Group with Azure CLI
&lt;/h2&gt;

&lt;p&gt;In this section, we will define variables and create a Resource Group using &lt;strong&gt;PowerShell&lt;/strong&gt; with Azure CLI. This allows us to reuse values such as the resource group name and location when running commands.&lt;/p&gt;

&lt;p&gt;Later in the series, we will explore how to switch from &lt;strong&gt;PowerShell&lt;/strong&gt; to &lt;strong&gt;Bash&lt;/strong&gt; using Windows Subsystem for Linux and examine how command syntax and variable handling differ between these environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEPS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i.&lt;/strong&gt; &lt;strong&gt;Define your variables.&lt;/strong&gt;&lt;br&gt;
You can define variables like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$RG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Testing-09-rg"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$LOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eastus"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write each variable and press enter, then define the next.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydikea46f51rb2p2fwjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydikea46f51rb2p2fwjr.png" alt="variable" width="701" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ii.&lt;/strong&gt; Run &lt;code&gt;az group create --name $RG --location $LOCATION&lt;/code&gt; to create a resource group.&lt;br&gt;
When referencing a variable in a command, you must prefix it with the $ symbol so PowerShell substitutes the value stored in the variable. Also check the provisioningState to know if the resource group was created or not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm066sw2nay0un18p745j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm066sw2nay0un18p745j.png" alt="create" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iii.&lt;/strong&gt; You can also run &lt;code&gt;az group list --output table&lt;/code&gt; to see the resource group on Visual Studio code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv52ic95bxzvim0d4aqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvv52ic95bxzvim0d4aqh.png" alt="group" width="713" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iv.&lt;/strong&gt; If navigate to the &lt;strong&gt;Azure portal&lt;/strong&gt;, and check your &lt;strong&gt;Resource group&lt;/strong&gt;, you will also see that it's there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj624d491f44b5la1k2ts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj624d491f44b5la1k2ts.png" alt="Azure" width="800" height="225"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Now you can create different Azure resource depending on your task.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete Resource through the Visual Studio code&lt;/strong&gt;&lt;br&gt;
As you can create a resource through the Visual Studio code, you can as well delete through it. Example, to delete the Resource group created, run &lt;code&gt;az group delete --name $RG&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Azure will ask for confirmation: Are you sure you want to perform this operation? (y/n)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter yes or y to confirm deletion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;az group list --output table&lt;/code&gt;, you will see that it will not show the resource group again.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkcumjas82le271pkllt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkcumjas82le271pkllt.png" alt="list" width="733" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can also navigate to the azure portal to confirm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mpsmwm4slzn1zl6b1w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mpsmwm4slzn1zl6b1w2.png" alt="delete" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Setting up a development environment is an important first step when working with cloud platforms and command-line tools. In this guide, we walked through the process of installing &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, opening and using the &lt;strong&gt;integrated PowerShell terminal&lt;/strong&gt;, and installing &lt;strong&gt;Azure CLI&lt;/strong&gt; to connect to Microsoft Azure.&lt;/p&gt;

&lt;p&gt;Along the way, we explored a few basic PowerShell commands, learned how to navigate directories, create files, and verify our Azure account directly from the terminal. We also discovered how small syntax rules—such as the requirement to use the &lt;strong&gt;$&lt;/strong&gt; symbol when defining variables in &lt;strong&gt;PowerShell&lt;/strong&gt;—can sometimes lead to errors if overlooked.&lt;/p&gt;

&lt;p&gt;Understanding these fundamentals makes it much easier to work with command-line tools and cloud resources. With this environment now set up, we are ready to move on to more advanced tasks such as automating cloud resource creation and exploring other shell environments like &lt;strong&gt;Bash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the next article, we’ll explore how to &lt;strong&gt;switch from PowerShell to Bash&lt;/strong&gt; using &lt;strong&gt;Windows Subsystem for Linux (WSL)&lt;/strong&gt; and examine how variable syntax and command behavior differ between these two environments.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>beginners</category>
      <category>vscode</category>
      <category>cli</category>
    </item>
    <item>
      <title>From PowerShell to Bash: The Folder That Almost Broke Me</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Mon, 09 Mar 2026 13:41:44 +0000</pubDate>
      <link>https://dev.to/pirrezz/from-powershell-to-bash-the-folder-that-almost-broke-me-1e25</link>
      <guid>https://dev.to/pirrezz/from-powershell-to-bash-the-folder-that-almost-broke-me-1e25</guid>
      <description>&lt;p&gt;I didn’t expect creating a folder to become the most stressful part of my day.&lt;/p&gt;

&lt;p&gt;I’ve been comfortable using PowerShell for a while. It’s familiar, predictable, and most of the time it feels straightforward. But I kept hearing about how important Linux and Bash are, especially if you’re doing development or working with servers.&lt;/p&gt;

&lt;p&gt;So I decided to make the switch..... Or at least… start learning.&lt;/p&gt;

&lt;p&gt;I installed &lt;em&gt;Ubuntu using WSL&lt;/em&gt; and connected it to VS Code. Everything seemed smooth at first. The terminal opened, the prompt appeared, and I felt like I was officially stepping into the Linux world.&lt;/p&gt;

&lt;p&gt;Then the confusion started.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Shock: The Linux Filesystem
&lt;/h2&gt;

&lt;p&gt;The first thing that caught me off guard was the folder structure.&lt;/p&gt;

&lt;p&gt;When I tried to open a folder in VS Code through File → Open Folder at the top left of the editor, instead of seeing something familiar, I saw this list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bin
boot
dev
etc
home
lib
mnt
opt
proc
root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favwqjwrr1pnm9fp6c9oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favwqjwrr1pnm9fp6c9oy.png" alt="Linux filesystem inside VS Code" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My immediate reaction was: What is all this?&lt;/p&gt;

&lt;p&gt;Coming from PowerShell, I’m used to navigating something that feels closer to Windows. But Linux exposes its entire filesystem structure, and at first it looks intimidating.&lt;/p&gt;

&lt;p&gt;I eventually learned that the place I actually needed was inside:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then inside my username directory:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/home/fadeyi_peter&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s basically the Linux equivalent of your personal workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Folder That Caused All the Stress
&lt;/h2&gt;

&lt;p&gt;I wanted to create a folder called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux Servers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;Apparently not.&lt;/p&gt;

&lt;p&gt;When I tried creating it from the terminal using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir Linux Servers&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Linux interpreted that as two separate folders: Linux and Servers.&lt;/p&gt;

&lt;p&gt;That’s when I started getting errors like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir: cannot create directory 'Linux': File exists
mkdir: cannot create directory 'Servers': File exists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point I started blaming myself.&lt;/p&gt;

&lt;p&gt;I remember thinking:&lt;/p&gt;

&lt;p&gt;“Why did I leave PowerShell? This never stressed me like this.”&lt;/p&gt;

&lt;p&gt;I tried deleting folders, recreating them, navigating around, and things just felt messy.&lt;/p&gt;

&lt;p&gt;Eventually I switched to creating the folder directly from the VS Code explorer panel instead of the terminal.&lt;/p&gt;

&lt;p&gt;And it worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Next Confusing Moment
&lt;/h2&gt;

&lt;p&gt;After finally creating the folder, I closed VS Code and reopened it.&lt;/p&gt;

&lt;p&gt;And guess what happened?&lt;/p&gt;

&lt;p&gt;It opened the HOME folder again instead of my new folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqvhjvnwgsm3frftysk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqvhjvnwgsm3frftysk7.png" alt="Home" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought I had done something wrong again.&lt;/p&gt;

&lt;p&gt;But the truth is much simpler: VS Code just opens your home directory by default when working with WSL. Your folder is still there — you just need to navigate back to it.&lt;/p&gt;

&lt;p&gt;That realization alone removed a lot of unnecessary stress.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Command That Made Sense
&lt;/h2&gt;

&lt;p&gt;One command that quickly became useful was:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2g248q4cno2wl1l1vib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2g248q4cno2wl1l1vib.png" alt="pwd" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first I had no idea what it meant.&lt;/p&gt;

&lt;p&gt;It turns out pwd stands for:&lt;/p&gt;

&lt;p&gt;Print Working Directory&lt;/p&gt;

&lt;p&gt;In simple terms, it tells you where you are in the filesystem.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/home/fadeyi_peter/Linux Servers&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That command alone made navigating much easier because I could always confirm where I was in the filesystem.&lt;/p&gt;

&lt;p&gt;What finally worked was going back to &lt;strong&gt;File → Open Folder&lt;/strong&gt;, selecting &lt;strong&gt;home&lt;/strong&gt;, then my username, and finally the folder I created before clicking &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewhjfwcfrkvu5r6dcoli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewhjfwcfrkvu5r6dcoli.png" alt="folder" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson I Took From This
&lt;/h2&gt;

&lt;p&gt;Switching environments is never just about learning new commands.&lt;/p&gt;

&lt;p&gt;It’s about adjusting how you think.&lt;/p&gt;

&lt;p&gt;PowerShell and Bash approach things differently, and the Linux filesystem is much more exposed than what many Windows users are used to.&lt;/p&gt;

&lt;p&gt;But the biggest lesson for me today was this:&lt;/p&gt;

&lt;p&gt;Frustration is part of the learning process.&lt;/p&gt;

&lt;p&gt;At one point I was genuinely stressed over creating a folder.&lt;/p&gt;

&lt;p&gt;Now it feels almost funny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advice for Anyone Moving From PowerShell to Bash
&lt;/h2&gt;

&lt;p&gt;If you're making the same transition, here are a few things that helped me:&lt;/p&gt;

&lt;p&gt;Your personal files live inside &lt;code&gt;/home/your-username&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Avoid spaces in folder names when using the terminal.&lt;/p&gt;

&lt;p&gt;Use commands like pwd, ls, and cd to understand where you are.&lt;/p&gt;

&lt;p&gt;Don’t panic when you see folders like bin, etc, or lib. They’re just part of the Linux system structure.&lt;/p&gt;

&lt;p&gt;Most importantly:&lt;/p&gt;

&lt;p&gt;Be patient with yourself.&lt;/p&gt;

&lt;p&gt;The first day with Bash might feel confusing, but every small thing you figure out adds up.&lt;/p&gt;

&lt;p&gt;Even if that small thing is just learning how to create a folder in Bash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’ve recently switched from PowerShell to Bash, I’d love to hear what confused you the most during your first experience.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>cli</category>
      <category>cloudskills</category>
    </item>
    <item>
      <title>Choosing and Configuring Azure Storage for Your Company Application</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Mon, 23 Feb 2026 01:19:46 +0000</pubDate>
      <link>https://dev.to/pirrezz/choosing-and-configuring-azure-storage-for-your-company-application-5fmf</link>
      <guid>https://dev.to/pirrezz/choosing-and-configuring-azure-storage-for-your-company-application-5fmf</guid>
      <description>&lt;p&gt;Beyond simple storage: Implementing Managed Identities, Encryption, and Immutability.&lt;/p&gt;

&lt;p&gt;Setting up storage for a modern app isn't just about creating a folder; it’s about building a secure data lifecycle. In this guide, we’ll move from basic setups to an enterprise-grade configuration using &lt;strong&gt;Managed Identities&lt;/strong&gt;, &lt;strong&gt;Azure Key Vault&lt;/strong&gt;, and &lt;strong&gt;Immutable Policies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Technical Roadmap: From Architecture to Execution&lt;/strong&gt;&lt;br&gt;
With the strategy in place, we now move into the implementation phase. Follow the verified blueprint below to deploy a hardened, enterprise-grade storage environment for your application. &lt;strong&gt;Note&lt;/strong&gt;: Pay close attention to the encryption settings—once committed, they become the permanent foundation of your data security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1:&lt;/strong&gt; &lt;strong&gt;Create the storage account and managed identity.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Storage accounts&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffis4fjbyndtxo31csbnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffis4fjbyndtxo31csbnj.png" alt="storage" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select ** + Create**.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7qyj0212hgwdus4ueiv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7qyj0212hgwdus4ueiv.png" alt="create" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;resource group&lt;/strong&gt;, click &lt;strong&gt;Create new&lt;/strong&gt;, give it a name and select &lt;strong&gt;OK&lt;/strong&gt; to save your changes. Then provide a unique &lt;strong&gt;Storage account name&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4shs5p1lvmoubkn31mtm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4shs5p1lvmoubkn31mtm.png" alt="san" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move to the Encryption tab, check the box for &lt;strong&gt;Enable infrastructure encryption&lt;/strong&gt;. Notice the warning, &lt;em&gt;This option cannot be changed after this storage account is created&lt;/em&gt; and leave other default settings. Click &lt;strong&gt;Review + create&lt;/strong&gt;, then &lt;strong&gt;create&lt;/strong&gt;. Wait for Deplotment to complete and click &lt;strong&gt;Go to resource.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefahu380eff372okkpto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefahu380eff372okkpto.png" alt="deploy" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Managed identities&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpzfzm3rnxqps53vbx8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpzfzm3rnxqps53vbx8c.png" alt="Identity" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv31g0fuypdugpa01td8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv31g0fuypdugpa01td8z.png" alt="create" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your resource group from the drop down, give your managed identity a name. Then select &lt;strong&gt;Review and create&lt;/strong&gt;, then &lt;strong&gt;Create&lt;/strong&gt;. Click &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqytbdxnkmvozorryisa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqytbdxnkmvozorryisa.png" alt="MI" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for and select your &lt;strong&gt;storage account&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17m9y067l0krptiqn331.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17m9y067l0krptiqn331.png" alt="storage" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Access Control (IAM) blade&lt;/strong&gt; and then select ** Add role assignment**.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb7vkpsxxufi70sx9dv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbb7vkpsxxufi70sx9dv0.png" alt="contol" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;Job functions roles&lt;/strong&gt; page, search for and select the &lt;strong&gt;Storage Blob Data Reader&lt;/strong&gt; role, then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwck63b8faub7kwj09zx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwck63b8faub7kwj09zx8.png" alt="job" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Members page, select &lt;strong&gt;Managed identity&lt;/strong&gt;. Select &lt;strong&gt;+ Select members&lt;/strong&gt;. In the Managed identity drop-down select &lt;strong&gt;User-assigned managed identity&lt;/strong&gt;. Then select the managed identity you created in the previous step. Click &lt;strong&gt;Select&lt;/strong&gt; and then click &lt;strong&gt;Review + assign&lt;/strong&gt; twice to add the role assignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jlomlf00sg0wtcnao61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jlomlf00sg0wtcnao61.png" alt="role" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Identity &amp;amp; Access Management (IAM)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Resource groups&lt;/strong&gt;, then select the resource group you created.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjle82y0q1455cj6jwphx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjle82y0q1455cj6jwphx.png" alt="resource" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Access Control (IAM)&lt;/strong&gt; blade and then click &lt;strong&gt;Add role assignment&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq981ino7cuu5axfiodyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq981ino7cuu5axfiodyc.png" alt="role" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;Job functions roles&lt;/strong&gt; page, search for and select the &lt;strong&gt;Key Vault Administrator&lt;/strong&gt; role, then selct &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cqkf2nagq1s1owniu3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cqkf2nagq1s1owniu3u.png" alt="admin" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;Members&lt;/strong&gt; page, select &lt;strong&gt;User, group, or service principal&lt;/strong&gt;, select &lt;strong&gt;+ Select members&lt;/strong&gt;, search for and select your &lt;strong&gt;user account&lt;/strong&gt;. &lt;em&gt;Your user account is shown in the top right of the portal&lt;/em&gt;. Click &lt;strong&gt;Select&lt;/strong&gt; and then &lt;strong&gt;Review + assign&lt;/strong&gt; twice to add role assignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdc6remezhpjkrztcffo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdc6remezhpjkrztcffo.png" alt="assign" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Key vaults&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjd785b2zgi8ufq6vp40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjd785b2zgi8ufq6vp40.png" alt="vaults" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmut1yy6ovg8uwg3z9qit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmut1yy6ovg8uwg3z9qit.png" alt="create" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your &lt;strong&gt;resource group&lt;/strong&gt;, and provide a unique name for the &lt;strong&gt;key vault&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fil6q6sc13lj8o9lprs4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fil6q6sc13lj8o9lprs4f.png" alt="key" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure on the Access configuration tab that &lt;strong&gt;Azure role-based access control (recommended)&lt;/strong&gt; is selected. Then select &lt;strong&gt;Review + create&lt;/strong&gt; and &lt;strong&gt;create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyz7c4bfjn6nuqbklvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyz7c4bfjn6nuqbklvd.png" alt="access" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait for Deployment to complete and click &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58zfnqt3ydn4moiwhnu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58zfnqt3ydn4moiwhnu6.png" alt="resource" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Overview blade, ensure both &lt;strong&gt;Soft-delete&lt;/strong&gt; and &lt;strong&gt;Purge protection&lt;/strong&gt; are &lt;strong&gt;Enabled&lt;/strong&gt;, but if any/both are Disabled, kindly click and change it to Enabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqe0zm9xzqgbduytlga9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqe0zm9xzqgbduytlga9.png" alt="enable" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your key vault, in the Objects section, select the &lt;strong&gt;Keys&lt;/strong&gt; blade and click &lt;strong&gt;Generate/Import&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qgo6axqax7l84nvmrq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qgo6axqax7l84nvmrq5.png" alt="generate" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name the key, take the default settings for the rest of the parameters, and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwdmisu79ooyf5138gxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwdmisu79ooyf5138gxb.png" alt="keyv" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Configure the storage account to use the customer managed key in the key vault&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Resource groups&lt;/strong&gt; through to your resource group, then click &lt;strong&gt;Access Control (IAM)&lt;/strong&gt; blade and then select  &lt;strong&gt;Add role assignment&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvu8ajnqs9xpbch96b19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnvu8ajnqs9xpbch96b19.png" alt="role" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;Job functions roles&lt;/strong&gt; page, search for and select the &lt;strong&gt;Key Vault Crypto Service Encryption Use&lt;/strong&gt;r role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxbmch63d4ewabsf6cbv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxbmch63d4ewabsf6cbv.png" alt="function" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;Members&lt;/strong&gt; page, select &lt;strong&gt;Managed identity&lt;/strong&gt;, then select &lt;strong&gt;+ Select members&lt;/strong&gt;. In the Managed identity drop-down select &lt;strong&gt;User-assigned managed identity&lt;/strong&gt;, select your managed identity, click &lt;strong&gt;Select&lt;/strong&gt; and then &lt;strong&gt;Review + assign&lt;/strong&gt; twice to add the role assignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93zcsaek5yhmfimu775l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93zcsaek5yhmfimu775l.png" alt="assignment" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return to your the storage account. In the Security + networking section, select the &lt;strong&gt;Encryption&lt;/strong&gt; blade and then select &lt;strong&gt;Customer-managed keys&lt;/strong&gt; and also select &lt;strong&gt;Select a key vault and key&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0dxq4e84303nhlmnx9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0dxq4e84303nhlmnx9q.png" alt="manage" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Key vaults&lt;/strong&gt; and then select your &lt;strong&gt;key vault&lt;/strong&gt; and &lt;strong&gt;key&lt;/strong&gt;, then &lt;strong&gt;Select&lt;/strong&gt; to confirm your choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh7y0wojgedyrg7pvcn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh7y0wojgedyrg7pvcn6.png" alt="select" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure the &lt;strong&gt;Identity type&lt;/strong&gt; is &lt;strong&gt;User-assigned&lt;/strong&gt;, else select &lt;strong&gt;Select an identity&lt;/strong&gt;. Select your &lt;strong&gt;managed identity&lt;/strong&gt;, click &lt;strong&gt;Add&lt;/strong&gt; and  &lt;strong&gt;Save&lt;/strong&gt; your changes to update your storage account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsom1cxl6fuulwdurwgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsom1cxl6fuulwdurwgg.png" alt="save" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4: Configure an time-based retention policy and an encryption scope&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to your &lt;strong&gt;storage account&lt;/strong&gt;. In the &lt;strong&gt;Data storage&lt;/strong&gt; section, select the &lt;strong&gt;Containers&lt;/strong&gt; blade and click &lt;strong&gt;+ Add container&lt;/strong&gt;. Give it a &lt;strong&gt;name&lt;/strong&gt; and take the defaults, be sure to &lt;strong&gt;Create&lt;/strong&gt; the container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkis6kop15qpnu4vhg4w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkis6kop15qpnu4vhg4w3.png" alt="hold" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt; a file to the container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5r1fcydo78uuae97q3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5r1fcydo78uuae97q3e.png" alt="upload" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Settings section, select the &lt;strong&gt;Access policy&lt;/strong&gt; blade. In the &lt;strong&gt;Immutable blob storage&lt;/strong&gt; section, select &lt;strong&gt;+ Add policy&lt;/strong&gt;.
And for the &lt;strong&gt;Policy type&lt;/strong&gt;, select &lt;strong&gt;time-based retention&lt;/strong&gt;.
Set the &lt;strong&gt;Retention period&lt;/strong&gt;, keep other defaults and be sure to &lt;strong&gt;Save&lt;/strong&gt; your changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq60iu4qnaxy8f0jkmefc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq60iu4qnaxy8f0jkmefc.png" alt="period" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try to &lt;strong&gt;delete&lt;/strong&gt; the file in the container. &lt;em&gt;Verify you are notified failed to delete blobs due to policy&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbkuxhybdm5rur560gzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbkuxhybdm5rur560gzv.png" alt="delete" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate back to your &lt;strong&gt;storage account&lt;/strong&gt;. In the &lt;strong&gt;Security + networking&lt;/strong&gt; blade and select &lt;strong&gt;Encryption&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the &lt;strong&gt;Encryption scopes&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;i. select &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ii. give your encryption scope a &lt;strong&gt;name&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;iii. let the &lt;strong&gt;Encryption type&lt;/strong&gt; be &lt;strong&gt;Microsoft-managed key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;iv. set &lt;strong&gt;Infrastructure encryption&lt;/strong&gt; to &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;v. click &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcm6tjizmb7n0mh4nurh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcm6tjizmb7n0mh4nurh.png" alt="set" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return to your &lt;strong&gt;storage account&lt;/strong&gt; and create a &lt;strong&gt;new container&lt;/strong&gt;. Notice in the Advanced section you can select the &lt;strong&gt;Encryption scope&lt;/strong&gt; you created and apply it to all blobs in the container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhjf846gows3g1k0dwm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhjf846gows3g1k0dwm1.png" alt="new" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
This guide transforms a standard cloud storage setup into an enterprise-grade, "Zero-Trust" data environment. By moving through these four phases, you have successfully shifted from basic file hosting to a &lt;strong&gt;hardened application data lifecycle&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>cloud</category>
      <category>learning</category>
    </item>
    <item>
      <title>Provide Shared File Storage for Company Offices: A Practical Guide</title>
      <dc:creator>Peter Olanrewaju Fadeyi</dc:creator>
      <pubDate>Sat, 21 Feb 2026 22:01:09 +0000</pubDate>
      <link>https://dev.to/pirrezz/provide-shared-file-storage-for-company-offices-a-practical-guide-1mej</link>
      <guid>https://dev.to/pirrezz/provide-shared-file-storage-for-company-offices-a-practical-guide-1mej</guid>
      <description>&lt;p&gt;As companies grow across multiple offices, one challenge becomes constant: &lt;strong&gt;how do we securely share files between teams in different locations without creating chaos?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your teams rely on emailing attachments, USB drives, or disconnected local servers, it’s time to modernize your shared file storage strategy.&lt;br&gt;
In this post, we move beyond individual virtual machines to build a Single Source of Truth using &lt;strong&gt;Azure Files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architecture: Launching Your Shared Drive&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1.&lt;/strong&gt; *&lt;em&gt;Create a storage account for the finance department’s shared files.&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the portal, search for and select &lt;strong&gt;Storage accounts&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37udfshaqchz3ajkjmlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37udfshaqchz3ajkjmlw.png" alt="storage account" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;+ Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firrod4lt8l02uqt1tv3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firrod4lt8l02uqt1tv3r.png" alt="select" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Resource group, select &lt;strong&gt;Create new&lt;/strong&gt;. Give your resource group a &lt;strong&gt;name&lt;/strong&gt; and select &lt;strong&gt;OK&lt;/strong&gt; to save your changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fudxcbqa6lovpg6h6ap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4fudxcbqa6lovpg6h6ap.png" alt="name" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a &lt;strong&gt;Storage account name&lt;/strong&gt;. Ensure is it unique.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0h04b680oocj0ohmsa6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0h04b680oocj0ohmsa6.png" alt="unique" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the &lt;em&gt;Performance&lt;/em&gt; to &lt;strong&gt;Premium&lt;/strong&gt;, set the _ Premium account type_ to &lt;strong&gt;File shares&lt;/strong&gt;, set the &lt;em&gt;Redundancy&lt;/em&gt; to &lt;strong&gt;Zone-redundant storage&lt;/strong&gt; and click &lt;strong&gt;Review + create&lt;/strong&gt; and then &lt;strong&gt;create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzjfpu3dvrva2kp0a6wi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzjfpu3dvrva2kp0a6wi.png" alt="review" width="800" height="774"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait for Deplyment to complete then click &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ava80g2n63wlejzzkoj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ava80g2n63wlejzzkoj.png" alt="resource" width="800" height="422"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;2. Create and configure a file share with directory for the corporate office.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for Data storage and select &lt;strong&gt;File shares&lt;/strong&gt; in the storage account. Then select &lt;strong&gt;+ File share&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtw6jw6ghi9q6gdwxyei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtw6jw6ghi9q6gdwxyei.png" alt="file share" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give a &lt;strong&gt;Name&lt;/strong&gt;, review the other options, stick to default then select &lt;strong&gt;Create&lt;/strong&gt; once the validation is passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm6rg6h6283rr9sksga0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm6rg6h6283rr9sksga0.png" alt="validation" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select  &lt;strong&gt;+ Add directory&lt;/strong&gt;, give a &lt;strong&gt;name&lt;/strong&gt; and press &lt;strong&gt;OK&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0jilg8jmt04dgzkrcy0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0jilg8jmt04dgzkrcy0.png" alt="directory" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Browse&lt;/strong&gt; then &lt;strong&gt;finance&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyiy0u5uamnh5q7rkfjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyiy0u5uamnh5q7rkfjt.png" alt="browse" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notice you can Add directory to further organize your file share but click &lt;strong&gt;Upload&lt;/strong&gt;, select &lt;strong&gt;Browse for file&lt;/strong&gt; and then press &lt;strong&gt;Upload&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0s8ktuytorsxnf5lutow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0s8ktuytorsxnf5lutow.png" alt="upload" width="800" height="242"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;3. Configure and test snapshots: Protect against accidental deletion of files&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Operations section, select the Snapshots blade and select &lt;strong&gt;+ Add snapshot&lt;/strong&gt;. The comment is optional so select &lt;strong&gt;OK&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85yh9qzbdktu8mh4lc6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85yh9qzbdktu8mh4lc6v.png" alt="snapshots" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your snapshot and verify your file directory and uploaded file that are included in it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rwlfja578yx5g9r2sdd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rwlfja578yx5g9r2sdd.png" alt="snapshot" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practice using snapshots to restore a file by:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clicking ob Browse, then select the file icon, then select the context menu, select &lt;strong&gt;delete&lt;/strong&gt; and click &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7bdj3oqpa6r0lvtb5z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7bdj3oqpa6r0lvtb5z3.png" alt="delete" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To restore, navigate through the snapshots, select the file and click &lt;strong&gt;restore&lt;/strong&gt;, then &lt;strong&gt;overwrite name&lt;/strong&gt;, then &lt;strong&gt;OK&lt;/strong&gt;. &lt;em&gt;Then your file will be back where it was deleted&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkno6wy1zy0xxd1dmofd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkno6wy1zy0xxd1dmofd.png" alt="restore" width="800" height="193"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;4. Configure restricting storage access to selected virtual networks.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the search bar, search for and select &lt;strong&gt;Virtual networks&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;+ create&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys6jajtnf2q818iz32hr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys6jajtnf2q818iz32hr.png" alt="create" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select your resource group from the drop down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8r2qqqml6cm0hyhogzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8r2qqqml6cm0hyhogzx.png" alt="vn" width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give the virtual network a &lt;strong&gt;name&lt;/strong&gt;, take the defaults for other parameters, select &lt;strong&gt;Review + create&lt;/strong&gt;, and then &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjybgylb11lj98vfvc83m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjybgylb11lj98vfvc83m.png" alt="create" width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait for the resource to deploy, select &lt;strong&gt;Go to resource&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyk9rom7isog23i6hxz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyk9rom7isog23i6hxz1.png" alt="deploy" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the settings section, select &lt;strong&gt;Subnets&lt;/strong&gt; and then select the &lt;strong&gt;Default&lt;/strong&gt; subnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc6f17n4gx0ynn1vflsae.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc6f17n4gx0ynn1vflsae.png" alt="subnets" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Service endpoints section choose &lt;strong&gt;Microsoft.Storage&lt;/strong&gt; in the Services drop-down, keep other default settings and click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwfx1swb5s3stwfpiawr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwfx1swb5s3stwfpiawr.png" alt="save" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return to files storage account. Search and select for &lt;strong&gt;Networking&lt;/strong&gt; In the Security + networking section. Then click &lt;strong&gt;Manage&lt;/strong&gt; under Public network access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zrn566y85khm5vxeviv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zrn566y85khm5vxeviv.png" alt="public" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under the Public network access, &lt;strong&gt;Enable from selected networks&lt;/strong&gt;, then under Virtual Networks, select &lt;strong&gt;+ Add a virtual network&lt;/strong&gt; and &lt;strong&gt;Add existing virtual network&lt;/strong&gt;. Then select your virtual network and subnet, select Add and be sure to Save your changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrr047a73xk4mc66jee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrr047a73xk4mc66jee.png" alt="existing" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then select the Storage browser and navigate to your &lt;strong&gt;File shares&lt;/strong&gt; and select &lt;strong&gt;office&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F359du42cxfbq47r0khhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F359du42cxfbq47r0khhy.png" alt="office" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify the prompt message "This request is not authorized to perform this operation".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmm7iqwcnw25fa8d6d9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmm7iqwcnw25fa8d6d9n.png" alt="not authorised" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
Providing shared storage isn't just about "saving files"—it's about Unified Collaboration. By moving to Azure Files, you eliminate physical boundaries, allowing your teams to work as one, regardless of where they are sitting.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>tutorial</category>
      <category>security</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
