AZ-900 Learning Portal
Objective 3.3 25 minmedium priorityazure-portalcloud-shellazure-cliazure-powershellazure-arcARM-templatesbicepIaC

3.3 — Describe features and tools for managing and deploying Azure resources

Azure resources can be managed through the portal, Cloud Shell, CLI, or PowerShell; Azure Arc extends management to non-Azure resources; ARM templates and Bicep enable declarative Infrastructure as Code deployments.

Concept — What & Why

Tools for Interacting with Azure

Azure provides multiple ways to manage and deploy resources. Each approach suits different audiences and automation needs.

ToolTypeBest for
Azure portalWeb-based GUIVisual management, exploration, one-off tasks
Azure Cloud ShellBrowser-based shell (Bash or PowerShell)Scripted management without local installation
Azure CLICommand-line (Bash syntax)Scripting and automation on any OS
Azure PowerShellCommand-line (PowerShell cmdlets)Scripting and automation using PowerShell syntax

Azure Portal

The Azure portalA web-based, unified console at portal.azure.com for managing Azure subscriptions. Provides a GUI for creating, managing, and monitoring everything from simple web apps to complex deployments. Designed for resiliency — maintains a presence in every Azure datacenter and requires no downtime for maintenance. is the primary web-based GUI for Azure, designed for resiliency with a presence in every Azure datacenter and no downtime for maintenance. Key characteristics:

  • Build, manage, and monitor everything from simple web apps to complex cloud deployments.
  • Create custom dashboards for an organized resource view.
  • Updates continuously; no version upgrades needed.

Azure Cloud Shell

Azure Cloud ShellA browser-based shell tool accessible directly from the Azure portal. Requires no local installation, supports both Azure PowerShell and Azure CLI, is automatically authenticated to your Azure credentials, and includes a persistent Azure Files share for storing scripts between sessions. requires no local installation — it is automatically authenticated to your Azure credentials and includes a persistent Azure Files share for storing scripts between sessions.


Azure CLI vs. Azure PowerShell

Both tools offer the same management capabilities via different syntax:

FeatureAzure CLIAzure PowerShell
Syntax styleBashPowerShell cmdlets
PlatformsWindows, Linux, Mac, Cloud ShellWindows, Linux, Mac, Cloud Shell
Command styleaz vm create ...New-AzVM ...
Best forBash/Linux users, DevOps pipelinesWindows admins, existing PowerShell users

Both can automate single tasks or orchestrate complex multi-resource deployments through scripts.


Azure Arc

Azure ArcExtends Azure management to resources that run outside of Azure — including on-premises datacenters and other cloud providers (multicloud). Works with Azure Resource Manager to project non-Azure resources into Azure so you can manage them with the same tools and policies. projects on-premises and multicloud resources into Azure Resource Manager so you can manage them with the same tools and policies as native Azure resources. What Azure Arc can manage outside of Azure:

  • Servers (Windows and Linux)
  • Kubernetes clusters
  • Azure data services (Arc-enabled SQL Managed Instance, PostgreSQL)
  • SQL Server
  • Virtual machines (preview)

With Azure Arc, organizations can apply consistent Azure governance, Azure Policy, and Azure Monitor across an entire hybrid and multicloud estate — no separate tooling per environment.


Azure Resource Manager (ARM)

Azure Resource Manager (ARM)The deployment and management layer for all of Azure. Every request from the portal, CLI, PowerShell, SDK, or REST API goes through ARM. ARM authenticates and authorizes the request, routes it to the correct Azure service, and returns consistent results regardless of which tool made the request. is the unified management layer for all of Azure — every portal click, CLI command, and SDK call is authenticated and authorized by ARM before reaching the target service. ARM benefits:

  • Manage infrastructure through declarative templates (JSON files) rather than imperative scripts.
  • Deploy, manage, and monitor all resources for a solution as a group.
  • Re-deploy consistently across dev, test, and production environments.
  • Defines dependencies so resources deploy in the correct order.
  • Native integration with RBAC.
  • Apply tags to resources for cost reporting and organization.

Infrastructure as Code (IaC)

Infrastructure as Code (IaC)Defining infrastructure in files (code) rather than through manual portal clicks or one-off scripts. Enables repeatability, version control, and automation of resource deployments. replaces manual portal configuration with version-controlled files that can be deployed consistently across dev, test, and production environments:

ToolFormatNotes
ARM templatesJSON (declarative)Native Azure format; verbose but comprehensive
BicepBicep DSL (declarative)Simpler syntax that compiles to ARM JSON; preferred for new projects
Azure CLI / PowerShell scriptsImperative scriptsGood for simple tasks; less repeatable than templates
TerraformHCL (third-party)Multi-cloud IaC; widely used but not an Azure-native tool

ARM templates define the desired end state in JSON. Azure Resource Manager validates the template and orchestrates resource creation, deploying independent resources in parallel where possible.

Bicep is a domain-specific language that compiles to ARM JSON. It offers simpler, more readable syntax while retaining all ARM capabilities. Bicep is NOT a separate service — it uses the same ARM deployment engine.


Deep Dive — How It Works

Management Tool Comparison — Full Matrix

