<?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>Forem: Tunde Oretade</title>
    <description>The latest articles on Forem by Tunde Oretade (@tundeiness).</description>
    <link>https://forem.com/tundeiness</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F121750%2F01f5a876-3986-4ef3-a58a-d1075a190a8c.jpeg</url>
      <title>Forem: Tunde Oretade</title>
      <link>https://forem.com/tundeiness</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tundeiness"/>
    <language>en</language>
    <item>
      <title>Creating a Virtual Network with Two Virtual Machines that can ping each other.</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Fri, 12 Jul 2024 21:46:36 +0000</pubDate>
      <link>https://forem.com/tundeiness/creating-a-virtual-network-with-two-virtual-machines-that-can-ping-each-other-3056</link>
      <guid>https://forem.com/tundeiness/creating-a-virtual-network-with-two-virtual-machines-that-can-ping-each-other-3056</guid>
      <description>&lt;h1&gt;
  
  
  INTRODUCTION
&lt;/h1&gt;

&lt;p&gt;Today I will be writing about how to create a Virtual Network with Two Virtual Machines that can ping each other. This process involves setting up a virtual environment where multiple virtual machines (VMs) can communicate seamlessly, mimicking a real-world network setup.&lt;br&gt;
In this article, I will walk through the steps necessary to create a virtual network and configure two virtual machines to ensure they can successfully ping each other, demonstrating effective connectivity and interaction within the virtualized environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 1: CREATE A VIRTUAL NETWORK &amp;amp; A SUBNET
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;From the Azure Portal home page, at the top left corner of the page, 
click the hamburger (menu) button.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuw5esmgoxryd11f4vyz.png" alt="menu" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;select &lt;strong&gt;virtual networks&lt;/strong&gt; from the sidebar.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85qnebix30pl2vws1dsd.png" alt="virtual networks" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+create&lt;/strong&gt; at the top of the create network page.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5aqo45p951f4q5q6gau6.png" alt="+Create" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Basics&lt;/strong&gt; tab, under &lt;strong&gt;Project details&lt;/strong&gt; and at the &lt;strong&gt;Resource 
group&lt;/strong&gt; label, click &lt;strong&gt;create new&lt;/strong&gt; link. Provide a name for the 
resource group and click &lt;strong&gt;Ok&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fil1n839ibwjngh0fgrbm.png" alt="Basics" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3e9zaio92rza1pcy45h.png" alt="Create new" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under the &lt;strong&gt;instance details&lt;/strong&gt; label, provide a &lt;strong&gt;name&lt;/strong&gt; for the network and select a suitable &lt;strong&gt;Region&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ai7qd1y567bah9tydn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ai7qd1y567bah9tydn.png" alt="Instance details" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;IP Addresses&lt;/strong&gt; tab at the top of the page, to add a subnet.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi39vrjo1wy3h4kqedmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi39vrjo1wy3h4kqedmn.png" alt="IP Addresses" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the dropdown menu displayed above the &lt;strong&gt;address space&lt;/strong&gt; box on the &lt;br&gt;
displayed page, check that the dropdown is set to &lt;strong&gt;Add IPv4 address &lt;br&gt;
space&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrjpj8dliysbann6b38u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrjpj8dliysbann6b38u.png" alt="drop-down menu above address space box" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the address space box, change &lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;br&gt;
&lt;strong&gt;10.1.0.0/16&lt;/strong&gt; (This is usually the default IP address so you may not &lt;br&gt;
need to change it in this instance). &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;locate the pen icon at the bottom corner, in the address space box (next &lt;br&gt;
to the garbage can icon). Click on this icon to edit the default &lt;br&gt;
&lt;strong&gt;Subnet&lt;/strong&gt; name/add a subnet.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai4o02hnuoh4ixttpy4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai4o02hnuoh4ixttpy4h.png" alt="address space box" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave the &lt;strong&gt;Subnet Purpose&lt;/strong&gt; at &lt;strong&gt;Default&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felln9ojmsnmgjamtchaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felln9ojmsnmgjamtchaj.png" alt="Subnet purpose" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change Subnet &lt;strong&gt;name&lt;/strong&gt; to &lt;strong&gt;vnet1-subnet&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0jgkebv9oheg858alvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0jgkebv9oheg858alvv.png" alt="Change subnet name" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, change &lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/24&lt;/strong&gt; using the &lt;br&gt;
&lt;strong&gt;size&lt;/strong&gt; label. Leave all other settings as their defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to close the &lt;strong&gt;Add a Subnet&lt;/strong&gt; pane. This &lt;br&gt;
completes the creation of the subnet. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsizaykobs8oh6p8ucho7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsizaykobs8oh6p8ucho7.png" alt="change subnet address range and click add" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Review + create&lt;/strong&gt; to run validation.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi56dnr2ouwlfpta855y2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi56dnr2ouwlfpta855y2.png" alt="Review + create" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you see the notification that Validation passed, click the &lt;br&gt;
&lt;strong&gt;Create&lt;/strong&gt; button to deploy the Virtual Network.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7khnlfx6sjcsss29zh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7khnlfx6sjcsss29zh5.png" alt="create" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gox92vsdpfk0kv4d0n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gox92vsdpfk0kv4d0n1.png" alt="deployment in progress" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcwfe0wlxmhut5qcsi0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcwfe0wlxmhut5qcsi0v.png" alt="deployment is complete" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  STEP 2: CREATE TWO VIRTUAL MACHINES IN THE NETWORK (VIRTUAL NETWORK)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;After the virtual network deployment is complete click &lt;strong&gt;Go to resource&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxp2o4jv1mycye14d2ago.png" alt="Go to resource" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Click the hamburger menu button (top left of the page) and select &lt;strong&gt;virtual machines&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pf4d71njnncckqwy9n0.png" alt="menu button" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9xelx4a1ib0rxnvf7n83.png" alt="select virtual machines" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;+ Create&lt;/strong&gt; icon and then select &lt;strong&gt;Virtual machine&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zvode4rzgd6b0vz9oqq.png" alt="create virtual machine" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Basics&lt;/strong&gt; tab, at the &lt;strong&gt;Project details&lt;/strong&gt; and at the &lt;strong&gt;Resource group&lt;/strong&gt; label, select the resource group created earlier from the drop-down list of resource groups. This is the deployment ID.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmal872tj7wn36u6ecun.png" alt="select the resource group created earlier from the list of resource groups" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt; At the &lt;strong&gt;Instance details&lt;/strong&gt; heading and the &lt;strong&gt;Virtual machine name&lt;/strong&gt; click the input box and name the virtual machine as &lt;strong&gt;vm1&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72ials2uxuy6cakjynl6.png" alt="virtual machine name" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Region&lt;/strong&gt; label select a suitable region. In this case, I selected &lt;strong&gt;East US&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrx0b11rqg2g4ur1b1v9.png" alt="Region" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Availability options&lt;/strong&gt; to &lt;strong&gt;No infrastructure redundancy required&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb76vi7olsxs54p5f69v.png" alt="Availability options" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Security type&lt;/strong&gt; to &lt;strong&gt;Standard&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sx89ouwcpiw329m5mor.png" alt="Security type" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Image&lt;/strong&gt; label, select &lt;strong&gt;windows server 2019 Datacenter - Gen 2&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby24cubwe7gx9qt2sl9o.png" alt="Image" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;set &lt;strong&gt;vm architecture&lt;/strong&gt; to &lt;strong&gt;x64&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50ynlut80i05t8ouxrgu.png" alt="VM Architecture" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Next, untick &lt;strong&gt;Run with Azure spot discount&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faftzori572edjvfcz66g.png" alt="Run with Azure spot discount" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Then, set &lt;strong&gt;size&lt;/strong&gt; to &lt;strong&gt;Standard_Dc4ads_cc_v5..&lt;/strong&gt;. At times the size required may not be listed. If this happens select the &lt;strong&gt;see all sizes&lt;/strong&gt; link. This will take you to another page to select a VM size.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fou78l9pedrgreghveqge.png" alt="Size" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Do not &lt;strong&gt;Enable Hibernation&lt;/strong&gt;. In my case Hibernation isn't supported for my VM &lt;strong&gt;size&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5t6vf4ptr8tmjr2dyugc.png" alt="Enable Hibernation" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Administrator account&lt;/strong&gt; heading, select a &lt;strong&gt;Username&lt;/strong&gt; and &lt;strong&gt;Password&lt;/strong&gt;. Also &lt;strong&gt;confirm password&lt;/strong&gt; by re-typing the password in the input box at the &lt;strong&gt;confirm password&lt;/strong&gt; label. (These are the details that will be required to access the Virtual machines when it is in operation.)
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgc4hunm8wzwk6y57bzwd.png" alt="Administrator account" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Inbound port rules&lt;/strong&gt; heading leave the &lt;strong&gt;Public inbound ports&lt;/strong&gt; set at the default.&lt;/li&gt;
&lt;li&gt;set &lt;strong&gt;select inbound ports&lt;/strong&gt; to default which is RDP(3389).
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8c3kcp70lf320jq1o62e.png" alt="Inbound port rules" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Do not tick the &lt;strong&gt;Licensing section&lt;/strong&gt; as well.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmitz1hv6dewjtpdenhva.png" alt="Licensing" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;networking&lt;/strong&gt; tab at the top of the page. Make sure that &lt;strong&gt;vm1&lt;/strong&gt; is placed on the &lt;strong&gt;Vnet1-subnet&lt;/strong&gt; virtual network.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Review + create&lt;/strong&gt; to validate the configurations.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb43xo7kv7v5tmio1c63.png" alt="Review + create" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;When you see the notification that Validation passed, click the 
&lt;strong&gt;Create&lt;/strong&gt; button to deploy the first Virtual Machine. 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7czkgwu5tmlxfzmytzf.png" alt="deploy virtual machine" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljmp4he22k96k9jeq3k6.png" alt="deploying" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhv5ecz9d24wjpna66i50.png" alt="deployment in progress" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbcfy48a3sf24dgrxnscz.png" alt="deployment complete" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Next, create the Second virtual machine in the same virtual network following the steps listed under this heading. Make sure the second Virtual machine has a different name and a different IP address for networking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  STEP 3: TEST THE CONNECTIONS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;to view the deployed virtual machines, search for virtual machines in the search bar at the top of the page.&lt;/li&gt;
&lt;li&gt;At the listing, click &lt;strong&gt;vm1&lt;/strong&gt; to open it. 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsn4b5lfeewh231m8wv7v.png" alt="Select vm1" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;at &lt;strong&gt;vm1&lt;/strong&gt; overview page, you will notice that the status is &lt;em&gt;Running&lt;/em&gt;. Click the IP address link at the &lt;strong&gt;Public IP address&lt;/strong&gt; label to increase the timeout settings. You can check &lt;a href="https://dev.to/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m"&gt;here&lt;/a&gt; to see how it is done. This is one of the industry's best practices. However, I didn’t increase the Timeout for my virtual machine in this article.&lt;/li&gt;
&lt;li&gt;Still at the &lt;strong&gt;vm1&lt;/strong&gt; overview page, click &lt;strong&gt;Connect&lt;/strong&gt; at the top of the page.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dyhydv8owyf4fq3iv7d.png" alt="connect" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Download RDP file&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96s3cmi8hjct10pe19p9.png" alt="Download RDP file" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Open the downloaded RDP file for &lt;strong&gt;vm1&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnmg65jylpdpuh9bkf5c.png" alt="Open the downloaded RDP file" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;When prompted, click &lt;strong&gt;connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide the credentials created for &lt;strong&gt;administrator account&lt;/strong&gt; while creating &lt;strong&gt;vm1&lt;/strong&gt; virtual machine. Provide the &lt;strong&gt;password&lt;/strong&gt; and click &lt;strong&gt;ok&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sz7vy4568is6ufiz13i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sz7vy4568is6ufiz13i.png" alt="Provide the credentials" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You may receive a certificate warning prompt. Click &lt;strong&gt;continue&lt;/strong&gt; to create the connection to your deployed virtual machine.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hewm345yan78xms9196.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hewm345yan78xms9196.png" alt="certificate warning prompt" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow the same process listed above to also open &lt;strong&gt;vm2&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now that both virtual machines are open, go to &lt;strong&gt;vm1&lt;/strong&gt; interface. Click on the &lt;strong&gt;search&lt;/strong&gt; button icon at the bottom of the page.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5y0xiiz33fep7v7ooeew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5y0xiiz33fep7v7ooeew.png" alt="search button" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type &lt;em&gt;firewall&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;em&gt;windows defender firewall&lt;/em&gt; in the search results.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5wzhszhnnmv33i751e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5wzhszhnnmv33i751e9.png" alt="windows defender firewall" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;turn Windows Defender Firewall on or off&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvr686ljs5zsab2kkcwj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvr686ljs5zsab2kkcwj6.png" alt="turn Windows Defender Firewall on or off" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modify the firewall setting by clicking &lt;strong&gt;turn off windows defender firewall&lt;/strong&gt; for &lt;strong&gt;Private network settings&lt;/strong&gt; and &lt;strong&gt;Public network settings&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://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz5gho82hrevdjimxjih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz5gho82hrevdjimxjih.png" alt="Modify the firewall setting" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn075z1c2d3o2hsb57cf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn075z1c2d3o2hsb57cf2.png" alt="Modify the firewall setting II" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable the firewall for &lt;strong&gt;vm2&lt;/strong&gt; just like it was done for &lt;strong&gt;vm1&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, in &lt;strong&gt;vm1&lt;/strong&gt; click &lt;strong&gt;search&lt;/strong&gt; icon at the bottom of the page and search for &lt;strong&gt;powershell&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0toc1jcie6a2nv2aekvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0toc1jcie6a2nv2aekvt.png" alt="search for powershell" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;PowerShell&lt;/strong&gt; from the search result listing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After PowerShell completes launching, type &lt;strong&gt;ping vm2&lt;/strong&gt; into the interface.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9ye303cz1ky2rtohyzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9ye303cz1ky2rtohyzu.png" alt="Ping vm2" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you can see the following display in the image below, that means the connection was successful. I have successfully pinged &lt;strong&gt;vm2&lt;/strong&gt; from &lt;strong&gt;vm1&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsb4y4xt4t3ac7x1osj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsb4y4xt4t3ac7x1osj5.png" alt="Successful pinging" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  CONCLUSION
&lt;/h1&gt;

