Skip to content

Commit 03fd021

Browse files
Merge pull request #2872 from madeline-underwood/cobalt_arm
Deploy Cobalt 100 VMs with Azure Resource Manager templates
2 parents 4c9ffec + 41253d4 commit 03fd021

5 files changed

Lines changed: 81 additions & 83 deletions

File tree

content/learning-paths/servers-and-cloud-computing/azure-arm-template/_index.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
---
2-
title: Deploy a Linux Cobalt 100 VM with Azure Resource Manager templates
2+
title: Deploy Arm-based Cobalt 100 VMs using Azure Resource Manager templates
33

4-
draft: true
5-
cascade:
6-
draft: true
7-
84
minutes_to_complete: 45
95

10-
who_is_this_for: This is an introductory topic for developers and DevOps engineers who want to automate the deployment of Arm-based Cobalt 100 virtual machines using Azure Resource Manager templates.
6+
who_is_this_for: This is an introductory topic for developers and DevOps engineers who want to automate the deployment of Arm-based Azure Cobalt 100 virtual machines using Azure Resource Manager templates.
117

128
learning_objectives:
13-
- Understand Azure Resource Manager template structure and syntax
14-
- Create a Azure Resource Manager template for deploying Cobalt 100 virtual machines
15-
- Deploy an Arm-based Linux VM using the template with Azure CLI
16-
- Configure SSH authentication for secure access
9+
- Structure an Azure Resource Manager template with parameters, variables, and resources
10+
- Specify Arm64 architecture and Cobalt 100 Azure VM sizes
11+
- Deploy the template using Azure CLI and verify the deployment
12+
- Connect to your Cobalt 100 VM and validate the Arm64 architecture
1713

1814
prerequisites:
19-
- A Microsoft Azure account with permissions to create virtual machines and resource groups
15+
- An Azure subscription with permissions to create resource groups, virtual machines, and networking resources
16+
- Azure CLI installed on your local machine - see the [Azure CLI install guide](/install-guides/azure-cli/)
2017
- An SSH key pair for authentication
2118

2219
author: Pareena Verma
@@ -42,8 +39,8 @@ further_reading:
4239
link: https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dpsv6-series
4340
type: documentation
4441
- resource:
45-
title: Deploy a Cobalt 100 Virtual Machine on Azure
46-
link: https://learn.arm.com/learning-paths/servers-and-cloud-computing/cobalt/
42+
title: Deploy a Cobalt 100 virtual machine on Azure
43+
link: /learning-paths/servers-and-cloud-computing/cobalt/
4744
type: documentation
4845

4946

content/learning-paths/servers-and-cloud-computing/azure-arm-template/create-template.md

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
---
2-
title: Create the Resource Manager template
2+
title: Create the Azure Resource Manager template
33
weight: 3
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Azure Resource Manager template structure
9+
## Understand the Azure Resource Manager template structure
1010

11-
An Azure Resource Manager template consists of several key sections:
11+
An Azure Resource Manager template is a JSON file organized into six sections:
12+
- `$schema`: defines the template language version
13+
- `contentVersion`: your template's version number
14+
- `parameters`: input values that customize the deployment
15+
- `variables`: computed values used throughout the template
16+
- `resources`: Azure resources to create
17+
- `outputs`: values returned after deployment
1218

13-
- **$schema**: Defines the template language version
14-
- **contentVersion**: Your template's version number
15-
- **parameters**: Input values that customize the deployment
16-
- **variables**: Computed values used throughout the template
17-
- **resources**: Azure resources to create
18-
- **outputs**: Values returned after deployment
1919

2020
## Create the template file
2121

@@ -253,19 +253,13 @@ Create a new file named `cobalt-vm-template.json` on your local machine. This te
253253

254254
## Key template elements for Cobalt 100
255255

256-
The template includes several Arm-specific configurations:
256+
The template includes several Arm-specific configurations.
257257

258-
**VM size**: The `vmSize` parameter defaults to `Standard_D4ps_v6`, which is part of the Dpsv6 series powered by Cobalt 100 processors. This series provides:
259-
- Four vCPUs
260-
- General-purpose compute capabilities
261-
- Arm64 architecture
258+
**VM size**: The `vmSize` parameter defaults to `Standard_D4ps_v6`, part of the Dpsv6 series powered by Cobalt 100 processors. The D4ps_v6 size provides four vCPUs with general-purpose compute capabilities on Arm64 architecture.
262259

263-
Other Cobalt 100 VM sizes include:
264-
- `Standard_D2ps_v6` (2 vCPUs)
265-
- `Standard_D8ps_v6` (8 vCPUs)
266-
- `Standard_D16ps_v6` (16 vCPUs)
260+
Other available Cobalt 100 VM sizes include `Standard_D2ps_v6` (two vCPUs), `Standard_D8ps_v6` (8 vCPUs), and `Standard_D16ps_v6` (16 vCPUs).
267261

