<?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: Oladosu Ibrahim</title>
    <description>The latest articles on DEV Community by Oladosu Ibrahim (@sudaisib).</description>
    <link>https://dev.to/sudaisib</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3288237%2F8e6ae6bc-a508-4f82-a522-37a204d9905d.jpeg</url>
      <title>DEV Community: Oladosu Ibrahim</title>
      <link>https://dev.to/sudaisib</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sudaisib"/>
    <language>en</language>
    <item>
      <title>Building a Resilient Public Website with Azure Storage: High Availability, Soft Delete, and Blob Versioning in Action</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Wed, 09 Sep 2026 11:53:46 +0000</pubDate>
      <link>https://dev.to/sudaisib/building-a-resilient-public-website-with-azure-storage-high-availability-soft-delete-and-blob-230d</link>
      <guid>https://dev.to/sudaisib/building-a-resilient-public-website-with-azure-storage-high-availability-soft-delete-and-blob-230d</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The success of any website especially a public-facing one depends on how reliably it delivers content to visitors. Imagine running an e-commerce storefront, a documentation portal, or even a simple company website: if the files go down, or if critical documents are accidentally deleted, your visitors lose trust in your brand. That’s where cloud storage comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Storage&lt;/strong&gt; is a core building block for hosting static content like images, HTML files, PDFs, or any document that should be accessible online. It’s affordable, flexible, and scales globally. But the real power comes when you combine it with &lt;strong&gt;high availability, soft delete, and versioning&lt;/strong&gt;. These features ensure your files are protected against accidental deletion, version conflicts, or even a whole regional outage.&lt;/p&gt;

&lt;p&gt;This blog will show you step by step on how to use &lt;strong&gt;Azure Blob Storage&lt;/strong&gt; to build a simple public website that anyone can access without authentication. You’ll see how to make your data resilient, how to recover lost files, and how to keep track of multiple versions of the same file. By the end, you’ll understand how enterprise-grade storage resilience can be achieved with just a few clicks in the Azure portal.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Diagram&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At its simplest, our architecture consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One &lt;strong&gt;Azure Storage Account&lt;/strong&gt; to hold the website data.&lt;/li&gt;
&lt;li&gt;One &lt;strong&gt;Blob Container&lt;/strong&gt; within the storage account to organize and store website documents, images, or static files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup can serve web content directly to users anywhere in the world, backed by Azure’s global infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Tasks Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before we get practical, here’s what you’ll accomplish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create a highly available storage&lt;/strong&gt; account with redundancy for regional failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allow anonymous public access&lt;/strong&gt; so customers don’t need to log in to view website content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up a blob container&lt;/strong&gt; to hold your website’s files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn on soft delete&lt;/strong&gt; to recover deleted files within a set period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable blob versioning&lt;/strong&gt; to manage changes and restore previous versions when needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a Storage Account with High Availability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To start, you’ll need a storage account to store your website’s files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure portal, search for &lt;strong&gt;Storage accounts&lt;/strong&gt; and select + &lt;strong&gt;Create&lt;/strong&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%2F6wj7z04gf2mxv6ue9b51.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%2F6wj7z04gf2mxv6ue9b51.png" alt="Create 1" width="800" height="411"&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%2F38xkm77qipzc3fdzg296.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%2F38xkm77qipzc3fdzg296.png" alt="Create 2" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Resource group&lt;/strong&gt;, create a new one and give it a clear name (for example, Ibrahim).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give your storage account a unique name, such as publicwebsite123.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave the default settings and click &lt;strong&gt;Review&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create&lt;/strong&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%2Fopmg64fas1rs1b8pra7v.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%2Fopmg64fas1rs1b8pra7v.png" alt="Create 3" width="800" height="442"&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%2Fb06wlv9vyqclj6cjzsgf.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%2Fb06wlv9vyqclj6cjzsgf.png" alt="Create 4" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After deployment, click &lt;strong&gt;Go to resource&lt;/strong&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%2Fzpjgdvcmojpyyhj0z0nd.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%2Fzpjgdvcmojpyyhj0z0nd.png" alt="Create 5" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To ensure your storage account remains available during a regional outage, configure geo-redundant storage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your storage account, open &lt;strong&gt;Data management&lt;/strong&gt; and select &lt;strong&gt;Redundancy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Read-access Geo-redundant storage (RA-GRS)&lt;/strong&gt;. This replicates your data across regions and allows read access from the secondary location if the primary becomes unavailable.
&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%2Fg5hmo6fbsjj1a3t7x3ut.png" alt="Create 6" width="800" height="444"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Enable Anonymous Public Access&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For a public website, your visitors shouldn’t have to sign in to view files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the storage account’s &lt;strong&gt;Settings&lt;/strong&gt;, go to &lt;strong&gt;Configuration&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Make sure &lt;strong&gt;Allow blob anonymous access&lt;/strong&gt; is &lt;strong&gt;Enabled&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&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%2F0emy5nln9m5tl3m0lerv.png" alt="Create 7" width="800" height="431"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures website files like images or PDFs are accessible to everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Create a Blob Container for Website Content&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A blob container organizes your website’s files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In your storage account, 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;Click + &lt;strong&gt;Container&lt;/strong&gt;, name it &lt;code&gt;damilola&lt;/code&gt;, and create it.&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%2F23ku9k5vbw6uuq2k9i86.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%2F23ku9k5vbw6uuq2k9i86.png" alt="Create 8" width="799" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open your &lt;code&gt;damilola&lt;/code&gt; container, click &lt;strong&gt;Change access level&lt;/strong&gt;, and set it to &lt;strong&gt;Blob (anonymous read access for blobs only)&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;OK&lt;/strong&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%2Footdtvk716i3t0kvuk8x.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%2Footdtvk716i3t0kvuk8x.png" alt="Create 9" width="800" height="242"&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%2Fz4ergebn7phhdrixv0jp.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%2Fz4ergebn7phhdrixv0jp.png" alt="Create 10" width="800" height="339"&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%2F768rb279fr7zt71iyjrq.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%2F768rb279fr7zt71iyjrq.png" alt="Create 11" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means the files inside the container can be read publicly, but users can’t browse the full container list.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Upload and Test Access&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, upload a test file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside the &lt;code&gt;damilola&lt;/code&gt; container, select Upload, browse your device, choose a file (an image or document), and upload it.&lt;/li&gt;
&lt;li&gt;After uploading, click the file and copy its URL from the &lt;strong&gt;Overview&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Paste the URL in a new browser tab. If it’s an image, it should display directly; other file types may download.
&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%2F7ag8ph0uf0sca71jj4ap.png" alt="Create 12" width="799" height="368"&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%2Fayo9myio969svll9m5i5.png" alt="Create 13" width="800" height="371"&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%2Fijn5p0mgygwnbjr8epyz.png" alt="Create 14" width="800" height="429"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5: Enable Soft Delete&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Soft Delete?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Soft delete in Azure Blob Storage acts like a &lt;strong&gt;recycle bin&lt;/strong&gt; for your cloud files. When you delete a blob, it’s not immediately lost forever. Instead, it goes into a soft delete state for a defined retention period (like 7, 14, or 21 days). During this window, you or any authorized admin can easily undelete the blob and restore it to its original state.&lt;/p&gt;

&lt;p&gt;This is critical for accidental deletions. Developers, admins, or automation scripts sometimes delete the wrong file. Without soft delete, recovery means restoring from an offline backup (if you have one). With soft delete, recovery takes seconds no extra tools needed.&lt;/p&gt;

&lt;p&gt;Accidentally deleting website files shouldn’t be the end of the world. Blob soft delete allows you to restore deleted files easily:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In your storage account’s &lt;strong&gt;Overview&lt;/strong&gt;, find &lt;strong&gt;Blob service&lt;/strong&gt; and open &lt;strong&gt;Soft delete&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Soft delete for blobs&lt;/strong&gt;, and set the retention period to &lt;strong&gt;21 days&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Save your settings.
&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%2F4at0esh7tumpbv45nw1l.png" alt="Create 15" width="800" height="382"&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%2Fx0hgphvnh01a6585oz5i.png" alt="Create 16" width="800" height="378"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;To practice&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete your test file from the container.&lt;/li&gt;
&lt;li&gt;In the container’s &lt;strong&gt;Overview&lt;/strong&gt;, toggle &lt;strong&gt;Show deleted blobs.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Find your deleted file, click the ellipses (...) next to it, and choose &lt;strong&gt;Undelete&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Refresh the container then your file should be back!
&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%2Fy9n91tgb37laakqh1rdg.png" alt="Create 17" width="799" height="368"&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%2Frj32dgphc6pcec7kjc37.png" alt="Create 18" width="800" height="370"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 6: Configure Blob Versioning&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Blob Versioning?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Blob versioning is an automatic way to keep track of &lt;strong&gt;every change&lt;/strong&gt; made to your blobs. Whenever you overwrite an existing blob with a new version (for example, updating a PDF or replacing an image), Azure keeps the old version.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You never lose the original content.&lt;/li&gt;
&lt;li&gt;You can roll back to an earlier version if needed.&lt;/li&gt;
&lt;li&gt;Every version has a unique ID and timestamp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike soft delete, which protects only against deletions, &lt;strong&gt;versioning protects against unwanted changes&lt;/strong&gt;. Accidentally replaced the wrong file? Roll back to the earlier version in a few clicks.&lt;/p&gt;

&lt;p&gt;Blob versioning lets you track and restore previous versions of your files — useful for managing website content updates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the storage account’s &lt;strong&gt;Overview&lt;/strong&gt;, under &lt;strong&gt;Blob service&lt;/strong&gt;, select &lt;strong&gt;Versioning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Versioning for blobs&lt;/strong&gt; and save.
&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%2F0quilmbdcbl8dl1whrp4.png" alt="Create 19" width="799" height="369"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To test versioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload an updated version of your test file (using the same file name).&lt;/li&gt;
&lt;li&gt;This overwrites the file but keeps the older version.&lt;/li&gt;
&lt;li&gt;You can view and restore old versions in the &lt;strong&gt;Show deleted blobs&lt;/strong&gt; area or through version history.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;With these steps, you now have a resilient Azure Storage setup for a simple public website: highly available, securely accessible by the public, and protected against accidental deletions or unwanted overwrites.&lt;/p&gt;

&lt;p&gt;By combining high availability, anonymous access, soft delete, and blob versioning, you gain both control and peace of mind ensuring your website content stays online and recoverable at all times.&lt;/p&gt;

</description>
      <category>cloudstorage</category>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>database</category>
    </item>
    <item>
      <title>Power BI Data Connectivity: Connecting, Importing, and Integrating Data from Multiple Sources</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Fri, 04 Sep 2026 08:45:50 +0000</pubDate>
      <link>https://dev.to/sudaisib/power-bi-data-connectivity-connecting-importing-and-integrating-data-from-multiple-sources-3i45</link>
      <guid>https://dev.to/sudaisib/power-bi-data-connectivity-connecting-importing-and-integrating-data-from-multiple-sources-3i45</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Successful Power BI reporting starts with reliable, well-prepared data. Regardless of how attractive a report looks, inaccurate, incomplete, or inconsistent data can lead to misleading insights and poor decisions.&lt;/p&gt;

&lt;p&gt;In real-world projects, data often comes from different sources, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excel files&lt;/li&gt;
&lt;li&gt;CSV files&lt;/li&gt;
&lt;li&gt;SQL Server databases&lt;/li&gt;
&lt;li&gt;JSON files and APIs&lt;/li&gt;
&lt;li&gt;PDF documents&lt;/li&gt;
&lt;li&gt;SharePoint folders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Power BI makes it possible to connect to these sources and prepare their data using Get Data and Power Query.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to connect Power BI to different data sources, preview the available data, assess its quality, and prepare it for analysis and modeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;High-Level Overview of Power BI Data Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power BI acts as a central environment for bringing data from different sources together and preparing it for analysis.&lt;/p&gt;