&lt;p&gt;In this article we have done the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a Virtual Network and a Subnet&lt;/li&gt;
&lt;li&gt;Deployed two virtual Machines onto the virtual network&lt;/li&gt;
&lt;li&gt;Configured them to allow one virtual machine to ping the other within 
that virtual network, and&lt;/li&gt;
&lt;li&gt;Tested the connection of the two virtual machines in the network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another article about virtual networks in Azure can be found &lt;a href="https://dev.to/tundeiness/how-to-deploy-a-hub-virtual-network-in-azure-14cj"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@theshubhamdhage?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Shubham Dhage&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-black-and-white-photo-of-a-bunch-of-cubes-gC_aoAjQl2Q?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>virtualnetwork</category>
      <category>virtualmachines</category>
      <category>subnet</category>
    </item>
    <item>
      <title>How to deploy a hub virtual network in Azure.</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Thu, 11 Jul 2024 21:53:32 +0000</pubDate>
      <link>https://forem.com/tundeiness/how-to-deploy-a-hub-virtual-network-in-azure-14cj</link>
      <guid>https://forem.com/tundeiness/how-to-deploy-a-hub-virtual-network-in-azure-14cj</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This article provides steps for how to create an Azure-based hub virtual network (VNet) with subnets and address space from scratch, as well as how to configure a virtual network peering. This is to allow for the virtual networks to communicate with each other securely and privately.&lt;/p&gt;

&lt;h1&gt;
  
  
  Scenario
&lt;/h1&gt;

&lt;p&gt;A hypothetical Web Application requires network isolation and segmentation in a network for secure and private communication. The virtual networks and subnets will be created in the following steps. &lt;br&gt;
Segmentation is the act of dividing the virtual network into smaller physical or logical components. This is to increase security and data protection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create hub and virtual networks and subnets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I. Creating the virtual networks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open a browser and navigate to the Azure portal and login.&lt;/li&gt;
&lt;li&gt;To create a Virtual Network, click the hamburger icon at the top left 
hand side corner of the portal.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd3q632vse9boxl6cn2a.png" alt="Click hamburger icon" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;In the displayed pane, select &lt;strong&gt;Virtual Networks&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08sijueyvntj7yr1xr4k.png" alt="Select virtual network from the sidebar" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;In the “Virtual Networks” portal pane, select &lt;strong&gt;+ Create&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1jkxpl1jo35hfknm8gj.png" alt="Select Create" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Resource group label&lt;/strong&gt; select "create new" to create a new 
resource group. Give the resource group a name and click &lt;strong&gt;Ok&lt;/strong&gt;. Keep in 
mind that this is the "parent directory" for the virtual networks to be 
created.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uxbprj3x85thslfbdnu.png" alt="Create Resource group" width="800" height="477"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai5lww2lfdgvsq223p9b.png" alt="Click Ok" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Also, give a name to the virtual network at the "virtual network name" 
label.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6y58gb6ts0bpgoxueoc.png" alt="Virtual network name" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Select a Region from the dropdown list at the &lt;strong&gt;Region&lt;/strong&gt; label. In this 
case, I selected &lt;strong&gt;East US&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F349ddqnpag81rv0455dt.png" alt="Select Region" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Next, Select the &lt;strong&gt;IP Addresses&lt;/strong&gt; tab at the top of the page.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi07lmjwgg5bpjqthcd09.png" alt="Select IP addresses tab" width="800" height="477"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  II. Create subnets for the first Virtual Network.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;At the dropdown menu displayed above the &lt;strong&gt;address space&lt;/strong&gt; box on the 
displayed page, check that the dropdown is set to &lt;strong&gt;Add IPv4 address 
space&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54g5ytg3iiuhdxmobb69.png" alt="Add IPv4 address space" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;In the address space box, change &lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/16&lt;/strong&gt; (This is usually the default IP address so you may not need to change it in this instance). &lt;/li&gt;
&lt;li&gt;locate a pen icon at the bottom corner, in the address space box (next 
to the garbage can icon). Click on this icon to edit the default &lt;strong&gt;Subnet&lt;/strong&gt; name.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2igfkx8wmlky16zkt4zl.png" alt="The address space box" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Change &lt;strong&gt;Subnet&lt;/strong&gt; name to &lt;strong&gt;frontend&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Also, change &lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/24&lt;/strong&gt; using the 
&lt;strong&gt;size&lt;/strong&gt; label. Leave all other settings as their defaults.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to close the &lt;strong&gt;Edit Subnet&lt;/strong&gt; pane. This &lt;br&gt;
completes the creation of the first Subnet. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feeg4ikzzqd0cuxqpaki9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feeg4ikzzqd0cuxqpaki9.png" alt="Edit Subnet" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The next step is to create the second subnet. As you can see, the &lt;br&gt;
&lt;strong&gt;frontend&lt;/strong&gt; subnet is listed in the box. We need to create another &lt;br&gt;
subnet in this virtual network. Again, locate the pen &lt;br&gt;
icon at the bottom (next to the garbage can icon). Click on this icon to &lt;br&gt;
add another &lt;strong&gt;Subnet&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0s1dfimph8pnkdq7wn1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0s1dfimph8pnkdq7wn1.png" alt="create second subnet" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, change the &lt;strong&gt;subnet&lt;/strong&gt; name to &lt;strong&gt;backend&lt;/strong&gt;, then change the &lt;br&gt;
&lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/24&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrjgmz9l3pm9tyw706wq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrjgmz9l3pm9tyw706wq.png" alt="second subnet" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again, leave all other settings as their defaults. Click &lt;strong&gt;Add&lt;/strong&gt; to close the &lt;strong&gt;edit subnet&lt;/strong&gt; pane. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create&lt;/strong&gt; to validate the configurations and &lt;strong&gt;Create&lt;/strong&gt; to create the first virtual network.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faemb7rzmxa7lnt8ktr9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faemb7rzmxa7lnt8ktr9z.png" alt="Review + Create" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5gqfrcziacljzcupu36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5gqfrcziacljzcupu36.png" alt="Create" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pfrkzqcpavu5il8qi6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pfrkzqcpavu5il8qi6n.png" alt="Deployment in progress" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswe46v0s4xj5kpt14id4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswe46v0s4xj5kpt14id4.png" alt="Deployment completed" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  III. Creating the second virtual networks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Creating the second virtual network is similar to creating the first 
virtual network.&lt;/li&gt;
&lt;li&gt;click the hamburger icon at the top left-hand side corner of the Azure 
portal.&lt;/li&gt;
&lt;li&gt;Again, in the displayed pane, select “Virtual Networks”.&lt;/li&gt;
&lt;li&gt;In the “Virtual Networks” portal pane, select “+ Create”.&lt;/li&gt;
&lt;li&gt;At the Resource group label select from the drop-down menu the first 
Resource group that was created.&lt;/li&gt;
&lt;li&gt;Also, give a name to the virtual network at the "virtual network name" 
label. Here the name I supplied was &lt;strong&gt;Hub-vnet&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select a similar Region from the dropdown like the first virtual network 
list at the Region label. In the previous virtual network, I selected 
&lt;strong&gt;East US&lt;/strong&gt;.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9whh672h6g5xl2yew9g.png" alt="Resource group &amp;amp; network name" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Next, Select the &lt;strong&gt;IP Addresses&lt;/strong&gt; tab at the top of the page.&lt;/li&gt;
&lt;li&gt;set the &lt;strong&gt;IPv4 address space&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/16&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IV. Create a subnet for the second Virtual Network.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the address space box, locate a pen icon at the bottom (next to the 
garbage can 
icon). &lt;/li&gt;
&lt;li&gt;Click on this icon to edit the default &lt;strong&gt;Subnet&lt;/strong&gt; name.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the flyout pane, change &lt;strong&gt;subnet purpose&lt;/strong&gt; to &lt;strong&gt;Azure Firewall&lt;/strong&gt; from &lt;br&gt;
the &lt;strong&gt;Default&lt;/strong&gt; settings. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi8snzp3kiyr9zj5fxi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi8snzp3kiyr9zj5fxi7.png" alt="subnet purpose" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change Subnet &lt;strong&gt;name&lt;/strong&gt; label to &lt;strong&gt;AzureFirewallSubnet&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb56fj9idd1mwl7pccqt1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb56fj9idd1mwl7pccqt1.png" alt="subnet name" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, change &lt;strong&gt;Subnet address range&lt;/strong&gt; to &lt;strong&gt;10.1.0.0/26&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvcpqqzgp8bxu2x80p8s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvcpqqzgp8bxu2x80p8s.png" alt="starting address" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave all other settings as their defaults.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;select the &lt;strong&gt;save&lt;/strong&gt; button to Close the &lt;strong&gt;edit Subnet&lt;/strong&gt; pane. This &lt;br&gt;
completes the creation of the Subnet for the second virtual network.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiagivj18qssxutlqz3e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiagivj18qssxutlqz3e9.png" alt="Select Save" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Review + Create&lt;/strong&gt; to validate the settings.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fval7r5tcsipcmdc9zqou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fval7r5tcsipcmdc9zqou.png" alt="Review + Create" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After validation is complete select the &lt;strong&gt;Create&lt;/strong&gt; button to create the &lt;br&gt;
second virtual network and watch the process complete deployment.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm81rxw75uci4zdutstr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm81rxw75uci4zdutstr.png" alt="Create" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgls785mfpjs39seyxhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgls785mfpjs39seyxhv.png" alt="deployment in progress" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40a6ojjli4hilxj5qv15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40a6ojjli4hilxj5qv15.png" alt="deployment complete" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Setup a peer relationship between the virtual networks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Once the deployment is complete for the second virtual network, navigate 
back to the portal. In the search bar type &lt;strong&gt;resource groups&lt;/strong&gt; and 
select &lt;strong&gt;Resource Groups&lt;/strong&gt; from the results. &lt;/li&gt;
&lt;li&gt;Select the required &lt;strong&gt;Resource group&lt;/strong&gt; in the main pane and confirm that 
both virtual networks have been deployed.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxsm8mh3nh232758y8ob.png" alt="The virtual networks" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Setting up a peer relationship between the two virtual networks aims to
allow traffic to flow in both directions between the &lt;strong&gt;app-vnet&lt;/strong&gt; and 
&lt;strong&gt;hub-vnet&lt;/strong&gt; virtual networks.&lt;/li&gt;
&lt;li&gt;In the Portal and the resource group view, Select the first virtual 
network created from the table. In my case it was the &lt;strong&gt;app-vnet&lt;/strong&gt; 
virtual network.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukav9keo90l3qehoz2u5.png" alt="app-vnet virtual network" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;app-vnet&lt;/strong&gt; overview page select &lt;strong&gt;settings&lt;/strong&gt; the left-hand 
sidebar of the portal.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduv4zyq1v1tmls4ior3f.png" alt="settings" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;Scroll down and select &lt;strong&gt;peerings&lt;/strong&gt; to add peering.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfjsm15e1ekqz1ytk367.png" alt="peerings" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;app-vnet&lt;/strong&gt; peerings pane, Select &lt;strong&gt;+ Add&lt;/strong&gt;. 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdlkolsfg4ac1a9ouhak.png" alt="+ Add" width="800" height="477"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill out under the &lt;strong&gt;Remote virtual network summary&lt;/strong&gt; heading supply a &lt;br&gt;
name for &lt;strong&gt;Peering link name&lt;/strong&gt; with &lt;strong&gt;app-vnet-to-hub&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpftykjagjy9ibilysdo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpftykjagjy9ibilysdo.png" alt="Peering link name" width="800" height="477"&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the first virtual network from the drop-down.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F477yi3t4fxeoso0ss5x2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F477yi3t4fxeoso0ss5x2.png" alt="hub-vnet virtual network" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll the page down to the &lt;strong&gt;Local virtual network summary&lt;/strong&gt; heading. &lt;br&gt;
Fill out the &lt;strong&gt;Peering link name&lt;/strong&gt; with &lt;strong&gt;hub-to-app-vnet&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7v9teuevs7e20tb6iue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7v9teuevs7e20tb6iue.png" alt="hub-to-app-vnet Peering link name" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave all other settings as their defaults. Select &lt;strong&gt;Add&lt;/strong&gt; to create the &lt;br&gt;
virtual network peering.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxue2boz40lpkh9lz3bns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxue2boz40lpkh9lz3bns.png" alt="Add peering button" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You should see a notification at the top right of the page that says &lt;br&gt;
&lt;strong&gt;Adding virtual network peering&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6lgqrpbp24i8b2jmljx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6lgqrpbp24i8b2jmljx.png" alt="Adding virtual network peering" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the process completes, and after the configuration updates, &lt;br&gt;
this validates that the Peering status is set to &lt;strong&gt;Connected&lt;/strong&gt;. &lt;br&gt;
(you may have to refresh the page to see the updated status)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4almsndpk5gei9qz1qb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4almsndpk5gei9qz1qb1.png" alt="Perring status is connected" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic28jnlxrvujc175e1em.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic28jnlxrvujc175e1em.png" alt="Deployment succeded" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion.
&lt;/h1&gt;

&lt;p&gt;This article explains how to provide network isolation and segmentation for a web application, in an Azure virtual network with subnets with address space. We have learned the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating virtual networks&lt;/li&gt;
&lt;li&gt;Creating subnets within the virtual networks, and&lt;/li&gt;
&lt;li&gt;Configuring virtual networking peering which means allowing two or more 
virtual networks to connect and appear as one for connectivity purposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's been great sharing my journey into cloud engineering and I hope to see you soon on the other articles.&lt;/p&gt;

&lt;p&gt;Cover Image by &lt;a href="https://unsplash.com/@alinnnaaaa?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Alina Grubnyak&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/low-angle-photography-of-metal-structure-ZiQkhI7417A?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>virtualnetwork</category>
      <category>segmentation</category>
      <category>peering</category>
    </item>
    <item>
      <title>Setting Up a Linux Virtual Machine with Azure &amp; Nginx on a MacOs using Password Authentication (Part I)</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Wed, 29 May 2024 03:41:40 +0000</pubDate>
      <link>https://forem.com/tundeiness/setting-up-a-linux-virtual-machine-with-azure-on-a-macos-using-password-authentication-part-i-bkh</link>
      <guid>https://forem.com/tundeiness/setting-up-a-linux-virtual-machine-with-azure-on-a-macos-using-password-authentication-part-i-bkh</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This is the first installment of a two-part post focused on creating a Linux virtual machine with Azure. If you have been following my journey into cloud development, I have written about setting up a Windows virtual machine in Azure too. &lt;/p&gt;

