Skip to main content

Azure Bicep & Deployment Stacks — Enterprise Architectural Guidance

Prepared by: Microsoft Cloud Solution Architecture
Date: April 2026
Audience: Enterprise Platform Engineering, Cloud Architecture & DevOps Teams
Context: Enterprise Scale Landing Zone, Frequent Application Deployments, IaC Strategy
Classification: Customer-Facing Advisory


Table of Contents

  1. Executive Summary
  2. Customer Question 1 — Are Deployment Stacks Recommended for Frequent Application Deployments?
  3. Customer Question 2 — Microsoft-Recommended Pattern for Predictable Change Planning
  4. Customer Question 3 — Bicep + Deployment Stacks vs Terraform
  5. Architecture — Layered IaC Deployment Model
  6. Deployment Stacks Deep-Dive — Capabilities, Scopes & Deny Settings
  7. Bicep What-If — Predictable Change Planning
  8. Decision Matrix — When to Use What
  9. Implementation Patterns — CI/CD Pipeline Integration
  10. Known Limitations & Gaps
  11. Migration Roadmap — Moving to the Layered Model
  12. Recommended Next Steps
  13. Microsoft Learn Reference Links

1. Executive Summary

Azure Deployment Stacks are a powerful resource lifecycle management capability, but they are not designed to be the primary deployment mechanism for high-frequency application releases. This document provides the Microsoft-recommended architectural pattern for enterprises that need both safe infrastructure lifecycle management and fast, predictable application deployment.

The Core Recommendation

ConcernRecommended Approach
Infrastructure lifecycle (create, protect, delete)Bicep + Deployment Stacks
Frequent application deploymentsBicep + Incremental ARM deployments
Change planning & impact analysisBicep What-If + scoped deployments
Avoiding broad resource reapplicationTemplate splitting + modular Bicep

Key Insight: The Microsoft-recommended target state is a layered deployment model that separates long-lived foundational infrastructure (managed by Deployment Stacks) from fast-moving application resources (deployed via standard Bicep incremental deployments). This approach maximizes predictability, speed, and minimizes deployment blast radius.

Why This Matters

When Deployment Stacks are used for every deployment, including frequent application releases, enterprises commonly experience:

SymptomRoot Cause
Longer deployment timesStack evaluates managed state for all resources on every update
Unexpected resource modificationsStack-wide evaluation may touch resources outside the change scope
Delete/detach riskRemoving a resource from template triggers ActionOnUnmanage behavior
CI/CD pipeline complexityStack operations require additional permissions and error handling
Difficult change impact analysisWhat-If is not yet supported within Deployment Stacks

Customer Question

"Is Deployment Stacks the recommended approach for frequent application deployments where we need safe delete behavior?"

Answer: Usually No — Not as the Primary Model for High-Frequency Application Releases

Azure Deployment Stacks (Microsoft.Resources/deploymentStacks) are designed for resource lifecycle management — specifically for scenarios where you need:

CapabilityDescription
Managed resource ownershipTrack which resources belong to a deployment unit
Controlled delete / detach behaviorDecide what happens when resources are removed from templates
Deny settings (DenyDelete / DenyWriteAndDelete)Prevent unauthorized modification or deletion of managed resources
Environment cleanupClean up entire environments by deleting the stack
Platform guardrailsProtect shared infrastructure from accidental changes

Where Deployment Stacks Excel

Why Deployment Stacks Are Not Ideal for Frequent Releases

