diff --git a/docs/CustomizingAzdParameters.md b/docs/CustomizingAzdParameters.md
index 8756c99f..50c28d1e 100644
--- a/docs/CustomizingAzdParameters.md
+++ b/docs/CustomizingAzdParameters.md
@@ -21,6 +21,7 @@ By default this template will use the environment name as the prefix to prevent
| `AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID` | string | Guide to get your [Existing Workspace ID](/docs/re-use-log-analytics.md) | Set this if you want to reuse an existing Log Analytics Workspace instead of creating a new one. |
| `AZURE_ENV_VM_ADMIN_USERNAME` | string | `take(newGuid(), 20)` | The administrator username for the virtual machine. |
| `AZURE_ENV_VM_ADMIN_PASSWORD` | string | `newGuid()` | The administrator password for the virtual machine. |
+| `AZURE_ENV_VM_SIZE` | string | `Standard_D2s_v5` | The size of the Jumpbox Virtual Machine. Only applicable when `enablePrivateNetworking` is true. |
| `AZURE_ENV_ENABLE_TELEMETRY` | bool | `true` | Enables telemetry for monitoring and diagnostics. |
---
diff --git a/docs/TroubleShootingSteps.md b/docs/TroubleShootingSteps.md
index 0b177d7e..ef776447 100644
--- a/docs/TroubleShootingSteps.md
+++ b/docs/TroubleShootingSteps.md
@@ -61,7 +61,7 @@ Use these as quick reference guides to unblock your deployments.
| **ServiceQuotaExceeded** | Free tier service quota limit reached for Azure AI Search | This error occurs when you attempt to deploy an Azure AI Search service but have already reached the **free tier quota limit** for your subscription. Each Azure subscription is limited to **one free tier Search service**.
**Example error message:**
`ServiceQuotaExceeded: Operation would exceed 'free' tier service quota. You are using 1 out of 1 'free' tier service quota.`
**Common causes:**
- Already have a free tier Azure AI Search service in the subscription
- Previous deployment created a free tier Search service that wasn't deleted
- Attempting to deploy multiple environments with free tier Search services
**Resolution:**
- **Option 1: Delete existing free tier Search service:**
`az search service list --query "[?sku.name=='free']" -o table`
`az search service delete --name --resource-group --yes` - **Option 2: Upgrade to a paid SKU:**
Modify your Bicep/ARM template to use `basic`, `standard`, or higher SKU instead of `free` - **Option 3: Use existing Search service:**
Reference the existing free tier Search service in your deployment instead of creating a new one - **Request quota increase:**
Submit a support request with issue type 'Service and subscription limits (quota)' and quota type 'Search' via [Azure Quota Request](https://aka.ms/AddQuotaSubscription)
**Reference:**
- [Azure AI Search service limits](https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity)
- [Azure AI Search pricing tiers](https://learn.microsoft.com/en-us/azure/search/search-sku-tier)
|
| **InsufficientQuota** | Not enough quota available in subscription | - Check if you have sufficient quota available in your subscription before deployment
- To verify, refer to the [quota_check](../docs/QuotaCheck.md) file for details
|
| **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.
**Common Causes:**
- Deploying to regions with low quota limits (e.g., Sweden Central allows only 1 environment)
- Multiple deployments without cleaning up previous environments
- Exceeding the standard limit of 15 environments in most major regions
**Resolution:**
- **Delete unused environments** in the target region, OR
- **Deploy to a different region** with available capacity, OR
- **Request quota increase** via [Azure Support](https://go.microsoft.com/fwlink/?linkid=2208872)
**Reference:**
- [Azure Container Apps quotas](https://learn.microsoft.com/en-us/azure/container-apps/quotas)
- [Azure subscription and service limits](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits)
|
-| **SkuNotAvailable** | Requested SKU not available in selected location or zone | You receive this error in the following scenarios:
- When the resource SKU you've selected, such as VM size, isn't available for a location or zone
- 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
|
+| **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.
**In this deployment**, the jumpbox VM defaults to `Standard_D2s_v5`. While this size is available in most regions, certain regions or zones may not support it.
**Resolution:**
- **Check SKU availability** for your target region:
`az vm list-skus --location --size Standard_D2s --output table` - **Override the VM size** if the default isn't available in your region:
`azd env set AZURE_ENV_VM_SIZE Standard_D2s_v4` - **Recommended alternatives** (all support accelerated networking + Premium SSD):
- `Standard_D2s_v4` — previous gen, identical pricing
- `Standard_D2as_v5` — AMD-based, similar pricing
- `Standard_D2s_v3` — older gen, widely available - **Avoid A-series VMs** (e.g., `Standard_A2m_v2`) — they do not support accelerated networking or Premium SSD, which are required by this deployment
**Reference:**
- [Resolve errors for SKU not available](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-sku-not-available)
- [Azure VM sizes - Dsv5 series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dsv5-series)
|
| **Conflict - No available instances to satisfy this request** | Azure App Service has insufficient capacity in the region | This error occurs when Azure App Service doesn't have enough available compute instances in the selected region to provision or scale your app.
**Common Causes:**
- High demand in the selected region (e.g., East US, West Europe)
- Specific SKUs experiencing capacity constraints (Free, Shared, or certain Premium tiers)
- Multiple rapid deployments in the same region
**Resolution:**
- **Wait and Retry** (15-30 minutes): `azd up`
- **Deploy to a New Resource Group** (Recommended for urgent cases):
```
azd down --force --purge
azd up
``` - **Try a Different Region:**
Update region in `main.bicep` or `azure.yaml` to a less congested region (e.g., `westus2`, `centralus`, `northeurope`) - **Use a Different SKU/Tier:**
If using Free/Shared tier, upgrade to Basic or Standard
Check SKU availability: `az appservice list-locations --sku `
**Reference:** [Azure App Service Plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans) |
--------------------------------
diff --git a/infra/main.bicep b/infra/main.bicep
index 0850dfa1..e7d8d8f4 100644
--- a/infra/main.bicep
+++ b/infra/main.bicep
@@ -71,7 +71,7 @@ param vmAdminUsername string?
param vmAdminPassword string?
@description('Optional. Size of the Jumpbox Virtual Machine when created. Set to custom value if enablePrivateNetworking is true.')
-param vmSize string = 'Standard_DS2_v2'
+param vmSize string = 'Standard_D2s_v5'
@description('Optional. The tags to apply to all deployed Azure resources.')
param tags resourceInput<'Microsoft.Resources/resourceGroups@2025-04-01'>.tags = {}
@@ -351,7 +351,7 @@ module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.15.0' = if (enable
name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64)
params: {
name: take(jumpboxVmName, 15) // Shorten VM name to 15 characters to avoid Azure limits
- vmSize: vmSize ?? 'Standard_DS2_v2'
+ vmSize: vmSize ?? 'Standard_D2s_v5'
location: solutionLocation
adminUsername: vmAdminUsername ?? 'JumpboxAdminUser'
adminPassword: vmAdminPassword ?? 'JumpboxAdminP@ssw0rd1234!'
diff --git a/infra/main.json b/infra/main.json
index c6ae2903..7b36c41f 100644
--- a/infra/main.json
+++ b/infra/main.json
@@ -5,8 +5,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.40.2.10011",
- "templateHash": "14645128480975829011"
+ "version": "0.41.2.15936",
+ "templateHash": "6006700104446037526"
}
},
"parameters": {
@@ -121,7 +121,7 @@
},
"vmSize": {
"type": "string",
- "defaultValue": "Standard_DS2_v2",
+ "defaultValue": "Standard_D2s_v5",
"metadata": {
"description": "Optional. Size of the Jumpbox Virtual Machine when created. Set to custom value if enablePrivateNetworking is true."
}
@@ -6630,8 +6630,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.40.2.10011",
- "templateHash": "5819780095460630914"
+ "version": "0.41.2.15936",
+ "templateHash": "10720297436894952204"
}
},
"definitions": {
@@ -10764,7 +10764,7 @@
"value": "[take(variables('jumpboxVmName'), 15)]"
},
"vmSize": {
- "value": "[coalesce(parameters('vmSize'), 'Standard_DS2_v2')]"
+ "value": "[coalesce(parameters('vmSize'), 'Standard_D2s_v5')]"
},
"location": {
"value": "[variables('solutionLocation')]"
@@ -19620,8 +19620,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.40.2.10011",
- "templateHash": "11752366541769527004"
+ "version": "0.41.2.15936",
+ "templateHash": "15442847736367173292"
},
"name": "Container Registry Module"
},
diff --git a/infra/main.waf.parameters.json b/infra/main.waf.parameters.json
index 337be5fd..bb4228b3 100644
--- a/infra/main.waf.parameters.json
+++ b/infra/main.waf.parameters.json
@@ -46,6 +46,9 @@
"vmAdminPassword": {
"value": "${AZURE_ENV_VM_ADMIN_PASSWORD}"
},
+ "vmSize": {
+ "value": "${AZURE_ENV_VM_SIZE}"
+ },
"enableTelemetry": {
"value": "${AZURE_ENV_ENABLE_TELEMETRY}"
},
diff --git a/infra/modules/virtualNetwork.bicep b/infra/modules/virtualNetwork.bicep
index 8919af25..8445869c 100644
--- a/infra/modules/virtualNetwork.bicep
+++ b/infra/modules/virtualNetwork.bicep
@@ -193,9 +193,10 @@ param resourceSuffix string
// VM Size Notes:
// 1 B-series VMs (like Standard_B2ms) do not support accelerated networking.
// 2 Pick a VM size that does support accelerated networking (the usual jump-box candidates):
-// Standard_DS2_v2 (2 vCPU, 7 GiB RAM, Premium SSD) // The most broadly available (it’s a legacy SKU supported in virtually every region).
-// Standard_D2s_v3 (2 vCPU, 8 GiB RAM, Premium SSD) // next most common
-// Standard_D2s_v4 (2 vCPU, 8 GiB RAM, Premium SSD) // Newest, so fewer regions availabl
+// Standard_D2s_v5 (2 vCPU, 8 GiB RAM, Premium SSD) // Recommended - current gen, widely available, better network bandwidth (12,500 Mbps)
+// Standard_DS2_v2 (2 vCPU, 7 GiB RAM, Premium SSD) // Previous gen - still available but being phased out
+// Standard_D2s_v3 (2 vCPU, 8 GiB RAM, Premium SSD) // Previous gen
+// Standard_D2s_v4 (2 vCPU, 8 GiB RAM, Premium SSD) // Previous gen
// Subnet Classless Inter-Doman Routing (CIDR) Sizing Reference Table (Best Practices)