&lt;p&gt;Two authentication approaches can be used to set up the Linux virtual machine. This post will focus on one which is the &lt;strong&gt;password authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I have suggested in previous posts about setting up virtual machines, having a Microsoft and an Azure account is a prerequisite for following the steps in this post. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a Linux Virtual Machine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Log in to Azure portal&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61wx4ccx53hpcecds79c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61wx4ccx53hpcecds79c.png" alt="Azure Portal"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search &lt;strong&gt;Virtual Machine&lt;/strong&gt; using the search bar at the top of the page.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;+ Create&lt;/strong&gt; icon at the top of the page or click the &lt;strong&gt;Create&lt;/strong&gt; button at the bottom to create a virtual machine.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxxhg4gerkmjs3ciaux1.png" alt="create buttons"&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsazwupisohyra6pbxyp.png" alt="Azure Virtual Machine"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Basics Tab
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Project details&lt;/strong&gt;, name the &lt;strong&gt;Resource Group&lt;/strong&gt; or choose a &lt;strong&gt;Resource Group&lt;/strong&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnttr7bnhij2raaba8mu.png" alt="Project details"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Next, give the Virtual Machine a name.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;At the &lt;strong&gt;Region&lt;/strong&gt; label, select an appropriate label.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhcor73us518yqgymvj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhcor73us518yqgymvj4.png" alt="Region"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the &lt;strong&gt;Availability Options&lt;/strong&gt; label, select &lt;strong&gt;Availability zone&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;At the &lt;strong&gt;Availability zone&lt;/strong&gt; label, select zone 2 (I selected zone 2 in mine. However it may be different in yours).&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security type&lt;/strong&gt; label should be set at &lt;strong&gt;Trusted launch Virtual Machines&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Image&lt;/strong&gt; label should be set to &lt;strong&gt;Ubuntu Server 22.04 LTS x64 Gen2&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VM Architecture&lt;/strong&gt; should be set to &lt;strong&gt;x64&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2crl7oz9jawebgmarh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2crl7oz9jawebgmarh5.png" alt="VM Architecture"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not tick &lt;strong&gt;Run with Azure spot discount&lt;/strong&gt; box&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8j0kwegenfucfw7f38n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8j0kwegenfucfw7f38n.png" alt="Run with Azure spot discount"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set &lt;strong&gt;Size&lt;/strong&gt; to &lt;strong&gt;Standard_B2as_V2..&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdl20mgj0nlet931ql746.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdl20mgj0nlet931ql746.png" alt="size"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not tick &lt;strong&gt;Enable Hibernation&lt;/strong&gt; box as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Administrator Account&lt;/strong&gt; heading, Set &lt;strong&gt;Authentication type&lt;/strong&gt; to &lt;strong&gt;Password&lt;/strong&gt;. I will handle &lt;strong&gt;SSH&lt;/strong&gt; Authentication in part two of this post.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;Username&lt;/strong&gt;, &lt;strong&gt;Password&lt;/strong&gt; and &lt;strong&gt;confirm Password&lt;/strong&gt; subsequently.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;At &lt;strong&gt;Public inbound ports&lt;/strong&gt; label, select &lt;strong&gt;Allow selected ports&lt;/strong&gt;, and&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp543h6fbo9h39ob0s7iy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp543h6fbo9h39ob0s7iy.png" alt="Public inbound ports"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;for the &lt;strong&gt;Select inbound ports&lt;/strong&gt; label, at the dropdown, tick &lt;strong&gt;HTTP (80)&lt;/strong&gt; and &lt;strong&gt;SSH (22)&lt;/strong&gt;. &lt;strong&gt;HTTP&lt;/strong&gt; was selected as part of the ports because I will access the server via a browser at some point in this post.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;h3&gt;
  
  
  Monitoring  Tab
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Monitoring&lt;/strong&gt; at the top of the page
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p3dniy30pvhoihyrerb.png" alt="Monitoring"&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Disable&lt;/strong&gt; to disable diagnostics. This is to prevent third-party access.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl48b1lq8g1g13kalnct0.png" alt="Disable"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tags  Tab
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Under the Tag Tab it is ideal that name and value are created for the resources. Give the resource a name and value In the annotated part of the image below. They help to categorize resources. Both the name and value are called Tags.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Review + create&lt;/strong&gt; tab or the &lt;strong&gt;Review + create&lt;/strong&gt; button at the bottom of the page.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kn0eso6nxgmcxvpdegm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kn0eso6nxgmcxvpdegm.png" alt="Review + create"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Create&lt;/strong&gt; button to complete the configuration process.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9qra7sr5p87eqvgingy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9qra7sr5p87eqvgingy.png" alt="Create"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yppaxvuvkxtlch1da7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yppaxvuvkxtlch1da7n.png" alt="initialising deployment"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After the complete deployment, click the &lt;strong&gt;go to resources&lt;/strong&gt; button. This completes the creation of the virtual machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The next thing to do is to increase IP address timeout to prevent untimely shutdown. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the Virtual Machine overview page, click on the IP address at the &lt;strong&gt;IP address label&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwdr2b22zn64tv4iv79c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwdr2b22zn64tv4iv79c.png" alt="IP address"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This re-directs to an IP configuration page. While on the page move the idle timeout slide to the right hand of the page.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;Save&lt;/strong&gt; icon at the top of the page.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptxoxr8ou2kost7od3f8.png" alt="Save"&gt;
&lt;/li&gt;
&lt;li&gt;Close this page by clicking the close icon at the top right. 
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdk055y359gs0azh2xz6r.png" alt="close icon"&gt;
&lt;/li&gt;
&lt;li&gt;Copy the IP address at the Virtual machine interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Connect to the Linux Virtual Machine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To connect to the Linux Virtual Machine, Open the terminal.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type in &lt;strong&gt;ssh username@IP address&lt;/strong&gt; at the terminal. The Username used here was created while providing information for the Administrator account in the above steps, while the &lt;strong&gt;IP address&lt;/strong&gt; was copied when the deployment process was complete. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmytibz23eg5shr77pm4o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmytibz23eg5shr77pm4o.png" alt="terminal"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The prompt asks if you want to continue, type &lt;strong&gt;yes&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Provide the required login password when prompted again.&lt;/li&gt;
&lt;li&gt;Then the prompt changes to a combination of the &lt;strong&gt;username@virtual_Machine_Name&lt;/strong&gt;. This is evidence of a connection to the Linux Virtual Machine.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Step 3: Install Nginx Server in the Virtual Machine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The next step is installing a &lt;strong&gt;Nginx&lt;/strong&gt; server in the Linux Virtual machine. To do this, log in as the &lt;strong&gt;root&lt;/strong&gt; in the Virtual Machine.&lt;br&gt;
At the terminal type in &lt;strong&gt;sudo su&lt;/strong&gt; to change to &lt;strong&gt;root&lt;/strong&gt; user.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6o3g58hmiwb4okviixq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6o3g58hmiwb4okviixq.png" alt="root user"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the next terminal/prompt type &lt;strong&gt;apt install nginx&lt;/strong&gt; to install ngix.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cfpswkilkreoa30xxtq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cfpswkilkreoa30xxtq.png" alt="Nginx"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;yes&lt;/strong&gt; at the next prompt. This completes the Nginx installation process.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2gw3pyc1ir4tisrkt8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2gw3pyc1ir4tisrkt8m.png" alt="another prompt"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Testing the Linux virtual Machine via browser
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To test if everything works perfectly, copy the Linux Virtual Machine &lt;strong&gt;IP address&lt;/strong&gt; from the Azure portal and paste it into a browser. If you can see the image below in your browser, it means everything is working well.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This concludes my post on creating a Linux Virtual machine in Azure using Password Authentication. &lt;br&gt;
It is advised that the resource created in the Azure portal be deleted when not used. &lt;br&gt;
In the next post, I will write about creating a Linux Virtual machine in Azure using  &lt;strong&gt;SSH&lt;/strong&gt; Authentication.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>virtualmachine</category>
      <category>cloud</category>
      <category>linux</category>
    </item>
    <item>
      <title>Prototyping different storage scenarios for an IT department in Azure Portal.</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Sun, 26 May 2024 15:38:51 +0000</pubDate>
      <link>https://forem.com/tundeiness/prototyping-different-storage-scenarios-for-an-it-department-in-azure-portal-20mg</link>
      <guid>https://forem.com/tundeiness/prototyping-different-storage-scenarios-for-an-it-department-in-azure-portal-20mg</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In this post, I'll walk you through the process of providing Storage for a fictitious IT department, in the Azure portal. For the department, the data isn’t important enough to back up and doesn’t need to be restored if the data is overwritten or removed. &lt;/p&gt;

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

&lt;p&gt;Before we start, you'll need a Microsoft Account and an Azure free trial account. I covered opening a free trial account &lt;a href="https://dev.to/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Creating a resource group
&lt;/h3&gt;

&lt;p&gt;Go to the Azure Portal Dashboard, and at the search bar - at the top level of the page - search and select Resource groups. This navigates to another page. While on that page select &lt;strong&gt;+ create&lt;/strong&gt;. On the next page, you are required to name your resource group. Go ahead and name your resource group. Then select a region. At the bottom of the page select the &lt;strong&gt;Review + create&lt;/strong&gt; button to validate the resource group.&lt;br&gt;
Select the 'create' button to deploy the resource group. The image below shows the created resource group.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 2: Creating and deploying a storage account
&lt;/h3&gt;

&lt;p&gt;On the page of the resource group and the search bar - at the top level of the page - search and select Storage Accounts. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnibcf4jfrrby84hp8vl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnibcf4jfrrby84hp8vl.png" alt="search bar step 1" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This navigates to another page. While on that page select &lt;strong&gt;+ create&lt;/strong&gt; at the upper left of the page or click on the &lt;strong&gt;create storage account&lt;/strong&gt; button on that page.&lt;/p&gt;

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

&lt;p&gt;This next page has 6 Tabs namely &lt;strong&gt;Basics&lt;/strong&gt;, &lt;strong&gt;Advanced&lt;/strong&gt;, &lt;strong&gt;Networking&lt;/strong&gt;, &lt;strong&gt;Data protection&lt;/strong&gt;, &lt;strong&gt;Encryption&lt;/strong&gt;, &lt;strong&gt;Tags&lt;/strong&gt; and &lt;strong&gt;Review + create&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;At the &lt;strong&gt;Basics&lt;/strong&gt; tab, select the &lt;strong&gt;Resource group&lt;/strong&gt; label under the &lt;strong&gt;project details&lt;/strong&gt; section and select the Resource group created in Step 1. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef2tzhrx52yvbruqu7tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef2tzhrx52yvbruqu7tk.png" alt="resource group" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, Under the &lt;strong&gt;Instance details&lt;/strong&gt; section, give the storage account a unique name, select the (US)East US option at the &lt;strong&gt;Region&lt;/strong&gt; label, and for the &lt;strong&gt;Performance&lt;/strong&gt; label, select the &lt;strong&gt;standard&lt;/strong&gt; radio button. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxh8pw8qq8k5fxnkrhd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxh8pw8qq8k5fxnkrhd4.png" alt="Storage name" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Accept the default &lt;strong&gt;Redundancy&lt;/strong&gt; label option as shown. Afterward, select the &lt;strong&gt;Review + create&lt;/strong&gt; button on the page and subsequently the "Create" button.&lt;/p&gt;

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

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

&lt;p&gt;Wait for the storage account to &lt;strong&gt;deploy&lt;/strong&gt;. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa08ffzzqdzpkpfufgdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa08ffzzqdzpkpfufgdf.png" alt="deployment in progress" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz3flavar0eibmcc77hu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz3flavar0eibmcc77hu.png" alt="deployment in progress II" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
After successfully deploying, click the &lt;strong&gt;go to resource&lt;/strong&gt; button.&lt;br&gt;
 &lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fjwzrlcgv7b0w9y162x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fjwzrlcgv7b0w9y162x.png" alt="go to resources" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure settings in the Storage Account.
&lt;/h3&gt;

&lt;h4&gt;
  
  
  I: Data in this storage account does not need to be highly available.
&lt;/h4&gt;

&lt;p&gt;We want to configure this storage account with the most basic settings. We don't have to worry if data isn't highly available. To do this, select &lt;strong&gt;Data Management&lt;/strong&gt; at the left-hand side of the page and the &lt;strong&gt;Redundancy&lt;/strong&gt; blade.&lt;/p&gt;

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

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

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

&lt;p&gt;Select the &lt;strong&gt;Locally redundant Storage&lt;/strong&gt; (LRS) option from the &lt;strong&gt;Redundancy&lt;/strong&gt; label. The reason for this is that "the data isn’t important enough to back up and doesn’t need to be restored if the data is overwritten or removed". As a result, High availability isn't required. This means the redundancy can take the least available option which is &lt;strong&gt;Locally redundant Storage&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08dvekrijfwshs8z17lp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08dvekrijfwshs8z17lp.png" alt="Locally redundant Storage" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
Click &lt;strong&gt;save&lt;/strong&gt; at the top of the page.&lt;/p&gt;

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

&lt;p&gt;Previously, 2 locations may have shown up on the map displayed on this page. However, since we selected the &lt;strong&gt;Locally redundant Storage&lt;/strong&gt; (LRS) option from the &lt;strong&gt;Redundancy&lt;/strong&gt; label, only one location will be displayed on the map. Refresh the page if this isn't displaying.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  II: Storage account should only accept requests from secure connections.
&lt;/h4&gt;

&lt;p&gt;The next configuration to set is to make the Storage account only accept requests from secure connections. To do this, follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate &lt;strong&gt;settings&lt;/strong&gt; at the left-hand side of the page, and select 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7226uwc4orpafc2t6jn.png" alt="Settings" width="800" height="478"&gt;
the  &lt;strong&gt;Configuration&lt;/strong&gt; blade. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;At the page displayed, confirm that &lt;strong&gt;Secure Transfer required&lt;/strong&gt; is &lt;strong&gt;Enabled&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fosxky3ejh475i76vlu.png" alt="Secure Transfer" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  III: Storage account should use a TLS version.
&lt;/h4&gt;