ToolRequires installationAuth methodAutomation suitabilityBest syntax audience
Azure portalNone (browser)Browser loginLow (point-and-click)Visual/GUI users
Cloud ShellNone (browser)Auto-authenticatedHighAny (browser access)
Azure CLIYes (or Cloud Shell)az loginVery highBash / DevOps
Azure PowerShellYes (or Cloud Shell)Connect-AzAccountVery highPowerShell / Windows admins
REST APINone (HTTP client)Bearer tokenVery highDevelopers

Cloud Shell key advantage: automatically authenticated to your Azure account — no az login or Connect-AzAccount required.


ARM Templates — Key Properties

PropertyDetail
FormatJSON (declarative)
Deployment modelDesired end state — ARM figures out the "how"
IdempotentSame template = same result, every time
Dependency resolutionARM detects and respects resource dependencies automatically
ParallelismIndependent resources deploy simultaneously
ModularityNested templates, linked templates, and template specs
ExtensibilityDeployment scripts run PowerShell or Bash before/after resource creation

ARM vs. Bicep — Syntax Comparison

Both produce the same deployment result. Bicep is just a friendlier authoring surface:

AspectARM JSONBicep
Line count (same resource)~50 lines~10 lines
ReadabilityVerbose, JSONClean, DSL
CompilationNativeCompiles to ARM JSON
ToolingARM template engineSame ARM engine (via transpile)
New project recommendationLegacyPreferred

Azure Arc — What It Manages vs. What It Is Not

Azure Arc CAN doAzure Arc CANNOT do
Apply Azure Policy to on-premises serversRun native Azure services on-premises (that's Azure Stack)
Use Azure Monitor on non-Azure KubernetesReplace the on-premises infrastructure
Manage SQL Server with Azure toolingProvide Azure compute in on-premises datacenter
Apply RBAC and tags to non-Azure resourcesConnect resources without installing the Arc agent

Hands-On Lab

Explore Management Tools in the Azure Portal

Step 1 — Open Azure Cloud Shell

  1. Sign in to portal.azure.com.
  2. Click the Cloud Shell icon (terminal icon) in the top navigation bar.
  3. Choose Bash — observe that it is already authenticated to your Azure account (no login step).
  4. Run: az account show — see your subscription details without any login.
  5. Switch to PowerShell mode and run: Get-AzSubscription — same information, different syntax.

Step 2 — Deploy a Resource with a Custom ARM Template

  1. In the portal, search for "Deploy a custom template" and open Custom deployment.
  2. Click Build your own template in the editor.
  3. Paste a simple ARM template (e.g., a storage account template from MS Learn docs).
  4. Observe the JSON structure: $schema, resources, parameters, outputs.
  5. Cancel without deploying.

Step 3 — Explore Azure Arc

  1. Search for Azure Arc in the portal.
  2. Navigate to Infrastructure → Servers — this is where on-premises/non-Azure servers would appear after the Arc agent is installed.
  3. Click + Add to see the process for connecting a server — note the agent installation script.
  4. Cancel without connecting.

Step 4 — Review Azure Resource Manager via Portal Requests

  1. Open browser Developer Tools (F12) while in the Azure portal.
  2. Navigate to the Network tab and create a simple resource action (e.g., navigate to a resource's properties).
  3. Observe the API calls to management.azure.com — these are all ARM REST API calls that every portal action translates to.

Exam Angle — What AZ-900 Tests

AZ-900 Exam Focus

Exam Trap

"Azure CLI and Azure PowerShell have different capabilities" — Wrong. Both tools are functionally equivalent — the difference is only syntax. CLI uses Bash commands (az); PowerShell uses cmdlets (New-Az*, Get-Az*). Neither has features the other lacks.

Exam Trap

"Azure Cloud Shell requires installing software on your local machine" — Wrong. Cloud Shell runs entirely in the browser; no local installation is needed. It is automatically authenticated with your Azure credentials.

Exam Trap

"Azure Arc allows you to run Azure services in your on-premises datacenter" — Misleading. Arc projects on-premises resources into Azure for management; it does not run native Azure services on-premises. That capability belongs to Azure Stack.

Exam Trap

"ARM templates are imperative — they describe steps to execute" — Wrong. ARM templates are declarative — they describe the desired end state, and ARM figures out the execution steps, dependencies, and parallelism automatically.

Exam Trap

"Bicep is a separate service from ARM" — Wrong. Bicep compiles to ARM JSON templates; it is just a friendlier authoring language that uses the same ARM deployment engine. No additional service or registration is required.

Must Memorize

CLI = Bash syntax · PowerShell = cmdlet syntax · functionally identical
Cloud Shell = browser-based · auto-authenticated · no local install
ARM templates = declarative JSON · desired end state · idempotent
Bicep = compiles to ARM JSON · simpler syntax · same engine


Question — click to flip

Q: What is the difference between Azure CLI and Azure PowerShell?

Question — click to flip

Q: What is Azure Cloud Shell and what are its key advantages?

Question — click to flip

Q: What is Azure Arc used for?

Question — click to flip

Q: What is the difference between declarative and imperative Infrastructure as Code?

Question — click to flip

Q: What is Bicep and how does it relate to ARM templates?

Question — click to flip

Q: Every Azure management action — whether from the portal, CLI, PowerShell, or SDK — goes through which service?


Sources & Further Reading