&lt;p&gt;The main components include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Power BI Desktop&lt;/strong&gt; → Used for data preparation, modeling, and report development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Sources&lt;/strong&gt; → Excel, CSV, SQL Server, JSON, PDF, SharePoint, and other supported sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power Query Editor&lt;/strong&gt; → Used to connect, inspect, clean, transform, and profile data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Model&lt;/strong&gt; → Stores the prepared data for analysis, calculations, and visualizations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The general flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Sources → Power Query → Data Model → Reports &amp;amp; Visualizations&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What You’ll Accomplish in This Guide&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By completing this guide, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open and configure Power BI Desktop.&lt;/li&gt;
&lt;li&gt;Connect to Excel, CSV, SQL Server, JSON, PDF, and SharePoint data.&lt;/li&gt;
&lt;li&gt;Preview and examine source data using Power Query.&lt;/li&gt;
&lt;li&gt;Use Column Quality, Column Distribution, and Column Profile.&lt;/li&gt;
&lt;li&gt;Identify common data quality issues.&lt;/li&gt;
&lt;li&gt;Prepare data for modeling and reporting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started with Power BI Desktop&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To follow the practical exercises, download the practice files using the link below:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/MicrosoftLearning/PL-300-Microsoft-Power-BI-Data-Analyst/raw/Main/Allfiles/Labs/01-get-data-in-power-bi/01-get-data.zip" rel="noopener noreferrer"&gt;https://github.com/MicrosoftLearning/PL-300-Microsoft-Power-BI-Data-Analyst/raw/Main/Allfiles/Labs/01-get-data-in-power-bi/01-get-data.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract the ZIP file.&lt;/li&gt;
&lt;li&gt;Locate the extracted files.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;01-Starter-Sales Analysis.pbix&lt;/strong&gt; in Power BI Desktop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The starter file has automatic relationship detection disabled, allowing you to focus on data connection, ingestion, and profiling before moving into data modeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Connecting Power BI to SQL Server&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SQL Server is widely used by organizations to store and manage structured business data. Power BI provides a direct connection to SQL Server, making it possible to retrieve data for analysis, transformation, and reporting.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Steps to Connect&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;Power BI Desktop&lt;/strong&gt;, go to &lt;strong&gt;Home → Get Data → SQL Server&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3bmyusc0tcr4poor4fb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3bmyusc0tcr4poor4fb.png" alt="Image 1" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6mr9jnazj13yjsgvrlc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6mr9jnazj13yjsgvrlc.png" alt="Image 2" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;SQL Server database&lt;/strong&gt; connection window, enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server:&lt;/strong&gt; &lt;code&gt;localhost&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Leave this field blank.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60q4o5r1v1gw7npt5879.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60q4o5r1v1gw7npt5879.png" alt="Image 3" width="702" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Windows Authentication&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Use my current credentials&lt;/strong&gt; under the Windows authentication option.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Connect&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bwrkxkb2nfwat9kkxum.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bwrkxkb2nfwat9kkxum.png" alt="Image 4" width="702" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If Power BI displays a warning indicating that an encrypted connection cannot be established, select &lt;strong&gt;OK&lt;/strong&gt; to continue.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Navigator&lt;/strong&gt; pane, expand the &lt;strong&gt;AdventureWorksDW2020&lt;/strong&gt; database.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5su0leuwle5l5xoakn6f.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5su0leuwle5l5xoakn6f.png" alt="Image 5" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Select the following tables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DimEmployee&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DimEmployeeSalesTerritory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DimProduct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DimReseller&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DimSalesTerritory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FactResellerSales&lt;/code&gt;&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjopbt2vgv19fhqvmh3a4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjopbt2vgv19fhqvmh3a4.png" alt="Image 6" width="800" height="439"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc30rxh6su7p411yensc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc30rxh6su7p411yensc.png" alt="Image 7" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Transform Data&lt;/strong&gt; to open the Power Query Editor.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fajljwelzvvkhouhn5lq1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fajljwelzvvkhouhn5lq1.png" alt="Image 8" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Power Query Editor will open with the six selected queries available for further inspection, profiling, and transformation. At this stage, the data has been connected to Power BI, but you can review and prepare it before loading it into the data model.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Previewing and Examining Data in Power Query Editor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query provides a practical environment for inspecting and understanding data before it is loaded into the Power BI data model. Reviewing the data at this stage helps you identify its structure, quality, and potential issues early.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Queries Pane&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each imported table is displayed as a separate query in the Queries pane on the left side of Power Query Editor. Selecting a query displays a preview of its columns and records.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dimension Tables&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Dimension tables generally contain descriptive information used to categorize and analyze business data. In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DimEmployee&lt;/strong&gt; → Contains employee information, typically with one row representing each employee.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd9dugdbuswt59gkp8qi1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd9dugdbuswt59gkp8qi1.png" alt="Image 9" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DimProduct&lt;/strong&gt; → Contains information about individual products.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkoq46ge5jn8ty93xba4a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkoq46ge5jn8ty93xba4a.png" alt="Image 10" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DimReseller&lt;/strong&gt; → Contains information about resellers and their businesses.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffs3zwcyxotguk72cajza.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffs3zwcyxotguk72cajza.png" alt="Image 11" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DimSalesTerritory&lt;/strong&gt; → Provides geographical information, including regions, countries, and territory groups.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvubu0q20oqqd4e9t1j1n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvubu0q20oqqd4e9t1j1n.png" alt="Image 12" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fact Tables&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Fact tables contain transactional or measurable business data. In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FactResellerSales&lt;/strong&gt; → Contains sales transaction records, with each row representing a sales order line.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fut7ojf2l96q70do50jfa.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fut7ojf2l96q70do50jfa.png" alt="Image 13" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Understanding how fact and dimension tables differ is fundamental to designing effective &lt;strong&gt;star-schema models&lt;/strong&gt; in Power BI.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Assessing Data Quality with Power Query&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query includes built-in profiling features that help you evaluate the quality and structure of your data before using it for analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Column Quality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To display column quality information:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View → Column Quality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This feature provides an overview of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valid values&lt;/li&gt;
&lt;li&gt;Empty or null values&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, the &lt;strong&gt;Position&lt;/strong&gt; column in &lt;code&gt;DimEmployee&lt;/code&gt; contains a significant proportion of empty values. This may indicate a data-quality issue that should be investigated before the data is used for reporting.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08qn310qnoxb8h35a39s.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08qn310qnoxb8h35a39s.png" alt="Image 14" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Column Distribution&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To examine the distribution of values:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View → Column Distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This feature helps you identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The number of distinct values&lt;/li&gt;
&lt;li&gt;The number of unique values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if &lt;strong&gt;EmployeeKey&lt;/strong&gt; has the same number of distinct and unique values, it indicates that each value appears only once. This can be useful when evaluating potential key columns.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nkpercgt584sw60oylr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nkpercgt584sw60oylr.png" alt="Image 15" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Column Profile&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To examine detailed information about a specific column:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View → Column Profile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select a column, such as &lt;strong&gt;BusinessType&lt;/strong&gt; in &lt;code&gt;DimReseller&lt;/code&gt;, to inspect its values and distribution.&lt;/p&gt;

&lt;p&gt;For example, you may identify inconsistent entries such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Warehouse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ware House&lt;/code&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvcmrkw5aiijjxbaumz9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvcmrkw5aiijjxbaumz9.png" alt="Image 16" width="799" height="501"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m7x03wvp60ae93qvr7u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m7x03wvp60ae93qvr7u.png" alt="Image 17" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Such inconsistencies can cause the same business category to appear as separate groups during analysis. They should therefore be reviewed and standardized during the data transformation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Importing Data from Text and CSV Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Text and CSV files are common sources of business data, particularly when information is exchanged between systems or maintained in simple tabular formats.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Importing a CSV File&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; In Power BI Desktop, select:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Home → Get Data → Text/CSV&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguk1ug8bage800nkcv4d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguk1ug8bage800nkcv4d.png" alt="Image 18" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapzcp1xmh305cp7v6ri0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapzcp1xmh305cp7v6ri0.png" alt="Image 19" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Browse to and select &lt;strong&gt;ResellerSalesTargets.csv&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0d5lki6hybf6mcfqhjv1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0d5lki6hybf6mcfqhjv1.png" alt="Image 20" width="669" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The file contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One record for each salesperson and year&lt;/li&gt;
&lt;li&gt;Monthly sales target information&lt;/li&gt;
&lt;li&gt;Hyphens used in place of null values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repeat the same process to import &lt;strong&gt;ColorFormats.csv&lt;/strong&gt;, which contains values used for color formatting.&lt;/p&gt;

&lt;p&gt;After importing the files, review their contents in Power Query to confirm that the columns, values, and data types are appropriate before proceeding with further transformations or modeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Importing Data from Excel Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Excel remains one of the most commonly used tools for storing and managing business data.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Importing an Excel Workbook&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to &lt;strong&gt;Home → Get Data → Excel&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl42z9go2jusm0c9ihbx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl42z9go2jusm0c9ihbx.png" alt="Image 21" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkrzz9u2709w82y921k31.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkrzz9u2709w82y921k31.png" alt="Image 22" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Browse to and select the required Excel workbook.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsirxgegf99mpwuclw0nb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsirxgegf99mpwuclw0nb.png" alt="Image 23" width="669" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Select &lt;strong&gt;Transform Data&lt;/strong&gt; to open the dataset in Power Query for further preparation.&lt;/p&gt;

&lt;p&gt;Excel is particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Budget and financial worksheets&lt;/li&gt;
&lt;li&gt;Manually maintained business records&lt;/li&gt;
&lt;li&gt;Operational trackers and activity logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Importing Data from JSON Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;JSON is a common data format used by APIs, web applications, and modern software systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Importing a JSON File&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to &lt;strong&gt;Home → Get Data → JSON&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhisow2lpn4imgvw4zli3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhisow2lpn4imgvw4zli3.png" alt="Image 24" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapygnii9l6yi8jvikvt1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapygnii9l6yi8jvikvt1.png" alt="Image 25" width="682" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Select the JSON file or exported API response.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte331dh4sfcjd7ad2von.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte331dh4sfcjd7ad2von.png" alt="Image 26" width="669" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Allow Power Query to interpret and expand nested data structures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Flatten and transform the fields according to your reporting requirements.&lt;/p&gt;

&lt;p&gt;Because JSON can contain nested objects and arrays, additional transformation is often required before the data can be modeled effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Importing Data from PDF Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power BI can identify and extract tabular data from supported PDF documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Importing a PDF&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to &lt;strong&gt;Home → Get Data → PDF&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi23wemrhaehiacauuaa9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi23wemrhaehiacauuaa9.png" alt="Image 27" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fls1citp42y1k4ov49c1q.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fls1citp42y1k4ov49c1q.png" alt="Image 28" width="682" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Select the required PDF document.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Review the tables identified by Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Select the required tables and choose &lt;strong&gt;Transform Data&lt;/strong&gt; to continue working in Power Query.&lt;/p&gt;

&lt;p&gt;PDF extraction can be useful when working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial statements&lt;/li&gt;
&lt;li&gt;Bank and transaction reports&lt;/li&gt;
&lt;li&gt;Compliance and regulatory documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Importing Data from SharePoint Folders&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SharePoint provides organizations with a centralized environment for storing and collaborating on files.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Connecting to a SharePoint Folder&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to &lt;strong&gt;Home → Get Data → SharePoint Folder&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhgjkugw7x726bycdlxz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhgjkugw7x726bycdlxz.png" alt="Image 29" width="800" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwgd85maxwamz293185qg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwgd85maxwamz293185qg.png" alt="Image 30" width="682" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Enter the SharePoint site URL and complete the required authentication.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F515am2k0bws2ybcntn7w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F515am2k0bws2ybcntn7w.png" alt="Image 31" width="702" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Filter the available files and combine the required datasets.&lt;/p&gt;

&lt;p&gt;This method is especially useful when reports depend on &lt;strong&gt;multiple files stored in a shared SharePoint location&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Data Profiling Is Important&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Data profiling should be performed before creating relationships, measures, and dashboards. It helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify missing or incomplete values&lt;/li&gt;
&lt;li&gt;Detect inconsistent categories and labels&lt;/li&gt;
&lt;li&gt;Validate columns used for relationships&lt;/li&gt;
&lt;li&gt;Examine value distributions and patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ignoring these checks can result in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect or broken relationships&lt;/li&gt;
&lt;li&gt;Inaccurate KPIs&lt;/li&gt;
&lt;li&gt;Misleading analytical results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Power Query provides an effective environment for validating and preparing data so that it is &lt;strong&gt;accurate, consistent, reliable, and ready for analysis&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Connecting to multiple data sources is a fundamental skill for Power BI data analysts. Power BI simplifies this process through its broad range of connectors and Power Query capabilities for inspecting, transforming, and preparing data before it enters the model.&lt;/p&gt;

&lt;p&gt;By combining information from sources such as &lt;strong&gt;SQL Server, Excel, CSV, JSON, PDF, and SharePoint&lt;/strong&gt;, you can develop comprehensive and scalable reports that support reliable business analysis.&lt;/p&gt;

&lt;p&gt;Mastering data connectivity and preparation provides a strong foundation for building Power BI solutions that are not only visually effective but also &lt;strong&gt;accurate, trustworthy, and valuable for decision-making&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>powerquery</category>
      <category>database</category>
      <category>analyst</category>
    </item>
    <item>
      <title>Building Blocks of the Cloud: How to Create and Secure an Azure Storage Account</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 31 Aug 2026 18:27:14 +0000</pubDate>
      <link>https://dev.to/sudaisib/building-blocks-of-the-cloud-how-to-create-and-secure-an-azure-storage-account-31dp</link>
      <guid>https://dev.to/sudaisib/building-blocks-of-the-cloud-how-to-create-and-secure-an-azure-storage-account-31dp</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cloud storage is the backbone of modern applications whether you’re hosting a website, backing up files, processing big data, or building scalable solutions for millions of users. Microsoft Azure provides a powerful Storage service that can handle all these needs while ensuring security, durability, and high availability.&lt;/p&gt;