&lt;p&gt;For the Storage account to use a TLS version, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go to &lt;strong&gt;settings&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7226uwc4orpafc2t6jn.png" alt="Settings" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;select &lt;strong&gt;configuration&lt;/strong&gt; blade,
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguw4j3jqpd2wk2m1nk17.png" alt="Configuration blade" width="800" height="478"&gt;
-Then, set &lt;strong&gt;Minimal TLS Version&lt;/strong&gt; to &lt;strong&gt;version 1.2&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h4&gt;
  
  
  IV: Request to the storage account is disabled until needed
&lt;/h4&gt;

&lt;p&gt;For disabling requests to the storage account until required,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Settings&lt;/strong&gt;, then
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7226uwc4orpafc2t6jn.png" alt="Settings" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Configuration&lt;/strong&gt; blade.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguw4j3jqpd2wk2m1nk17.png" alt="Configuration blade" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Allow Storage Account key access&lt;/strong&gt; label, select the &lt;strong&gt;Disabled&lt;/strong&gt; radio button.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99ll1hgr2qlteiyncpwg.png" alt="Allow Storage Account key access" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Save&lt;/strong&gt; icon at the top level of the page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  V: Allow Storage Account to permit public access from all Networks.
&lt;/h4&gt;

&lt;p&gt;For the last configuration in this task which is to permit public access from all Networks, follow the steps listed below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the left-hand side of the storage account page, select &lt;strong&gt;Security + networking&lt;/strong&gt; 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gue737bcm0bluhdjoiv.png" alt="Security + networking" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Networking&lt;/strong&gt; blade
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyftivd7mc61uh9wlbnal.png" alt="Networking" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;set &lt;strong&gt;Public network access&lt;/strong&gt; to &lt;strong&gt;Enabled from all network&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;Save&lt;/strong&gt; icon of the page to save the changes. &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;To avoid unnecessary charges, delete your resource group if you will not be using it. You can do this from the Azure portal by navigating to your Resource group and clicking the "delete resource group" button.&lt;br&gt;
In this post, we successfully created a Resource group which is a container for our storage account. We adjusted some basic settings for the storage account and saved these settings. Remember to monitor your usage to stay within the free tier limits and delete resources when they are no longer needed. Stay tuned for more posts on cloud development with Azure!&lt;/p&gt;

&lt;p&gt;Cover Image by &lt;a href="https://unsplash.com/@markusspiske?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Markus Spiske&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/black-and-gray-laptop-computer-turned-on-FXFz-sW0uwo?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>storage</category>
    </item>
    <item>
      <title>How to deploy a Windows Server (with IIS web server role) in Azure Portal on MacOS</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Sun, 26 May 2024 15:38:02 +0000</pubDate>
      <link>https://forem.com/tundeiness/how-to-deploy-a-windows-server-in-azure-portal-on-macos-4gjc</link>
      <guid>https://forem.com/tundeiness/how-to-deploy-a-windows-server-in-azure-portal-on-macos-4gjc</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This post is about deploying a Windows Server in Azure Portal on MacOS. Previously, I have written about deploying a Windows 11 OS in the Azure portal &lt;a href="https://dev.to/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m"&gt;here&lt;/a&gt;. Before you start following this guide, get a Microsoft account and an Azure account. If you have followed this &lt;a href="https://dev.to/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m"&gt;post&lt;/a&gt;, deploying a Windows Server in Azure Portal will be a walk in the park. Let's get to it!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a Virtual Machine.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Access the Azure portal As shown in the image below.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F673rcakn5tao059hs2eq.png" alt="Azure portal" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Search for "virtual machines" in the search bar at the top level of the page. Select &lt;strong&gt;virtual machines&lt;/strong&gt; from the list of results.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select either the &lt;strong&gt;+ Create&lt;/strong&gt; option at the top left side of the page displayed, or click the &lt;strong&gt;Create&lt;/strong&gt; button with a dropdown arrow at the bottom of the page. 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkp9evsjb96cy3yr0qg68.png" alt="create" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Azure virtual machine&lt;/strong&gt; from the list, 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsacclshddpa0wr7ao5ek.png" alt="list" width="800" height="478"&gt;
and then it will navigate to the "create a virtual machine" configuration page.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4obw1pvddy6eot74w8u0.png" alt="create a virtual machine" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Basics Tab
&lt;/h4&gt;

&lt;p&gt;Under the &lt;strong&gt;Basics Tab&lt;/strong&gt; supply information for the Windows Server virtual machine as follows:&lt;/p&gt;

&lt;h5&gt;
  
  
  Project Details
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;By now the &lt;strong&gt;Subscription&lt;/strong&gt; label under &lt;strong&gt;project details&lt;/strong&gt; should have a name, otherwise give &lt;strong&gt;Subscription&lt;/strong&gt; a title.
&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Resource group label&lt;/strong&gt; select &lt;strong&gt;Create new&lt;/strong&gt; to either create a new resource group or use an existing group from the list of resource group earlier created.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezjjxbdzofbcu6lutpsu.png" alt="Resource group label" width="800" height="478"&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkutfn6mzdkjlzayk1odz.png" alt="naming a resource group" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;Click the "ok" button to accept the given name.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q7wnm3w23foz9sfl6mr.png" alt="Accept name" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Instance Details
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;At the Instance Details subhead, provide a name for the virtual machine at the &lt;strong&gt;Virtual machine name&lt;/strong&gt; label.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;For the &lt;strong&gt;Region&lt;/strong&gt; label select a suitable datacenter region.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;For the &lt;strong&gt;Availability options&lt;/strong&gt; label, select &lt;strong&gt;Availability zone&lt;/strong&gt; as the preferred option. This permits the selection of data center zone(s) in the preceding label. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Next, move to the &lt;strong&gt;Availability zone&lt;/strong&gt;. This label allows for selecting multiple zones, but for the post, I selected only one zone. Selecting multiple zones means there is a need for a load balancer.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;For the &lt;strong&gt;Security type&lt;/strong&gt; label, select &lt;strong&gt;Trusted launch virtual machinnes&lt;/strong&gt; option.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;At the &lt;strong&gt;Image&lt;/strong&gt; label, select the preferred Windows server option from the dropdown list. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7kq7v6j4bse48b3n4b1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7kq7v6j4bse48b3n4b1c.png" alt="Windows Server data center edition" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;VM architecture&lt;/strong&gt; should be kept at &lt;strong&gt;x64&lt;/strong&gt;, and keep &lt;strong&gt;Run with Azure Spot discount&lt;/strong&gt; unticked.&lt;/li&gt;
&lt;li&gt;At the &lt;strong&gt;Size&lt;/strong&gt; label, select &lt;strong&gt;Standard_B1s - 1 vcpu, 1 GiB memory&lt;/strong&gt; size and do not tick the &lt;strong&gt;Enable Hibernationn&lt;/strong&gt; box.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h5&gt;
  
  
  Administrator account
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;Username&lt;/strong&gt; for the Windows Server and a &lt;strong&gt;Password&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;h5&gt;
  
  
  Inbound port rules
&lt;/h5&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Allow selected ports&lt;/strong&gt; at the &lt;strong&gt;Public inbound ports&lt;/strong&gt; options
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufcfhu2hsuyyb021w0kl.png" alt="Allow selected ports" width="800" height="478"&gt;
&lt;/li&gt;
&lt;li&gt;From the &lt;strong&gt;Select inbound ports&lt;/strong&gt; drop down list, select both &lt;strong&gt;HTTP (80)&lt;/strong&gt; and &lt;strong&gt;RDP (3389)&lt;/strong&gt; as the ports of communication. 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2qtu9kvw8a0zv9wpcv4.png" alt="Select inbound ports" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Monitoring Tab
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pdmcgl300ep5p0ovvyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3pdmcgl300ep5p0ovvyn.png" alt="Monitoring Tab" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
Under the &lt;strong&gt;Monitoring Tab&lt;/strong&gt; it is desirable to disable Boot diagnostics. &lt;/p&gt;

&lt;h5&gt;
  
  
  Diagnostics
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;At the &lt;strong&gt;Boot Diagnostics&lt;/strong&gt; label, set it to &lt;strong&gt;Disable&lt;/strong&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowm1n8dc3itmzlk34tda.png" alt="Boot Diagnostics" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tag Tab
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7xkrdsez30nxe3skh4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7xkrdsez30nxe3skh4e.png" alt="Tag Tab" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
Under the &lt;strong&gt;Tag Tab&lt;/strong&gt; it is ideal that name and value are created for the resources. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At the annotated part of the image below, give the resource a name and value. Both the name and value are called &lt;strong&gt;Tags&lt;/strong&gt; and they help to categorize resources.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m0eo3x3h48zeh09o1l9.png" alt="Name/value pair" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The next step is to click the &lt;strong&gt;Review + Create&lt;/strong&gt; button at the bottom of the page or the &lt;strong&gt;Review + Create&lt;/strong&gt; tab at the top.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6arimmku81odzxszimgz.png" alt="Review + Create" width="800" height="478"&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;When it has completed validation, there is a pale green banner and a green check mark at the top of the page saying "Validation passed"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;click the &lt;strong&gt;create&lt;/strong&gt; button at the bottom of the page to initialize deployment.&lt;/li&gt;
&lt;/ul&gt;

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

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

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

&lt;ul&gt;
&lt;li&gt;When the deployment is completed there is a notification at the top page  that says "Your deployment is complete"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;click the &lt;strong&gt;Go to resource&lt;/strong&gt; button to go to the newly created resource page.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;At the right-hand side of the page, look for the "Public IP address" label, and click on the IP address. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;This navigates to a page to increase the idle timeout from 4 minutes to the maximum (usually 30 minutes)&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;Click on the &lt;strong&gt;save&lt;/strong&gt; icon at the top of the page.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;you can then close the IP configuration page after making these changes by clicking the &lt;strong&gt;close&lt;/strong&gt; button at the top right part of the page.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg6e7dkitnqrnpy78jc9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg6e7dkitnqrnpy78jc9.png" alt="close page" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Back at the Virtual Machine overview page, select &lt;strong&gt;Connect&lt;/strong&gt; at the top level part of the page or the left-hand side of the page. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bonka8fs3gvu7gjuk1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bonka8fs3gvu7gjuk1v.png" alt="Connect" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
This directs to the connect page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Select&lt;/strong&gt; button at the local machine card with the heading "Most common". &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dc3vl9gzmknnvgsojlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dc3vl9gzmknnvgsojlw.png" alt="Select" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On clicking &lt;strong&gt;select&lt;/strong&gt;, several processes are triggered to validate prerequisites before configuration. Until there is a green check mark and &lt;br&gt;
"configured" at the annotated arrow in the image below, the next step can't start. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Once the processes are completed and there are green check marks and "configured" at the annotated locations in the image above, click on the  &lt;strong&gt;Download RDP file&lt;/strong&gt; as shown below.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;This downloads the RDP file required for powering the Windows server Virtual machine that has been created. Check your default download location in your local machine for this file.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Launch the Virtual Machine.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To check if the Windows Server virtual machine works, log in using previously created credentials at the &lt;strong&gt;Administrator Account&lt;/strong&gt; section above. Before signing in, Mac users need to go to the App Store, download and install the Microsoft Remote Desktop app.  After installing the Microsoft Remote Desktop app, double-click the downloaded RDP file. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Supply the password as required.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;continue&lt;/strong&gt; at the next prompt&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;If the correct login credentials are submitted there will be a Windows Server starting page like below.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;This automatically launches the &lt;strong&gt;Server manager&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffksg3rov4wpa02t5tz61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffksg3rov4wpa02t5tz61.png" alt="Server Manager" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is followed by a setup page below. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fognc6xezvn2thcs37qv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fognc6xezvn2thcs37qv8.png" alt="server manager setup page" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;There is a need to also install a &lt;strong&gt;Windows server iis role&lt;/strong&gt; in the server and there are two ways to do this. The first approach is using the server manager setup and the second one is via the terminal. In this post, I will be using the terminal. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Close the server setup page and search &lt;strong&gt;PowerShell&lt;/strong&gt; at the hand lens icon at the bottom of the virtual machine page. Type "PowerShell" to search.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;-Right-click to launch the PowerShell terminal as an Administrator &lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxid236ub4nkdzql6ur6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxid236ub4nkdzql6ur6.png" alt="powershell launching" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;type in the following command in the PowerShell terminal:
&lt;strong&gt;install-WindowsFeature -name Web-Server -IncludeManagementTools&lt;/strong&gt;
This creates the &lt;strong&gt;iis&lt;/strong&gt; role in this server. &lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;When the role installation is complete, go to the Azure portal Windows Server Virtual Machine page, copy the &lt;strong&gt;Public IP address&lt;/strong&gt;, and paste it on the browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgli80703foe3tm31azsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgli80703foe3tm31azsa.png" alt="Public IP address" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if the virtual machine is properly configured following these instructions, you should see something like below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6o3sxxmma3550qaheuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu6o3sxxmma3550qaheuf.png" alt="welcome page" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;With all the steps listed above, I have created a Windows Server virtual machine in an Azure portal. It is advised that the resource group in the Azure portal be deleted. However, before deleting the resource group in the Azure portal, there is a need to shut down the Windows Server virtual machine on the MacOS. &lt;br&gt;
This post describes a high-level approach to creating a Windows Server virtual machine on a MacOS computer. More posts on cloud DevOps with Azure will be coming up during my journey into cloud development.&lt;/p&gt;

&lt;p&gt;cover image by &lt;a href="https://unsplash.com/@tvick?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Taylor Vick&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/cable-network-M5tzZtFCOfs?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>winndowsserver</category>
      <category>azure</category>
    </item>
    <item>
      <title>Setting Up a Windows 11 Virtual Machine with Azure on a MacOs</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Sat, 18 May 2024 02:18:48 +0000</pubDate>
      <link>https://forem.com/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m</link>
      <guid>https://forem.com/tundeiness/setting-up-a-windows-11-virtual-machine-with-azure-on-a-macos-88m</guid>
      <description>&lt;p&gt;In this post, I'd like to share how I created a "resource" in Azure portal. By definition, a resource in an Azure portal is a service required to create a product or solution. In Microsoft Azure, everything needed for a business solution is colloquially called "resource". In this case, the resource that I will be creating in Microsoft Azure Portal is called a "virtual machine". Virtual machines are scalable computing resources that can be used to deploy applications on the cloud. VMs -short for virtual machines - are listed under &lt;a href="https://azure.microsoft.com/en-us/products/virtual-machines#:~:text=Azure%20Virtual%20Machines%20offers%20a,high%20availability%20for%20your%20applications"&gt;Microsoft Azure's&lt;/a&gt; Infrastructure as a Service (IaaS) category. &lt;/p&gt;

