Skip to content

Latest commit

 

History

History
884 lines (633 loc) · 31.7 KB

File metadata and controls

884 lines (633 loc) · 31.7 KB

Module 8: Networking Azure Application Components

Lab Answer Key: Deploying Network Components for Use in Azure Solutions

Before we start

  1. Ensure that you are logged in to your Windows 10 Virtual Machine using the following credentials:

    • Username: Admin

    • Password: Pa55w.rd

  2. Observe the Taskbar located at the bottom of your Windows 10 desktop. The Taskbar contains the icons for the common applications we will use in the labs:

    Note: You can also find shortcuts to these applications on the Desktop and in the Start Menu.

Exercise 1: Create an ARM Template for a Linux VM

Task 1: Open the Azure Portal

  1. On the Taskbar, click the Microsoft Edge icon.

  2. In the open browser window, navigate to the Azure Portal (https://portal.azure.com).

  3. Enter the email address of your Microsoft account.

  4. Click the Next button.

  5. Enter the password for your Microsoft account.

  6. Click the Sign in button.

Task 2: Create a Basic Linux-VM ARM Template

  1. On the left side of the portal, click the Create a resource link.

  2. At the top of the New blade, locate the Search the Marketplace field.

  3. Enter the text Template Deployment into the search field and press Enter.

  4. In the Everything search results blade, select the Template deployment result.

  5. In the Template deployment blade, click the Create button.

  6. In the Custom deployment blade, click the Create a Linux virtual machine link.

  7. Perform the following actions:

    a. Leave the Subscription field set to it's default value.

    a. In the Resource group section, select the Create new option.

    a. In the Resource group section, enter the value MOD08LSVM into the empty field.

    a. In the Location field, select the East US location.

    a. In the Admin Username field, enter the value Student.

    a. In the Admin Password field, enter the value StudentPa55w.rd.

    a. In the Dns Label Prefix field, enter a globally unique name.

    a. Leave the Ubuntu OS Version field set to it's default value.

    a. In the Terms and Conditions section, select the I agree to the terms and conditions stated above checkbox.

    a. Click the Purchase button.

  8. Wait for the deployment to complete before moving on with this lab.

Task 3: Install Apache in the Linux VM

  1. At the top of the portal, click the Cloud Shell icon to open a new shell instance.

  2. In the Cloud Shell command prompt at the bottom of the portal, type in the following command and press Enter to list all resource groups in the subscription:

    az vm extension set --publisher Microsoft.Azure.Extensions --version 2.0 --name CustomScript --vm-name MyUbuntuVM --resource-group MOD08LSVM --settings '{"commandToExecute":"apt-get -y update && apt-get -y install apache2"}'
    
  3. Wait for the extension to finish installing before moving on with this lab.

    Note: This command can take up to ten minutes.

  4. Close the Cloud Shell prompt at the bottom of the portal.

Task 4: Validate the Linux VM

  1. On the left side of the portal, click the Resource groups link.

  2. In the Resource groups blade, locate and select the MOD08LSVM Resource Group link.

  3. In the MOD08LSVM blade, select the Virtual Machine you recently created.

  4. In the Virtual Machine* blade, locate the DNS name field at the top of the blade. Copy the value of this field.

  5. In a new browser tab, navigate to the URL you copied in the previous step.

  6. Observe the Apache placeholder webpage.

  7. Close the additional browser tab and return to the browser tab with the Azure Portal currently active.

Task 5: Validate the ARM Template

  1. On the left side of the portal, click the Resource groups link.

  2. In the Resource groups blade, locate and select the MOD08LSVM Resource Group link.

  3. In the MOD08LSVM blade, locate the Settings section on the left side of the blade and click the Deployments link.

  4. In the Deployments pane, click the Microsoft.Template hyperlink to the latest deployment in the list of deployments.

  5. In the Deployment blade, observe the inputs and outputs from the deployment operation.

  6. At the top of the Deployment blade, click the View template button.

  7. In the Template blade, observe the contents of the ARM template.

  8. Click the Add to library button at the top of the blade.

  9. In the Save template blade, perform the following actions and then click Save:

    a. In the Name field, enter the value linuxvm.

    a. In the Description field, enter the value Linux Virtual Machine.

  10. Back in the Template blade, click the Download button at the top of the blade and save the template to your local drive.

Review: In this exercise, you performed a standard deployment of a Linux-based Virtual Machine in Azure. You also viewed the ARM template used for the deployment and saved that template to your collection of ARM templates.

Exercise 2: Duplicate Virtual Machine Resources

Task 1: Update ARM Template to use Copy Functionality to Create Three VMs.

Note: If you are not comfortable with modifying a JSON file, a completed template is located on your lab machine at Allfiles (F):\Mod08\Labfiles\Starter\copy.json. You can use this template to either skip this task or compare your file against the correct "solution" file.

  1. On the left side of the portal, click the All services link.

  2. In the blade that appears, locate and click the Templates service.

  3. In the Templates blade, locate and select the linuxvm template you saved earlier in this lab.

  4. In the linuxvm blade, click the Deploy button.

  5. In the Custom deployment blade, click the Edit template button at the top of the blade.

  6. In the Edit template blade, locate the text editor and observe the existing template content.

  7. Locate the Microsoft.Network/publicIPAddresses resource object in the JSON file:

    {
        "type": "Microsoft.Network/publicIPAddresses",
        "name": "[variables('publicIPAddressName')]",
        "apiVersion": "2017-04-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
            "dnsSettings": {
                "domainNameLabel": "[parameters('dnsLabelPrefix')]"
            }
        }
    },
    
  8. Delete the Microsoft.Network/publicIPAddresses resource object.

  9. Locate the Microsoft.Network/networkInterfaces resource object in the JSON file:

    {
        "type": "Microsoft.Network/networkInterfaces",
        "name": "[variables('nicName')]",
        "apiVersion": "2017-04-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "ipConfigurations": [
                {
                    "name": "ipconfig1",
                    "properties": {
                        "privateIPAllocationMethod": "Dynamic",
                        "publicIPAddress": {
                            "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
                        },
                        "subnet": {
                            "id": "[variables('subnetRef')]"
                        }
                    }
                }
            ]
        },
        "dependsOn": [
            "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
            "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
        ]
    },
    
  10. Update the name property of the Microsoft.Network/networkInterfaces resource with the following value:

    "name": "[concat(variables('nicName'), copyIndex())]",
    
  11. Add a new copy property to the Microsoft.Network/networkInterfaces resource with the following value:

    "copy": {
        "name": "storagecopy",
        "count": 3
    }
    
  12. Remove the properties.ipConfigurations[0].properties.publicIPAddress property from the Microsoft.Network/networkInterfaces resource:

    "publicIPAddress": {
        "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
    },
    
  13. Remove the value from the dependsOn array property referencing a Microsoft.Network/publicIPAddresses/ resource within the Microsoft.Network/networkInterfaces resource:

    "[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
    
  14. Your Microsoft.Network/networkInterfaces resource should now look like this:

    {
        "type": "Microsoft.Network/networkInterfaces",
        "name": "[concat(variables('nicName'), copyIndex())]",
        "apiVersion": "2017-04-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "ipConfigurations": [
                {
                    "name": "ipconfig1",
                    "properties": {
                        "privateIPAllocationMethod": "Dynamic",
                        "subnet": {
                            "id": "[variables('subnetRef')]"
                        }
                    }
                }
            ]
        },
        "dependsOn": [
            "[resourceId('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
        ],
        "copy": {
            "name": "storagecopy",
            "count": 3
        }
    },
    
  15. Locate the Microsoft.Compute/virtualMachines resource object in the JSON file:

    {
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[variables('vmName')]",
        "apiVersion": "2017-03-30",
        "location": "[resourceGroup().location]",
        "properties": {
            "hardwareProfile": {
                "vmSize": "[variables('vmSize')]"
            },
            "osProfile": {
                "computerName": "[variables('vmName')]",
                "adminUsername": "[parameters('adminUsername')]",
                "adminPassword": "[parameters('adminPassword')]"
            },
            "storageProfile": {
                "imageReference": {
                    "publisher": "[variables('imagePublisher')]",
                    "offer": "[variables('imageOffer')]",
                    "sku": "[parameters('ubuntuOSVersion')]",
                    "version": "latest"
                },
                "osDisk": {
                    "createOption": "FromImage"
                },
                "dataDisks": [
                    {
                        "diskSizeGB": 1023,
                        "lun": 0,
                        "createOption": "Empty"
                    }
                ]
            },
            "networkProfile": {
                "networkInterfaces": [
                    {
                        "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                    }
                ]
            },
            "diagnosticsProfile": {
                "bootDiagnostics": {
                    "enabled": true,
                    "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
                }
            }
        },
        "dependsOn": [
            "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
            "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
        ]
    }
    
  16. Update the name property of the Microsoft.Compute/virtualMachines resource with the following value:

    "name": "[concat(variables('vmName'), copyIndex())]",
    
  17. Add a new copy property to the Microsoft.Compute/virtualMachines resource with the following value:

    "copy": {
        "name": "vmcopy",
        "count": 3
    }
    
  18. Locate the value from the dependsOn array property referencing a Microsoft.Network/networkInterfaces/ resource within the Microsoft.Compute/virtualMachines resource:

    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    
  19. Update the value from the dependsOn array property referencing a Microsoft.Network/networkInterfaces/ resource within the Microsoft.Compute/virtualMachines resource with the following value:

    "[resourceId('Microsoft.Network/networkInterfaces/', concat(variables('nicName'), copyIndex()))]"
    
  20. Locate the value from the properties.networkProfile.networkInterfaces array property referencing a Microsoft.Network/networkInterfaces/ resource within the Microsoft.Compute/virtualMachines resource:

    "networkInterfaces": [
        {
            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
        }
    ]
    
  21. Update the value from the properties.networkProfile.networkInterfaces array property referencing a Microsoft.Network/networkInterfaces/ resource within the Microsoft.Compute/virtualMachines resource with the following value:

    "networkInterfaces": [
        {
            "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nicName'), copyIndex()))]"
        }
    ]
    
  22. Locate the properties property of the Microsoft.Compute/virtualMachines resource:

    "properties": {
        "hardwareProfile": {
            "vmSize": "[variables('vmSize')]"
        },
        "osProfile": {
            "computerName": "[variables('vmName')]",
            "adminUsername": "[parameters('adminUsername')]",
            "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
            "imageReference": {
                "publisher": "[variables('imagePublisher')]",
                "offer": "[variables('imageOffer')]",
                "sku": "[parameters('ubuntuOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {
            "networkInterfaces": [
                {
                    "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nicName'), copyIndex()))]"
                }
            ]
        },
        "diagnosticsProfile": {
            "bootDiagnostics": {
                "enabled": true,
                "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
            }
        }
    },
    
  23. Add a new property named availabilitySet within the value of the properties property of the Microsoft.Compute/virtualMachines resource:

    "properties": {           
        "availabilitySet": {
            "id": "[resourceId('Microsoft.Compute/availabilitySets',variables('availabilitySetName'))]"
        }, 
        "hardwareProfile": {
            "vmSize": "[variables('vmSize')]"
        },
        "osProfile": {
            "computerName": "[variables('vmName')]",
            "adminUsername": "[parameters('adminUsername')]",
            "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
            "imageReference": {
                "publisher": "[variables('imagePublisher')]",
                "offer": "[variables('imageOffer')]",
                "sku": "[parameters('ubuntuOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {
            "networkInterfaces": [
                {
                    "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nicName'), copyIndex()))]"
                }
            ]
        },
        "diagnosticsProfile": {
            "bootDiagnostics": {
                "enabled": true,
                "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
            }
        }
    },
    
  24. Your Microsoft.Compute/virtualMachines resource should now look like this:

    {
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[concat(variables('vmName'), copyIndex())]",
        "apiVersion": "2017-03-30",
        "location": "[resourceGroup().location]",
        "properties": {            
            "availabilitySet": {
                "id": "[resourceId('Microsoft.Compute/availabilitySets', 'BalancedSet')]"
            },
            "hardwareProfile": {
                "vmSize": "[variables('vmSize')]"
            },
            "osProfile": {
                "computerName": "[variables('vmName')]",
                "adminUsername": "[parameters('adminUsername')]",
                "adminPassword": "[parameters('adminPassword')]"
            },
            "storageProfile": {
                "imageReference": {
                    "publisher": "[variables('imagePublisher')]",
                    "offer": "[variables('imageOffer')]",
                    "sku": "[parameters('ubuntuOSVersion')]",
                    "version": "latest"
                },
                "osDisk": {
                    "createOption": "FromImage"
                },
                "dataDisks": [
                    {
                        "diskSizeGB": 1023,
                        "lun": 0,
                        "createOption": "Empty"
                    }
                ]
            },
            "networkProfile": {
                "networkInterfaces": [
                    {
                        "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('nicName'), copyIndex()))]"
                    }
                ]
            },
            "diagnosticsProfile": {
                "bootDiagnostics": {
                    "enabled": true,
                    "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
                }
            }
        },
        "dependsOn": [
            "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
            "[resourceId('Microsoft.Network/networkInterfaces/', concat(variables('nicName'), copyIndex()))]"
        ],
        "copy": {
            "name": "vmcopy",
            "count": 3
        }
    }
    
  25. Locate the outputs property of the ARM template:

    "outputs": {
        "hostname": {
            "type": "String",
            "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
        },
        "sshCommand": {
            "type": "String",
            "value": "[concat('ssh ', parameters('adminUsername'), '@', reference(variables('publicIPAddressName')).dnsSettings.fqdn)]"
        }
    }
    
  26. Replace the contents of the output property with an empty JSON object:

    "outputs": {
    }
    
  27. Locate the dnsLabelPrefix parameter within the parameters property of the ARM template:

    "dnsLabelPrefix": {
        "type": "String",
        "metadata": {
            "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
        }
    }
    
  28. Update the dnsLabelPrefix parameter by setting the value of it's defaultValue property to an empty string literal:

    "parameters": {
        "adminUsername": {
            "type": "String",
            "metadata": {
                "description": "User name for the Virtual Machine."
            }
        },
        "adminPassword": {
            "type": "SecureString",
            "metadata": {
                "description": "Password for the Virtual Machine."
            }
        },
        "dnsLabelPrefix": {
            "type": "String",
            "defaultValue": "",
            "metadata": {
                "description": "Unique DNS Name for the Public IP used to access the Virtual Machine."
            }
        },
        "ubuntuOSVersion": {
            "defaultValue": "16.04.0-LTS",
            "allowedValues": [
                "12.04.5-LTS",
                "14.04.5-LTS",
                "15.10",
                "16.04.0-LTS"
            ],
            "type": "String",
            "metadata": {
                "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version."
            }
        }
    },
    
  29. Add a new resource within the resources property of the ARM template of type Microsoft.Compute/availabilitySets:

    {
        "type": "Microsoft.Compute/availabilitySets",
        "name": "BalancedSet",
        "apiVersion": "2017-12-01",
        "location": "[resourceGroup().location]",
        "sku": {
            "name": "Classic"
        },
        "properties": {
            "platformFaultDomainCount": 2,
            "platformUpdateDomainCount": 2
        }
    }
    
  30. Click the Save button to persist the template.

Note: As a reminder, if there are errors with the template or deployment, you can use the ARM template located at: Allfiles (F):\Mod08\Labfiles\Starter\copy.json.

Task 2: Deploy the Updated ARM Template

  1. Back in the Custom deployment blade, perform the following actions:

    a. Leave the Subscription field set to its default value.

    a. In the Resource group section, select the Create new option.

    a. In the Resource group section, enter the value MOD08LMVM into the empty field.

    a. In the Location field, select the East US location.

    a. In the Admin Username field, enter the value Student.

    a. In the Admin Password field, enter the value StudentPa55w.rd.

    a. Leave the Ubuntu OS Version field set to it's default value.

    a. In the Terms and Conditions section, select the I agree to the terms and conditions stated above checkbox.

    a. Click the Purchase button.

  2. Wait for the deployment to complete before moving on with this lab.

Review: In this exercise, you deployed an ARM template that created three copies of the same Linux-based Virtual Machine.

Exercise 3: Create a Load Balancer Resource

Task 1: Install Nginx on the Linux Virtual Machines

  1. At the top of the portal, click the Cloud Shell icon to open a new shell instance.

  2. In the Cloud Shell command prompt at the bottom of the portal, type in the following command and press Enter to list all resource groups in the subscription:

    az vm run-command invoke --command-id RunShellScript --scripts "sudo apt-get update && sudo apt-get install -y nginx" --ids $(az vm list --resource-group MOD08LMVM --query [].id --output tsv)
    
  3. Wait for the run command operation to finish on all virtual machines before moving on with this lab.

    Note: This command can take up to fifteen minutes.

  4. Close the Cloud Shell prompt at the bottom of the portal.

Task 2: Create a Public IP Address

  1. At the top of the New blade, locate the Search the Marketplace field.

  2. Enter the text IP Address into the search field and press Enter.

  3. In the Everything search results blade, select the Public IP address result.

  4. In the Public IP address blade, click the Create button.

  5. In the Create public IP address blade, perform the following actions and then click Create:

    a. In the Name field, enter the value PrimaryPIP.

    a. In the IP Version section, select the IPv4 option.

    a. In the IP address assignment section, select the Dynamic option.

    a. In the Idle timeout (minutes) section, drag the slider to the 10 option.

    a. In the DNS name label field, enter a globally unique value.

    a. Leave the Subscription field set to its default value.

    a. In the Resource group section, select the Use existing option.

    a. In the Resource group section, locate the list and select the MOD08LMVM option.

    a. In the Location field, select the East US location.

  6. Wait for the creation task to complete before moving on with this lab.

Task 3: Create a Load Balancer

  1. At the top of the New blade, locate the Search the Marketplace field.

  2. Enter the text Balancer into the search field and press Enter.

  3. In the Everything search results blade, select the Load Balancer result.

  4. In the Load Balancer blade, click the Create button.

  5. In the Load Balance blade, perform the following actions and then click Create:

    a. In the Name field, enter the value DistributedLB.

    a. In the Type section, select the Public option.

    a. Click the Public IP Address option.

    a. In the Public IP Address blade, select the PrimaryPIP option.

    a. Leave the Subscription field set to its default value.

    a. In the Resource group section, select the Use existing option.

    a. In the Resource group section, locate the list and select the MOD08LMVM option.

    a. In the Location field, select the East US location.

  6. Wait for the creation task to complete before moving on with this lab.

Task 4: Associate the Load Balancer with Three NICs

  1. On the left side of the portal, click the Resource groups link.

  2. In the Resource groups blade, locate and select the MOD08LMVM Resource Group link.

  3. In the MOD08LMVM blade, select the Load Balancer you recently created.

  4. In the Load Balancer blade, locate the Settings section and click the Backend pools link.

  5. In the Backend pools pane, click the Add button.

  6. In the Add backend pool blade that appears, perform the following actions:

    a. In the Name field, enter the value LinuxVirtualMachines.

    a. In the IP version section, select the IPv4 option.

    a. In the Associated to list, select the Availability Set option.

    a. In the Availability set list that appears, select the BalancedSet option.

    a. In the Target network IP configurations section that appears, click the Add a target network IP configuration button.

    a. In the Target virtual machine list that appears, select the MyUbuntuVM0 Virtual Machine option.

    a. In the Network IP configuration list that appears, select the myVMNic0 Network Interface Card option.

    a. Click the Add a target network IP configuration button again.

    a. In the Target virtual machine list that appears, select the MyUbuntuVM1 Virtual Machine option.

    a. In the Network IP configuration list that appears, select the myVMNic1 Network Interface Card option.

    a. Click the Add a target network IP configuration button again.

    a. In the Target virtual machine list that appears, select the MyUbuntuVM2 Virtual Machine option.

    a. In the Network IP configuration list that appears, select the myVMNic2 Network Interface Card option.

    a. Click the OK button.

  7. Wait for the backend pool creation process to finish before moving on with the lab.

Task 5: Configure the Load Balancer to Probe Virtual Machines

  1. Back in the Load Balancer blade, locate the Settings section and click the Health probes link.

  2. In the Health probes pane, click the Add button.

  3. In the Add health probe blade that appears, perform the following actions:

    a. In the Name field, enter the value WebServerProbe.

    a. In the Protocol section, select the TCP option.

    a. In the Port field, enter the value 80.

    a. In the Interval field, enter the value 5.

    a. In the Unhealthy threshold field, enter the value 3.

    a. Click the OK button.

  4. Wait for the health probe creation process to finish before moving on with the lab.

Task 6: Configure the Load Balancer to Distribute HTTP Requests

  1. Back in the Load Balancer blade, locate the Settings section and click the Load balancing rules link.

  2. In the Load balancing rules pane, click the Add button.

  3. In the Add load balancing rule blade that appears, perform the following actions:

    a. In the Name field, enter the value WebServerBalancing.

    a. In the IP Version section, select the IPv4 option.

    a. Leave the Frontend IP address list set to it's default value.

    a. In the Protocol section, select the TCP value.

    a. In the Port field, enter the value 80.

    a. In the Backend port field, enter the value 80.

    a. In the Backend pool list, select the value LinuxVirtualMachines.

    a. In the Health probe list, select the value WebServerProbe.

    a. In the Session persistence list, select the value None.

    a. In the Idle timeout (minutes) section, drag the slider to the 10 option.

    a. In the Floating IP (direct server return) section, select the Disabled option.

    a. Click the OK button.

  4. Wait for the load balancing rule creation process to finish before moving on with the lab.

Task 7: Validate the Load Balancer and VM Configuration

  1. On the left side of the portal, click the Resource groups link.

  2. In the Resource groups blade, locate and select the MOD08LMVM Resource Group link.

  3. In the MOD08LMVM blade, select the Public IP Address you recently created.

  4. In the Public IP address blade, locate the IP address field at the top of the blade. Copy the value of this field.

  5. In a new browser tab, navigate to the IP address you copied in the previous step.

  6. Observe the Nginx placeholder webpage.

  7. Close the additional browser tab and return to the browser tab with the Azure Portal currently active.

Review: In this exercise, you created a Load Balancer using the three NICs associated with Linux-based Virtual Machines created earlier using an ARM template.

Exercise 4: Cleanup Subscription

Task 1: Open Cloud Shell

  1. At the top of the portal, click the Cloud Shell icon to open a new shell instance.

  2. In the Cloud Shell command prompt at the bottom of the portal, type in the following command and press Enter to list all resource groups in the subscription:

    az group list
    

Task 2: Delete Resource Groups

  1. Type in the following command and press Enter to delete the MOD08LSVM Resource Group:

    az group delete --name MOD08LSVM --no-wait --yes
    
  2. Type in the following command and press Enter to delete the MOD08LMVM Resource Group:

    az group delete --name MOD08LMVM --no-wait --yes
    
  3. Close the Cloud Shell prompt at the bottom of the portal.

Task 3: Close Active Applications

  1. Close the currently running Microsoft Edge application.

Review: In this exercise, you "cleaned up your subscription" by removing the Resource Groups used in this lab.