268-
**Image reference**: The `storageProfile` section specifies the operating system image with Arm64 architecture. You can choose from various Arm64-compatible Linux distributions available in Azure. The template uses Ubuntu 24.04 LTS:
262+
**Image reference**: The `storageProfile` section specifies the operating system image with Arm64 architecture. The template uses Ubuntu 24.04 LTS:
269263

270264
```json
271265
"imageReference": {
@@ -276,8 +270,7 @@ Other Cobalt 100 VM sizes include:
276270
}
277271
```
278272

279-
You can change the Arm64 image used in the `imageReference` section, for example:
280-
for Ubuntu 22.04 LTS:
273+
You can change the Arm64 image used in the `imageReference` section. For Ubuntu 22.04 LTS:
281274
```json
282275
"imageReference": {
283276
"publisher": "Canonical",
@@ -310,4 +303,6 @@ az vm image list --all --architecture Arm64 --output table
310303

311304
## What you've accomplished and what's next
312305

313-
You've created a complete Resource Manager template that defines the network infrastructure (virtual network, subnet, and network security groups), a public IP address for external access, a network interface, a Cobalt 100 VM with Ubuntu 24.04 LTS, and SSH key authentication for secure access. The template uses parameters for flexibility, allowing you to customize the deployment without modifying the template structure. In the next section, you'll deploy this template to Azure and connect to your new Cobalt 100 VM.
306+
You've created a complete Resource Manager template that defines network infrastructure, a Cobalt 100 VM with Ubuntu 24.04 LTS, and SSH key authentication. The template uses parameters for flexibility, allowing you to customize deployments without modifying the template structure.
307+
308+
Next, you'll deploy this template to Azure and connect to your new Cobalt 100 VM.

content/learning-paths/servers-and-cloud-computing/azure-arm-template/deploy-template.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Deploy the template
2+
title: Deploy the Azure Resource Manager template
33
weight: 4
44

55
### FIXED, DO NOT MODIFY
@@ -14,12 +14,13 @@ Azure Resource Manager templates deploy resources into a resource group. Create
1414
az group create --name cobalt-rg --location eastus
1515
```
1616

17-
Replace `eastus` with your preferred Azure region. To see available regions that support Cobalt 100 VMs, run:
17+
Replace `eastus` with your preferred Azure region. To see available regions that support Cobalt 100 VMs, query Azure for VM SKUs and filter for the Dpsv6 series:
1818

1919
```bash
2020
az vm list-skus --location eastus --size Standard_D --all --output table | grep "ps_v6"
2121
```
22-
The output will look like:
22+
23+
The output is similar to:
2324
```output
2425
virtualMachines eastus Standard_D16ps_v6 2,3 None
2526
virtualMachines eastus Standard_D2ps_v6 2,3 None
@@ -107,15 +108,15 @@ az deployment group show \
107108
--query properties.provisioningState
108109
```
109110

110-
The output displays `"Succeeded"` when the deployment completes successfully.
111+
The output displays `"Succeeded"` when the deployment completes.
111112

112113
List the resources created in the resource group:
113114

114115
```bash
115116
az resource list --resource-group cobalt-rg --output table
116117
```
117118

118-
The output should look like:
119+
The output is similar to:
119120

