LAB 03 ~2 giờ Module 2 Trung bình

Tạo & Quản Lý Azure Virtual Machines

Deploy VM Linux Ubuntu và Windows Server trên Azure, cấu hình kích thước, managed disk, Network Security Group, kết nối SSH/RDP, và triển khai theo Availability Zones để đảm bảo high availability.

Mục Tiêu Lab

Deploy VM Linux Ubuntu 22.04 LTS với SSH key authentication

Deploy VM Windows Server 2022 và kết nối qua RDP

Chọn VM size phù hợp và resize VM khi cần

Thêm managed data disk và cấu hình NSG rules

Triển khai VM theo Availability Zones để high availability

Monitor VM metrics và thiết lập auto-shutdown tiết kiệm chi phí

Yêu Cầu Chuẩn Bị

Cần có:
  • Hoàn thành Lab 01 + Lab 02
  • SSH client: OpenSSH (Windows 10+) hoặc PuTTY
  • RDP client: mstsc.exe (Windows) hoặc Microsoft Remote Desktop (macOS)
  • $20–$30 credit (VM sẽ bị charge, nhớ xóa sau lab)
Chi phí ước tính:
  • B2s Linux VM: ~$0.048/giờ (~$1.15/ngày)
  • B2s Windows VM: ~$0.096/giờ (~$2.30/ngày)
  • Managed disk P10: ~$0.06/giờ
  • Bật auto-shutdown 22:00 để tiết kiệm tối đa

Kịch Bản & Tài Nguyên

Bạn cần deploy hệ thống 2-tier: VM Linux làm web server và VM Windows làm application server tại Southeast Asia, triển khai trên Availability Zones khác nhau để HA.

VM Linux
vm-linux-web
Ubuntu 22.04 LTS
Size: Standard_B2s
Zone: 1
VM Windows
vm-win-app
Windows Server 2022
Size: Standard_B2s
Zone: 2
Networking
vnet-lab03
10.0.0.0/16
subnet-default
10.0.1.0/24
NSG Rules
Linux: SSH 22
Windows: RDP 3389
Both: HTTP 80
Inbound only

Các Bước Thực Hiện

1

Chuẩn Bị Resource Group & Virtual Network

Tạo RG và VNet trước để VM chia sẻ cùng network, tránh việc mỗi VM tự tạo VNet riêng.

Cách 1 — Azure Portal
  1. 1.Tạo RG: rg-hoatranlab-lab03 tại Southeast Asia
  2. 2.Portal → Virtual networks → + Create
  3. 3.Name: vnet-lab03 → Region: Southeast Asia
  4. 4.IP Addresses: 10.0.0.0/16 → Subnet: subnet-default 10.0.1.0/24
  5. 5.Review + Create → Create
Cách 2 — Azure CLI
Azure CLI
# Tạo Resource Group
az group create \
  --name rg-hoatranlab-lab03 \
  --location southeastasia \
  --tags env=lab module=az104

# Tạo Virtual Network + Subnet
az network vnet create \
  --name vnet-lab03 \
  --resource-group rg-hoatranlab-lab03 \
  --location southeastasia \
  --address-prefix 10.0.0.0/16 \
  --subnet-name subnet-default \
  --subnet-prefix 10.0.1.0/24
2

Deploy VM Linux Ubuntu 22.04 LTS (Availability Zone 1)

Ubuntu 22.04 LTS là image Linux phổ biến nhất trên Azure. Dùng SSH key authentication thay vì password để bảo mật hơn.

Cách 1 — Azure Portal
  1. 1.Portal → Virtual machines → + Create → Azure virtual machine
  2. 2.RG: rg-hoatranlab-lab03 | VM name: vm-linux-web
  3. 3.Region: Southeast Asia | Availability Zone: Zone 1
  4. 4.Image: Ubuntu Server 22.04 LTS | Size: Standard_B2s
  5. 5.Authentication: SSH public key → Generate new key pair → vm-linux-web-key
  6. 6.Inbound ports: tick SSH (22)
  7. 7.Tab Networking: chọn vnet-lab03 / subnet-default | Public IP: Standard SKU
  8. 8.Tab Management: bật Auto-shutdown → 22:00 (tiết kiệm chi phí)
  9. 9.Review + Create → Download key pair → Create
Cách 2 — Azure CLI
Azure CLI
# Tạo SSH key pair (nếu chưa có)
ssh-keygen -t rsa -b 4096 \
  -C "vm-linux-web-key" \
  -f ~/.ssh/vm-linux-web-key \
  -N ""

# Tạo Public IP Standard SKU
az network public-ip create \
  --name pip-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --sku Standard \
  --zone 1

# Deploy Linux VM tại Zone 1
az vm create \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --location southeastasia \
  --zone 1 \
  --image Ubuntu2204 \
  --size Standard_B2s \
  --vnet-name vnet-lab03 \
  --subnet subnet-default \
  --public-ip-address pip-linux-web \
  --ssh-key-values ~/.ssh/vm-linux-web-key.pub \
  --admin-username azureadmin \
  --os-disk-size-gb 30