&lt;p&gt;Azure Storage is designed to support different types of data: unstructured files (blobs), managed file shares, queues for messaging, and NoSQL tables for structured data. As a beginner, understanding how to create and manage storage resources is an important step in becoming comfortable with the Azure ecosystem.&lt;/p&gt;

&lt;p&gt;Before you can upload files or build applications that store and retrieve data, you must first organize your cloud environment properly. This means creating a Resource Group i.e. a logical container for managing your resources and then setting up a Storage Account, which serves as the entry point for storing and accessing your data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this step-by-step guide, I’ll show you how to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and deploy a resource group&lt;/li&gt;
&lt;li&gt;Set up a new storage account&lt;/li&gt;
&lt;li&gt;Configure essential settings for security and cost efficiency&lt;/li&gt;
&lt;li&gt;Understand why each step matters for real-world cloud projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This foundational knowledge prepares you for more advanced tasks, like uploading blobs, setting access policies, or automating data lifecycle rules in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a Resource Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A Resource Group helps you manage related resources as a single unit. For example, you might place your storage account, virtual machines, and databases in the same resource group so you can monitor, update, or delete them together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to create it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign in to the Azure portal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the top search bar, type &lt;strong&gt;“Resource groups”&lt;/strong&gt; and click it.&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%2Fshbufoqjoi1rvo5f3lwp.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%2Fshbufoqjoi1rvo5f3lwp.png" alt="resource group" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click + &lt;strong&gt;Create&lt;/strong&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%2Fyjnn3iq6b3e9zuw89m9t.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%2Fyjnn3iq6b3e9zuw89m9t.png" alt="create" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill in the &lt;strong&gt;Resource Group Name&lt;/strong&gt; (e.g., Ibrahim).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose a &lt;strong&gt;Region&lt;/strong&gt;, always select a location close to your users or project location to reduce latency and comply with data residency requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Review + create&lt;/strong&gt; to check your details.&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%2Fz2ixxtp5o1kkhf2hpqnm.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%2Fz2ixxtp5o1kkhf2hpqnm.png" alt="review and create" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt; to deploy the resource group.&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%2Fu2e24t3pcgvjb93nvxk2.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%2Fu2e24t3pcgvjb93nvxk2.png" alt="create resources" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your resource group is now ready to organize any related resources you create next.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Create a Storage Account&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A Storage Account in Azure acts like a container for all your storage services like blobs, file shares, queues, and tables under a unique namespace that’s globally accessible via HTTP/HTTPS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps to create it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;From the Azure portal, search for &lt;strong&gt;“Storage accounts”&lt;/strong&gt; and click on it.&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%2F5lvi8kicesbm65d9df31.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%2F5lvi8kicesbm65d9df31.png" alt="Search" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;+ Create&lt;/strong&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%2Fec5wkks9eqe0meeynmq0.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%2Fec5wkks9eqe0meeynmq0.png" alt="+ create" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the &lt;strong&gt;Basics&lt;/strong&gt; tab, Select the &lt;strong&gt;Resource Group&lt;/strong&gt; you just created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter a &lt;strong&gt;unique Storage Account Name&lt;/strong&gt; (lowercase letters and numbers only).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Region&lt;/strong&gt;, select the same region as your resource group.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;strong&gt;Performance&lt;/strong&gt; to &lt;strong&gt;Standard&lt;/strong&gt; (best for general workloads).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave &lt;strong&gt;Replication&lt;/strong&gt; as &lt;strong&gt;Locally-redundant storage (LRS)&lt;/strong&gt; for now, this option keeps your data safe in a single data center at the lowest cost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Review + create&lt;/strong&gt; to validate your 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%2Foz7xqohjqc90t4lala2i.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%2Foz7xqohjqc90t4lala2i.png" alt="set-up" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&gt; to deploy your storage account.&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%2F0z2c4nq6fk0xt54gex33.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%2F0z2c4nq6fk0xt54gex33.png" alt="Create 2" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployment is done, click &lt;strong&gt;Go to resource&lt;/strong&gt; to access it.&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%2Fri52dgk452f2fkv68d0h.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%2Fri52dgk452f2fkv68d0h.png" alt="Deployment" width="799" height="439"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Configure Storage Account Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before you start storing files or data, it’s good  to adjust settings to align with your project needs — balancing security, cost, and access control.&lt;/p&gt;

&lt;p&gt;A. &lt;strong&gt;Set Redundancy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By default, your data is stored with the selected redundancy level. For training or non-critical data, &lt;strong&gt;Locally-redundant storage (LRS)&lt;/strong&gt; is the cheapest. It keeps multiple copies within a single region.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In your storage account, go to the &lt;strong&gt;Data management&lt;/strong&gt; section.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Redundancy&lt;/strong&gt; blade.&lt;/p&gt;&lt;/li&gt;
&lt;li&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%2Fnsmqurkv9kk41zkltvru.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%2Fnsmqurkv9kk41zkltvru.png" alt="Redundancy 2" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Confirm or switch to &lt;strong&gt;Locally-redundant storage (LRS)&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&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%2F4ibvpk8rhql3wstft948.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%2F4ibvpk8rhql3wstft948.png" alt="Redundancy" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;B. &lt;strong&gt;Enforce Secure Transfers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Always ensure data travels securely over HTTPS to protect it from interception.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Settings&lt;/strong&gt; section, click &lt;strong&gt;Configuration&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure &lt;strong&gt;Secure transfer required&lt;/strong&gt; is set to &lt;strong&gt;Enabled&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;C. &lt;strong&gt;Set Minimum TLS Version&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transport Layer Security (TLS) encrypts your data during transfer. Requiring at least &lt;strong&gt;TLS 1.2&lt;/strong&gt; ensures stronger security.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Still in the &lt;strong&gt;Configuration&lt;/strong&gt; blade, check that &lt;strong&gt;Minimum TLS version&lt;/strong&gt; is &lt;strong&gt;1.2&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;D. &lt;strong&gt;Control Key Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For better security, you can disable key-based authentication to prevent access using storage account keys, which are powerful credentials.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Configuration&lt;/strong&gt; blade, set &lt;strong&gt;Allow storage account key access&lt;/strong&gt; to &lt;strong&gt;Disabled&lt;/strong&gt; if you want to enforce role-based access control instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&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%2Frfzfsyttpcxxprfyn6tj.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%2Frfzfsyttpcxxprfyn6tj.png" alt="Access" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;E. &lt;strong&gt;Manage Public Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By default, your storage account may accept requests from any public network. If you’re just experimenting, this is fine — but for production, you’d restrict this to specific virtual networks or IP ranges.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Security + networking &amp;gt; Networking.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure &lt;strong&gt;Public network access&lt;/strong&gt; is set to &lt;strong&gt;Enabled from all networks.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&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%2Fimon2lq7xs1pvwxi2o2l.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%2Fimon2lq7xs1pvwxi2o2l.png" alt="Network" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Setting up your first Azure Storage Account is more than just a technical exercise, it’s an important foundation for understanding how cloud resources are organized, secured, and optimized for cost and performance.&lt;/p&gt;

&lt;p&gt;In this guide, you learned how to create a resource group, deploy a storage account, and configure essential settings that help protect your data and control how it’s accessed. With these skills, you’re now better prepared to tackle more advanced scenarios like managing Blob containers, automating data backups, or integrating your storage with other Azure services.&lt;/p&gt;

&lt;p&gt;As you continue learning, remember: cloud storage is a powerful tool when you understand how to use it wisely. Keep exploring, experiment safely, and build on what you’ve learned here, one step at a time.&lt;/p&gt;

&lt;p&gt;Thank you for reading, I hope this guide helps you get hands-on and grow your confidence with Azure Storage. If you found it helpful, feel free to share it with others who are starting their own cloud journey!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>cloudstorage</category>
      <category>cloudskills</category>
    </item>
    <item>
      <title>Foundations in the Cloud: Navigating Azure Storage Accounts</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Fri, 28 Aug 2026 14:12:01 +0000</pubDate>
      <link>https://dev.to/sudaisib/foundations-in-the-cloud-navigating-azure-storage-accounts-5chh</link>
      <guid>https://dev.to/sudaisib/foundations-in-the-cloud-navigating-azure-storage-accounts-5chh</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
In today's data-driven world, storage isn’t just about saving files—it’s about secure access, global availability, performance, and scalability. As businesses evolve into cloud-first operations, the role of robust cloud storage becomes central to ensuring reliability and growth. Microsoft Azure offers one of the most powerful storage infrastructures available: the Azure Storage Account. This blog walks through what it is, how it works, the types available, and how you can choose the right tools to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is a Storage Account in Azure?&lt;/strong&gt;&lt;br&gt;
A Storage Account in Azure is like your personalized digital vault in the cloud. It provides a centralized space where your data lives, whether that’s documents, media files, virtual hard disks, backups, or structured datasets. Beyond just storing data, Azure storage accounts are designed to deliver high availability, strong security, and seamless integration with Azure services.&lt;/p&gt;

&lt;p&gt;Think of it as a gateway—by creating a storage account, you’re enabling access to Azure's powerful data storage services like Blob Storage, Queue Storage, Table Storage, File Shares, and Disk Storage. Each storage account comes with its unique namespace and access keys, allowing you to manage data access securely and flexibly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Azure Storage Matters&lt;/strong&gt;&lt;br&gt;
Azure Storage isn’t merely a hard drive in the cloud. It’s a distributed, scalable system with redundancy built into its DNA. Whether you’re handling petabytes of media content or just backing up a few gigabytes of documents, Azure ensures your data is replicated across regions (if needed), encrypted, and accessible through REST APIs or SDKs in virtually any programming language.&lt;br&gt;
In addition, the pricing is usage-based, meaning you only pay for what you use—making it cost-effective whether you’re a startup or a Fortune 500 company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the Core Storage Services&lt;/strong&gt;&lt;br&gt;
Each Azure Storage Account unlocks access to different services, depending on your needs:&lt;br&gt;
• Blob Storage: Ideal for unstructured data such as images, videos, and backups.&lt;br&gt;
• File Shares: Cloud-based SMB shares, perfect for lift-and-shift migrations.&lt;br&gt;
• Queues: For reliable messaging between application components.&lt;br&gt;
• Tables: NoSQL key-value storage for rapid access and flexible schema.&lt;br&gt;
• Disks: High-performance disk storage for Azure Virtual Machines.&lt;/p&gt;

&lt;p&gt;These services form the backbone of diverse application scenarios, from hosting static websites to processing big data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing a Tool to Create a Storage Account&lt;/strong&gt;&lt;br&gt;
Azure empowers you with flexibility in how you create and manage your storage accounts. Depending on your workflow, you can use:&lt;br&gt;
• Azure Portal: The most user-friendly, web-based interface. Perfect for beginners or small deployments.&lt;br&gt;
• Azure CLI: Command-line enthusiasts and DevOps engineers often prefer this for its scriptable and repeatable deployments.&lt;br&gt;
• Azure PowerShell: Ideal for Windows users who are already comfortable with PowerShell.&lt;br&gt;
• ARM Templates / Bicep: Infrastructure-as-Code lovers use these to automate and version infrastructure deployment.&lt;br&gt;
• Terraform: For those looking to manage infrastructure at scale across clouds, Terraform provides a robust, provider-agnostic option.&lt;br&gt;
Choosing the right tool depends on your comfort level, automation needs, and deployment environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Azure Storage Accounts&lt;/strong&gt;&lt;br&gt;
Azure offers several types of storage accounts, each designed for different scenarios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;General-purpose v2 (GPv2)&lt;/strong&gt;
The most recommended and modern type. It supports all storage services (Blob, File, Queue, Table, Disk) and features the latest performance and pricing models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;General-purpose v1 (GPv1)&lt;/strong&gt;
An older version, now rarely used. It supports the same services as GPv2 but lacks newer features and is less cost-efficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blob Storage Account (Legacy)&lt;/strong&gt;
Dedicated to storing blobs only. Mostly replaced by GPv2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BlockBlobStorage / Premium FileStorage&lt;/strong&gt;
These are performance-tiered accounts that use solid-state drives (SSDs) for low-latency, high-throughput storage—often used for mission-critical workloads or streaming.
Understanding which type to use is critical. In most cases, GPv2 is the default recommendation due to its balance of features, flexibility, and pricing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Performance and Access Tiers&lt;/strong&gt;&lt;br&gt;
Azure Storage also gives you the flexibility to choose performance tiers (Standard or Premium) and access tiers (Hot, Cool, Archive) to manage costs and speed:&lt;br&gt;
• Hot: For frequently accessed data.&lt;br&gt;
• Cool: For infrequently accessed data but still available immediately.&lt;br&gt;
• Archive: For rarely accessed data with latency in retrieval but ultra-low cost.&lt;br&gt;
These tiers allow organizations to optimize costs without compromising accessibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redundancy Options for High Availability&lt;/strong&gt;&lt;br&gt;
Azure Storage ensures your data is always protected—even if hardware or regional failures occur. You can choose from multiple redundancy options:&lt;br&gt;
• &lt;strong&gt;Locally Redundant Storage (LRS)&lt;/strong&gt;: Data is replicated within a single datacenter.&lt;br&gt;
• &lt;strong&gt;Zone-Redundant Storage (ZRS)&lt;/strong&gt;: Replicates across availability zones in a region.&lt;br&gt;
• &lt;strong&gt;Geo-Redundant Storage (GRS)&lt;/strong&gt;: Data is replicated across regions for disaster recovery.&lt;br&gt;
• &lt;strong&gt;Read-Access Geo-Redundant Storage (RA-GRS)&lt;/strong&gt;: Adds read access to the secondary region.&lt;/p&gt;

