Skip to content

Commit c41e6f1

Browse files
committed
Combined exercises, bug fixes, and shifted to GitHub lab instruction hosting for most exercises.
1 parent 168a229 commit c41e6f1

16 files changed

Lines changed: 23 additions & 490 deletions

File tree

learn-pr/wwl-azure/describe-azure-compute-networking-services/9-exercise-configure-network-access.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
### YamlMime:ModuleUnit
22
uid: learn.wwl.describe-azure-compute-networking-services.exercise-configure-network-access
3-
title: Exercise - Configure network access
3+
title: Exercise - Create an Azure Virtual Machine and Configure network access
44
metadata:
5-
title: Exercise - Configure network access
6-
description: "Exercise - Configure network access"
5+
title: Exercise - Create an Azure Virtual Machine and Configure network access
6+
description: "Exercise to configure a virtual machine as a web host and host a website."
77
ms.date: 09/20/2024
88
author: wwlpublish
99
ms.author: robbarefoot
Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1 @@
1-
In this exercise, you create an Azure virtual machine (VM) and install a web server (Nginx).
2-
3-
You could use the Azure portal, the Azure CLI, or an Azure Resource Manager (ARM) template.
4-
5-
In this instance, you're going to use the Azure CLI.
6-
7-
>[!IMPORTANT]
8-
>This exercise creates a VM that is used in a later exercise within this module. To avoid leaving a VM running for an extended period of time, it's recommended that you complete the full module in one sitting.
9-
10-
## Task 1: Create a resource group
11-
1. Log into the [Azure portal](https://portal.azure.com/?azure-portal=true).
12-
1. Select the Azure Cloud Shell icon to bring up Cloud Shell.
13-
1. From the Azure CLI, create a resource group named **IntroAzureRG**.
14-
```azurecli
15-
az group create --name IntroAzureRG --location eastus
16-
```
17-
18-
## Task 2: Create a Linux virtual machine
19-
1. Use the following Azure CLI command to create a Linux VM.
20-
21-
1. From Cloud Shell, run the following `az vm create` command to create a Linux VM:
22-
23-
```azurecli
24-
az vm create \
25-
--resource-group "IntroAzureRG" \
26-
--name my-vm \
27-
--size Standard_D2s_v5 \
28-
--public-ip-sku Standard \
29-
--image Ubuntu2204 \
30-
--admin-username azureuser \
31-
--generate-ssh-keys
32-
```
33-
34-
Your VM takes a few moments to come up. You named the VM **my-vm**. You use this name to refer to the VM in later steps.
35-
36-
## Task 3: Install Nginx
37-
After your VM is created, you'll use a Custom Script Extension to install Nginx. The Custom Script Extension is an easy way to download and run scripts on your Azure VMs. It's just one of the many ways you can configure the system after your VM is up and running.
38-
39-
1. Run the following `az vm extension set` command to configure Nginx on your VM:
40-
41-
```azurecli
42-
az vm extension set \
43-
--resource-group "IntroAzureRG" \
44-
--vm-name my-vm \
45-
--name customScript \
46-
--publisher Microsoft.Azure.Extensions \
47-
--version 2.1 \
48-
--settings '{"fileUris":["https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-nginx.sh"]}' \
49-
--protected-settings '{"commandToExecute": "./configure-nginx.sh"}'
50-
```
51-
52-
This command uses the Custom Script Extension to run a Bash script on your VM. The script is stored on GitHub. While the command runs, you can choose to [examine the Bash script](https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-nginx.sh?azure-portal=true) from a separate browser tab. To summarize, the script:
53-
54-
55-
1. Runs `apt-get update` to download the latest package information from the internet. This step helps ensure that the next command can locate the latest version of the Nginx package.
56-
2. Installs Nginx.
57-
3. Sets the home page, */var/www/html/index.html*, to print a welcome message that includes your VM's host name.
58-
59-
## Continue
60-
61-
This exercise is complete for now. You'll use this VM later in this module.
1+
This exercise has been merged with the later exercise in this module, **Exercise - Create an Azure Virtual Machine and Configure network access**.
Lines changed: 3 additions & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,8 @@
11
In this exercise, you configure the access to the virtual machine (VM) you created earlier in this module.
22

3-
> [!IMPORTANT]
4-
> The VM for this exercise was createdly previously in this module. If you deleted the VM or resource group created in unit 3, you'll need to redo the previous exercise (**Exercise - Create an Azure virtual machine**).
5-
6-
Right now, the VM you created and installed Nginx on during the previous exercise isn't accessible from the internet. In this exercise, you'll create a network security group that changes that by allowing inbound HTTP access on port 80.
7-
8-
> [!NOTE]
9-
> It's important that you're in the BASH version of Cloud Shell for some of the commands in this exercise. You can use the **Switch to...** button if you're currently in PowerShell mode.
10-
11-
## Task 1: Access your web server
12-
13-
In this procedure, you get the IP address for your VM and attempt to access your web server's home page.
14-
15-
1. Run the following `az vm list-ip-addresses` command to get your VM's IP address and store the result as a Bash variable:
16-
17-
```bash
18-
IPADDRESS="$(az vm list-ip-addresses \
19-
--resource-group "IntroAzureRG" \
20-
--name my-vm \
21-
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
22-
--output tsv)"
23-
```
24-
2. Run the following `curl` command to download the home page:
25-
26-
```bash
27-
curl --connect-timeout 5 http://$IPADDRESS
28-
```
29-
30-
The `--connect-timeout` argument specifies to allow up to five seconds for the connection to occur. After five seconds, you see an error message that states that the connection timed out:
31-
32-
```output
33-
curl: (28) Connection timed out after 5001 milliseconds
34-
```
35-
36-
This message means that the VM wasn't accessible within the timeout period.
37-
3. As an optional step, try to access the web server from a browser:
38-
39-
40-
1. Run the following to print your VM's IP address to the console:
41-
42-
```bash
43-
echo $IPADDRESS
44-
```
45-
46-
You see an IP address, for example, *23.102.42.235*.
47-
2. Copy the IP address that you see to the clipboard.
48-
3. Open a new browser tab and go to your web server. After a few moments, you see that the connection isn't happening. If you wait for the browser to time out, you see something like this:
49-
50-
:::image type="content" source="../media/browser-request-timeout-d7cc0e02.png" alt-text="Screenshot of a web browser showing an error message that says the connection timed out.":::
51-
52-
4. Keep this browser tab open for later.
53-
54-
## Task 2: List the current network security group rules
55-
56-
Your web server wasn't accessible. To find out why, let's examine your current NSG rules.
57-
58-
1. Run the following `az network nsg list` command to list the network security groups that are associated with your VM:
59-
60-
```azurecli
61-
az network nsg list \
62-
--resource-group "IntroAzureRG" \
63-
--query '[].name' \
64-
--output tsv
65-
```
66-
67-
You see this output:
68-
69-
```output
70-
my-vmNSG
71-
```
72-
73-
Every VM on Azure is associated with at least one network security group. In this case, Azure created an NSG for you called *my-vmNSG*.
74-
2. Run the following `az network nsg rule list` command to list the rules associated with the NSG named *my-vmNSG*:
75-
76-
```azurecli
77-
az network nsg rule list \
78-
--resource-group "IntroAzureRG" \
79-
--nsg-name my-vmNSG
80-
```
81-
82-
You see a large block of text in JSON format in the output. In the next step, you'll run a similar command that makes this output easier to read.
83-
3. Run the `az network nsg rule list` command a second time. This time, use the `--query` argument to retrieve only the name, priority, affected ports, and access (**Allow** or **Deny**) for each rule. The `--output` argument formats the output as a table so that it's easy to read.
84-
85-
```azurecli
86-
az network nsg rule list \
87-
--resource-group "IntroAzureRG" \
88-
--nsg-name my-vmNSG \
89-
--query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
90-
--output table
91-
```
92-
93-
You see this output:
94-
95-
```output
96-
Name Priority Port Access
97-
----------------- ---------- ------ --------
98-
default-allow-ssh 1000 22 Allow
99-
```
100-
101-
You see the default rule, *default-allow-ssh*. This rule allows inbound connections over port 22 (SSH). SSH (Secure Shell) is a protocol that's used on Linux to allow administrators to access the system remotely. The priority of this rule is 1000. Rules are processed in priority order, with lower numbers processed before higher numbers.
102-
103-
By default, a Linux VM's NSG allows network access only on port 22. This port enables administrators to access the system. You need to also allow inbound connections on port 80, which allows access over HTTP.
104-
105-
## Task 3: Create the network security rule
106-
107-
Here, you create a network security rule that allows inbound access on port 80 (HTTP).
108-
109-
1. Run the following `az network nsg rule create` command to create a rule called *allow-http* that allows inbound access on port 80:
110-
111-
```azurecli
112-
az network nsg rule create \
113-
--resource-group "IntroAzureRG" \
114-
--nsg-name my-vmNSG \
115-
--name allow-http \
116-
--protocol tcp \
117-
--priority 100 \
118-
--destination-port-range 80 \
119-
--access Allow
120-
```
121-
122-
For learning purposes, here you set the priority to 100. In this case, the priority doesn't matter. You would need to consider the priority if you had overlapping port ranges.
123-
2. To verify the configuration, run `az network nsg rule list` to see the updated list of rules:
124-
125-
```azurecli
126-
az network nsg rule list \
127-
--resource-group "IntroAzureRG" \
128-
--nsg-name my-vmNSG \
129-
--query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
130-
--output table
131-
```
132-
133-
You see both the *default-allow-ssh* rule and your new rule, *allow-http*:
134-
135-
```output
136-
Name Priority Port Access
137-
----------------- ---------- ------ --------
138-
default-allow-ssh 1000 22 Allow
139-
allow-http 100 80 Allow
140-
```
141-
142-
## Task 4: Access your web server again
143-
144-
Now that you configured network access to port 80, let's try to access the web server a second time.
3+
Launch the exercise and follow the instructions.
1454

1465
> [!NOTE]
147-
> After you update the NSG, it may take a few moments before the updated rules propagate. Retry the next step, with pauses between attempts, until you get the desired results.
148-
149-
1. Run the same `curl` command that you ran earlier:
150-
151-
```bash
152-
curl --connect-timeout 5 http://$IPADDRESS
153-
```
154-
155-
You see this response:
156-
157-
```html
158-
<html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
159-
```
160-
2. As an optional step, refresh your browser tab that points to your web server. You see the home page:
161-
162-
:::image type="content" source="../media/browser-request-successful-df21c6f1.png" alt-text="A screenshot of a web browser showing the home page from the web server. The home page displays a welcome message.":::
163-
164-
165-
Nice work. In practice, you can create a standalone network security group that includes the inbound and outbound network access rules you need. If you have multiple VMs that serve the same purpose, you can assign that NSG to each VM at the time you create it. This technique enables you to control network access to multiple VMs under a single, central set of rules.
166-
167-
You've completed this exercise and all of the exercises for this module. To clean up your Azure environment and avoid leaving VMs running when not in use, delete the **IntroAzureRG** resource group.
6+
> You'll need access to a Microsoft Azure subscription to complete this exercise.
1687
169-
## Clean up
170-
1. From the Azure home page, under Azure services, select **Resource groups**.
171-
1. Select the **IntroAzureRG** resource group.
172-
1. Select **Delete resource group**.
173-
1. Enter `IntroAzureRG` to confirm deletion of the resource group and select delete.
8+
[![Button to launch exercise.](../media/launch-exercise.png)](https://microsoftlearning.github.io/AZ-900-Microsoft-Azure-Fundamentals/Instructions/Labs/03-exercise-create-azure-virtual-machine.html)

learn-pr/wwl-azure/describe-azure-compute-networking-services/index.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ uid: learn.wwl.describe-azure-compute-networking-services
33
metadata:
44
title: Describe Azure Compute and Networking Services
55
description: "Introduction to Azure compute services (virtual machines, Azure Virtual Desktop, Azure Functions) and networking services (virtual networks, ExpressRoute, DNS, etc.)."
6-
ms.date: 01/09/2026
6+
ms.date: 02/03/2026
77
author: wwlpublish
88
ms.author: robbarefoot
99
ms.topic: module
4.46 KB
Loading
Lines changed: 5 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,10 @@
11
## Create a storage account
22

3-
In this task, you'll create a new storage account.
3+
In this exercise, you'll create a new storage account, a blob storage container, and control access to files uploaded to the blob container.
44

5-
1. Sign in to the Azure portal at [https://portal.azure.com](https://portal.azure.com/?azure-portal=true)
6-
2. Select **Create a resource**.
7-
3. Under Categories, select **Storage**.
8-
4. Under Storage account, select **Create**.
9-
5. On the **Basics** tab of the Create a storage account blade, fill in the following information. Leave the defaults for everything else.
10-
11-
| **Setting** | **Value** |
12-
| -------------------- | ------------------------------------------------------------ |
13-
| Subscription | Select the subscription you want to use for the exercise. |
14-
| Resource group | Select Create new and enter `IntroAzureRG` and select OK |
15-
| Storage account name | Create a unique storage account name |
16-
| Region | Leave default |
17-
| Performance | Standard |
18-
| Redundancy | Locally redundant storage (LRS) |
19-
6. On the **Advanced** tab of the Create a storage account blade, fill in the following information. Leave the defaults for everything else.
20-
21-
| **Setting** | **Value** |
22-
| -------------------------------------------------------- | --------- |
23-
| Allow enabling anonymous access on individual containers | Checked |
24-
25-
:::image type="content" source="../media/storage-account-anonymous-containers.png" alt-text="Screenshot showing how to enable anonymous-access containers on a storage account.":::
26-
27-
7. Select **Review** to review your storage account settings and allow Azure to validate the configuration.
28-
8. Once validated, select **Create**. Wait for the notification that the account was successfully created.
29-
9. Select **Go to resource**.
5+
Launch the exercise and follow the instructions.
306

31-
## Work with blob storage
32-
33-
In this section, you'll create a Blob container and upload a picture.
34-
35-
1. Under **Data storage**, select **Containers**.
36-
37-
:::image type="content" source="../media/storage-account-menu.png" alt-text="Screenshot of the Container add section of a storage account.":::
38-
39-
2. Select **+ Container** and complete the information.
40-
41-
| **Setting** | **Value** |
42-
| ---------------------- | ------------------------------ |
43-
| Name | Enter a name for the container |
44-
| Anonymous access level | Private (no anonymous access) |
45-
3. Select Create.
46-
47-
> [!NOTE]
48-
> Step 4 will need an image. If you want to upload an image you already have on your computer, continue to Step 4. Otherwise, open a new browser window and search Bing for an image of a flower. Save the image to your computer.
49-
4. Back in the Azure portal, select the container you created, then select Upload.
50-
5. Browse for the image file you want to upload. Select it and then select upload.
51-
52-
> [!NOTE]
53-
> You can upload as many blobs as you like in this way. New blobs will be listed within the container.
54-
6. Select the Blob (file) you just uploaded. You should be on the properties tab.
55-
7. Copy the URL from the URL field and paste it into a new tab. You should receive an error message similar to the following.
56-
57-
```
58-
<Error>
59-
<Code>ResourceNotFound</Code>
60-
<Message>The specified resource does not exist. RequestId:4a4bd3d9-101e-005a-1a3e-84bd42000000</Message>
61-
</Error>
62-
```
63-
64-
## Change the access level of your blob
65-
66-
1. Go back to the Azure portal.
67-
2. Select Change access level.
68-
3. Set the Anonymous access level to Blob (anonymous read access for blobs only).
69-
70-
:::image type="content" source="../media/blob-access-level.png" alt-text="Screenshot with Change access level highlighted.":::
71-
72-
4. Select OK.
73-
5. Refresh the tab where you attempted to access the file earlier.
74-
75-
Congratulations - you've completed this exercise. You created a storage account, added a container to the storage account, and then uploaded blobs (files) to your container. Then you changed the access level so you could access your file from the internet.
76-
77-
## Clean up
78-
79-
To clean up the assets created in this exercise and avoid unnecessary costs, delete the resource group (and all associated resources).
80-
1. From the Azure home page, under Azure services, select **Resource groups**.
81-
1. Select the **IntroAzureRG** resource group.
82-
1. Select **Delete resource group**.
83-
1. Enter `IntroAzureRG` to confirm deletion of the resource group and select delete.
7+
> [!NOTE]
8+
> You'll need access to a Microsoft Azure subscription to complete this exercise.
849
10+
[![Button to launch exercise.](../media/launch-exercise.png)](https://microsoftlearning.github.io/AZ-900-Microsoft-Azure-Fundamentals/Instructions/Labs/05-exercise-create-storage-blob.html)

learn-pr/wwl-azure/describe-azure-storage-services/index.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ metadata:
55
prefetch-feature-rollout: true
66
title: Describe Azure storage services
77
description: "Azure storage services, tiers, redundancy options, and migration options and tools."
8-
ms.date: 01/09/2026
8+
ms.date: 02/03/2026
99
author: wwlpublish
1010
ms.author: robbarefoot
1111
ms.topic: module-standard-task-based
4.46 KB
Loading

learn-pr/wwl-azure/describe-cloud-compute/includes/1-introduction-microsoft-azure-fundamentals.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Azure Fundamentals is a series of three learning paths that familiarize you with
88

99
Whether you're interested in compute, networking, or storage services; learning about cloud security best practices; or exploring governance and management options, think of Azure Fundamentals as your curated guide to Azure.
1010

11-
Azure Fundamentals includes interactive exercises that give you hands-on experience with Azure. Many exercises provide a temporary Azure portal environment called the sandbox, which allows you to practice creating cloud resources for free at your own pace.
11+
Azure Fundamentals includes interactive exercises that give you hands-on experience with Azure.
1212

1313
Technical IT experience isn't required; however, having general IT knowledge will help you get the most from your learning experience.
1414

learn-pr/wwl-azure/describe-cloud-compute/index.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ uid: learn.wwl.describe-cloud-compute
33
metadata:
44
title: Describe Cloud Computing
55
description: "Introduction to concepts surrounding cloud computing. Mostly platform agnostic, focused instead on general concepts."
6-
ms.date: 12/19/2025
6+
ms.date: 02/03/2026
77
author: wwlpublish
88
ms.author: robbarefoot
99
ms.topic: module

0 commit comments

Comments
 (0)