&lt;p&gt;The first step in creating a virtual machine is getting a Microsoft account. Once you have a Microsoft account click this link to create an &lt;a href="https://azure.microsoft.com/en-us/"&gt;Azure free trial account&lt;/a&gt;. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flygwngql3yfpqdpuhla2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flygwngql3yfpqdpuhla2.png" alt="Try Azure for free" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
Click on the "Try Azure for free" button. This takes you to the page below. &lt;/p&gt;

&lt;p&gt;Scroll and click "sign up" for the Azure free account card. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9507ayezfkb6k4ev2cri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9507ayezfkb6k4ev2cri.png" alt="Try Azure" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ozwfctgj4ildnb0x7yi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ozwfctgj4ildnb0x7yi.png" alt="Sign up for a free Azure account" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next page will ask for your Microsoft login details. On the next page, fill in the required information. You need to enter your credit card details at some point during the registration. Note that only $1 is deducted initially for the 30-day free Azure service and after 30 days, Microsoft begins to charge for the services used. &lt;/p&gt;

&lt;p&gt;This Free Azure account is designed to offer customers free tier services to test new applications and evaluate the benefits of cloud computing. When you start using Azure with a free account, you get a $200 credit to spend in the first 30 days after you sign up. &lt;/p&gt;

&lt;p&gt;At the Azure platform (after completing the Registration ) like the image below:&lt;/p&gt;

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

&lt;p&gt;There are three options available to create a virtual machine resource. The first approach is the search bar labeled "1" in the image above. At the search bar, you can search for "virtual machine", and from the dropdown, select "virtual machine" from the list. The second approach is labeled as "2" and in this option, you can select the virtual machines icon to create a virtual machine. The third option is to click the "Create a resource" icon. Either way allows for the creation of a virtual machine. &lt;/p&gt;

&lt;p&gt;After selecting the "Virtual Machines" icon and the "create" button &lt;/p&gt;

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

&lt;p&gt;that appears on the next page displayed, select "Azure Virtual Machine" from the list. &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Basics Tab
&lt;/h2&gt;

&lt;p&gt;This takes us to the "Create a Virtual Machine" page below:&lt;/p&gt;

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

&lt;p&gt;There are 8 tabs at the top level of that page, and the first tab of concern is "Basics" annotated in a red rectangle.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Project details
&lt;/h3&gt;

&lt;p&gt;Below the top-level tab is the "Project details" section which consists of "Subscription" and "Resource group". The "Subscription" gives you the admin privilege to create resources. "Resource group" is a container for grouping similar items in Azure. In Azure, there will be a need for a container to group similar things. Give the "Subscriptions" and the "Resource group" labels names. I gave mine "Azure subscription 1" and "AzureRG" as shown in the above image. &lt;br&gt;
For the "Resource group" label select "Create new" to give it a name. &lt;/p&gt;

&lt;h3&gt;
  
  
  Instance details
&lt;/h3&gt;

&lt;p&gt;The next section of concern is the "Instance details" labeled "1" in the below image:&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Virtual machine name
&lt;/h4&gt;

&lt;p&gt;Under this section there are subheadings like:&lt;br&gt;
"Virtual machine name", "Region", "Availability Options", and "Availability zone" just to mention a few. &lt;/p&gt;

&lt;p&gt;The Virtual machine is just like a computer in the cloud, and normally your physical computers have a name. So in this section, give the virtual machine a name. I named mine "BusinessVM" as shown in the image below:&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Region
&lt;/h4&gt;

&lt;p&gt;Next, move to the "Region" label. "Region" describes a geographical location where data centers are located. The Region selection should be done based on the understanding of the availability of support and other factors.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Availability options
&lt;/h4&gt;

&lt;p&gt;The next label is the "availability options".&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn3lz9um96wiqebt3xe5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn3lz9um96wiqebt3xe5.png" alt="availability options without selection " width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
This infers that the user should set up alternatives per adventure if something goes wrong. As you can see in the image below, I chose the "Availability zone" option.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fromsa6yis2re0oeul2x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fromsa6yis2re0oeul2x3.png" alt="availability options" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Availability zone
&lt;/h4&gt;

&lt;p&gt;After "availability options" the next label is "Availability zone". This is a drop-down list of available zones for users to select the number of data centers to use. Availability zones in Microsoft Azure are made up of physical &amp;amp; logical data centers that have been segregated. This drop-down list is made up of zone 1, zone 2, and zone 3 and they are interconnected with highspeed internet network, cooling, and power. I selected zone 1 and zone 3 in the image below. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2a9piszkaid5b57kn0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2a9piszkaid5b57kn0y.png" alt="Availability zone" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is possible to select all three zones, but my preferred size (discussed in 3 labels below ) dictates the number of zones I can use in my virtual machine. Note also that the number of zones selected will alter the virtual machine names. In this example, I selected 2 zones: "zone 1" and "zone 3". As a result, I will end up with 2 virtual machine names called "BusinessVM-1" and "BusinessVM-2". This means I will have 2 virtual machines distributed between the 2 zones I selected earlier.&lt;/p&gt;

&lt;h4&gt;
  
  
  Security type
&lt;/h4&gt;

&lt;p&gt;For the "security type" label, select "Trusted launch virtual machines" from the drop-down menu. (see below)&lt;/p&gt;

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

&lt;h4&gt;
  
  
  image
&lt;/h4&gt;

&lt;p&gt;Next, it is required that I select the Operating System that will be running in the virtual machines. This post is about Setting Up a Windows 11 Virtual Machine. So at the "image" label, select the drop down list to reveal operating systems that can run in the virtual machine being created. &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygiifqkf603pqh9q5kw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygiifqkf603pqh9q5kw6.png" alt="operating system" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
I selected Windows 11 as the preferred Operating System.&lt;/p&gt;

&lt;h3&gt;
  
  
  VM Architecture
&lt;/h3&gt;

&lt;p&gt;The "VM Architecture" label radio button selection should be retained at "x64".&lt;/p&gt;

&lt;h4&gt;
  
  
  Run with Azure Spot discount
&lt;/h4&gt;

&lt;p&gt;Do not tick "Run with Azure Spot discount" box&lt;/p&gt;

&lt;h4&gt;
  
  
  size
&lt;/h4&gt;

&lt;p&gt;At the "size" label, there was a warning in "2" in the image below saying "This size is not available in zone 1,2,3. Zones 1,3 are supported". It says the "Standard_B1s..." isn't available in zone 1,2,3. This made me select the "see all sizes" in "3" below to see my options.&lt;/p&gt;

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

&lt;p&gt;I am taken to a page titled "Select a VM Size"&lt;/p&gt;

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

&lt;p&gt;This displays the various sizes that can be used with the virtual machine being created. I selected the "B Series v2" list on the page as shown in the image above. This further shows a sub-list under the "B Series v2". In the image below, I selected the "B2as_V2" size option.&lt;/p&gt;

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

&lt;p&gt;After this selection click on the "Select" button at the bottom part of the page.&lt;/p&gt;

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

&lt;p&gt;This returns to the "Create a Virtual Machine" page. The next section of focus is the "Administrator Account".&lt;/p&gt;

&lt;h3&gt;
  
  
  Administrator Account
&lt;/h3&gt;

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

&lt;p&gt;This section requires that a "username", to be used in the operating system is supplied, as well as the "password". I have set my "username" as "azureUser" and my password too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fors04bgiposq8zy3bs9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fors04bgiposq8zy3bs9y.png" alt="Administrator Account with username and password" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Inbound port rules
&lt;/h3&gt;

&lt;p&gt;In the image below, "inbound port rules" is captured in the red rectangle ("1"), and it has 2 labels namely: "Public inbound ports" and "select inbound ports". &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz08hepzlusp5skp7wxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz08hepzlusp5skp7wxu.png" alt="Inbound port rules" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the first label "Public inbound ports" I selected "Allow selected ports" while for the second label, I selected "RDP (3389)" from the list of options. This applies to only Windows-based Operating Systems. For Linux-based Operating Systems, "SSH(22)" applies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Licensing
&lt;/h3&gt;

&lt;p&gt;The last label in the "Basics" Tab is "Licensing".&lt;/p&gt;

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

&lt;p&gt;Tick the box to "confirm I have an eligible Windows 10/11 license.."&lt;/p&gt;

&lt;h2&gt;
  
  
  Networking Tab
&lt;/h2&gt;

&lt;p&gt;At the "Networking" Tab, scroll to the "Load balancing" section,&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsomo2psk3df5cnptdh7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsomo2psk3df5cnptdh7q.png" alt="Networking Tab" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
and select the "None" radio button under the "Load balancing options" label&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Monitoring Tab
&lt;/h2&gt;

&lt;p&gt;The Monitoring Tab has 3 headings namely "Alerts", "Diagnostics" and "Health". &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsebd57wfj8wx1d6oyjxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsebd57wfj8wx1d6oyjxd.png" alt="Monitoring Tab" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The focus of this post is "Diagnostics" and the "Boot diagnostics" label. I selected the "Disable" radio button. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tags Tab
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgt0l58zh13kc39fnhi1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgt0l58zh13kc39fnhi1.png" alt="Tags" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
Tags are name/value pairs that enable you to categorize resources and view consolidated billing by applying the same tag to multiple resources and resource groups.&lt;br&gt;
In the image below, I wrote "Department" as the "Name" and "IT" as the "Value". In the "Resources" column, I selected "All resources".&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Review + create
&lt;/h2&gt;

&lt;p&gt;This is the last button to select after following and applying the above-mentioned steps. "Review + create" will validate all the settings supplied and proceed to the next step in creating the "virtual machine". If there is an issue with any of the settings, an error will show up on the affected Tab(s)&lt;/p&gt;

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

&lt;p&gt;when Azure portal is done validating all the settings provided, the page below will display "Validation Passed". After that, you can then go ahead and click the "Create" button ("2") at the bottom of the page to create the virtual machine.&lt;/p&gt;

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

&lt;p&gt;Subsequently, the "create" button triggers a page showing the deployment's progress. As you can see in the image below, "Deployment is in progress" is displayed and labeled as "1".&lt;/p&gt;

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

&lt;p&gt;At the same time "2" in the image above shows the stage of deployment of the resource "BusinessVM-1" and "BusinessVM-2".&lt;br&gt;
When the deployment is successful, the page will display "Your deployment is complete" as shown in the image below.&lt;/p&gt;

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

&lt;p&gt;The next step is to click the "Go to resource" button on the page displayed to go to the created resource. (See below)&lt;/p&gt;

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

&lt;p&gt;The next page contains details about the Virtual Machine. The virtual machine's name is displayed at the top left corner of the page. Below the name is a "search bar" and a sidebar for quick access to tools. &lt;/p&gt;

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

&lt;p&gt;The next step is to change the "idle timeout" of the virtual machine. On the page look for the "Essentials" panel on the right-hand side of the sidebar. Search for the "Public IP address" label as shown below,&lt;/p&gt;

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

&lt;p&gt;and click on the IP. This navigates to the "Configuration" page. The "Idle timeout(minutes)" label has a slider. By default, the idle timeout in minutes is set at 4. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0afiomgjouz1ch4zhn5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0afiomgjouz1ch4zhn5j.png" alt="Idle timeout(minutes)" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The desirable thing to do is to set it to the maximum to prevent the virtual machine from timing out. So the slider is dragged from the left-hand side to the right-hand side of the slider. Now the idle timeout in minutes is set to 30: the maximum timeout allowable. When this is done click on the "Save" icon at the top of the page. &lt;/p&gt;

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

&lt;p&gt;It returns to the virtual machine page. The next step is to locate the "Connect" button on the sidebar. This will connect the virtual machine after all the configurations performed earlier. &lt;/p&gt;

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

&lt;p&gt;Once the "connect" button is selected, it sets the machine up for another round of validation (see image below). Under the "Native RDP" bar, the labels numbered "2" &amp;amp; "4" indicate the validation process. &lt;/p&gt;

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

&lt;p&gt;Once the validation is complete, labels "1" to "3" will display a green check mark, and label "4" will display "Configured".&lt;/p&gt;

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

&lt;p&gt;Once this is completed look out for label "1" in the image below and click the "Download RDP file"&lt;/p&gt;

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

&lt;p&gt;It's 90% done if you're following these steps on a MacOS computer.&lt;br&gt;
The "RDP" file is downloaded into the downloads directory on a Mac.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzojy1x9in85dwcta929k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzojy1x9in85dwcta929k.jpg" alt="RDP file" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The RDP file represents the Windows 11 virtual machine that was created. To check if it works, log in using the credentials created previously. Before signing in, Mac users need to go to the App Store, download and install the Microsoft Remote Desktop app.  After installing the Microsoft Remote Desktop app, double-click the downloaded RDP file. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig4h6rh7weglu9ho0tdi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig4h6rh7weglu9ho0tdi.jpg" alt="Login" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwolrbskjsf3eq6559do9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwolrbskjsf3eq6559do9.jpg" alt="Password" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dialog box will request the password created at the "Administrator Account" subheading above. &lt;br&gt;
If the correct login credentials are submitted there will be a Windows 11 starting page like below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbd2v6e6k4u1nnqk131d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbd2v6e6k4u1nnqk131d.jpg" alt="starting page" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is followed by a setup page below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumnxc2rrgxkdjkuypj9y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumnxc2rrgxkdjkuypj9y.jpg" alt="setup page" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the "Accept" button on this page, and it displays the Windows 11 desktop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea7qx7y5b9nf4bemtzc3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea7qx7y5b9nf4bemtzc3.jpg" alt="Windows 11 desktop" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With all the aforementioned steps, I have created a Windows 11 virtual machine on an Azure portal.&lt;/p&gt;

&lt;p&gt;The virtual machine runs on a free account, and if left running on the MacOS computer and the Azure portal, it may drain out the free $200 credit. So it is advised that the resource group is deleted. However, before deleting the resource group in the Azure portal, there is a need to shut down the Windows 11 virtual machine on the MacOS. Since the Windows 11 desktop is still on, it needs to be shut down properly as it is done for any physical system. The power button for the Windows 11 virtual machine is located at the bottom labeled "1" in the image below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzx7axcwj0zl1n4ckasm4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzx7axcwj0zl1n4ckasm4.jpg" alt="Power button" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On clicking this button, a fly-out card of options appears. (see label "2" below)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fde1pbieq0aavssnat8gl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fde1pbieq0aavssnat8gl.jpg" alt="shut down fly-out" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From this fly-out card, the Windows 11 virtual machine on MacOS can be shut down. &lt;/p&gt;