120121
```output
121122
Name ResourceGroup Location Type Status
@@ -131,7 +132,7 @@ cobaltdemo-vm_OsDisk_1_a3e13c940d07463cace48cfd1458a151 COBALT-RG eastus
131132

132133
The output shows the resources created: virtual machine, network interface, public IP address resource, virtual network, network security groups, and OS disk.
133134

134-
## Retrieve the VM's public IP address
135+
## Retrieve the Cobalt 100 VM public IP address
135136

136137
Get the public IP address to connect to your VM:
137138

@@ -152,4 +153,6 @@ The public IP address is dynamically allocated and won't be available until the
152153

153154
## What you've accomplished and what's next
154155

155-
You've successfully deployed an Arm-based Cobalt 100 VM using an Azure Resource Manager template. The deployment created a virtual network with a configured subnet, network security groups allowing SSH access, a public IP address for external connectivity, and a Cobalt 100 VM running Ubuntu 24.04 LTS. In the next section, you'll connect to your VM and verify the Arm64 architecture.
156+
You've deployed an Arm-based Cobalt 100 VM using an Azure Resource Manager template. The deployment includes network infrastructure with security groups, a public IP address, and a VM running Ubuntu 24.04 LTS.
157+
158+
Next, you'll connect to your VM and verify the Arm64 architecture.
Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,50 @@
11
---
2-
title: Overview
2+
title: Getting started with Azure Resource Manager
33
weight: 2
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
In this Learning Path, you'll create an Azure Resource Manager template that deploys a Linux virtual machine powered by Azure Cobalt 100 processors. The template configures networking, security, and SSH authentication, providing a complete foundation for deploying Arm-based workloads on Azure.
9+
## Overview
1010

11-
You'll learn how to:
11+
In this Learning Path, you’ll create an Azure Resource Manager template that deploys a Linux virtual machine powered by Azure Cobalt 100 processors. The template defines the virtual machine, networking, security settings, and SSH authentication required for deployment.
1212

13-
- Structure an Azure Resource Manager template with parameters, variables, and resources
14-
- Specify Arm64 architecture and Cobalt 100 VM sizes
15-
- Configure SSH key authentication for secure access
16-
- Deploy the template using Azure CLI
17-
- Verify and connect to your deployed Arm-based VM
18-
19-
By the end of this Learning Path, you'll have a reusable template for deploying Cobalt 100 VMs and the knowledge to customize it for your specific requirements.
20-
Azure Resource Manager templates provide a declarative way to define and deploy Azure infrastructure as code. By using Resource Manager templates, you can automate the deployment of Arm-based Cobalt 100 virtual machines with consistent, repeatable results across different environments.
13+
By using Azure Resource Manager templates, you can deploy infrastructure consistently across environments, reduce configuration errors, and integrate infrastructure provisioning into CI/CD workflows.
2114

2215
## What is an Azure Resource Manager template?
2316

24-
Azure Resource Manager templates are JSON files that define the infrastructure and configuration you want to deploy in Azure. Templates enable Infrastructure as Code (IaC), allowing you to version control your infrastructure alongside your application code. When you submit a template to Azure Resource Manager, it orchestrates the creation of all specified resources in the correct order, managing dependencies automatically. By using templates, you can achieve consistent, repeatable deployments across different environments while reducing configuration errors and enabling CI/CD automation.
17+
An Azure Resource Manager template is a JSON file that defines the infrastructure and configuration you want to deploy in Azure. This approach is known as Infrastructure as Code (IaC).
18+
19+
When you deploy a template, Azure Resource Manager:
20+
- Creates resources in the correct order
21+
- Manages dependencies automatically
22+
- Ensures deployments are consistent and repeatable
23+
24+
Using templates allows you to version control infrastructure alongside application code and automate deployments across environments.
2525

26-
## Before you begin
26+
## Set up your environment
2727

2828
To complete this Learning Path, you need:
2929

30-
- An active Microsoft Azure subscription with permissions to:
31-
- Create resource groups
32-
- Deploy virtual machines
33-
- Create networking resources (virtual networks, network security groups, public IP addresses)
34-
- Azure CLI installed on your local machine (see the [Azure CLI install guide](/install-guides/azure-cli/))
35-
- An SSH key pair for authentication
30+
- An Azure account with an active subscription
31+
- Azure CLI installed and configured
32+
- A local terminal on Linux, macOS, or Windows (with WSL)
33+
- An SSH key pair for secure access to the virtual machine
3634

3735
## Generate an SSH key pair
3836

39-
If you don't already have an SSH key pair, create one now. On Linux or macOS, run:
37+
If you don't have an SSH key pair, create one now. On Linux or macOS, run:
4038

4139
```bash
4240
ssh-keygen -t rsa -b 4096 -f ~/.ssh/azure_cobalt_key
4341
```
4442

4543
When prompted, you can enter a passphrase for added security or press Enter to skip it.
4644

47-
This command creates two files:
48-
- `~/.ssh/azure_cobalt_key` - Your private key (keep this secure)
49-
- `~/.ssh/azure_cobalt_key.pub` - Your public key (you'll use this in the Azure Resource Manager template)
45+
This creates two files:
46+
- `~/.ssh/azure_cobalt_key` (private key - keep this secure)
47+
- `~/.ssh/azure_cobalt_key.pub` (public key - you'll use this in the template)
5048

5149
## Sign in to Azure
5250

@@ -72,7 +70,7 @@ You can list your subscriptions with:
7270
az account list --output table
7371
```
7472

75-
## Verify Azure CLI is working
73+
## Verify your Azure CLI configuration
7674

7775
Confirm your Azure CLI is properly configured by checking your current subscription:
7876

@@ -82,4 +80,8 @@ az account show --output table
8280

8381
The output displays details about your active subscription, including the subscription ID and tenant ID.
8482

85-
You're now ready to create the Azure Resource Manager template that will define your Arm-based Cobalt 100 VM infrastructure.
83+
## What you've accomplished and what's next
84+
85+
You've authenticated with Azure, configured your active subscription, and generated SSH keys for secure VM access. Your development environment is ready for creating Azure Resource Manager templates.
86+
87+
Next, you'll create the Resource Manager template that defines your Cobalt 100 VM infrastructure.

