perf: Upgrade default VM size to Standard_D2s_v5#365
perf: Upgrade default VM size to Standard_D2s_v5#365Ayaz-Microsoft wants to merge 5 commits intodevfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Updates the infrastructure templates to use a newer default Jumpbox VM SKU (Standard_D2s_v5) and refreshes related guidance/docs for SKU availability and accelerated networking requirements.
Changes:
- Switch default Jumpbox VM size from
Standard_D2s_v3toStandard_D2s_v5across main and sample Bicep templates (and the generatedmain.json). - Update VM sizing guidance comments in
virtualNetwork.bicepand troubleshooting documentation. - Add a new
vmSizeparameter mapping ininfra/main.waf.parameters.jsonintended to allow overriding VM size via env var.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| infra/samples/network/network-resources.bicep | Updates sample jumpbox module default size to Standard_D2s_v5. |
| infra/samples/network-subnet-design.bicep | Updates sample jumpbox configuration default size to Standard_D2s_v5. |
| infra/modules/virtualNetwork.bicep | Refreshes VM size guidance comments to recommend Dsv5/Dav5 SKUs. |
| infra/main_custom.bicep | Updates default vmSize fallback to Standard_D2s_v5. |
| infra/main.waf.parameters.json | Adds env-var based vmSize override (currently introduces duplicate key issue). |
| infra/main.json | Updates generated ARM template default coalesce value to Standard_D2s_v5. |
| infra/main.bicep | Updates default vmSize fallback to Standard_D2s_v5. |
| docs/TroubleShootingSteps.md | Expands SKU-not-available and accelerated networking troubleshooting to reference D2s_v5 and overrides. |
| docs/CustomizingAzdParameters.md | Documents a new env var (AZURE_ENV_VM_SIZE) for overriding jumpbox VM size. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR updates the default jumpbox VM size used by the infrastructure templates to Standard_D2s_v5, and refreshes related infra artifacts/documentation.
Changes:
- Update jumpbox/VM default size from
Standard_D2s_v3toStandard_D2s_v5across main templates and sample network templates. - Update troubleshooting guidance to reflect the new default VM size and SKU-availability guidance.
- Regenerate
infra/main.json(ARM output), which also introduces a large set of template changes beyond the VM size change.
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| infra/samples/network/network-resources.bicep | Updates sample jumpbox default size to Standard_D2s_v5. |
| infra/samples/network-subnet-design.bicep | Updates sample jumpbox configuration default size to Standard_D2s_v5. |
| infra/modules/virtualNetwork.bicep | Updates VM size guidance comments to recommend v5 SKUs. |
| infra/main_custom.bicep | Updates default vmSize fallback to Standard_D2s_v5. |
| infra/main.bicep | Updates default vmSize fallback to Standard_D2s_v5. |
| infra/main.waf.parameters.json | Changes the env var used to populate vmSize (currently inconsistent with repo docs/other parameter files). |
| infra/main.json | Regenerated ARM template; includes VM size default change plus substantial template churn. |
| docs/TroubleShootingSteps.md | Updates SKU/accelerated-networking troubleshooting guidance for the new default VM size. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Updates the solution accelerator’s default jumpbox VM size to Standard_D2s_v5 across the Bicep templates, samples, and documentation, plus related parameter wiring updates.
Changes:
- Switched jumpbox VM default size from
Standard_D2s_v3toStandard_D2s_v5in core templates and sample network deployments. - Updated documentation and WAF parameterization to reference the new default and a new env var name for VM sizing.
- Regenerated
infra/main.json(ARM output), resulting in a large diff beyond the VM-size-only change.
Reviewed changes
Copilot reviewed 9 out of 10 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| infra/samples/network/network-resources.bicep | Updates sample jumpbox size default to Standard_D2s_v5. |
| infra/samples/network-subnet-design.bicep | Updates sample jumpbox configuration default size to Standard_D2s_v5. |
| infra/modules/virtualNetwork.bicep | Updates inline guidance comments for jumpbox VM SKU selection. |
| infra/main_custom.bicep | Updates default VM size fallback to Standard_D2s_v5. |
| infra/main.bicep | Updates default VM size fallback to Standard_D2s_v5. |
| infra/main.waf.parameters.json | Changes VM size env var reference to AZURE_ENV_VM_SIZE. |
| infra/main.parameters.json | Removes VM/jumpbox-related parameter entries from the sandbox parameter file. |
| infra/main.json | Regenerated ARM template output; large set of unrelated diffs included. |
| docs/TroubleShootingSteps.md | Expands troubleshooting guidance to mention Standard_D2s_v5 and AZURE_ENV_VM_SIZE. |
| docs/CustomizingAzdParameters.md | Replaces jumpbox size env var documentation with AZURE_ENV_VM_SIZE + updates default. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| | **InsufficientQuota** | Not enough quota available in subscription | <ul><li>Check if you have sufficient quota available in your subscription before deployment</li><li>To verify, refer to the [quota_check](../docs/quota_check.md) file for details</li></ul> | | ||
| | **MaxNumberOfRegionalEnvironmentsInSubExceeded** | Maximum Container App Environments limit reached for region |This error occurs when you attempt to create more **Azure Container App Environments** than the regional quota limit allows for your subscription. Each Azure region has a specific limit on the number of Container App Environments that can be created per subscription.<br><br>**Common Causes:**<br><ul><li>Deploying to regions with low quota limits (e.g., Sweden Central allows only 1 environment)</li><li>Multiple deployments without cleaning up previous environments</li><li>Exceeding the standard limit of 15 environments in most major regions</li></ul><br>**Resolution:**<br><ul><li>**Delete unused environments** in the target region, OR</li><li>**Deploy to a different region** with available capacity, OR</li><li>**Request quota increase** via [Azure Support](https://go.microsoft.com/fwlink/?linkid=2208872)</li></ul><br>**Reference:**<br><ul><li>[Azure Container Apps quotas](https://learn.microsoft.com/en-us/azure/container-apps/quotas)</li><li>[Azure subscription and service limits](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits)</li></ul> | | ||
| | **SkuNotAvailable** | Requested SKU not available in selected location or zone | You receive this error in the following scenarios:<br><ul><li>When the resource SKU you've selected, such as VM size, isn't available for a location or zone</li><li>If you're deploying an Azure Spot VM or Spot scale set instance, and there isn't any capacity for Azure Spot in this location. For more information, see Spot error messages</li></ul> | | ||
| | **SkuNotAvailable** | Requested SKU not available in selected location or zone | This error occurs when the resource SKU you've selected (such as VM size) isn't available for the target location or availability zone.<br><br>**In this deployment**, the jumpbox VM defaults to `Standard_D2s_v5`. While this size is available in 60+ regions, certain regions or zones may not support it.<br><br>**Resolution:**<br><ul><li>**Check SKU availability** for your target region:<br>`az vm list-skus --location <region> --size Standard_D2s --output table`</li><li>**Override the VM size** if the default isn't available in your region:<br>`azd env set AZURE_ENV_VM_SIZE Standard_D2s_v4`</li><li>**Recommended alternatives** (all support accelerated networking + Premium SSD):<br>- `Standard_D2s_v4` — previous gen, identical pricing<br>- `Standard_D2as_v5` — AMD-based, similar pricing<br>- `Standard_D2s_v3` — older gen, widely available</li><li>**Avoid A-series VMs** (e.g., `Standard_A2m_v2`) — they do not support accelerated networking or Premium SSD, which are required by this deployment</li></ul><br>**Reference:**<br><ul><li>[Resolve errors for SKU not available](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-sku-not-available)</li><li>[Azure VM sizes - Dsv5 series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dsv5-series)</li></ul> | |
There was a problem hiding this comment.
This section instructs overriding the VM size via AZURE_ENV_VM_SIZE, but the default (sandbox) infra/main.parameters.json no longer maps any VM/jumpbox parameters at all. Unless the deployment tooling injects parameters outside the parameter file, users following these steps may find the override has no effect. Please ensure the env var is actually wired through the active parameters file(s) for the documented deployment path, or clarify that this applies only to the production/WAF parameters file.
| | **SkuNotAvailable** | Requested SKU not available in selected location or zone | This error occurs when the resource SKU you've selected (such as VM size) isn't available for the target location or availability zone.<br><br>**In this deployment**, the jumpbox VM defaults to `Standard_D2s_v5`. While this size is available in 60+ regions, certain regions or zones may not support it.<br><br>**Resolution:**<br><ul><li>**Check SKU availability** for your target region:<br>`az vm list-skus --location <region> --size Standard_D2s --output table`</li><li>**Override the VM size** if the default isn't available in your region:<br>`azd env set AZURE_ENV_VM_SIZE Standard_D2s_v4`</li><li>**Recommended alternatives** (all support accelerated networking + Premium SSD):<br>- `Standard_D2s_v4` — previous gen, identical pricing<br>- `Standard_D2as_v5` — AMD-based, similar pricing<br>- `Standard_D2s_v3` — older gen, widely available</li><li>**Avoid A-series VMs** (e.g., `Standard_A2m_v2`) — they do not support accelerated networking or Premium SSD, which are required by this deployment</li></ul><br>**Reference:**<br><ul><li>[Resolve errors for SKU not available](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-sku-not-available)</li><li>[Azure VM sizes - Dsv5 series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dsv5-series)</li></ul> | | |
| | **SkuNotAvailable** | Requested SKU not available in selected location or zone | This error occurs when the resource SKU you've selected (such as VM size) isn't available for the target location or availability zone.<br><br>**In this deployment**, the jumpbox VM defaults to `Standard_D2s_v5`. While this size is available in 60+ regions, certain regions or zones may not support it. The `AZURE_ENV_VM_SIZE` override only takes effect for deployment configurations where the jumpbox VM size parameter is wired to this environment variable (for example, the production/WAF parameters file); in the default sandbox configuration (`infra/main.parameters.json`), this override may have no effect unless you explicitly map the VM size parameter to `AZURE_ENV_VM_SIZE`.<br><br>**Resolution:**<br><ul><li>**Check SKU availability** for your target region:<br>`az vm list-skus --location <region> --size Standard_D2s --output table`</li><li>**Override the VM size** (where supported by your active parameters file) if the default isn't available in your region:<br>`azd env set AZURE_ENV_VM_SIZE Standard_D2s_v4`</li><li>**Recommended alternatives** (all support accelerated networking + Premium SSD):<br>- `Standard_D2s_v4` — previous gen, identical pricing<br>- `Standard_D2as_v5` — AMD-based, similar pricing<br>- `Standard_D2s_v3` — older gen, widely available</li><li>**Avoid A-series VMs** (e.g., `Standard_A2m_v2`) — they do not support accelerated networking or Premium SSD, which are required by this deployment</li></ul><br>**Reference:**<br><ul><li>[Resolve errors for SKU not available](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-sku-not-available)</li><li>[Azure VM sizes - Dsv5 series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dsv5-series)</li></ul> | |
| "metadata": { | ||
| "_generator": { | ||
| "name": "bicep", | ||
| "version": "0.40.2.10011", | ||
| "templateHash": "14323896881835347609" | ||
| "version": "0.41.2.15936", | ||
| "templateHash": "5100069192722221088" | ||
| }, |
There was a problem hiding this comment.
This PR’s stated purpose is upgrading the default jumpbox VM size, but infra/main.json is also being regenerated with a newer Bicep compiler and contains a large set of additional changes (new/reshaped resources and properties). If main.json is a generated artifact, consider excluding it from this PR (or regenerating in a dedicated PR) to keep review scope tight; if it’s intended to be updated here, the PR description/title should call out the broader template output changes so reviewers can assess deployment impact.
| "azureAiServiceLocation": { | ||
| "value": "${AZURE_ENV_AI_SERVICE_LOCATION}" | ||
| }, | ||
| "vmSize": { | ||
| "value": "${AZURE_ENV_JUMPBOX_SIZE}" | ||
| }, | ||
| "vmAdminUsername": { | ||
| "value": "${AZURE_ENV_JUMPBOX_ADMIN_USERNAME}" | ||
| }, | ||
| "vmAdminPassword": { | ||
| "value": "${AZURE_ENV_JUMPBOX_ADMIN_PASSWORD}" | ||
| }, | ||
| "backendExists": { | ||
| "value": "${SERVICE_BACKEND_RESOURCE_EXISTS=false}" | ||
| }, |
There was a problem hiding this comment.
infra/main.bicep defines vmSize, vmAdminUsername, and vmAdminPassword as optional parameters and falls back to hard-coded defaults when they’re not provided. By removing these parameters from the sandbox main.parameters.json, any user who enables private networking by editing/overriding parameters could inadvertently deploy a jumpbox with the default username/password (and cannot set VM size via env vars), which is a security and operability risk. Re-add the vmSize/vmAdminUsername/vmAdminPassword parameter entries (even if private networking is off by default) or otherwise ensure jumpbox creation cannot proceed without explicit, non-default credentials.
| "vmSize": { | ||
| "value": "${AZURE_ENV_VM_SIZE}" | ||
| }, |
There was a problem hiding this comment.
This changes the environment variable used to drive the jumpbox VM size from AZURE_ENV_JUMPBOX_SIZE to AZURE_ENV_VM_SIZE. Since the old name is no longer referenced anywhere in the repo, this is a breaking change for existing azd env set AZURE_ENV_JUMPBOX_SIZE ... setups, which conflicts with the PR’s “No breaking change” checkbox. Consider keeping the original env var name, or explicitly documenting this as a breaking change and providing a compatibility path (e.g., accept both names).
| | `AZURE_ENV_JUMPBOX_ADMIN_USERNAME` | string | `JumpboxAdminUser` | Specifies the administrator username for the Jumpbox Virtual Machine. | | ||
| | `AZURE_ENV_JUMPBOX_ADMIN_PASSWORD` | string | `JumpboxAdminP@ssw0rd1234!` | Specifies the administrator password for the Jumpbox Virtual Machine. | |
There was a problem hiding this comment.
The parameter names documented here don’t align with the parameter files: this doc uses AZURE_ENV_VM_SIZE plus AZURE_ENV_JUMPBOX_ADMIN_USERNAME/PASSWORD, while docs/DeploymentGuide.md instructs AZURE_ENV_VM_ADMIN_USERNAME/PASSWORD, and the production parameters file (infra/main.waf.parameters.json) currently expects the JUMPBOX admin env vars. Please standardize on one set of env var names across docs and parameter files (or clearly document both with precedence), otherwise users will set variables that have no effect.
| | `AZURE_ENV_JUMPBOX_ADMIN_USERNAME` | string | `JumpboxAdminUser` | Specifies the administrator username for the Jumpbox Virtual Machine. | | |
| | `AZURE_ENV_JUMPBOX_ADMIN_PASSWORD` | string | `JumpboxAdminP@ssw0rd1234!` | Specifies the administrator password for the Jumpbox Virtual Machine. | | |
| | `AZURE_ENV_JUMPBOX_ADMIN_USERNAME` | string | `JumpboxAdminUser` | Specifies the administrator username for the Jumpbox Virtual Machine. In some guides, this may be referred to as `AZURE_ENV_VM_ADMIN_USERNAME`. | | |
| | `AZURE_ENV_JUMPBOX_ADMIN_PASSWORD` | string | `JumpboxAdminP@ssw0rd1234!` | Specifies the administrator password for the Jumpbox Virtual Machine. In some guides, this may be referred to as `AZURE_ENV_VM_ADMIN_PASSWORD`. | |
Purpose
Does this introduce a breaking change?
Golden Path Validation
Deployment Validation
What to Check
Verify that the following are valid
Other Information