&lt;p&gt;Choosing the right redundancy model depends on how critical your data is and how tolerant you are to data loss or downtime.&lt;br&gt;
Securing and Monitoring Your Storage&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure includes robust security features like:&lt;/strong&gt;&lt;br&gt;
• Role-Based Access Control (RBAC)&lt;br&gt;
• Shared Access Signatures (SAS)&lt;br&gt;
• Private Endpoints&lt;br&gt;
• Azure Defender for Storage&lt;br&gt;
You can also enable diagnostic logging and integrate with services like Azure Monitor and Log Analytics to get full visibility into your storage activity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
Azure Storage Accounts are more than just a place to put data—they are a dynamic foundation for cloud-based applications, systems integration, and data resilience. Whether you’re an enterprise managing terabytes of sensitive records or a developer deploying web apps, Azure Storage scales with your ambition.&lt;br&gt;
With powerful tooling, flexible pricing, and enterprise-grade durability, your journey to cloud storage excellence starts with creating a well-architected Azure Storage Account.&lt;/p&gt;

</description>
      <category>storage</category>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>cloudstorage</category>
    </item>
    <item>
      <title>Power BI Data Preparation and Transformation with Power Query</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Fri, 28 Aug 2026 14:01:40 +0000</pubDate>
      <link>https://dev.to/sudaisib/creating-and-managing-virtual-machine-images-and-scale-sets-in-azure-a-step-by-step-guide-2a6o</link>
      <guid>https://dev.to/sudaisib/creating-and-managing-virtual-machine-images-and-scale-sets-in-azure-a-step-by-step-guide-2a6o</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query is a powerful data connectivity and preparation technology integrated into Microsoft products such as *Power BI, Excel, Analysis Services, and other Microsoft data solutions. It provides a consistent environment for connecting to different data sources, inspecting datasets, and transforming raw information into a structured format suitable for analysis.&lt;/p&gt;

&lt;p&gt;The Power Query Editor is the primary workspace for preparing data. It provides a wide range of transformation capabilities that allow you to clean, reshape, combine, and validate data through an intuitive user interface.&lt;/p&gt;

&lt;p&gt;One of the key advantages of Power Query is that its transformation techniques can be applied across different types of data sources. Whether your data comes from a database, spreadsheet, text file, web service, or cloud platform, Power Query provides tools for preparing that information before it is loaded into the Power BI data model.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Uses of Power Query&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query can be used to perform a wide variety of data preparation tasks, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting to multiple data sources such as databases, files, websites, APIs, and cloud storage&lt;/li&gt;
&lt;li&gt;Extracting and combining information from different sources&lt;/li&gt;
&lt;li&gt;Merging and appending datasets&lt;/li&gt;
&lt;li&gt;Adding, removing, and reorganizing columns&lt;/li&gt;
&lt;li&gt;Filtering, removing, and modifying rows&lt;/li&gt;
&lt;li&gt;Changing data types and correcting data formats&lt;/li&gt;
&lt;li&gt;Splitting and combining columns&lt;/li&gt;
&lt;li&gt;Pivoting and unpivoting data&lt;/li&gt;
&lt;li&gt;Transposing tables&lt;/li&gt;
&lt;li&gt;Creating custom columns and transformation logic&lt;/li&gt;
&lt;li&gt;Replacing errors, null values, and inconsistent entries&lt;/li&gt;
&lt;li&gt;Applying formulas using the Power Query M language&lt;/li&gt;
&lt;li&gt;Refreshing and publishing transformed datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These capabilities make Power Query an important component of the Power BI data preparation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Opening Power Query Editor in Power BI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query is integrated directly into &lt;strong&gt;Power BI Desktop&lt;/strong&gt;. You can access the Power Query Editor by selecting &lt;strong&gt;Transform Data&lt;/strong&gt; from the &lt;strong&gt;Home&lt;/strong&gt; tab.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tbdgfc0m59rbthjvjbf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tbdgfc0m59rbthjvjbf.png" alt="Image 1" width="623" height="323"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjp9tf3j71o0irampu5dd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjp9tf3j71o0irampu5dd.png" alt="Image 2" width="621" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecting &lt;strong&gt;Transform Data&lt;/strong&gt; opens the Power Query Editor, where you can inspect and prepare your data before loading it into the Power BI model.&lt;/p&gt;

&lt;p&gt;You can also connect to additional data sources directly from the Power Query Editor by selecting &lt;strong&gt;New Source&lt;/strong&gt; and choosing the required connector, such as &lt;strong&gt;Text/CSV&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr0ps3xqgfxft7tt2xshb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr0ps3xqgfxft7tt2xshb.png" alt="Image 3" width="624" height="296"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8sev9zt12mj38e0zuxgg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8sev9zt12mj38e0zuxgg.png" alt="Image 4" width="624" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Power Query Editor Interface&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Power Query Editor provides a dedicated workspace for managing queries and performing data transformations. Its ribbon contains several tabs that organize the available commands and transformation features.&lt;/p&gt;

&lt;p&gt;The commonly used tabs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home&lt;/strong&gt; – Data source connections, query management, combining data, and loading options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transform&lt;/strong&gt; – Data type changes, formatting, filtering, and other transformation operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Column&lt;/strong&gt; – Creating custom, conditional, index, and other calculated columns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View&lt;/strong&gt; – Options for displaying formulas, layouts, and data profiling tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; – Additional query and development-related functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Help&lt;/strong&gt; – Documentation and assistance for Power Query features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Home&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F51sa60gjbvlqs6kyri79.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F51sa60gjbvlqs6kyri79.png" alt="Image 5" width="624" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Transform&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz9ewgnwadvtxeszyml3b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz9ewgnwadvtxeszyml3b.png" alt="Image 6" width="624" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Add Column&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzymeu0vs2jkeruacolh0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzymeu0vs2jkeruacolh0.png" alt="Image 7" width="624" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;View&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvb7rtk64x02iw9aeb37.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvb7rtk64x02iw9aeb37.png" alt="Image 8" width="623" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tools&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7070878nm7e3wzp9ygew.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7070878nm7e3wzp9ygew.png" alt="Image 9" width="624" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Help&lt;/strong&gt;
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7faes1lqaw4nbwbwmlk3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7faes1lqaw4nbwbwmlk3.png" alt="Image 10" width="624" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Opening Power Query During Data Import&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query can also be accessed while connecting to a new data source.&lt;/p&gt;

&lt;p&gt;For example, when importing a CSV file into Power BI, you may be presented with options to either &lt;strong&gt;Load&lt;/strong&gt; the data immediately or &lt;strong&gt;Transform Data&lt;/strong&gt; before loading it.&lt;/p&gt;

&lt;p&gt;Selecting &lt;strong&gt;Transform Data&lt;/strong&gt; opens the Power Query Editor, where you can prepare the dataset by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removing unnecessary columns&lt;/li&gt;
&lt;li&gt;Filtering unwanted records&lt;/li&gt;
&lt;li&gt;Changing data types&lt;/li&gt;
&lt;li&gt;Creating calculated or custom columns&lt;/li&gt;
&lt;li&gt;Replacing incorrect values&lt;/li&gt;
&lt;li&gt;Restructuring the dataset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Similarly, Power Query can be used to prepare data from Excel workbooks, SQL Server databases, JSON files, PDFs, SharePoint folders, and many other supported sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Performing Data Transformations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query supports both basic and advanced data transformation operations. These transformations are applied as individual steps, allowing you to review, modify, and reorder the preparation process when necessary.&lt;/p&gt;

&lt;p&gt;Common transformations include changing data types, removing or renaming columns, filtering rows, splitting fields, creating custom columns, and reshaping tables.&lt;/p&gt;

&lt;p&gt;These capabilities allow raw data to be converted into a clean, structured, consistent, and analysis-ready dataset before it is loaded into the Power BI data model.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating Duplicate Queries in Power Query Editor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query allows you to create a copy of an existing query without reconnecting to the original data source. This is useful when you want to apply different transformations to the same dataset while keeping the original query unchanged.&lt;/p&gt;

&lt;p&gt;For this example, we will use a &lt;strong&gt;CSV file&lt;/strong&gt; as the data source.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2f1nraz55xegd8zkduxi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2f1nraz55xegd8zkduxi.png" alt="Image 11" width="624" height="326"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2xgvqoyjk9b03gnmm2kd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2xgvqoyjk9b03gnmm2kd.png" alt="Image 12" width="624" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting the file, choose &lt;strong&gt;Open&lt;/strong&gt; to continue with the import process. Instead of loading the data immediately, select &lt;strong&gt;Transform Data&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyipqq0osatft0nfwck8p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyipqq0osatft0nfwck8p.png" alt="Image 13" width="623" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Power Query Editor will open, displaying the imported dataset and providing access to the available transformation tools.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76vd4yz2iyop2gxgbzq0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76vd4yz2iyop2gxgbzq0.png" alt="Image 14" width="624" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Creating a Duplicate Query&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the &lt;strong&gt;Queries&lt;/strong&gt; pane, select the query you want to copy.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Home&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Manage&lt;/strong&gt; drop-down menu.&lt;/li&gt;
&lt;li&gt;You will find options such as &lt;strong&gt;Delete, Duplicate,&lt;/strong&gt; and &lt;strong&gt;Reference&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Duplicate&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frpz53p4p50kq5prmq1s9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frpz53p4p50kq5prmq1s9.png" alt="Image 15" width="624" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Power Query creates a new query based on the selected query. The duplicate appears in the &lt;strong&gt;Queries&lt;/strong&gt; pane and can be transformed independently.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiki1h587wdbh4u26ptfm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiki1h587wdbh4u26ptfm.png" alt="Image 16" width="623" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A duplicate query is useful when you need to create multiple versions of the same dataset for different transformation or reporting requirements.&lt;/p&gt;

&lt;p&gt;To remove the duplicate, select the query and use &lt;strong&gt;Home → Manage → Delete&lt;/strong&gt;, or right-click the query and select &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Sorting Data in Power Query&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Power Query also allows you to arrange records based on the values in a selected column.&lt;/p&gt;

&lt;p&gt;To sort a column:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the column you want to use for sorting.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Home&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Sort&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose either &lt;strong&gt;Ascending&lt;/strong&gt; or &lt;strong&gt;Descending&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, the &lt;strong&gt;BusinessEntityID&lt;/strong&gt; column can be sorted in ascending order to arrange the records from the smallest value to the largest.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftrpgt8adhkdo2gq38ueu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftrpgt8adhkdo2gq38ueu.png" alt="Image 17" width="623" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Applying Your Changes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After completing the required transformations, select &lt;strong&gt;File → Close &amp;amp; Apply&lt;/strong&gt; to save the changes and return to Power BI Desktop.&lt;/p&gt;

&lt;p&gt;Power BI will apply the transformation steps and load the prepared data into the model.&lt;/p&gt;

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

&lt;p&gt;Power Query provides practical tools for creating and managing queries, preparing datasets, and organizing records. Creating duplicate queries is particularly useful when the same source data needs to be transformed in different ways, while sorting helps organize records for easier inspection and analysis.&lt;/p&gt;

</description>
      <category>data</category>
      <category>powerquery</category>
      <category>analyst</category>
      <category>powerfuldevs</category>
    </item>
    <item>
      <title>Building and Updating Docker Containers: A Practical Hands-On Guide for Beginners</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Thu, 11 Dec 2025 18:56:09 +0000</pubDate>
      <link>https://dev.to/sudaisib/building-and-updating-docker-containers-a-practical-hands-on-guide-for-beginners-3bd1</link>
      <guid>https://dev.to/sudaisib/building-and-updating-docker-containers-a-practical-hands-on-guide-for-beginners-3bd1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today’s fast-paced development environment, consistency and portability are critical. Applications must run reliably across different machines, environments, or even in the cloud. Docker provides a solution by packaging your application along with its dependencies into a &lt;strong&gt;container&lt;/strong&gt;, ensuring it behaves the same everywhere.&lt;/p&gt;