content/learning-paths/servers-and-cloud-computing/azure-arm-template/verify.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: Connect and verify
2+
title: Connect to the Cobalt 100 VM and verify Arm64 architecture
33
weight: 5
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Connect to the VM via SSH
9+
## Connect to the Cobalt 100 VM via SSH
1010

1111
Use the public IP address from the previous step to connect to your Cobalt 100 VM:
1212

@@ -34,19 +34,16 @@ Check the CPU information:
3434
lscpu
3535
```
3636

37-
The output shows details about the Cobalt 100 processor, including:
38-
- Architecture: aarch64
39-
- CPU(s): 4 (for Standard_D4ps_v6)
40-
- Vendor ID: ARM
37+
The output shows details about the Cobalt 100 processor, including Architecture (aarch64), CPU count (four for Standard_D4ps_v6), and Vendor ID (ARM).
4138

42-
## Check system information
39+
## View Cobalt 100 system information
4340

4441
View detailed system information:
4542

4643
```bash
4744
cat /proc/cpuinfo | head -10
4845
```
49-
The output should look like:
46+
The output is similar to:
5047
```output
5148
processor : 0
5249
BogoMIPS : 2000.00
@@ -65,7 +62,7 @@ This displays processor details, including key architectural features of the Cob
6562
- **sve** and **sve2**: Scalable Vector Extension instructions for enhanced SIMD (Single Instruction, Multiple Data) performance
6663
- **sha256**, **sha3**, **sha512**: Hardware-accelerated cryptographic operations for improved security workload performance
6764

68-
These features make Cobalt 100 well-suited for AI/ML workloads, data analytics, and compute-intensive applications running on Arm64 architecture.
65+
These features make Cobalt 100 well-suited for AI/ML workloads, data analytics, and compute-intensive applications on Arm64 architecture.
6966

7067
Verify the operating system:
7168

@@ -75,7 +72,7 @@ lsb_release -a
7572

7673
The output confirms Ubuntu 24.04 LTS (Noble Numbat).
7774

78-
## Install and test software
75+
## Install and test software on Arm64
7976

8077
Update the package lists and install a simple application to verify everything works:
8178

@@ -90,7 +87,8 @@ Check that nginx is running:
9087
sudo systemctl status nginx
9188
```
9289

93-
The output shows nginx is active and running.
90+
The output shows nginx is active and running:
91+
9492
```output
9593
● nginx.service - A high performance web server and a reverse proxy server
9694
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
@@ -119,7 +117,7 @@ Test that nginx is working:
119117
curl http://localhost
120118
```
121119

122-
The output displays the nginx default welcome page HTML, confirming the web server is running correctly.
120+
The output displays the nginx default welcome page HTML, confirming the web server is running correctly:
123121

124122
```output
125123
<!DOCTYPE html>
@@ -146,18 +144,21 @@ Commercial support is available at
146144
</body>
147145
</html>
148146
```
147+
149148
## Clean up resources (optional)
150149

151-
When you're done exploring, you can delete all resources to avoid ongoing charges:
150+
When you're done exploring, delete all resources to avoid ongoing charges:
152151

153152
```bash
154153
az group delete --name cobalt-rg --yes --no-wait
155154
```
156155

157156
This command deletes the resource group and all resources within it. The `--no-wait` flag returns immediately without waiting for the deletion to complete.
158157

159-
## Summary
158+
## What you've accomplished and what's next
159+
160+
You've deployed a Cobalt 100 VM using an Azure Resource Manager template, connected via SSH, verified the Arm64 architecture, and tested nginx on the running system.
160161

161-
You've successfully deployed a Cobalt 100 VM using a Azure Resource Manager template, connected to the VM via SSH, verified the Arm64 architecture, and installed and tested nginx. Your Azure Resource Manager template provides a reusable foundation for deploying Cobalt 100 VMs. You can customize it by changing the VM size to scale resources, modifying the OS image to use different Linux distributions, adding additional network security rules for your applications, including data disks for storage, or deploying multiple VMs in a single template.
162+
Your template provides a reusable foundation for deploying Cobalt 100 VMs. You can customize it by changing the VM size, modifying the OS image, adding network security rules, including data disks, or deploying multiple VMs.
162163

163-
For production deployments, consider using parameters files for environment-specific configurations, implementing Azure Key Vault for managing SSH keys, adding monitoring and diagnostics extensions, configuring backup policies, and using managed identities for Azure resource access.
164+
For production deployments, consider using parameters files for environment-specific configurations, Azure Key Vault for managing SSH keys, monitoring and diagnostics extensions, backup policies, and managed identities for Azure resource access.

0 commit comments

Comments
 (0)