# Xem Public IP sau khi tạo xong
az vm show \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --show-details \
  --query publicIps -o tsv
3

Kết Nối SSH vào VM Linux

Cách 1 — Portal (Connect blade)
  1. 1.Vào VM vm-linux-web → Connect (left menu) → SSH
  2. 2.Portal hiển thị câu lệnh SSH sẵn → copy và paste vào terminal
  3. 3.Hoặc dùng Azure Bastion nếu không muốn mở port 22 public
Cách 2 — Terminal (SSH)
Bash— Local Terminal hoặc Cloud Shell
# Lấy Public IP
PUBLIC_IP=$(az vm show \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --show-details --query publicIps -o tsv)

echo "Public IP: $PUBLIC_IP"

# Kết nối SSH (dùng key file đã tạo)
ssh -i ~/.ssh/vm-linux-web-key \
  azureadmin@$PUBLIC_IP

# Sau khi kết nối, thử các lệnh trên VM:
uname -a          # Xem OS info
lsb_release -a    # Ubuntu version
df -h             # Disk space
free -m           # RAM usage

# Cài nginx để test web server
sudo apt update && sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
curl localhost
Kết quả (Output)— SSH thành công
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.5.0-1021-azure x86_64)

  System information as of Thu May 21 10:00:00 UTC 2026

  System load:  0.08              Processes:             108
  Usage of /:   5.2% of 28.89GB  Users logged in:       0
  Memory usage: 9%                IPv4 address for eth0: 10.0.1.4

azureadmin@vm-linux-web:~$
4

Deploy VM Windows Server 2022 (Availability Zone 2)

Cách 1 — Azure Portal
  1. 1.Portal → Virtual machines → + Create
  2. 2.VM name: vm-win-app | Zone: Zone 2
  3. 3.Image: Windows Server 2022 Datacenter | Size: Standard_B2s
  4. 4.Username: azureadmin | Password: đặt password mạnh (12+ ký tự)
  5. 5.Inbound ports: tick RDP (3389)
  6. 6.Networking: chọn vnet-lab03 / subnet-default
  7. 7.Management: bật Auto-shutdown 22:00
  8. 8.Review + Create → Create (đợi ~3–5 phút)
Cách 2 — Azure CLI
Azure CLI
# Tạo Public IP Standard SKU cho Windows VM
az network public-ip create \
  --name pip-win-app \
  --resource-group rg-hoatranlab-lab03 \
  --sku Standard \
  --zone 2

# Deploy Windows VM tại Zone 2
az vm create \
  --name vm-win-app \
  --resource-group rg-hoatranlab-lab03 \
  --location southeastasia \
  --zone 2 \
  --image Win2022Datacenter \
  --size Standard_B2s \
  --vnet-name vnet-lab03 \
  --subnet subnet-default \
  --public-ip-address pip-win-app \
  --admin-username azureadmin \
  --admin-password "P@ssw0rd2026Lab!"

# Mở port RDP
az vm open-port \
  --name vm-win-app \
  --resource-group rg-hoatranlab-lab03 \
  --port 3389 \
  --priority 1010

# Lấy Public IP
az vm show \
  --name vm-win-app \
  --resource-group rg-hoatranlab-lab03 \
  --show-details \
  --query publicIps -o tsv
5

Cấu Hình NSG & Thêm Data Disk

NSG (Network Security Group) là firewall layer 4 kiểm soát traffic vào/ra VM. Managed Data Disk là block storage bổ sung, tách biệt với OS disk.

Cách 1 — Azure Portal

Thêm NSG rule cho HTTP:

  1. 1.VM vm-linux-web → Networking → tab Network settings
  2. 2.Click Add inbound port rule → Port: 80, Protocol: TCP, Priority: 1020, Name: Allow-HTTP

Thêm Data Disk:

  1. 3.VM → Disks+ Add data disk
  2. 4.Create disk: Name disk-linux-data, Size: 32 GiB, Type: Premium SSD
  3. 5.Click Apply → disk attach vào VM
Cách 2 — Azure CLI
Azure CLI
# Mở port 80 HTTP trên VM Linux
az vm open-port \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --port 80 \
  --priority 1020

# Tạo managed data disk 32 GiB Premium SSD
az disk create \
  --name disk-linux-data \
  --resource-group rg-hoatranlab-lab03 \
  --size-gb 32 \
  --sku Premium_LRS \
  --zone 1

# Attach disk vào VM Linux
az vm disk attach \
  --name disk-linux-data \
  --resource-group rg-hoatranlab-lab03 \
  --vm-name vm-linux-web

# Verify disk đã attach
az vm show \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --query "storageProfile.dataDisks" \
  --output table
Bash— SSH vào VM Linux để mount disk
# Sau khi SSH vào vm-linux-web, format và mount data disk
# Xem disk mới (thường là /dev/sdc)
lsblk