&lt;p&gt;In this hands-on guide, you’ll learn how to containerize a simple Node.js “Todo List” application. You don’t need prior experience with Node.js — the focus is on understanding how Docker builds, packages, and runs applications.&lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you’ll be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a Docker image using a Dockerfile&lt;/li&gt;
&lt;li&gt;Run your application inside a container&lt;/li&gt;
&lt;li&gt;Expose your app to your local host&lt;/li&gt;
&lt;li&gt;Understand how images, containers, and layers interact&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Ensure you have the following tools installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop (latest version)&lt;/li&gt;
&lt;li&gt;Git (for cloning the sample app)&lt;/li&gt;
&lt;li&gt;VS Code or another code editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools allow you to build and run containers smoothly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Prepare the Application
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open a new folder in VS Code and name it &lt;code&gt;container&lt;/code&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%2F8k8ai20ar5pe5wxrue7l.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%2F8k8ai20ar5pe5wxrue7l.png" alt="Image1" width="800" height="429"&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%2F4spup3r8vwnkd6vinz41.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%2F4spup3r8vwnkd6vinz41.png" alt="Image2" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open a terminal in that folder.&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%2Fxalmd9wl5cyrdnecu37h.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%2Fxalmd9wl5cyrdnecu37h.png" alt="Image3" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone the sample Node.js application:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/docker/getting-started-app.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see the following folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getting-started-app/
│── .dockerignore
│── package.json
│── README.md
│── spec/
│── src/
└── yarn.lock
&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%2Fm3apftr4gbr0imfk6g74.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%2Fm3apftr4gbr0imfk6g74.png" alt="Image4" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the source code you will containerize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create the Dockerfile
&lt;/h2&gt;

&lt;p&gt;In the &lt;code&gt;getting-started-app&lt;/code&gt; folder, create a file named &lt;strong&gt;Dockerfile&lt;/strong&gt; and add:&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%2Fl71kl8wl37faxq04r9lx.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%2Fl71kl8wl37faxq04r9lx.png" alt="Image5" width="800" height="429"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# syntax=docker/dockerfile:1&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:lts-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--production&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "src/index.js"]&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FROM&lt;/strong&gt; selects a lightweight Node.js image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR&lt;/strong&gt; sets the working directory inside the container&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPY&lt;/strong&gt; transfers your source code into the container&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RUN&lt;/strong&gt; installs your dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMD&lt;/strong&gt; defines the command to start the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EXPOSE&lt;/strong&gt; documents the port your app listens on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This file tells Docker how to build your image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Build the Docker Image
&lt;/h2&gt;

&lt;p&gt;Navigate to your project folder by doing ls and cd into the folder/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="nb"&gt;cd&lt;/span&gt; /path/to/getting-started-app
&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%2Fit6r9uxsp936gi36cu4d.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%2Fit6r9uxsp936gi36cu4d.png" alt="Image6" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; getting-started &lt;span class="nb"&gt;.&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%2Fnd1z87gffui7by4btic2.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%2Fnd1z87gffui7by4btic2.png" alt="Image7" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What happens here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker downloads the Node.js base image (if not already on your machine)&lt;/li&gt;
&lt;li&gt;Copies your app files&lt;/li&gt;
&lt;li&gt;Installs dependencies&lt;/li&gt;
&lt;li&gt;Packages everything into a Docker image named &lt;code&gt;getting-started&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Run Your Container
&lt;/h2&gt;

&lt;p&gt;Start the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flags explained:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-d&lt;/strong&gt;: runs the container in the background&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p HOST:CONTAINER&lt;/strong&gt;: maps container port 3000 to your local port 3000&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Visit &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser. Your Todo List app should be running. Add tasks, mark them complete, and see how everything works inside the container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Verify Running Containers
&lt;/h2&gt;

&lt;p&gt;To check which containers are running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see the container ID, image name, port mappings, and status — confirming that your app is active.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Update the Application
&lt;/h2&gt;

&lt;p&gt;Suppose you want to change the “empty text” message to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have no todo items yet! Add one above!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Edit &lt;code&gt;src/static/js/app.js&lt;/code&gt; and update line 56:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- &amp;lt;p className="text-center"&amp;gt;No items yet! Add one above!&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ &amp;lt;p className="text-center"&amp;gt;You have no todo items yet! Add one above!&amp;lt;/p&amp;gt;
&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%2Fdl968qjp3wp0tvycjlel.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%2Fdl968qjp3wp0tvycjlel.png" alt="Image8" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rebuild the Docker image:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; getting-started &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start a new container using the updated code, You probably saw an error.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&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%2F9scmgnyeig3644jpyc18.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%2F9scmgnyeig3644jpyc18.png" alt="Image9" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop the old container:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
docker stop &amp;lt;container-id&amp;gt; 
docker &lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;container-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker ps&lt;/strong&gt;: To get the ID of the container, then insert the Container ID into the docker stop and docker rm to update&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the updated container:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-dp&lt;/span&gt; 127.0.0.1:3000:3000 getting-started
&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%2Fxysircb2hlk8iqzvf2b7.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%2Fxysircb2hlk8iqzvf2b7.png" alt="Image10" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refresh &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; to see your updated text.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
      <category>software</category>
    </item>
    <item>
      <title>Implementing Intersite Connectivity in Azure: Seamless Communication Across Virtual Networks</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Thu, 23 Oct 2025 11:04:32 +0000</pubDate>
      <link>https://dev.to/sudaisib/implementing-intersite-connectivity-in-azure-seamless-communication-across-virtual-networks-2jhh</link>
      <guid>https://dev.to/sudaisib/implementing-intersite-connectivity-in-azure-seamless-communication-across-virtual-networks-2jhh</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In cloud environments, organizations often segment their IT infrastructure into multiple virtual networks (VNets) for better security, performance, and management. For instance, a company may separate core IT services such as DNS and security from departmental workloads like manufacturing or R&amp;amp;D.&lt;/p&gt;

&lt;p&gt;However, in many cases, applications and services across these networks still need to communicate securely for example, when a manufacturing app needs to access a shared DNS or authentication service hosted in the core network.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Azure Intersite Connectivity&lt;/strong&gt; comes in. By implementing &lt;strong&gt;Virtual Network Peering&lt;/strong&gt;, you can connect multiple VNets in Azure, allowing traffic to flow privately through Microsoft’s backbone network without requiring VPNs or gateways.&lt;/p&gt;

&lt;p&gt;In this hands-on lab, you’ll explore how to establish communication between two Azure virtual networks and verify connectivity using Network Watcher and PowerShell. You’ll also create a &lt;strong&gt;custom route&lt;/strong&gt; to control traffic flow for specific subnets.&lt;/p&gt;

&lt;p&gt;By the end, you’ll understand how to interconnect Azure VNets to build secure, scalable multi-tier cloud architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and configure multiple virtual networks and virtual machines.&lt;/li&gt;
&lt;li&gt;Use Network Watcher to troubleshoot connections between VNets.&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;VNet peering&lt;/strong&gt; to enable secure communication.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;custom route&lt;/strong&gt; to manage and control traffic between subnets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Lab Scenario&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Your organization operates separate virtual networks for core IT services and manufacturing systems. For security reasons, these environments are isolated — but certain business processes require secure communication between them.&lt;/p&gt;

&lt;p&gt;In this exercise, you’ll configure peering between these VNets, allowing both areas to communicate over Azure’s backbone while maintaining network segmentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 1: Create a Core Services Virtual Machine and Virtual Network&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Begin by deploying your first virtual machine and network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to the &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;strong&gt;Virtual Machines&lt;/strong&gt; and select &lt;strong&gt;Create → Virtual machine&lt;/strong&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%2Fvo260odh9ze370fa15rn.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%2Fvo260odh9ze370fa15rn.png" alt="Image1" width="800" height="439"&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%2F0py30xvtgeh5n15hb0gn.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%2F0py30xvtgeh5n15hb0gn.png" alt="Image2" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the Basics tab, provide the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group: &lt;code&gt;az104-rg5&lt;/code&gt; (create one if needed)&lt;/li&gt;
&lt;li&gt;Virtual machine name: &lt;code&gt;CoreServicesVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Region: East US&lt;/li&gt;
&lt;li&gt;Image: Windows Server 2019 Datacenter – x64 Gen2&lt;/li&gt;
&lt;li&gt;Size: Standard_D2s_v3&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;localadmin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: create a complex one&lt;/li&gt;
&lt;li&gt;Public inbound ports: None
&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%2Fsw3i9tarabgh7uv1ubz5.png" alt="Image3" width="800" height="435"&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%2Fw5u8q0wlok0n4m4e5j7p.png" alt="Image4" width="800" height="432"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;strong&gt;Networking&lt;/strong&gt; tab, choose &lt;strong&gt;Create new&lt;/strong&gt; for Virtual Network and set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;CoreServicesVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Address range: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet name: &lt;code&gt;Core&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet range: &lt;code&gt;10.0.0.0/24&lt;/code&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%2F1xswvija90dc7x4buplq.png" alt="Image5" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable boot diagnostics under the &lt;strong&gt;Monitoring&lt;/strong&gt; tab.&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%2Ffudca6ijxfuibs1u9sre.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%2Ffudca6ijxfuibs1u9sre.png" alt="Image6" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review and create the VM.&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%2F8wdj690wr3rsu2ry15uw.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%2F8wdj690wr3rsu2ry15uw.png" alt="Image7" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This creates both the virtual network and the VM that will represent your core services environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 2: Create a Manufacturing Virtual Machine and Virtual Network&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Next, create another virtual machine in a separate virtual network.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Virtual Machines&lt;/strong&gt; page, select &lt;strong&gt;Create → Virtual machine&lt;/strong&gt; again.&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%2Fvo260odh9ze370fa15rn.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%2Fvo260odh9ze370fa15rn.png" alt="Image8" width="800" height="439"&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%2F0py30xvtgeh5n15hb0gn.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%2F0py30xvtgeh5n15hb0gn.png" alt="Image9" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide the following configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource group: &lt;code&gt;az104-rg5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Virtual machine name: &lt;code&gt;ManufacturingVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Region: East US&lt;/li&gt;
&lt;li&gt;Image: Windows Server 2019 Datacenter – x64 Gen2&lt;/li&gt;
&lt;li&gt;Size: Standard_D2s_v3&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;localadmin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: same secure password&lt;/li&gt;
&lt;li&gt;Public inbound ports: None
&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%2Fqbj9gz897qesu9jhyjsi.png" alt="Image10" width="800" height="431"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Under &lt;strong&gt;Networking&lt;/strong&gt;, create a new virtual network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Address range: &lt;code&gt;172.16.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet name: &lt;code&gt;Manufacturing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet range: &lt;code&gt;172.16.0.0/24&lt;/code&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%2Fd0yc8w43gqnca95h7z8m.png" alt="Image11" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable boot diagnostics and create the VM.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have two isolated environments — Core Services and Manufacturing — ready for intersite connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 3: Test the Connection Between Virtual Machines Using Network Watcher
&lt;/h2&gt;

&lt;p&gt;Before establishing peering, let’s verify that the VMs cannot currently communicate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the portal, search for &lt;strong&gt;Network Watcher&lt;/strong&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%2Fvodpvabo9wwmnwlf299l.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%2Fvodpvabo9wwmnwlf299l.png" alt="Image12" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Network diagnostic tools&lt;/strong&gt;, select &lt;strong&gt;Connection troubleshoot&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the following parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source type: Virtual machine&lt;/li&gt;
&lt;li&gt;Source VM: &lt;code&gt;CoreServicesVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Destination type: Virtual machine&lt;/li&gt;
&lt;li&gt;Destination VM: &lt;code&gt;ManufacturingVM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Protocol: TCP&lt;/li&gt;
&lt;li&gt;Destination port: 3389
&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%2Fixw4l0beby3avzzz5axw.png" alt="Image13" width="800" height="434"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the diagnostic test.&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%2Firept0kem6s0j5y1yu9g.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%2Firept0kem6s0j5y1yu9g.png" alt="Image14" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result will show &lt;strong&gt;Unreachable&lt;/strong&gt;, confirming that traffic cannot flow between VNets without peering.&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%2F373qsbzbu4refttcxtpz.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%2F373qsbzbu4refttcxtpz.png" alt="Image15" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Task 4: Configure Virtual Network Peering Between VNets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, enable connectivity by creating a peering relationship.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;code&gt;CoreServicesVnet&lt;/code&gt; resource.&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%2F52489037sya464nilzq2.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%2F52489037sya464nilzq2.png" alt="Image16" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Settings&lt;/strong&gt;, select &lt;strong&gt;Peerings&lt;/strong&gt; and choose &lt;strong&gt;+ Add&lt;/strong&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%2Fq6e71i2w2wqvnfta497q.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%2Fq6e71i2w2wqvnfta497q.png" alt="Image17" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Peering link name: &lt;code&gt;CoreServicesVnet-to-ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network: &lt;code&gt;ManufacturingVnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Allow access both ways (check both boxes for access and forwarded traffic).
&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%2Fu0kplcz8978ifuvvalwo.png" alt="Image18" width="800" height="428"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to save the 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%2Fpsyv6dqj6kdjj8d7vpc6.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%2Fpsyv6dqj6kdjj8d7vpc6.png" alt="Image19" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your VNets are now linked via Azure’s private backbone — enabling secure intersite communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 5: Create a Custom Route
&lt;/h2&gt;