IssueExplanation
Full managed-state evaluationEvery stack update evaluates all managed resources, not just the changed ones. For a stack with 50+ resources, this adds latency and risk even when only one resource changes.
ActionOnUnmanage side effectsIf a resource is temporarily removed from a template (e.g., during a refactor), the stack may delete or detach it depending on the ActionOnUnmanage setting.
No What-If supportDeployment Stacks do not currently support the What-If operation. You cannot preview changes before applying them — a significant gap for production CI/CD.
Deny assignment complexityDeny settings can block legitimate application team operations if not carefully scoped. Maximum 2,000 deny assignments per scope.
Stack-out-of-sync errorsIf resources are modified outside the stack (e.g., by a developer or automation), subsequent stack operations may produce out-of-sync errors requiring manual intervention.
Permission overheadStack operations require Microsoft.Resources/deploymentStacks/* permissions and potentially manageDenySetting/action, adding RBAC complexity.

Customer Question

"What is the Microsoft-recommended pattern to get predictable change planning and avoid broad resource reapplication side effects?"

Answer: The Layered Deployment Model

Microsoft recommends separating infrastructure into layers based on change frequency and ownership, then using the appropriate deployment mechanism for each layer.

The Two-Layer Model

How This Reduces Side Effects

ProblemHow the Layered Model Solves It
Reprocessing unrelated resourcesEach layer deploys only its own resources. An app deployment never touches VNets or Key Vaults.
Accidental replacement riskPlatform resources are protected by Deny settings. App resources use scoped incremental deployments.
Longer deployment timesApp deployments target a small, focused set of resources — typically completing in 2-5 minutes.
Stack-wide evaluation noiseApp layer doesn't use stacks — no managed-state evaluation overhead.
Change impact visibilityApp deployments use What-If to preview every change before applying.

Achieving Predictable Change Planning

Step 1 — Split Templates by Scope

infra/
├── platform/ # Layer 1 — Deployment Stacks
│ ├── main.bicep # Networking, shared services
│ ├── networking.bicep # VNets, subnets, NSGs, PEs
│ ├── shared-services.bicep # Key Vault, Storage, LAW
│ ├── identities.bicep # Managed identities, RBAC
│ └── parameters/
│ ├── dev.bicepparam
│ ├── staging.bicepparam
│ └── prod.bicepparam

├── application/ # Layer 2 — Standard deployments
│ ├── main.bicep # App-specific resources
│ ├── app-service.bicep # App Service Plan + Apps
│ ├── functions.bicep # Function Apps
│ ├── container-apps.bicep # Container Apps
│ ├── app-config.bicep # App Configuration, settings
│ └── parameters/
│ ├── dev.bicepparam
│ ├── staging.bicepparam
│ └── prod.bicepparam

└── modules/ # Shared Bicep modules
├── private-endpoint.bicep
├── diagnostic-settings.bicep
├── role-assignment.bicep
└── tags.bicep

Step 2 — Use What-If in Every Pipeline

# Preview changes BEFORE deploying application resources
az deployment group what-if \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--result-format FullResourcePayloads

# Only proceed if What-If output is acceptable
az deployment group create \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--mode Incremental

Step 3 — Use Deployment Stacks Only for Platform Layer

# Deploy platform infrastructure with lifecycle protection
az stack group create \
--name "platform-stack-prod" \
--resource-group "rg-platform-prod" \
--template-file "./infra/platform/main.bicep" \
--parameters "./infra/platform/parameters/prod.bicepparam" \
--action-on-unmanage deleteResources \
--deny-settings-mode denyDelete

4. Customer Question 3 — Bicep + Deployment Stacks vs Terraform

Customer Question

"Should we continue with Bicep plus Deployment Stacks or consider a different target model (other ARM/Bicep deployment patterns or Terraform)?"

Answer: It Depends on Your Cloud Footprint and Team Maturity

Comparison Table — Bicep vs Terraform for Azure Deployments

CapabilityBicep + Deployment StacksHashiCorp Terraform
Azure feature parityFirst-class — same day as ARM APIDays to weeks lag behind ARM
State managementDeployment Stacks (managed by Azure)Terraform state file (self-managed or Terraform Cloud)
Change planningWhat-If (standard deployments only — not Stacks)terraform plan (mature, comprehensive)
Delete behaviorActionOnUnmanage (deleteAll / deleteResources / detachAll)Resources removed from config are destroyed by default
Deny settings / protectionNative deny assignments (DenyDelete, DenyWriteAndDelete)No equivalent — use Azure resource locks separately
Multi-cloudAzure onlyAWS, Azure, GCP, 3,000+ providers
RBAC integrationNative Azure RBACService principal / managed identity required
Module ecosystemAzure Verified Modules (AVM)Terraform Registry (massive)
Learning curveLow for Azure teamsModerate — HCL syntax, state concepts
CI/CD integrationAzure DevOps / GitHub Actions nativeTerraform Cloud, Spacelift, or self-hosted
Drift detectionDeployment Stacks evaluate on updateterraform plan detects drift
CostFreeTerraform Cloud paid for teams; open-source is free
Graph provider (Entra ID)⚠️ Deployment Stacks do not support Microsoft Graph provider✅ AzureAD provider supported

Decision Framework

Microsoft's Practical Recommendation for Azure-Centric Enterprises

AspectRecommendation
Strategic IaC languageBicep — first-class Azure support, no state file management, ARM What-If
Platform infrastructureDeployment Stacks — lifecycle ownership, safe deletion, deny settings
Application deploymentsStandard Bicep incremental — fast, predictable, What-If supported
CI/CD integrationWhat-If as mandatory gate before production deployments
Template organizationModular Bicep with AVM (Azure Verified Modules)
Drift detectionDeployment Stacks for platform; periodic reconciliation for app layer

5. Architecture — Layered IaC Deployment Model

Enterprise Reference Architecture

Why Subscription-Scope Stacks for Platform

Microsoft recommends creating platform Deployment Stacks at subscription scope (deploying to resource group scope) rather than at resource group scope, because:

  1. Deny assignments are isolated — Developers in the resource group cannot see or modify the stack
  2. Reduced blast radius — Stack management is separated from day-to-day resource group operations
  3. Better RBAC isolation — Only platform team members need stack management permissions at subscription level
  4. Centralized governance — Platform team manages all stacks from a single scope

Reference: Create deployment stacks at subscription scope


6. Deployment Stacks Deep-Dive — Capabilities, Scopes & Deny Settings

Deployment Scope Options

Stack ScopeDeploys ToBest ForCommand
Resource GroupSame resource groupSimple single-RG workloadsaz stack group create
SubscriptionResource group(s) within subscriptionRecommended — platform resources with RG isolationaz stack sub create
Management GroupSubscription(s) within MGLanding zone-level governance, policy-driven deploymentsaz stack mg create

ActionOnUnmanage Behavior

When a resource is removed from the Bicep template and the stack is updated, the ActionOnUnmanage setting determines what happens:

SettingResourcesResource GroupsUse Case
detachAllDetached (orphaned)DetachedSafest default — resources remain but are no longer tracked
deleteResourcesDeletedDetachedPlatform cleanup — delete resources but keep RGs
deleteAllDeletedDeletedFull environment teardown (dev/test cleanup)

⚠️ Warning: deleteAll will delete managed resource groups and all resources within them, including resources not managed by the stack. Use with extreme caution in production.

Deny Settings Configuration

Deny ModeEffectWhen to Use
noneNo protectionDev/test environments
denyDeletePrevents deletion of managed resourcesRecommended for production platform resources
denyWriteAndDeletePrevents modification AND deletionCritical shared infrastructure (hub VNets, firewalls)

Advanced Deny Settings

ParameterPurposeExample
DenySettingsExcludedActionAllow specific operations through denyMicrosoft.Compute/virtualMachines/write (allow VM scaling)
DenySettingsExcludedPrincipalAllow specific users/SPs through denyPipeline service principal, break-glass admin
DenySettingsApplyToChildScopesExtend deny to child resourcesProtect SQL databases under SQL Server

Deny Settings Architecture

Built-in RBAC Roles for Deployment Stacks

RolePermissionsAssign To
Azure Deployment Stack ContributorManage stacks, but cannot create/delete deny assignmentsDevOps engineers managing non-protected stacks
Azure Deployment Stack OwnerFull stack management including deny assignmentsPlatform team leads, infrastructure owners

7. Bicep What-If — Predictable Change Planning

What-If as a CI/CD Gate

The What-If operation is the primary mechanism for predictable change planning in Azure. It shows you exactly what will be created, modified, or deleted before any changes are applied.

Critical Limitation: What-If is not supported within Deployment Stacks. This is one of the key reasons application deployments should use standard Bicep deployments rather than stacks.

Change Types Returned by What-If

SymbolChange TypeDescription
+CreateResource will be created
-DeleteResource will be deleted (complete mode only)
~ModifyResource will be updated with new property values
=NoChangeResource exists and won't change
!DeployResource will be redeployed (properties may or may not change)
*IgnoreResource exists but isn't in template (incremental mode — left unchanged)
xNoEffectRead-only property ignored by service

What-If in Azure DevOps Pipeline

# Azure DevOps Pipeline — Application Layer Deployment
trigger:
branches:
include: [main]
paths:
include: [infra/application/**]

stages:
- stage: Validate
jobs:
- job: WhatIf
steps:
- task: AzureCLI@2
displayName: 'What-If Preview'
inputs:
azureSubscription: 'prod-service-connection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
az deployment group what-if \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--result-format FullResourcePayloads

- stage: Deploy
dependsOn: Validate
condition: succeeded()
jobs:
- deployment: DeployApp
environment: 'production' # Manual approval gate
strategy:
runOnce:
deploy:
steps:
- task: AzureCLI@2
displayName: 'Deploy Application Resources'
inputs:
azureSubscription: 'prod-service-connection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
az deployment group create \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--mode Incremental

What-If in GitHub Actions

name: Deploy Application Infrastructure
on:
push:
branches: [main]
paths: ['infra/application/**']

permissions:
id-token: write
contents: read

jobs:
what-if:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: What-If Preview
run: |
az deployment group what-if \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--result-format FullResourcePayloads

deploy:
needs: what-if
runs-on: ubuntu-latest
environment: production # Requires manual approval
steps:
- uses: actions/checkout@v4

- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Deploy Application Resources
run: |
az deployment group create \
--resource-group "rg-app-prod" \
--template-file "./infra/application/main.bicep" \
--parameters "./infra/application/parameters/prod.bicepparam" \
--mode Incremental

8. Decision Matrix — When to Use What

Resource-Level Decision Matrix

Resource TypeDeployment MethodDeny SettingsChange FrequencyRationale
VNet / Subnets / NSGsDeployment StackDenyDeleteLow — quarterlyCore networking must be protected from accidental deletion
Private EndpointsDeployment StackDenyDeleteLow — as services are addedConnectivity to PaaS services is critical
Key VaultDeployment StackDenyWriteAndDeleteVery LowSecrets, keys, certificates must be strongly protected
Log Analytics WorkspaceDeployment StackDenyDeleteVery LowCentral monitoring data must be preserved
Shared Storage AccountsDeployment StackDenyDeleteLowPlatform data stores
Managed IdentitiesDeployment StackDenyDeleteLowIdentity lifecycle is critical
Azure Firewall / WAFDeployment StackDenyWriteAndDeleteVery LowSecurity infrastructure
DNS Private ZonesDeployment StackDenyDeleteLowName resolution infrastructure
App Service PlanStandard BicepNoneMediumScaling and SKU changes are frequent
App Service / Web AppStandard BicepNoneHigh — dailyApplication deployments
Function AppStandard BicepNoneHigh — dailyServerless application code
Container AppStandard BicepNoneHigh — dailyContainer workloads
Logic AppStandard BicepNoneMedium — weeklyIntegration workflows
API ManagementHybridDenyDelete (instance) / None (APIs)MediumInstance is platform; APIs are application
Role AssignmentsStandard BicepNoneMediumRBAC bindings for applications
App ConfigurationStandard BicepNoneHighFeature flags, settings
Cosmos DB / SQL DBDeployment Stack (server) + Standard (databases)DenyDelete (server)MediumServer is platform; databases are application

Scenario-Based Recommendations

ScenarioRecommended Approach
Azure-only enterprise, single teamBicep + selective Deployment Stacks
Frequent application releases (daily/weekly)Standard Bicep incremental deployments + What-If
Shared platform infrastructure governanceDeployment Stacks at subscription scope with DenyDelete
Multi-cloud organizationTerraform for consistency; consider Bicep for Azure-specific features
Need safe delete of infrastructureDeployment Stacks with deleteResources or deleteAll
Dev/Test environment lifecycleDeployment Stacks with deleteAll for easy cleanup
Change impact analysis requiredStandard Bicep with What-If (not Stacks — What-If not supported)
Enterprise landing zone baselineDeployment Stacks at management group scope

9. Implementation Patterns — CI/CD Pipeline Integration

Pattern 1 — Platform Stack Deployment (Monthly)

Pattern 2 — Application Deployment (Daily)

Pattern 3 — Environment Cleanup with Stacks

# Create dev environment with Deployment Stack
az stack sub create \
--name "dev-environment" \
--location "westeurope" \
--template-file "./infra/platform/main.bicep" \
--parameters "./infra/platform/parameters/dev.bicepparam" \
--deployment-resource-group "rg-dev-platform" \
--action-on-unmanage deleteAll \
--deny-settings-mode none

# When dev work is complete — clean up everything
az stack sub delete \
--name "dev-environment" \
--action-on-unmanage deleteAll

10. Known Limitations & Gaps

Deployment Stacks Limitations

LimitationImpactMitigation
What-If not supportedCannot preview stack changes before applyingUse standard deployments for change-sensitive resources
800 stacks per scopeLarge enterprises may hit limitsUse management group stacks for broad governance
2,000 deny assignments per scopeComplex environments may hit limitsConsolidate stacks; use deny at higher scopes
No Microsoft Graph provider supportCannot manage Entra ID resources (groups, apps) via stacksUse separate Bicep/Terraform deployments for Entra ID
Implicitly created resources not managedAKS node pools, auto-created NICs not protected by denyDocument and accept — use resource locks for implicit resources
Key Vault secrets can't be deleted by stacksRemoving secrets from template doesn't delete themUse detachAll + manual cleanup for secrets
Deleting RGs bypasses deny assignmentsRG-scoped stacks can be bypassed by deleting the RGPlace stacks at subscription scope; use resource locks
Stack-out-of-sync errorsManual changes cause sync issuesEnforce "no manual changes" policy; use BypassStackOutOfSyncError carefully

Bicep What-If Limitations

LimitationImpactMitigation
Noise in outputSome properties reported as changed when they aren'tReview carefully; known issue being improved
500 nested template limitLarge deployments may not fully evaluateSplit into smaller deployments
reference() not resolvedDynamic references show as changesAccept as noise; validate post-deployment
5-minute expansion timeoutVery large templates may time outModularize templates

11. Migration Roadmap — Moving to the Layered Model

For Teams Currently Using Stacks for Everything

Migration Steps

PhaseActionOwnerDuration
1. AssessInventory all resources managed by current stacks. Classify each as "platform" (low-change) or "application" (high-change).Platform Team2-4 weeks
2. SplitRefactor Bicep templates into platform and application modules. Use shared modules for cross-cutting concerns (tags, diagnostics).Platform + App Teams2-3 weeks
3. PipelineBuild separate CI/CD pipelines for platform (stack-based) and application (standard deployment + What-If).DevOps Team1-2 weeks
4. CutoverDeploy platform stack at subscription scope. Migrate application resources to standard incremental deployments. Validate, then decommission old stacks.All Teams3-4 weeks

Immediate Actions (Next 2 Weeks)

#ActionOwnerPriority
1Inventory all resources currently managed by Deployment StacksPlatform TeamP0
2Classify each resource as platform (low-change) or application (high-change)Platform + App TeamsP0
3Enable What-If in existing CI/CD pipelines for application deploymentsDevOps TeamP0
4Document the target layered deployment model and share with stakeholdersArchitecture TeamP1

Short-Term (Next 4-8 Weeks)

#ActionOwnerPriority
5Split Bicep templates into platform and application modulesPlatform TeamP1
6Create subscription-scope stacks for platform infrastructure with DenyDeletePlatform TeamP1
7Build separate pipelines for platform (stack) and application (standard) deploymentsDevOps TeamP1
8Add manual approval gates for production deploymentsDevOps TeamP1

Medium-Term (Next Quarter)

#ActionOwnerPriority
9Migrate application resources to standard Bicep incremental deploymentsApp TeamsP1
10Decommission legacy stacks that were managing application resourcesPlatform TeamP2
11Implement drift detection — periodic stack re-evaluation for platform resourcesPlatform TeamP2
12Evaluate Azure Verified Modules (AVM) for standardized Bicep modulesArchitecture TeamP2

Deployment Stacks

TopicURL
Deployment Stacks Overviewhttps://learn.microsoft.com/azure/azure-resource-manager/bicep/deployment-stacks
Quickstart — Create Deployment Stackhttps://learn.microsoft.com/azure/azure-resource-manager/bicep/quickstart-create-deployment-stacks
Training — Manage Resource Lifecycles with Stackshttps://learn.microsoft.com/training/modules/manage-resource-lifecycles-deployment-stacks/

Bicep & ARM Deployments

TopicURL
Bicep Overviewhttps://learn.microsoft.com/azure/azure-resource-manager/bicep/overview
Bicep What-If Previewhttps://learn.microsoft.com/azure/azure-resource-manager/bicep/deploy-what-if
ARM Deployment Modes (Incremental vs Complete)https://learn.microsoft.com/azure/azure-resource-manager/templates/deployment-modes
Bicep Moduleshttps://learn.microsoft.com/azure/azure-resource-manager/bicep/modules
Bicep Parameter Fileshttps://learn.microsoft.com/azure/azure-resource-manager/bicep/parameter-files
Azure Verified Modules (AVM)https://aka.ms/avm

CI/CD & DevOps

TopicURL
Deploy Bicep with Azure DevOps Pipelineshttps://learn.microsoft.com/azure/azure-resource-manager/bicep/add-template-to-azure-pipelines
Deploy Bicep with GitHub Actionshttps://learn.microsoft.com/azure/azure-resource-manager/bicep/deploy-github-actions
What-If in CI/CD Pipelineshttps://4bes.nl/2021/03/06/test-arm-templates-with-what-if/
Workload Identity Federation (OIDC)https://learn.microsoft.com/azure/devops/pipelines/library/connect-to-azure

Architecture & Governance

TopicURL
Azure Landing Zone Acceleratorhttps://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/
IaC Best Practices (CAF)https://learn.microsoft.com/azure/cloud-adoption-framework/ready/considerations/infrastructure-as-code
Azure RBAC Overviewhttps://learn.microsoft.com/azure/role-based-access-control/overview
Deny Assignmentshttps://learn.microsoft.com/azure/role-based-access-control/deny-assignments
Resource Lockshttps://learn.microsoft.com/azure/azure-resource-manager/management/lock-resources

Terraform (Alternative)

TopicURL
Terraform AzureRM Providerhttps://registry.terraform.io/providers/hashicorp/azurerm/latest
Terraform vs Bicep Comparisonhttps://learn.microsoft.com/azure/developer/terraform/comparing-terraform-and-bicep
Azure Landing Zones with Terraformhttps://learn.microsoft.com/azure/cloud-adoption-framework/ready/landing-zone/deploy-landing-zones-with-terraform

Strong Customer-Facing Summary

Our recommendation is to separate foundational infrastructure lifecycle management from high-frequency application delivery. Use Deployment Stacks selectively for governed platform resources requiring safe delete behavior and deny-based protection, while using modular Bicep incremental deployments with What-If previews for regular application releases. This approach maximizes predictability, deployment speed, and reduces the blast radius of every change.

For Azure-centric organizations, Bicep remains the strategic IaC language. Deployment Stacks are a powerful complement for platform governance — not a replacement for standard deployment patterns. The layered model described in this document aligns with Microsoft's Cloud Adoption Framework and Well-Architected Framework guidance for enterprise-scale environments.


Document prepared based on Microsoft Learn documentation as of April 2026. Azure Deployment Stacks capabilities are actively evolving — always verify against the latest Deployment Stacks documentation and the Bicep documentation.

📖Learn