# Format disk với ext4
sudo mkfs.ext4 /dev/sdc

# Tạo mount point
sudo mkdir /mnt/data

# Mount disk
sudo mount /dev/sdc /mnt/data

# Thêm vào fstab để auto-mount sau reboot
echo '/dev/sdc /mnt/data ext4 defaults 0 2' | sudo tee -a /etc/fstab

# Verify
df -h /mnt/data
6

Resize VM & Kết Nối RDP Windows

Cách 1 — Azure Portal

Resize VM:

  1. 1.VM vm-linux-web → Size (left menu) → chọn Standard_B2ms → Resize
  2. 2.VM sẽ restart tự động trong quá trình resize (~1–2 phút)

Kết nối RDP Windows:

  1. 3.VM vm-win-app → ConnectDownload RDP file
  2. 4.Mở file .rdp → Connect → nhập user azureadmin + password
  3. 5.Chấp nhận certificate warning → Desktop Windows Server xuất hiện
Cách 2 — Azure CLI
Azure CLI
# Xem danh sách sizes có sẵn tại region
az vm list-vm-resize-options \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --query "[?contains(name,'Standard_B')]" \
  --output table

# Resize VM (VM sẽ restart)
az vm resize \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --size Standard_B2ms

# Xác nhận size mới
az vm show \
  --name vm-linux-web \
  --resource-group rg-hoatranlab-lab03 \
  --query hardwareProfile.vmSize -o tsv

# Lấy Public IP của Windows VM để kết nối RDP
WIN_IP=$(az vm show \
  --name vm-win-app \
  --resource-group rg-hoatranlab-lab03 \
  --show-details --query publicIps -o tsv)
echo "RDP tới: $WIN_IP"
# Windows: mstsc /v:$WIN_IP

Kết Quả Đầu Ra Lab 03

VM Linux chạy Zone 1

SSH thành công, nginx trả về HTML, curl http://PUBLIC_IP hiển thị nginx page

VM Windows chạy Zone 2

RDP thành công, Desktop Windows Server 2022 hiển thị, Server Manager mở

Data disk mounted

df -h hiển thị /mnt/data 32G, fstab entry đảm bảo auto-mount

NSG hoạt động đúng

Port 22 và 80 open; curl http://PUBLIC_IP trả về nginx default page

Availability Zones phân tách

Portal → VM → Properties hiển thị Zone 1 vs Zone 2 — hai VM không cùng zone

Auto-shutdown cấu hình

VM → Operations → Auto-shutdown hiển thị 22:00 enabled — tránh billing qua đêm

Dọn Dẹp Tài Nguyên

VM và Public IP là tài nguyên tốn phí. Xóa ngay sau khi hoàn thành lab.

Azure CLI
# Xóa toàn bộ RG và tất cả resources bên trong
az group delete \
  --name rg-hoatranlab-lab03 \
  --yes \
  --no-wait

# Xác nhận sau ~5 phút
az group exists --name rg-hoatranlab-lab03

Câu Hỏi Ôn Tập

1. Sự khác biệt giữa Availability Zone và Availability Set là gì? Khi nào nên dùng mỗi loại?

Gợi ý: AZ = tách biệt datacenter vật lý (khác building, power, cooling) → SLA 99.99%; AS = tách fault domain/update domain trong cùng datacenter → SLA 99.95%. Dùng AZ khi region hỗ trợ zones; AS cho regions không có zones.

2. Khi stop VM từ Portal (Deallocate), bạn có còn bị tính phí compute không? Điều gì vẫn bị tính phí?

Gợi ý: Compute (vCPU, RAM) không tính khi Deallocated; OS disk và data disk vẫn tính; Static Public IP vẫn tính (~$0.004/giờ). Stop từ OS bên trong (shutdown) không deallocate → vẫn tính phí.

3. NSG rule có Priority như thế nào? Rule nào được evaluate trước?

Gợi ý: Priority thấp hơn = được xử lý trước (100 trước 200). Range 100-4096. Khi một rule match, các rules còn lại không được evaluate. Default deny-all rule có priority 65500.

4. Tại sao nên dùng SSH key thay vì password cho Linux VM? Làm thế nào để rotate SSH key?

Gợi ý: SSH key không thể brute-force; private key không truyền qua network; 2048/4096-bit RSA vs 8-char password. Rotate: thêm public key mới vào ~/.ssh/authorized_keys, sau đó xóa key cũ.

5. Managed Disk khác gì Unmanaged Disk? Microsoft khuyến nghị dùng loại nào và tại sao?

Gợi ý: Managed = Azure tự quản lý Storage Account, tự scale, hỗ trợ Zone redundancy, snapshot tích hợp. Unmanaged = bạn tự quản lý Storage Account (legacy). Luôn dùng Managed Disk cho workloads mới.

Lab 02: Azure Administration Thư viện Labs Lab 04: Storage
Zalo