&lt;p&gt;To control traffic flow between subnets, you’ll create a user-defined route (UDR).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;code&gt;CoreServicesVnet&lt;/code&gt; resource.&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%2Fvdt6gsh14ihjuih3czod.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%2Fvdt6gsh14ihjuih3czod.png" alt="Image20" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Subnets&lt;/strong&gt;, select &lt;strong&gt;+ Subnet&lt;/strong&gt; and create a new one named &lt;code&gt;perimeter&lt;/code&gt; with address range &lt;code&gt;10.0.1.0/24&lt;/code&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%2F022f5miqsx484g3ogyq0.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%2F022f5miqsx484g3ogyq0.png" alt="Image21" width="800" height="522"&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%2F3rezqjoli9f84ph0k62d.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%2F3rezqjoli9f84ph0k62d.png" alt="Image22" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the portal, search for &lt;strong&gt;Route tables&lt;/strong&gt; and create a new route table named &lt;code&gt;rt-CoreServices&lt;/code&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%2Fw9mieyanoakoxyxr1ruj.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%2Fw9mieyanoakoxyxr1ruj.png" alt="Image23" width="800" height="530"&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%2Fwspjy9ebsh3a99s66gjd.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%2Fwspjy9ebsh3a99s66gjd.png" alt="Image24" width="800" height="524"&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%2Fu4snoimwwi0lwx7u7w7c.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%2Fu4snoimwwi0lwx7u7w7c.png" alt="Image25" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once created, open the route table and add a new route:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route name: &lt;code&gt;PerimetertoCore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Destination type: IP Addresses&lt;/li&gt;
&lt;li&gt;Destination: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Next hop type: Virtual appliance&lt;/li&gt;
&lt;li&gt;Next hop address: &lt;code&gt;10.0.1.7&lt;/code&gt; (representing a future Network Virtual Appliance)
&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%2F0k3r4bmvsj41s6ibbnzd.png" alt="Image26" width="800" height="531"&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%2Fl0kszna9h34lo2b5n5f6.png" alt="Image27" width="800" height="530"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Associate this route table with the &lt;strong&gt;Core&lt;/strong&gt; subnet of your CoreServicesVnet.&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%2Fveezo3rn4f8g3606vjgp.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%2Fveezo3rn4f8g3606vjgp.png" alt="Image28" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this, traffic from the perimeter subnet will be routed through the NVA before reaching internal services — providing an additional layer of control and security.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Cleanup&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To avoid unnecessary costs, delete the resources after completing the lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the resource group &lt;code&gt;az104-rg5&lt;/code&gt; from the Azure portal.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;You’ve successfully implemented intersite connectivity between two virtual networks in Azure. This setup is foundational for enterprise-grade architectures — enabling cross-department communication, hybrid setups, and multi-region workloads.&lt;/p&gt;

&lt;p&gt;In the next lab, you’ll build upon this by exploring more advanced traffic control mechanisms and network security configurations to further strengthen your Azure infrastructure.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloudcomputing</category>
      <category>network</category>
      <category>networking</category>
    </item>
    <item>
      <title>Implementing Azure Web Apps: From Setup to Scaling Your Cloud Applications</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 21 Oct 2025 16:45:30 +0000</pubDate>
      <link>https://dev.to/sudaisib/implementing-azure-web-apps-from-setup-to-scaling-your-cloud-applications-3ie8</link>
      <guid>https://dev.to/sudaisib/implementing-azure-web-apps-from-setup-to-scaling-your-cloud-applications-3ie8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As businesses modernize their IT infrastructure, hosting web applications in the cloud has become a key strategy for improving scalability, reliability, and cost efficiency. Many organizations still rely on on-premises servers to host their company websites, but these setups often come with high maintenance costs, limited scalability, and hardware refresh challenges.&lt;/p&gt;

&lt;p&gt;To eliminate the burden of physical infrastructure, companies are increasingly adopting &lt;strong&gt;Azure App Service&lt;/strong&gt; a fully managed &lt;strong&gt;Platform as a Service (PaaS)&lt;/strong&gt; solution for hosting web applications built on popular runtime stacks like &lt;strong&gt;.NET, Java, Python, Node.js, and PHP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this hands-on lab, you’ll learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and configure an Azure Web App.&lt;/li&gt;
&lt;li&gt;Set up a deployment slot for staging and production environments.&lt;/li&gt;
&lt;li&gt;Configure continuous deployment using GitHub.&lt;/li&gt;
&lt;li&gt;Swap deployment slots for seamless updates.&lt;/li&gt;
&lt;li&gt;Implement autoscaling to ensure performance under variable loads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this guide, you’ll understand how Azure Web Apps help teams deploy faster, scale smarter, and maintain high availability all without managing servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skilling Objectives
&lt;/h2&gt;