&lt;p&gt;Next, the resource group should be deleted to prevent incurring charges. I went back to the Azure portal page as shown below.&lt;/p&gt;

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

&lt;p&gt;My resource group labeled "1" above is "AzureRG". Another way to locate the resource group is to search for it at the top-level search bar on the page. Click on the resource group name and it navigates to the resource group page. At the upper part of the page, there is a "Delete resource group" option.&lt;/p&gt;

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

&lt;p&gt;Click on the "Delete resource group" option, and a notification box on the upper right-hand of the page shows "Deleting resource group AzureRG" like in the image below.&lt;/p&gt;

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

&lt;p&gt;The process completes by showing "Deleted resource group AzureRG" in the notifications bell icon at the upper part of the page.&lt;/p&gt;

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

&lt;p&gt;This post describes a high-level approach to creating a Windows 11 virtual machine on a MacOS computer. More posts on cloud DevOps with Azure will be coming up in my journey into Cloud development.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>macos</category>
      <category>virtualmachine</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Cloud Computing Key concepts</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Sat, 11 May 2024 15:27:37 +0000</pubDate>
      <link>https://forem.com/tundeiness/cloud-computing-key-concepts-1dc1</link>
      <guid>https://forem.com/tundeiness/cloud-computing-key-concepts-1dc1</guid>
      <description>&lt;h2&gt;
  
  
  BACKGROUND
&lt;/h2&gt;

&lt;p&gt;Recently, I have taken an interest in the deployment of applications to the cloud and the basics of DevOps. From my point of view, it is the next thing to learn after my foray into software development. Cloud computing is an area of software development that I'm not very familiar with, so I've decided to spend the next five months diving into it and eventually pursue a career as a cloud developer. &lt;/p&gt;

&lt;p&gt;During this time, I'll be sharing my discoveries in a series of posts over the next few months and beyond. Be prepared for a lot of articles that showcase my learning journey. In this first post, I'll be discussing some crucial concepts in cloud computing that illustrate why it's beneficial for businesses that invest in cutting-edge technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  WHAT IS CLOUD COMPUTING?
&lt;/h2&gt;

&lt;p&gt;Cloud Computing is a computing service deployed over the World Wide Web a.k.a Internet. The advantages of cloud computing include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adaptability&lt;/li&gt;
&lt;li&gt;Scalable Services&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  WHAT IS VIRTUALISATION?
&lt;/h2&gt;

&lt;p&gt;Cloud Computing is based on the concept of Virtualisation, but what is Virtualisation? Virtualization - as I'd like to paraphrase - is a technology that involves the creation of virtual replicas/virtual instances of computer resources like databases, servers, operating systems, or even applications. These replicas/instances operate independently of one another on the same physical hardware without interference. With virtualization, users can access applications without requiring physical hardware. Also, Data centers can leverage virtualization to save power use and enable quick recovery from disasters.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLOUD COMPUTING SERVICES
&lt;/h2&gt;

&lt;p&gt;Firstly, you should know that there are 3 kinds of services in cloud computing namely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure as a Service&lt;/li&gt;
&lt;li&gt;Platform as a Service&lt;/li&gt;
&lt;li&gt;Software as a Service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individuals/businesses must choose the service that will work well for them. However, before choosing any service, it is important to know how these services will benefit them, and the benefits are discussed below.&lt;/p&gt;

&lt;h2&gt;
  
  
  BENEFITS OF CLOUD COMPUTING IN DETAILS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HIGH AVAILABILITY
&lt;/h3&gt;

&lt;p&gt;This characteristic exhibited by any cloud computing service infers that the system, component, or application can operate at a high level, continuously, without intervention, interruption, or outages to the services while running. According to &lt;a href="https://www.weka.io/learn/hpc/high-availability-computing/"&gt;weka.io&lt;/a&gt;, High availability allows a system to continue functioning, even when certain components fail.&lt;br&gt;
Furthermore, &lt;a href="https://www.weka.io/learn/hpc/high-availability-computing/"&gt;weka.io&lt;/a&gt; added that "saying a cloud infrastructure is “highly availability” actually means something more specific than just “usually available whenever we need it.” Instead, availability is typically rated on the number of “nines” represented in its percentage of uptime per day, week, and year:&lt;/p&gt;

&lt;p&gt;99% uptime = two nines&lt;br&gt;
99.9% uptime = three nines&lt;br&gt;
99.99% uptime = three nines&lt;/p&gt;

&lt;p&gt;And so on. To frame these percentages, a Highly Available cloud system with three nines would have a Mean Downtime per day of roughly 1.44 minutes and an annual downtime of only about 43 minutes."&lt;/p&gt;

&lt;h3&gt;
  
  
  FAULT-TOLERANT
&lt;/h3&gt;

&lt;p&gt;This refers to the ability of any cloud system to recover quickly from unexpected disruptions they may have encountered while running tasks. Practically a system can’t be made entirely error-free. hence, systems are designed such that in case of error availability and failure, they work properly and produce the correct results.&lt;/p&gt;

&lt;h3&gt;
  
  
  SCALABILITY
&lt;/h3&gt;

&lt;p&gt;Scalability in cloud computing refers to the ability of a cloud infrastructure to scale up or down resources to meet changing workload demands. It allows businesses to easily add or remove computing resources as needed manually or automatically without significant hardware investment or infrastructure changes. For example, when many users log in to use an application, scalability ensures that traffic from the users is managed to cater for peak periods and off-peak times.&lt;/p&gt;

&lt;h3&gt;
  
  
  GLOBAL REACH
&lt;/h3&gt;

&lt;p&gt;The Global reach or distribution of cloud providers' data centers permits businesses located close to these data centers in different parts of the world to start quickly and scale out effectively. Also, User requests are responded to on time when the business data is stored near customers. This proximity ensures a quick application response which is useful for a positive user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  AGILITY
&lt;/h3&gt;

&lt;p&gt;Cloud agility is the ability to quickly develop, test, and launch applications in a cloud-based environment using cloud resources. Startups and other customers can leverage agility to launch swiftly their ideas without having to spend on physical equipment which may delay the launch of their product.&lt;/p&gt;

&lt;h2&gt;
  
  
  ELASTICITY VS SCALABILITY
&lt;/h2&gt;

&lt;p&gt;While scalability focuses on expanding the capacity of cloud systems to meet rising traffic from users or workloads, Elasticity focuses only on meeting current demand intuitively without over or under-provisioning. According to &lt;a href="https://www.wrike.com/blog/scalability-vs-elasticity/#:~:text=Scalability%20is%20your%20long%2Dterm,these%20concepts%20a%20little%20further."&gt;wrike.com&lt;/a&gt;  "Scalability is your long-term strategy, ensuring your tech grows with your business. Elasticity is your short-term solution for handling unexpected changes without breaking a sweat."&lt;/p&gt;

&lt;p&gt;These concepts are vital for anyone learning about cloud computing or anyone whose desire is to become a cloud developer. That's all I have for this post. I hope to share more of my progress as a cloud developer soon.&lt;/p&gt;

&lt;p&gt;Cover Image: &lt;a href="https://unsplash.com/photos/a-computer-tower-with-a-purple-light-wlQUkvDhvQw?utm_content=creditShareLink&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Growtika&lt;/a&gt; on Unsplash.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>services</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Hamming (coding challenge) Part II</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Tue, 29 Nov 2022 12:57:14 +0000</pubDate>
      <link>https://forem.com/tundeiness/hamming-coding-challenge-part-ii-452i</link>
      <guid>https://forem.com/tundeiness/hamming-coding-challenge-part-ii-452i</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/tundeiness/hamming-coding-challenge-part-i-4499"&gt;Hamming coding challenge Part I&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is the second part of Exercism's Hamming coding challenge. Initially I had explained my first solution and the lesson learnt as hinted by Exrecism. This second part focuses more on how I refactored my initial solution as seen in &lt;a href="https://dev.to/tundeiness/hamming-coding-challenge-part-i-4499"&gt;part I&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The refactored code goes like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ArgumentError&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Strands must be of equal length'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Hamming&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;distance&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="nb"&gt;attr_reader&lt;/span&gt; &lt;span class="ss"&gt;:distance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:second_strand&lt;/span&gt;

  &lt;span class="kp"&gt;private&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@first_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;
    &lt;span class="vi"&gt;@second_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;
    &lt;span class="n"&gt;validate&lt;/span&gt;
    &lt;span class="vi"&gt;@distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nucleotides&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n2&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;n1&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;n2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;nucleotides&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="kp"&gt;public&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From this second iteration you can observed that it is now leaner and readable. However, what did do to make it leaner and readable?&lt;br&gt;
As usual I will start with the &lt;code&gt;UnequalStrandError&lt;/code&gt; class. In the new code I created a function called &lt;code&gt;validate&lt;/code&gt;. This will take care of raising errors whenever any error is encountered in the code. Note that I now have a one line code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;compared to what I had earlier to help handle raising errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Secondly I refactored &lt;code&gt;compute&lt;/code&gt; as :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;distance&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The compute method in the above is a class method as indicated with the &lt;code&gt;self&lt;/code&gt; prefix and also in compute body, I instatiated &lt;code&gt;Hamming&lt;/code&gt; class and called &lt;code&gt;distance&lt;/code&gt; on it.&lt;br&gt;
The &lt;code&gt;distance&lt;/code&gt; method is defined in &lt;code&gt;initialize&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@first_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;
    &lt;span class="vi"&gt;@second_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;
    &lt;span class="n"&gt;validate&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="vi"&gt;@distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nucleotides&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n2&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;n1&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;n2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and it is defined as an instance variable which is then exposed using &lt;code&gt;attr_reader&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="nb"&gt;attr_reader&lt;/span&gt; &lt;span class="ss"&gt;:distance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:second_strand&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that &lt;code&gt;@distance&lt;/code&gt; is a variable holding the result derived from  &lt;code&gt;nucleotides.count { |n1, n2| n1 != n2 }&lt;/code&gt;. Also the &lt;code&gt;nucleotides&lt;/code&gt; method defined in the body of &lt;code&gt;Hamming&lt;/code&gt; class handles the separation and zipping of &lt;code&gt;first_strand&lt;/code&gt; and &lt;code&gt;second_strand&lt;/code&gt;&lt;br&gt;
In the initial code I had used the &lt;code&gt;split()&lt;/code&gt; method to get an array from the string supplied but I found &lt;code&gt;chars()&lt;/code&gt; to be effective as well. After creating the array I zipped both &lt;code&gt;first_strand&lt;/code&gt; and &lt;code&gt;second_strand&lt;/code&gt; array together. While using the &lt;code&gt;zip()&lt;/code&gt; method this is what it does:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="n"&gt;first_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;second_strand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After zipping I called the &lt;code&gt;count()&lt;/code&gt; method on the zipped array and this method was able to get a count of items in the sub array that are not the same.&lt;/p&gt;

&lt;p&gt;With this refactoring for readability, I learnt about &lt;code&gt;self&lt;/code&gt;, and what &lt;code&gt;self&lt;/code&gt; means in the context of this challenge. I understood that when &lt;code&gt;self&lt;/code&gt; is used in a code, it refers to the class and in this case it is reffering to the class &lt;code&gt;Hamming&lt;/code&gt;.&lt;br&gt;
I also learnt a new trick: instantiating a class in a class method and calling a defined method in the class on it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;distance&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;code&gt;Hamming.compute&lt;/code&gt; is called, the new class instantiation will also call the method involved. This is a quick way of getting results instead of having to create new objects of &lt;code&gt;class Hamming&lt;/code&gt;.&lt;br&gt;
I also learned that, I can raise Errors in the initialize method to catch the errors thrown as quick as possible. &lt;/p&gt;

&lt;p&gt;These are what I learned while solving the hamming coding challenge on Exercism. I will be solving more challenges on Exercism and do watch out for more articles on how I solved and refactored the challenges.&lt;/p&gt;

</description>
      <category>hamming</category>
      <category>ruby</category>
      <category>exercism</category>
    </item>
    <item>
      <title>Hamming (coding challenge) Part I</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Tue, 29 Nov 2022 12:54:46 +0000</pubDate>
      <link>https://forem.com/tundeiness/hamming-coding-challenge-part-i-4499</link>
      <guid>https://forem.com/tundeiness/hamming-coding-challenge-part-i-4499</guid>
      <description>&lt;p&gt;Hi Folks!! it's been a while since I wrote an article on what I have been doing lately. Currently I'm job searching, and in a bid to keep myself up to date, I decided that I will be solving coding challenges on the &lt;a href="https://exercism.org/tracks/ruby/exercises/raindrops"&gt;Exercism&lt;/a&gt; website daily using &lt;code&gt;Ruby&lt;/code&gt; and also refactoring the solved code for readability.&lt;/p&gt;

&lt;p&gt;For every challenge solved, I will be publishing my initial code iteration and the fully optimised version. I will also be describing lessons learnt while solving the coding challenge.&lt;br&gt;
So hold on to your seats and enjoy the ride!&lt;/p&gt;

&lt;p&gt;For starters, this article's focus will be on the &lt;a href="https://exercism.org/tracks/ruby/exercises/hamming"&gt;Hamming&lt;/a&gt; coding challenge. According to &lt;a href="https://exercism.org/tracks/ruby/exercises/raindrops"&gt;Exercism&lt;/a&gt;, the anticipated lessons to be learnt are &lt;code&gt;Advanced Enumeration&lt;/code&gt;, &lt;code&gt;Loops&lt;/code&gt;,&lt;code&gt;Conditionals&lt;/code&gt;, and &lt;code&gt;Raising Exceptions&lt;/code&gt;. However I'm sure I learned more after I was done refactoring the initial solution.&lt;/p&gt;

&lt;p&gt;For the Hamming challenge here is an abridged version of the instruction introducing the challenge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Calculate the Hamming Distance between two DNA strands.&lt;br&gt;
  DNA strands are read using the letters C,A,G and T and Two &lt;br&gt;
  strands might look like this:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   GAGCCTACTAACGGGAT
   CATCGTAATGACGGCCT
   ^ ^ ^  ^ ^    ^^
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;They have 7 differences, and therefore the Hamming Distance is 7.&lt;br&gt;
  The Hamming distance is only defined for sequences of equal &lt;br&gt;
  length, so an attempt to calculate it between sequences of &lt;br&gt;
  different lengths should not work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the above instructions I set out to solve the challenge.&lt;br&gt;