&lt;p&gt;You will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy a PHP-based Azure Web App using App Service.&lt;/li&gt;
&lt;li&gt;Configure staging and production deployment slots for testing and release management.&lt;/li&gt;
&lt;li&gt;Automate deployments using a GitHub repository.&lt;/li&gt;
&lt;li&gt;Perform slot swaps to promote tested code into production.&lt;/li&gt;
&lt;li&gt;Configure autoscaling to automatically adjust resources based on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Task 1: Create and Configure an Azure Web App
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why start here?
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Azure Web App&lt;/strong&gt; is the foundational component of Azure App Service. It provides a managed environment to host your website code, manage scaling, and integrate DevOps pipelines — all without provisioning virtual machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign in to the &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;strong&gt;App Services&lt;/strong&gt; and select &lt;strong&gt;+ Create → Web App&lt;/strong&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%2Fv3wjt1txlj4wro6g4ye3.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%2Fv3wjt1txlj4wro6g4ye3.png" alt="Image1" width="800" height="428"&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%2Fuxk1g2978qmgjy2hkqe0.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%2Fuxk1g2978qmgjy2hkqe0.png" alt="Image2" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;em&gt;Basics&lt;/em&gt; tab, provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subscription:&lt;/strong&gt; Your Azure subscription&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource group:&lt;/strong&gt; Create or select an existing group&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web app name:&lt;/strong&gt; A unique name (e.g., &lt;code&gt;WebAppDemo123&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish:&lt;/strong&gt; Code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime stack:&lt;/strong&gt; PHP 8.2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating system:&lt;/strong&gt; Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; East US&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing plan:&lt;/strong&gt; Premium V3 (P1V3)
&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%2Fov27sdtprygetsaq9lgp.png" alt="Image3" width="800" height="428"&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%2Frl73fkzk1w11goh2puqr.png" alt="Image4" width="800" height="428"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create → Create&lt;/strong&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%2Fov1j37jzn5e9s8qld2rp.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%2Fov1j37jzn5e9s8qld2rp.png" alt="Image5" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once deployment completes, click &lt;strong&gt;Go to Resource&lt;/strong&gt; to view your newly created Web App.&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%2Fucredhkq7oswfdiu0u2k.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%2Fucredhkq7oswfdiu0u2k.png" alt="Image6" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a fully managed Azure Web App running PHP on Linux ready for configuration and deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 2: Create and Configure a Deployment Slot
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Deployment slots&lt;/strong&gt; allow you to host multiple versions of your app within the same App Service plan. They are invaluable for &lt;strong&gt;staging&lt;/strong&gt;, &lt;strong&gt;testing&lt;/strong&gt;, and &lt;strong&gt;blue-green deployments&lt;/strong&gt; without downtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;From your Web App’s blade, open the &lt;strong&gt;Default domain&lt;/strong&gt; link to confirm the app is running.&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%2F0f4u2tbt6ha3heclmhol.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%2F0f4u2tbt6ha3heclmhol.png" alt="Image7" width="800" height="431"&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%2Fy4wpk3i0qmjocjtt7ko4.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%2Fy4wpk3i0qmjocjtt7ko4.png" alt="Image8" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Return to the portal and navigate to &lt;strong&gt;Deployment slots&lt;/strong&gt; under your Web App.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;+ Add Slot&lt;/strong&gt;, name it &lt;code&gt;staging&lt;/code&gt;, and choose &lt;strong&gt;Do not clone settings&lt;/strong&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%2F9yjo6grgfmgoqc038tpt.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%2F9yjo6grgfmgoqc038tpt.png" alt="Image9" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Add&lt;/strong&gt;. Once created, you’ll see both &lt;strong&gt;Production&lt;/strong&gt; and &lt;strong&gt;Staging&lt;/strong&gt; slots listed.&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%2Fjd19evu8hygi8hc8k3f8.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%2Fjd19evu8hygi8hc8k3f8.png" alt="Image10" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;strong&gt;staging&lt;/strong&gt; slot to view its unique URL.&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%2Fasq9yqmf8wvhvajdbjg7.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%2Fasq9yqmf8wvhvajdbjg7.png" alt="Image11" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a staging environment to test your app safely before releasing it to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 3: Configure Web App Deployment Settings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Continuous deployment ensures that your app service always reflects the latest tested code. By connecting your Web App to a GitHub repository, updates can be deployed automatically to your staging environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;staging&lt;/strong&gt; slot, select &lt;strong&gt;Deployment Center → Settings&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For &lt;strong&gt;Source&lt;/strong&gt;, select &lt;strong&gt;External Git&lt;/strong&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%2F1f1ejaz1pi6mzxj1fg9x.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%2F1f1ejaz1pi6mzxj1fg9x.png" alt="Image12" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You notice an Error SCM basic authentication is disabled, click &lt;strong&gt;Enabled it&lt;/strong&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%2Fuuh0xu6wyo8gcwbhtdjn.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%2Fuuh0xu6wyo8gcwbhtdjn.png" alt="Image13" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the box for SCM basic Auth Publishing Credentials to enable &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%2Fdbftz5hvbu8jbrhn7yi1.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%2Fdbftz5hvbu8jbrhn7yi1.png" alt="Image14" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the repository field, enter:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://github.com/Azure-Samples/php-docs-hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Set the &lt;strong&gt;Branch&lt;/strong&gt; to &lt;code&gt;master&lt;/code&gt; and click &lt;strong&gt;Save&lt;/strong&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%2F7x1brv1o0s1yrniftuf7.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%2F7x1brv1o0s1yrniftuf7.png" alt="Image15" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Overview&lt;/strong&gt; and open the &lt;strong&gt;Default domain&lt;/strong&gt; link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify the deployed app displays &lt;strong&gt;“Hello World!”&lt;/strong&gt; confirming that deployment succeeded.&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%2Flsjzf8x3soucca8idj0i.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%2Flsjzf8x3soucca8idj0i.png" alt="Image16" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This setup enables automated updates from your GitHub repository to your staging environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 4: Swap Deployment Slots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Swapping deployment slots allows you to promote code that has been tested in staging directly into production with minimal risk and zero downtime. It’s an essential practice in modern DevOps workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate back to &lt;strong&gt;Deployment slots&lt;/strong&gt; in your Web App.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Swap&lt;/strong&gt;, review settings, and then select &lt;strong&gt;Start Swap&lt;/strong&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%2Fclwzsd0vlftci9zxhqya.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%2Fclwzsd0vlftci9zxhqya.png" alt="Image17" width="800" height="431"&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%2Fgebcs6ki2jzjlmu2s82g.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%2Fgebcs6ki2jzjlmu2s82g.png" alt="Image18" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the swap completes, go back to your Web App &lt;strong&gt;Overview&lt;/strong&gt; and open the production domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify that the production app now displays the &lt;strong&gt;“Hello World!”&lt;/strong&gt; page.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your previously tested staging code is now live in production — ensuring safe and seamless deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task 5: Configure and Test Autoscaling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;p&gt;Autoscaling ensures that your web app performs optimally under fluctuating traffic. Azure automatically adjusts the number of running instances based on real-time metrics like CPU usage or response time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In your App Service plan, go to &lt;strong&gt;Scale out (App Service plan)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Automatic&lt;/strong&gt; scaling mode.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Maximum burst&lt;/strong&gt; field, set &lt;strong&gt;2&lt;/strong&gt; and click &lt;strong&gt;Save&lt;/strong&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%2F1uazxxouc96hecjnroj7.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%2F1uazxxouc96hecjnroj7.png" alt="Image19" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notice an Error occurred after Scaling out&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%2F2pdjxm53kn1s74dlk1hj.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%2F2pdjxm53kn1s74dlk1hj.png" alt="Image20" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To simulate load, navigate to &lt;strong&gt;Diagnose and solve problems → Load Test your App&lt;/strong&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%2Flpsfeb0oog5ej2b0dogf.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%2Flpsfeb0oog5ej2b0dogf.png" alt="Image21" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new load test, assign a Unique name for the test (&lt;code&gt;webtest&lt;/code&gt;), Review and Create.&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%2Fvzxztk1kt221yaf267xz.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%2Fvzxztk1kt221yaf267xz.png" alt="Image22" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Overview | Create by adding HTTP requests, select Create.&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%2F8yoschokj869yvv44gf4.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%2F8yoschokj869yvv44gf4.png" alt="Image23" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the Test plan tab, click &lt;strong&gt;Add request&lt;/strong&gt;. In the URL field, paste in your &lt;strong&gt;Default domain URL&lt;/strong&gt;. Ensure this is properly formatted and begins with &lt;strong&gt;https://&lt;/strong&gt;. Select &lt;strong&gt;Add&lt;/strong&gt; to save your changes.&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%2Fa4knjoeyr4ixzb1c8q3g.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%2Fa4knjoeyr4ixzb1c8q3g.png" alt="Image24" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select Review + create and Create.&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%2Fpf9n4gkx7zxdnfzuykn3.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%2Fpf9n4gkx7zxdnfzuykn3.png" alt="Image26" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Observe live metrics such as &lt;strong&gt;Virtual users&lt;/strong&gt;, &lt;strong&gt;Response time&lt;/strong&gt;, and &lt;strong&gt;Requests per second&lt;/strong&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%2F5s85cx9jtd2s3399oifc.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%2F5s85cx9jtd2s3399oifc.png" alt="Image27" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stop the test once you verify that scaling is working correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Autoscaling dynamically adjusts resources to maintain performance while optimizing cost — a key feature for production workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleanup Your Resources
&lt;/h2&gt;

&lt;p&gt;To avoid unnecessary costs, delete your lab resources after completion.&lt;/p&gt;

&lt;p&gt;In the Azure portal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your resource group.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Delete resource group&lt;/strong&gt;, enter the name, and confirm.
&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%2F8z48kp5f2gixcoy51atu.png" alt="Image28" width="800" height="436"&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;By completing this hands-on guide, you’ve implemented a full lifecycle workflow for deploying and managing web apps in Azure — from setup and deployment to autoscaling and cleanup.&lt;/p&gt;

&lt;p&gt;Azure Web Apps simplifies application hosting by eliminating the need for physical infrastructure, offering built-in deployment pipelines, and supporting high availability and scalability out of the box.&lt;/p&gt;

&lt;p&gt;Whether you’re migrating from on-premises servers or building new cloud-native applications, &lt;strong&gt;Azure App Service&lt;/strong&gt; empowers your organization to innovate faster while keeping operations secure, scalable, and cost-effective.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>staticwebapps</category>
      <category>cloudcomputing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Strengthening Identity Security: Performing Basic Multifactor Authentication (MFA) Tasks</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 30 Sep 2025 14:15:10 +0000</pubDate>
      <link>https://dev.to/sudaisib/strengthening-identity-security-performing-basic-multifactor-authentication-mfa-tasks-23d3</link>
      <guid>https://dev.to/sudaisib/strengthening-identity-security-performing-basic-multifactor-authentication-mfa-tasks-23d3</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Passwords alone are no longer enough to keep accounts secure. Cyber threats continue to grow, and attackers often try to steal or guess credentials to gain unauthorized access. This is where &lt;strong&gt;Multifactor Authentication (MFA)&lt;/strong&gt; becomes essential. MFA adds an extra layer of security by requiring users to verify their identity with a second factor—like a phone notification, code, or trusted device—before granting access.&lt;/p&gt;

&lt;p&gt;In this walkthrough, you’ll learn how to set up and configure basic MFA tasks in Microsoft Entra ID. The exercise includes enabling per-user MFA, reviewing service settings, and configuring account lockout policies to protect against suspicious activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By completing this lab, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable and manage per-user MFA.&lt;/li&gt;
&lt;li&gt;Configure MFA service settings to suit your organization’s needs.&lt;/li&gt;
&lt;li&gt;Set account lockout rules to protect against repeated unauthorized attempts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Enable / Disable Per-user MFA Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Microsoft Entra admin center&lt;/strong&gt; at &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;https://entra.microsoft.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in using your tenant credentials.&lt;/li&gt;
&lt;li&gt;From the menu on the left, open the &lt;strong&gt;Identity&lt;/strong&gt; submenu.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Users&lt;/strong&gt;, then &lt;strong&gt;All users&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the top of the page, select &lt;strong&gt;Per-user MFA&lt;/strong&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%2F7es7511vwgg8vebbo2l9.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%2F7es7511vwgg8vebbo2l9.png" alt="Image1" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Place a checkmark next to &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Enable MFA&lt;/strong&gt; from the list.&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%2Fhiwpfg3wgfgr85l2t2bw.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%2Fhiwpfg3wgfgr85l2t2bw.png" alt="Image2" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A message box will appear with an optional setup URL you can share with the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After a few seconds, notice that &lt;em&gt;Enforced&lt;/em&gt; now appears next to Bhogeswar’s name.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Review the Service Settings for MFA&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, go to the &lt;strong&gt;Identity&lt;/strong&gt; submenu again.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Users&lt;/strong&gt;, then &lt;strong&gt;All users&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Per-user MFA&lt;/strong&gt; option.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Service settings&lt;/strong&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%2Fvlqp0jpzdcvk06wp0puo.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%2Fvlqp0jpzdcvk06wp0puo.png" alt="Image4" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the following configurable options:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App passwords&lt;/strong&gt;: Allow legacy apps to work with MFA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusted IPs&lt;/strong&gt;: Define safe IP ranges where MFA can be bypassed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification options&lt;/strong&gt;: Choose which second-factor methods users can use (phone call, mobile app, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remember MFA on trusted device&lt;/strong&gt;: Allow users on trusted devices to skip re-authentication for a set number of days.

&lt;ol&gt;
&lt;li&gt;If no changes are required, select &lt;strong&gt;Discard&lt;/strong&gt; to exit.
&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%2Fynz1vhzs13tbmmjo5hty.png" alt="Image3" width="800" height="377"&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Configure MFA Account Lockout Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, open the &lt;strong&gt;Protection&lt;/strong&gt; submenu.&lt;/li&gt;
&lt;li&gt;Scroll down and select &lt;strong&gt;Show more&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Multifactor authentication&lt;/strong&gt;, then select &lt;strong&gt;Account lockout&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the following values:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Number of MFA denials to trigger account lockout&lt;/strong&gt;: &lt;code&gt;3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes until account lockout counter is reset&lt;/strong&gt;: &lt;code&gt;180&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes until account is automatically unblocked&lt;/strong&gt;: &lt;code&gt;15&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt; to apply the settings.&lt;/li&gt;
&lt;li&gt;Review additional MFA options such as &lt;strong&gt;Fraud alert&lt;/strong&gt;, &lt;strong&gt;Block/unblock users&lt;/strong&gt;, and &lt;strong&gt;Notifications&lt;/strong&gt; for stronger security management.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Are We Performing MFA Tasks?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Performing MFA tasks is essential because it ensures that even if a password is stolen or guessed, attackers cannot gain access without the second factor of authentication. It provides stronger identity protection, reduces the risk of unauthorized access, and helps organizations maintain compliance with security best practices. MFA is one of the most effective ways to defend against phishing, password theft, and unauthorized logins.&lt;/p&gt;

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

&lt;p&gt;In this exercise, you enabled per-user MFA, reviewed MFA service settings, and configured account lockout policies. By adding MFA to your organization’s identity management strategy, you provide users with stronger protection while keeping attackers at bay. This simple yet powerful layer of security greatly improves the overall resilience of your Microsoft Entra environment.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Enhancing Account Security in Microsoft Entra ID: Password Protection and Self-Service Reset</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Tue, 30 Sep 2025 13:24:30 +0000</pubDate>
      <link>https://dev.to/sudaisib/enhancing-account-security-in-microsoft-entra-id-password-protection-and-self-service-reset-2j4a</link>
      <guid>https://dev.to/sudaisib/enhancing-account-security-in-microsoft-entra-id-password-protection-and-self-service-reset-2j4a</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Passwords remain a cornerstone of digital security, but weak or reused passwords are a common vulnerability. Microsoft Entra ID provides robust tools to enforce strong password policies, protect accounts from brute-force attacks, and empower users to reset their passwords securely without relying on IT support.&lt;/p&gt;

&lt;p&gt;In this guide, you will learn how to configure &lt;strong&gt;password protection settings&lt;/strong&gt; and explore the &lt;strong&gt;self-service password reset (SSPR) feature&lt;/strong&gt;, helping your organization enhance security and streamline user management.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By completing this walkthrough, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure lockout policies and custom banned password lists.&lt;/li&gt;
&lt;li&gt;Enforce strong password rules and smart lockout.&lt;/li&gt;
&lt;li&gt;Enable and configure self-service password reset for specific user groups.&lt;/li&gt;
&lt;li&gt;Define authentication methods and registration policies for SSPR.&lt;/li&gt;
&lt;li&gt;Configure notifications for password reset events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Configure Password Protection&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt; and log in with your tenant credentials.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the left menu, navigate to &lt;strong&gt;Protection → Authentication methods → Password protection&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Smart Lockout Policies:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lockout threshold&lt;/strong&gt;: 5 (Number of failed login attempts before account locks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lockout duration&lt;/strong&gt;: 30 seconds (Time the account remains locked)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Configure Custom Banned Passwords:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Enforce custom list&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter: &lt;code&gt;Contoso&lt;/code&gt;, &lt;code&gt;London&lt;/code&gt;, &lt;code&gt;Widget&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enable Enforcement Mode:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;Mode&lt;/strong&gt; to &lt;strong&gt;Enforced&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we configure password protection:&lt;/strong&gt;&lt;br&gt;
Setting lockout policies and banned password lists prevents brute-force attacks and ensures users create strong, secure passwords.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Configure Self-Service Password Reset (SSPR)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the Entra admin center, go to &lt;strong&gt;Protection → Password reset&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2A Enable SSPR for a Specific Group&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Find &lt;strong&gt;Self-service password enabled&lt;/strong&gt; and set the value to &lt;strong&gt;Selected&lt;/strong&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%2Fah69dflqim16qcq19rom.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%2Fah69dflqim16qcq19rom.png" alt="Image1" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;No groups selected&lt;/strong&gt;, then choose the &lt;strong&gt;Project23&lt;/strong&gt; group.&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%2Fpqg5mxmmtas8bpccamfc.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%2Fpqg5mxmmtas8bpccamfc.png" alt="Image2" width="800" height="504"&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%2Feijtkjemvwhyq5z492gw.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%2Feijtkjemvwhyq5z492gw.png" alt="Image3" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Select → Save&lt;/strong&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%2Fv3ujaslbg5e6dwffphyf.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%2Fv3ujaslbg5e6dwffphyf.png" alt="Image4" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we enable SSPR:&lt;/strong&gt;&lt;br&gt;
Self-service password reset empowers users to securely reset their own passwords, reducing IT support tickets and improving productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2B Configure Authentication Methods&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Authentication methods&lt;/strong&gt; in the Password reset menu.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Number of methods required to reset&lt;/strong&gt; to &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable the following methods for users:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile phone&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile app code&lt;/strong&gt;

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

&lt;p&gt;💡 &lt;strong&gt;Why authentication methods matter:&lt;/strong&gt;&lt;br&gt;
Users must verify their identity using trusted methods before resetting passwords, ensuring that only authorized individuals can perform a reset.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2C Configure Registration Requirements&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Registration → Require users to register when signing in?&lt;/strong&gt; and set it to &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Number of days before users are asked to re-confirm&lt;/strong&gt; to &lt;code&gt;90&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&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%2Frf1ehxyzji76ntjj4gv5.png" alt="Image5" width="800" height="546"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Purpose of registration:&lt;/strong&gt;&lt;br&gt;
Ensures users provide up-to-date authentication information, which strengthens security and guarantees that SSPR functions correctly when needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2D Configure Notifications&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Notifications&lt;/strong&gt; within Password reset.&lt;/li&gt;
&lt;li&gt;Leave &lt;strong&gt;Notify users on password reset?&lt;/strong&gt; at &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Change &lt;strong&gt;Notify all admins when other admins reset their password?&lt;/strong&gt; to &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&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%2Fcdcdp4nzaxvoutti473x.png" alt="Image6" width="800" height="703"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why notifications are important:&lt;/strong&gt;&lt;br&gt;
Notifications keep users and administrators informed of password changes, helping detect unauthorized resets and improving accountability.&lt;/p&gt;

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

&lt;p&gt;In this walkthrough, you configured password protection policies to enforce strong passwords and prevent account attacks. You also enabled and customized self-service password reset, defining authentication methods, registration policies, and notifications.&lt;/p&gt;

&lt;p&gt;By applying these features in Microsoft Entra ID, you reduce the risk of compromised accounts, empower users to manage their credentials securely, and streamline IT operations—all while maintaining strong organizational security.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Mastering Identity Management in Microsoft Entra ID: From Users to Roles</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 29 Sep 2025 16:42:01 +0000</pubDate>
      <link>https://dev.to/sudaisib/mastering-identity-management-in-microsoft-entra-id-from-users-to-roles-2g82</link>
      <guid>https://dev.to/sudaisib/mastering-identity-management-in-microsoft-entra-id-from-users-to-roles-2g82</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Groups in Microsoft Entra ID simplify how access is managed across applications, licenses, and resources. Instead of assigning permissions to individual users one by one, administrators can create groups, add users as members, and assign policies or licenses to the group. This makes administration more efficient, consistent, and scalable.&lt;/p&gt;

&lt;p&gt;In this walkthrough, you will explore beginner-level group management tasks such as creating groups, assigning members, configuring dynamic membership, and applying licenses. These are essential skills for managing identity and access at scale.&lt;/p&gt;

&lt;p&gt;This exercise should take approximately &lt;strong&gt;15 minutes to complete&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By completing this exercise, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;Microsoft 365 group&lt;/strong&gt; for collaboration.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;Security group&lt;/strong&gt; with dynamic membership.&lt;/li&gt;
&lt;li&gt;Add users to groups using different methods.&lt;/li&gt;
&lt;li&gt;Assign licenses and ownership at the group level.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a Microsoft 365 Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in with your tenant administrator credentials.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the left menu, select &lt;strong&gt;Groups → All groups → + New group&lt;/strong&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%2Fi3fv3oinptbhgy9fn72p.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%2Fi3fv3oinptbhgy9fn72p.png" alt="Image1" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the following details:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group type&lt;/strong&gt;: Microsoft 365&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group name&lt;/strong&gt;: &lt;code&gt;Project23&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group description&lt;/strong&gt;: &lt;em&gt;This group consists of members of the new AI Simulation software with codename Project23&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Membership type&lt;/strong&gt;: Assigned&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Members&lt;/strong&gt;, select &lt;strong&gt;+ Add members → Bhogeswar Kalita → Select&lt;/strong&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%2Fk94ro9l4yog54lt95ln3.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%2Fk94ro9l4yog54lt95ln3.png" alt="Image2" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create&lt;/strong&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%2Fo34dmwla5ldsajititsa.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%2Fo34dmwla5ldsajititsa.png" alt="Image3" width="800" height="664"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we create Microsoft 365 groups:&lt;/strong&gt; They provide a shared workspace for collaboration in Outlook, Teams, and SharePoint, making it easier for project members to communicate and share resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Create a Security Group with Dynamic Membership&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Groups → All groups → + New group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the following details:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Group type&lt;/strong&gt;: Security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group name&lt;/strong&gt;: &lt;code&gt;Guest Users&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group description&lt;/strong&gt;: &lt;em&gt;This group has all the Guest users currently in the tenant.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Membership type&lt;/strong&gt;: Dynamic User&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Under &lt;strong&gt;Dynamic user members&lt;/strong&gt;, select &lt;strong&gt;Add dynamic query&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the query:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Property&lt;/strong&gt;: &lt;code&gt;userType&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operator&lt;/strong&gt;: Equals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Value&lt;/strong&gt;: Guest&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save → Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Wait about 2 minutes for the group to populate, then select &lt;strong&gt;Refresh&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we create Security groups:&lt;/strong&gt; They are used to manage access to resources or apply security policies. With dynamic membership, users are automatically added or removed based on rules, reducing manual administration.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Add an Existing User to a Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Groups → All groups → Project23&lt;/strong&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%2F9e71xd57d8ixo7pn4arb.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%2F9e71xd57d8ixo7pn4arb.png" alt="Image 6" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Members → + Add members&lt;/strong&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%2Fu2c6t5en9tbp1i86t6ix.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%2Fu2c6t5en9tbp1i86t6ix.png" alt="Image5" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mark the box next to &lt;strong&gt;External User&lt;/strong&gt; and click &lt;strong&gt;Select&lt;/strong&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%2Frzm6l9cakxisa7pscl3p.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%2Frzm6l9cakxisa7pscl3p.png" alt="Image6" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we add users to groups:&lt;/strong&gt; Group membership ensures users inherit access and licenses automatically, reducing errors and improving consistency compared to managing each account individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Add Licenses and Owners to a Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Assign Group Owners&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Groups → All groups → Project23&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Owners → + Add owners&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Mark the box next to &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt; and click &lt;strong&gt;Select&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 By default, the tenant administrator is the owner if no one is specified.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Assign Group Licenses&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://admin.microsoft.com" rel="noopener noreferrer"&gt;Microsoft 365 admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Billing → Licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Microsoft Power Automate Free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Groups tab → + Assign licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;Project23&lt;/code&gt; group from the dropdown.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Assign&lt;/strong&gt; and refresh to confirm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 &lt;strong&gt;Why we assign licenses to groups:&lt;/strong&gt; Group-based licensing streamlines administration—when new members are added to the group, they automatically inherit the required licenses without manual intervention.&lt;/p&gt;

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

&lt;p&gt;In this exercise, you learned how to create Microsoft 365 and Security groups, add users, configure dynamic membership, assign licenses, and define group ownership in Microsoft Entra ID.&lt;/p&gt;

&lt;p&gt;Groups are a cornerstone of modern identity management, helping administrators manage collaboration, enforce security, and scale license assignments efficiently. By mastering these basics, you can streamline user access and reduce administrative overhead across your organization.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>tutorial</category>
      <category>security</category>
    </item>
    <item>
      <title>Performing Basic User Management Tasks in Microsoft Entra ID: A Step-by-Step Guide</title>
      <dc:creator>Oladosu Ibrahim</dc:creator>
      <pubDate>Mon, 29 Sep 2025 11:49:19 +0000</pubDate>
      <link>https://dev.to/sudaisib/performing-basic-user-management-tasks-in-microsoft-entra-id-a-step-by-step-guide-3b1h</link>
      <guid>https://dev.to/sudaisib/performing-basic-user-management-tasks-in-microsoft-entra-id-a-step-by-step-guide-3b1h</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Identity and Access Management (IAM) is one of the most critical responsibilities for IT administrators. Microsoft Entra ID (formerly Azure Active Directory) provides the foundation for securely managing users, roles, and access to resources in the cloud.&lt;/p&gt;

&lt;p&gt;In this guide, you’ll perform &lt;strong&gt;basic user management tasks&lt;/strong&gt; in Entra ID—from creating a new user to assigning licenses, roles, and even importing users in bulk. These are the essential skills every &lt;strong&gt;Identity and Access Administrator&lt;/strong&gt; needs to master.&lt;/p&gt;

&lt;p&gt;This exercise should take about &lt;strong&gt;10 minutes to complete&lt;/strong&gt; and covers five common user management tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Skilling Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following this walkthrough, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new user and confirm login.&lt;/li&gt;
&lt;li&gt;Assign Microsoft 365 licenses.&lt;/li&gt;
&lt;li&gt;Invite an external guest user.&lt;/li&gt;
&lt;li&gt;Assign administrative roles.&lt;/li&gt;
&lt;li&gt;Bulk import multiple users from a CSV file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The setup involves using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Entra admin center&lt;/strong&gt; – for creating and managing users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft 365 admin center&lt;/strong&gt; – for assigning licenses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSV templates&lt;/strong&gt; – for bulk user import.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools together provide a complete foundation for identity lifecycle management in the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Create a New User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Microsoft Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Log in with your tenant administrator credentials.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;Users → All users → + New user → Create new user&lt;/strong&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%2Fqrnbudx0sihpq4jsz2hl.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%2Fqrnbudx0sihpq4jsz2hl.png" alt="Image1" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fill in the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User principal name&lt;/strong&gt;: &lt;code&gt;BhogeswarK&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display name&lt;/strong&gt;: &lt;code&gt;Bhogeswar Kalita&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First name&lt;/strong&gt;: &lt;code&gt;Bhogeswar&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Last name&lt;/strong&gt;: &lt;code&gt;Kalita&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usage location&lt;/strong&gt;: United States (or your region)
&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%2Fo1earl4tdg46ai62zi5c.png" alt="Image2" width="800" height="525"&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%2F7aa8esvmvoyel2b87pwh.png" alt="Image3" width="800" height="292"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and save the auto-generated password.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create → Create&lt;/strong&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%2Fvcueryb7lo33v9o05vs1.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%2Fvcueryb7lo33v9o05vs1.png" alt="Image4" width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✅ &lt;strong&gt;Subtask: Confirm Login&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an &lt;strong&gt;InPrivate browsing window&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sign in with:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Username&lt;/strong&gt;: &lt;code&gt;BhogeswarK@yourtenantname.onmicrosoft.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password&lt;/strong&gt;: saved password&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Complete MFA setup if prompted.
&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%2F8dp5im9z4fm1i81xljcb.png" alt="Image5" width="800" height="418"&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%2Fucu5f4gr3ecaxsko7ti2.png" alt="Image6" width="800" height="428"&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Assign a License to the User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://admin.microsoft.com" rel="noopener noreferrer"&gt;Microsoft 365 admin center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Billing → Licenses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Microsoft Power Automate Free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ Assign licenses&lt;/strong&gt;, choose &lt;strong&gt;Bhogeswar Kalita&lt;/strong&gt;, then &lt;strong&gt;Assign&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A confirmation message will appear.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Invite an External User&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Users → All users → + New user&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Invite external user&lt;/strong&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%2Fd55sxsh2zo7ihay875kr.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%2Fd55sxsh2zo7ihay875kr.png" alt="Image7" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt;: &lt;code&gt;ExtUser@testemail.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display name&lt;/strong&gt;: &lt;code&gt;External User&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message&lt;/strong&gt;: “Thank you for joining the company for this short work project.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Review + Invite→ Invite&lt;/strong&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%2F7hq05hhkdslq5acgwv32.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%2F7hq05hhkdslq5acgwv32.png" alt="Image8" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Assign a Role to a User&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Method 1: Assign Role via User Settings&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Users → All users → Bhogeswar Kalita&lt;/strong&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%2Fgb9fzfq5k8s4ijn19h7a.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%2Fgb9fzfq5k8s4ijn19h7a.png" alt="Image9" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Assigned roles → + Add assignment&lt;/strong&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%2Fxe2nemm9pazf6in1yttd.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%2Fxe2nemm9pazf6in1yttd.png" alt="Image10" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the dropdown, choose &lt;strong&gt;Attribute Definition Reader&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Eligible → Add&lt;/strong&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%2F2l88kbg4473q680ishr8.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%2F2l88kbg4473q680ishr8.png" alt="Image11" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5: Bulk Import Users&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In &lt;a href="https://entra.microsoft.com" rel="noopener noreferrer"&gt;Entra admin center&lt;/a&gt;, go to &lt;strong&gt;Users → All users → Bulk operations → Bulk create&lt;/strong&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%2Fehk586z0793wqqn882zn.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%2Fehk586z0793wqqn882zn.png" alt="Image12" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the &lt;strong&gt;CSV template&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the file with your users’ details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Required fields&lt;/strong&gt;: Username, Display name, Initial password.&lt;/li&gt;
&lt;li&gt;Optional: Department, Usage location, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the file (e.g., &lt;code&gt;APL0501-BulkUser.csv&lt;/code&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%2F4fpo512zpfidrlumfd9t.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%2F4fpo512zpfidrlumfd9t.png" alt="Image13" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upload the file back into the Bulk create wizard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Submit&lt;/strong&gt; and wait for the success notification.&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%2F7nltd14swp420acdirai.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%2F7nltd14swp420acdirai.png" alt="Image14" width="313" height="902"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;In this walkthrough, you performed the &lt;strong&gt;five core user management tasks&lt;/strong&gt; in Microsoft Entra ID: creating users, assigning licenses, inviting guests, assigning roles, and importing users in bulk.&lt;/p&gt;

&lt;p&gt;Mastering these basics ensures that you can effectively manage user identities, streamline onboarding, and secure access across your organization.&lt;/p&gt;

&lt;p&gt;With these skills, you’re well-prepared to take on more advanced &lt;strong&gt;Identity and Access Administration&lt;/strong&gt; tasks such as conditional access policies, identity governance, and lifecycle automation.&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>azure</category>
      <category>database</category>
      <category>security</category>
    </item>
  </channel>
</rss>