My initial solution  produced the below code block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ArgumentError&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Strands must be of equal length'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Hamming&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;second_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;with_index&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;second_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_strand_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;check_strand_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;empty_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="n"&gt;first_strand&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;compare_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Well, the above code block got everything working, however we all know there are ways we can optimise this code block. Before I go into refactoring the code, would it not be okay if I explain what I did?&lt;/p&gt;

&lt;p&gt;let's start with &lt;code&gt;class UnequalStrandError&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ArgumentError&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Strands must be of equal length'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;UnequalStrandError&lt;/code&gt; class is inheriting from the &lt;code&gt;ArgumentError&lt;/code&gt; class, and I am initialising the &lt;code&gt;error_message&lt;/code&gt; as 'Strands must be of equal length'. This is the message that will be displayed anytime the strands to be compared are of unequal size.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;UnequalStrandError&lt;/code&gt; class is also being raised in class &lt;code&gt;Hamming&lt;/code&gt; see &lt;code&gt;self.check_strand_size&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Hamming&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;second_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;with_index&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;second_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_strand_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positive?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="no"&gt;UnequalStrandError&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;check_strand_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;empty_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="n"&gt;first_strand&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="n"&gt;compare_strands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_strand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_strand&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now to explain what is happening inside class &lt;code&gt;Hamming&lt;/code&gt;. This class was setup to have class methods. Class methods (in the context of the Hamming class) do not require that a &lt;code&gt;Hamming&lt;/code&gt; object is created before using any method in class &lt;code&gt;Hamming&lt;/code&gt;. That is why you can see the &lt;code&gt;self&lt;/code&gt; prefix before any method. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;def self.check_strand_size(first_strand, second_strand)&lt;/code&gt; raises the &lt;code&gt;UnequalStrandError&lt;/code&gt; if one of arguments are &lt;code&gt;empty?&lt;/code&gt; and if the other is not empty. it also raises error if the argument sizes are not the same.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;def self.empty_strands(first_strand, second_strand)&lt;/code&gt; returns 0 if first_strand.empty? &amp;amp;&amp;amp; second_strand.empty? and also calls &lt;code&gt;def self.check_strand_size&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;def self.compare_strands(first_strand, second_strand)&lt;/code&gt; is spliting the strings into an array. Using the first array produced, I am comparing if each item iterated on is not the same as each item in the second array produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;first_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;with_index&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;second_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if it is not the same, then the item is pushed and saved into another array called &lt;code&gt;container&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The last method is &lt;code&gt;def self.compute(first_strand, second_strand)&lt;/code&gt;. This method calls other methods I have defined earlier on like &lt;code&gt;empty_strands(first_strand, second_strand)&lt;/code&gt; and also &lt;code&gt;compare_strands(first_strand, second_strand)&lt;/code&gt;. Since the answer required for the task is a number/integer, and I know that &lt;code&gt;compare_strands&lt;/code&gt; returns an array if non-matching items, all I did  was to get the size of the array and that is what produces the answer for the task. &lt;/p&gt;

&lt;p&gt;So for example if I supply the following arguments to Hamming's compute method like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Hamming&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'GAGCCTACTAACGGGAT'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'CATCGTAATGACGGCCT'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The expected answer is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code works like it is suppose to but there is still need to refactor the code for readability, and I will be doing this in Part II of this article. From the looks of things it seems I was able to match Exercism's expectations on what I will learn by solving this challenge. I used &lt;code&gt;Advanced Enumeration&lt;/code&gt;, &lt;code&gt;Loops&lt;/code&gt;,&lt;code&gt;Conditionals&lt;/code&gt;, and also raised &lt;code&gt;Exceptions&lt;/code&gt;. However more lessons will be learned in &lt;a href="https://dev.to/tundeiness/hamming-coding-challenge-part-ii-452i"&gt;Part II&lt;/a&gt; of this article.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>All About ActiveRecord Scopes</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Mon, 23 Nov 2020 19:57:27 +0000</pubDate>
      <link>https://forem.com/tundeiness/all-about-activerecord-scopes-b91</link>
      <guid>https://forem.com/tundeiness/all-about-activerecord-scopes-b91</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I started learning Rails, I came across scopes while rummaging google for solutions to several Rails project challenges. During those times, Scopes were terrifying for me at first, and every opportunity I had, I'd sidestep using this incredible concept in any of my Rails projects. &lt;/p&gt;

&lt;p&gt;The fact is that as one proceeds in our different software development journeys, there are some useful concepts and tools that are important to pick up to make our coding experience scale faster. I accepted scope because I later understood what it was all about and how it could help my backend coding journey. &lt;/p&gt;

&lt;p&gt;In this article, I will be explaining what scope is and how to use it in different parts of any Rails application. I have set up an Equipment API with Rails, and this will be the examples utilized as the codebase in this write-up. Check out this &lt;a href="https://github.com/tundeiness/Survey-equipments-api/tree/model"&gt;repository&lt;/a&gt; to follow along. Let's dive in. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Are Scopes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scopes are SQL queries that you can build in any rails model. Often time, we tend to run similar queries in our rails console to query our database and also understand the structure of the result we are receiving before going further with the development of our applications.&lt;/p&gt;

&lt;p&gt;According to the official ruby on rails guide, "Scoping allows us to make use of commonly-used queries which can be referenced as method calls on the association objects or models." The general expectation is that all scope bodies should return an &lt;code&gt;ActiveRecord::Relation&lt;/code&gt; or nil. As a result of this, it makes it easy to call other ActiveRecord methods on it. Simply put, a scope is just a custom chain of active record methods. They are sets of pre-defined queries that can be chained to build other complex Queries.   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use Scopes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scopes help you D.R.Y out your active record calls and also keep your codes organized. Scopes make it easy to find the records you need at a particular time. &lt;/p&gt;

&lt;p&gt;Also, using scopes helps us develop a healthy habit of keeping the heavy stuffs away from the controller. Rails convention suggests that implementation of the business logic should exist in Rails model instead of the controller/view. &lt;/p&gt;

&lt;p&gt;Scoping also allows you to specify frequently used queries which can be referenced as method calls on the association objects or models.&lt;/p&gt;

&lt;p&gt;Furthermore, during testing sometimes, you do not want your test to go into your database to fetch results. With scopes, this is achievable as it allows for easier stubbing. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Scopes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Default Scopes&lt;/em&gt; &lt;strong&gt;vs&lt;/strong&gt; &lt;em&gt;Named scopes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Default scopes take the name &lt;code&gt;default_scope&lt;/code&gt; when defined in the model and, they are scopes that are applied across all queries to the model in question. An example can be seen in the code block below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:requests&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;through: :requests&lt;/span&gt;

  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:equipment_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:serial_no&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:accessories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

  &lt;span class="n"&gt;default_scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"updated_at desc"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conversely, named scopes are scopes that take a name and are defined in a model for active record database queries. Typically, a named scope is made up of the &lt;code&gt;scope&lt;/code&gt; keyword, followed by the name you want to give to the scope, and a lambda. Below is an example of a named scope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:requests&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;through: :requests&lt;/span&gt;

  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:equipment_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:serial_no&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:accessories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

  &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:not_available&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference between both examples is glaring: one has a custom name and, one has a statutory name called default_scope. In the above example, the named scope above is called &lt;em&gt;not_available&lt;/em&gt;. The following arrow sign &lt;code&gt;-&amp;gt;&lt;/code&gt; (lambda) can be re-written as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:not_available&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;note that &lt;code&gt;-&amp;gt;&lt;/code&gt; is replaced with &lt;em&gt;lambda&lt;/em&gt;. A similar approach can be used with the default_scope as well. &lt;/p&gt;

&lt;p&gt;So in my rails console I can now do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;
 &lt;span class="n"&gt;equip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The lambda is what actually does the query implementation.&lt;br&gt;
It will produce an &lt;code&gt;ActiveRecord::Relation&lt;/code&gt; object, that contains list of available equipment. &lt;/p&gt;

&lt;p&gt;This also gives us the opportunity to use the created scope in the controller in this manner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
     &lt;span class="vi"&gt;@equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;
     &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@equip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
    &lt;span class="vi"&gt;@equips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;
    &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@equips&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;availability&lt;/span&gt;
    &lt;span class="vi"&gt;@equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;
     &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@equip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the first code block, the route to &lt;code&gt;index&lt;/code&gt; will always display only available equipment and not all equipment. However, in the second code-block, &lt;code&gt;index&lt;/code&gt; will display a list of all equipment irrespective of whether it is available or not. Also, &lt;code&gt;availability&lt;/code&gt; will only display a list of all equipment that is available if I hit the &lt;code&gt;availability&lt;/code&gt; route. In this way, the controller is being used to decide what information is rendered. When it comes to which scope type to use, please avoid using default_scopes. Want to know why? see this &lt;a href="https://dev.to/lewuathe/why-we-should-avoid-defaultscope-in-rails-3ofo"&gt;article&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Taking arguments&lt;/em&gt;&lt;br&gt;
Named scopes can also take arguments like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:requests&lt;/span&gt;
  &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;through: :requests&lt;/span&gt;

  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:equipment_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:serial_no&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:accessories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

  &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:not_available&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the above arrangement, it is now possible to pass parameters from the controller when a request is made to the corresponding route. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Unscoped&lt;/strong&gt;&lt;br&gt;
If you have to work with default scopes, you may need to use the unscoped method to disable all currently applied default scopes. Let's work with an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
    &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:requests&lt;/span&gt;
    &lt;span class="n"&gt;has_many&lt;/span&gt; &lt;span class="ss"&gt;:customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;through: :requests&lt;/span&gt;

    &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:equipment_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:serial_no&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:accessories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;

    &lt;span class="n"&gt;default_scope&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we can now disable the scope in this manner&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;
 &lt;span class="n"&gt;equip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unscoped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What can you do with scopes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now let's see examples of what we can do with scopes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;chaining scopes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;we can chain scopes together to build a bigger SQL statement. See the example below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;   &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
     &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:available&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

     &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:available_and_created&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; 
     &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:created_at&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;

   &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First, we define the scope we want to chain, and then define a second scope. In the body of the second scope, we will chain the first scope and an &lt;code&gt;ActiveRecord&lt;/code&gt; method to make our query. The chaining can be seen, when we run the kind of query below in the rails console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using Conditionals with scopes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scope named &lt;code&gt;available&lt;/code&gt;, in the code block below is a typical example of how to use conditionals with scopes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;   &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Equipment&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
     &lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="ss"&gt;:available&lt;/span&gt;&lt;span class="p"&gt;,(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"available = ?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;present?&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are saying, select all equipment if available is true. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calling multiple scopes in a class method scope&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is achievable by using the &lt;code&gt;send()&lt;/code&gt;method. &lt;br&gt;
We can supply several scopes as arguments in the send method and call send on each one. &lt;br&gt;
The code block below (&lt;code&gt;chaining&lt;/code&gt;) allows us to dynamically call as many scopes as we want. The code block below is another way of writing scopes and it is called a class method. &lt;br&gt;
We define a class method with the &lt;code&gt;self&lt;/code&gt; keyword and it takes an array of arguments called &lt;code&gt;multiple_method&lt;/code&gt;. This is then supplied to the &lt;code&gt;send&lt;/code&gt; method in &lt;code&gt;inject()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chaining&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multiple_method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;multiple_method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:send&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chaining&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"scope_one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"scope_two"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;so in the controller we can have this kind of arrangement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:equipment&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:equipment&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="ss"&gt;:multiple_method&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="vi"&gt;@equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chaining&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="vi"&gt;@equip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Equipment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;By now, using scopes should no longer be a difficult task. With scopes, we can easily create SQL queries on the fly. &lt;br&gt;
Using the equipment API as examples in this article, we can now create a new scope from scratch, chain scopes together, use conditionals in scopes, and supply multiple scopes as an argument in another scope using the send method. The article focused strictly on creating scopes with the lambda approach. Another way to create scope is the use of a class method (which was mentioned when calling multiple scopes as arguments in a scope.).&lt;br&gt;
Found this article to be useful? Please like, share or drop a comment below. You can also reach me via my &lt;a href="//www.twitter.com/tundeiness"&gt;twitter&lt;/a&gt; handle.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pojotorshemi/ruby-on-rails-named-scope-and-default-scope-74ee3db2a15f"&gt;https://medium.com/@pojotorshemi/ruby-on-rails-named-scope-and-default-scope-74ee3db2a15f&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devblast.com/b/jutsu-11-rails-scopes"&gt;https://devblast.com/b/jutsu-11-rails-scopes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jasoncharnes.com/importance-rails-scopes/"&gt;https://jasoncharnes.com/importance-rails-scopes/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sitepoint.com/dynamically-chain-scopes-to-clean-up-large-sql-queries/"&gt;https://www.sitepoint.com/dynamically-chain-scopes-to-clean-up-large-sql-queries/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>backend</category>
      <category>serverside</category>
    </item>
    <item>
      <title>How to perfectly clone a website using Bootstrap 4.</title>
      <dc:creator>Tunde Oretade</dc:creator>
      <pubDate>Thu, 10 Oct 2019 15:30:16 +0000</pubDate>
      <link>https://forem.com/tundeiness/how-to-perfectly-clone-a-website-using-bootstrap-4-54id</link>
      <guid>https://forem.com/tundeiness/how-to-perfectly-clone-a-website-using-bootstrap-4-54id</guid>
      <description>&lt;p&gt;Setting up a layout for your responsive website should not take too much time. After planning the layout of the website, most developers tend to get stuck in the implementation stage. &lt;/p&gt;

&lt;p&gt;This stage is critical as this is where you need to consider the behaviour of the website on various devices and if one can get this part right, 90% of your work is complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it all started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recently, my knowledge of the Bootstrap framework was put to test.  I was required to make an exact copy of the &lt;a href="https://www.newsweek.com/"&gt;Newsweek&lt;/a&gt; website using Bootstrap. Now If you must know, the Newsweek website is a CMS built with Drupal.&lt;/p&gt;

&lt;p&gt;Cloning a framework based website like &lt;a href="https://www.newsweek.com/"&gt;Newsweek&lt;/a&gt; using vanilla HTML and CSS can be a pretty daunting task for beginners. However, It does not need to be daunting anymore as I am about to walk you through on how I cloned the &lt;a href="https://www.newsweek.com/"&gt;newsweek&lt;/a&gt; website.  &lt;/p&gt;

&lt;p&gt;This &lt;a href="https://tundeiness.github.io/Newsweek-clone/"&gt;project&lt;/a&gt;, took me between 4-6 days to complete and I had to do a 2-day refresher on bootstrap 4 (last time I used bootstrap was 3 years ago). Yep, I was that rusty 😓️. &lt;/p&gt;

&lt;p&gt;There are lots of frameworks available for use out there, and setting up a quick layout is dependent on your knowledge of your chosen framework. If you are using bootstrap 4 framework like I am, you can quickly set up a layout in record time using both the bootstrap 4 framework and the flex-box included in this framework. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new Bootstrap 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Bootstrap framework enables website designers and front-end developers to easily create a highly-responsive and good-looking modern website.&lt;/p&gt;

&lt;p&gt;Recently, Bootstrap 4 has brought about so many changes from its previous versions. There are new grid classes, default flex-box, Sass instead of Less, cards replacing wells, panels, and thumbnails, and new utility classes, etc. &lt;/p&gt;

&lt;p&gt;The biggest difference between Bootstrap 3 and Bootstrap 4 is that Bootstrap 4 now uses flex classes to control the layout of its components. It's now easier to design flexible responsive layout structure without using float or positioning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's get started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this writeup, I will be attempting to guide you on how to set up your layout to get started with for your frontend project, in the same way, that it was applied it in this demo &lt;a href="https://tundeiness.github.io/Newsweek-clone/"&gt;project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My focus will also be on explaining (using a few sub-sections) how I used Bootstrap 4 classes in the development of the main section. &lt;/p&gt;

&lt;p&gt;The reason for the aforementioned is that similar Bootstrap 4 classes are in use in other sections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initial Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The setup for this project can be found in this &lt;a href="https://tundeiness.github.io/Newsweek-clone/"&gt;repository&lt;/a&gt;. To get started, there is a &lt;br&gt;
 starter template that can be copied and used in your HTML file.  It can be found &lt;a href="https://getbootstrap.com/docs/4.3/getting-started/introduction/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the head tag, I included various links to resources that will be required in this project. These links correspond to resources from font-awesome(free icon website), Bootstrap CDN, and google fonts as well. Links to local resources were also provided. These links to additional CSS files to be used in the project for re-styling and resetting. &lt;br&gt;
A reset file - reset.css - was also included to remove default styling for the HTML elements. See code snippet below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
 ...
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;
  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://use.fontawesome.com/releases/v5.8.2/css/all.css"&lt;/span&gt;
  &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay"&lt;/span&gt;
  &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com/css family=Roboto+Condensed:400,700&amp;amp;display=swap"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"css/reset.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"css/main.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Newsweek clone&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/code&gt; I had 3 main parts: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;the &lt;code&gt;&amp;lt;header&amp;gt;&amp;lt;/header&amp;gt;&lt;/code&gt;, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;main&amp;gt;&amp;lt;/main&amp;gt;&lt;/code&gt; and,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;footer&amp;gt;&amp;lt;/footer&amp;gt;&lt;/code&gt; section.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"heading "&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..
   &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;

   &lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..
   &lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt; 

   &lt;span class="nt"&gt;&amp;lt;footer&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..
   &lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Layout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On extra small devices, the section that gets displayed first, when viewing the Newsweek website is the "Top Story" and it stacks on the next section called "Featured stories", "Opinions", and the last section in the stack is "Newsletter".&lt;/p&gt;

&lt;p&gt;On medium devices, however, the websites display a 2 column behaviour with the "Featured stories" as the first section to be displayed in normal flow appearance followed by "Top-story".&lt;/p&gt;

&lt;p&gt;Scrolling down also shows different sections exhibiting visual behaviours different from what was observed on extra small devices. This visual behaviour continues to changes as the device screen gets wider and different sections are ordered based on the preference on the developer/client. The observed visual behaviours are also considered in the development of the main section.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The container class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I decided that the main section &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; should have a bootstrap class &lt;code&gt;.container-fluid&lt;/code&gt;(As far as I'm concerned, using a &lt;code&gt;.container&lt;/code&gt; class here will not match the exact Newsweek website layout). In Bootstrap 4, Containers provide a means to centre and horizontally pad your site’s contents. &lt;/p&gt;

&lt;p&gt;The difference between &lt;code&gt;.container&lt;/code&gt; and &lt;code&gt;.container-fluid&lt;/code&gt; class are that the latter provides for width: 100% across all viewport and device sizes, whereas the former has a max-width pixel value. &lt;/p&gt;

&lt;p&gt;Also, &lt;code&gt;.container-fluid&lt;/code&gt; continuously resizes as one adjusts the width of the browser by any amount, while &lt;code&gt;.container&lt;/code&gt; class resizes in chunks at determined widths, controlled by media queries. You can read more about the classes &lt;code&gt;.container-fluid&lt;/code&gt; and &lt;code&gt;.container&lt;/code&gt; &lt;a href="https://getbootstrap.com/docs/4.3/layout/overview/#containers"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nested within the &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; tag are 2 &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s. the first one was declared with a &lt;code&gt;.row&lt;/code&gt; class and the second one with a &lt;code&gt;.col-md-12&lt;/code&gt; class.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="c"&gt;&amp;lt;!-- MAIN SECTION --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"left-content col-12 col-sm-12 col-md-12 col-lg-8 px-lg-3 order-sm-0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="c"&gt;&amp;lt;!-- FEATURED STORIES --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"featured-story col-12 col-sm-12 col-md-5 col-lg-5 mt-sm-4 mt-md-4 mb-sm-3 order-0 "&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;


   &lt;span class="c"&gt;&amp;lt;!-- OPINIONS --&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"right-content col-12 col-md-12 col-lg-4 order-sm-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;


  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"other-concerns col-md-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt; 

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



&lt;p&gt;&lt;strong&gt;The row class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rows are containers for columns and to implement it the Bootstrap way, column classes needs to be declared in divs with row classes. Bootstrap 4 documentation specifies that "In a grid layout, the content must be placed within columns and only columns may be immediate children of rows".&lt;/p&gt;

&lt;p&gt;Each column has horizontal padding (called a gutter) for controlling the space between them. This padding is then counteracted on the rows with negative margins. This way, all the content in your columns is visually aligned down the left side. &lt;/p&gt;

&lt;p&gt;The div with &lt;code&gt;.content&lt;/code&gt; &amp;amp; &lt;code&gt;.row&lt;/code&gt; classes also have 2 &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;'s corresponding to the opinions sub-section of the magazine and the featured stories section. &lt;/p&gt;

&lt;p&gt;On large devices, "featured stories" section occupies 8 spaces &lt;code&gt;.col-lg-8&lt;/code&gt; while from medium to extra small devices they occupy 12. While on mobile devices, the featured stories will be the first section seen on the stack. &lt;/p&gt;

&lt;p&gt;This is made possible by using the class &lt;code&gt;.order-sm-0&lt;/code&gt;. However, the "opinions" section has a class &lt;code&gt;.order-sm-2&lt;/code&gt; which means it is the last section to be seen in class &lt;code&gt;.content&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Also nested within the div with &lt;code&gt;.content&lt;/code&gt; &amp;amp; &lt;code&gt;.row&lt;/code&gt; class are 2 divs with class &lt;code&gt;.left-content&lt;/code&gt; and &lt;code&gt;.right-content&lt;/code&gt; both designated to hold "featured stories" and "opinion" contents.&lt;/p&gt;

&lt;p&gt;The "featured stories" section is a div with &lt;code&gt;.row&lt;/code&gt; class and wraps the featured stories and top story sections.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;...
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"featured-story col-12 col-sm-12 col-md-5 col-lg-5 mt-sm-4 mt-md-4 mb-sm-3 order-0 "&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

   &lt;span class="c"&gt;&amp;lt;!-- TOP STORY --&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"middle-content col-12 col-sm-12 col-md-7 col-lg-7 px-sm-0 px-lg-3 order-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
...

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



&lt;p&gt;The divs with class &lt;code&gt;.featured-story&lt;/code&gt; and &lt;code&gt;.middle-content&lt;/code&gt; both have &lt;code&gt;.order-0&lt;/code&gt; and &lt;code&gt;order-1&lt;/code&gt; as well. The order class is a new addition to bootstrap 4 and it's derived from the new flexbox power with which bootstrap 4 was developed from. &lt;/p&gt;

&lt;p&gt;By including this class to the divs, the containers can have the same visual behaviour which cuts across different devices. This means the div with class &lt;code&gt;.featured-story&lt;/code&gt; will get displayed ahead of the div with class &lt;code&gt;.middle-content&lt;/code&gt; from a normal flow appearance perspective. &lt;/p&gt;

&lt;p&gt;The contents of &lt;code&gt;.featured-story&lt;/code&gt; class has classes like &lt;code&gt;.card&lt;/code&gt; to give them the card like appearance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;...
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card rounded-0 border-0  pb-sm-2"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
...

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



&lt;p&gt;Read more about &lt;code&gt;.card&lt;/code&gt; class &lt;a href="https://getbootstrap.com/docs/4.3/components/card/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Col class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Column classes indicate the number of columns I'd like to use out of the possible 12 per row. So, if you want three equal-width columns across, you can use .col-4. In the codes above I have used variants of &lt;code&gt;.col-&lt;/code&gt; class and is based on the number of columns I want per row across different devices. For example &lt;code&gt;.col-sm-12&lt;/code&gt; class specified on a div means I want 12 columns on small devices, while &lt;code&gt;col-md-5&lt;/code&gt; means the columns should be 5 on medium-sized devices. Read more &lt;a href="https://getbootstrap.com/docs/4.3/layout/grid/#how-it-works"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Order class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;.left-content&lt;/code&gt; class  apart from the usual bootstrap &lt;code&gt;.col-&lt;/code&gt; classes, there is also the &lt;code&gt;.order-&lt;/code&gt; class. The same class was applied to the div with the &lt;code&gt;.right-content&lt;/code&gt; class. &lt;/p&gt;

&lt;p&gt;By applying the class &lt;code&gt;.order-sm-0&lt;/code&gt; and &lt;code&gt;.order-sm-2&lt;/code&gt; on the div containers, I have inadvertently described them as flex items in a flex container without explicitly stating a parent flex container. &lt;/p&gt;

&lt;p&gt;As a result of this, I can now change the visual order of specific flex items and also use available options for making an item first or last, as well as a reset to use the DOM order.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;.left-content&lt;/code&gt; class will stack first ahead of class &lt;code&gt;.right-content&lt;/code&gt; also with a class &lt;code&gt;.order-sm-2&lt;/code&gt; on small devices and extra small devices.&lt;/p&gt;

&lt;p&gt;Both the &lt;code&gt;.left-content&lt;/code&gt; and &lt;code&gt;.right-content&lt;/code&gt; class are containers (wrapped in &lt;code&gt;.row&lt;/code&gt; class in the main section) for other small sections as at the time of implementing this project. &lt;/p&gt;

&lt;p&gt;Also wrapped in class &lt;code&gt;.row&lt;/code&gt; in &lt;code&gt;.left-content&lt;/code&gt; are the following classes and the additional flex class included to order the class structure which stacks first on various devices are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.featured-story&lt;/code&gt; with flex class &lt;code&gt;.order-0&lt;/code&gt;, and &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.middle-content&lt;/code&gt; with flex class &lt;code&gt;.order-1&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means that the div with class &lt;code&gt;.order-0&lt;/code&gt; will also stack first on small devices or come first from left ahead of div with class &lt;code&gt;.order-1&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flex class&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the div with class&lt;code&gt;.featured-story&lt;/code&gt; is the &lt;code&gt;.middle-content&lt;/code&gt; class. This div is the container for the divs' with classes&lt;code&gt;.top-story&lt;/code&gt; and &lt;code&gt;more-story&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;
 &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"top-story d-flex flex-column mt-sm-4 mb-sm-3 py-0 px-sm-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;.. 
 &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

 &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"more-story d-flex flex-column px-sm-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;..&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

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



&lt;p&gt;Translated to CSS flex-box format, the above code block can be written as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.top-story&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  
              &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  
              &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
              &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
              &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
              &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.more-story&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

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



&lt;p&gt;Applying the bootstrap 4 flex-box display utility (&lt;code&gt;.d-flex&lt;/code&gt;) will create a flexbox container and, also transform direct children elements into flex items (just like CSS flexbox). &lt;/p&gt;

&lt;p&gt;Furthermore, the Flex containers and items can be modified further with the addition of flex properties like &lt;code&gt;.flex-column&lt;/code&gt;, &lt;code&gt;.justify-content-between&lt;/code&gt; etc.&lt;/p&gt;

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

&lt;p&gt;Looking at the structure of the remaining sub-sections in the main section, the Bootstrap 4 classes used in their development is similar to the classes in use in previous sub-sections.&lt;/p&gt;

&lt;p&gt;In summary, this article has introduced Bootstrap 4 classes which can ease all styling tasks. Some odd-looking classes observed in this demo project are mostly styling classes that can be read up &lt;a href="https://getbootstrap.com/docs/4.3/utilities/"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This writeup has also explained how to use Flexbox for inner elements that require certain visual behaviour with native Bootstrap 4 components. &lt;/p&gt;

&lt;p&gt;Comparing the &lt;a href="https://tundeiness.github.io/Newsweek-clone/"&gt;clone&lt;/a&gt; and,  the original &lt;a href="https://www.newsweek.com/"&gt;newsweek&lt;/a&gt; magazine, you will observe that they exhibit the same visual behaviour and are both responsive. &lt;/p&gt;

&lt;p&gt;The project demo can be found on codepen:&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/highness/embed/zYOqrxw?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;p&gt;Here is the link to the &lt;a href="https://tundeiness.github.io/Newsweek-clone/"&gt;repository&lt;/a&gt; for the full Newsweek homepage implementation. &lt;/p&gt;

&lt;p&gt;Thanks for Reading!&lt;/p&gt;

&lt;p&gt;You have comments or suggestions on how to improve this article? Please drop them here or you can reach me on twitter via &lt;a class="comment-mentioned-user" href="https://dev.to/tundeiness"&gt;@tundeiness&lt;/a&gt;
 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;REFERENCES&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getbootstrap.com/docs/4.3/getting-started/introduction/"&gt;https://getbootstrap.com/docs/4.3/getting-started/introduction/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bootstrap4</category>
      <category>flexbox</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
