Skip to content

Commit 50837bc

Browse files
fix: update default VM size to Standard_D2s_v5 and enhance troubleshooting documentation
1 parent cce4cb9 commit 50837bc

7 files changed

Lines changed: 18 additions & 13 deletions

File tree

documents/CustomizingAzdParameters.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ By default this template will use the environment name as the prefix to prevent
2626
| `AZURE_EXISTING_AI_PROJECT_RESOURCE_ID` | string | `<Existing AI Project resource Id>` | Reuses an existing AIFoundry and AIFoundryProject instead of creating a new one. |
2727
| `AZURE_ENV_VM_ADMIN_USERNAME` | string | `take(newGuid(), 20)` | The administrator username for the virtual machine. |
2828
| `AZURE_ENV_VM_ADMIN_PASSWORD` | string | `newGuid()` | The administrator password for the virtual machine. |
29+
| `AZURE_ENV_VM_SIZE` | string | `Standard_D2s_v5` | The size/SKU of the Jumpbox Virtual Machine (e.g., `Standard_D2s_v5`, `Standard_DS2_v2`). |
2930
| `AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT` | string | `<Container Registry Endpoint>` | The hostname/endpoint for the container registry used by both backend and frontend containers. |
3031

3132

documents/TroubleShootingSteps.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Use these as quick reference guides to unblock your deployments.
6161
| **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**.<br><br>**Example error message:**<br>`ServiceQuotaExceeded: Operation would exceed 'free' tier service quota. You are using 1 out of 1 'free' tier service quota.`<br><br>**Common causes:**<br><ul><li>Already have a free tier Azure AI Search service in the subscription</li><li>Previous deployment created a free tier Search service that wasn't deleted</li><li>Attempting to deploy multiple environments with free tier Search services</li></ul><br>**Resolution:**<br><ul><li>**Option 1: Delete existing free tier Search service:**<br>`az search service list --query "[?sku.name=='free']" -o table`<br>`az search service delete --name <service-name> --resource-group <rg-name> --yes`</li><li>**Option 2: Upgrade to a paid SKU:**<br>Modify your Bicep/ARM template to use `basic`, `standard`, or higher SKU instead of `free`</li><li>**Option 3: Use existing Search service:**<br>Reference the existing free tier Search service in your deployment instead of creating a new one</li><li>**Request quota increase:**<br>Submit a support request with issue type 'Service and subscription limits (quota)' and quota type 'Search' via [Azure Quota Request](https://aka.ms/AddQuotaSubscription)</li></ul><br>**Reference:**<br><ul><li>[Azure AI Search service limits](https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity)</li><li>[Azure AI Search pricing tiers](https://learn.microsoft.com/en-us/azure/search/search-sku-tier)</li></ul> |
6262
| **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](../documents/QuotaCheck.md) file for details</li></ul> |
6363
| **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> |
64-
| **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> |
64+
| **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 most 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> |
6565
| **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.<br><br>**Common Causes:**<br><ul><li>High demand in the selected region (e.g., East US, West Europe)</li><li>Specific SKUs experiencing capacity constraints (Free, Shared, or certain Premium tiers)</li><li>Multiple rapid deployments in the same region</li></ul><br>**Resolution:**<br><ul><li>**Wait and Retry** (15-30 minutes): `azd up`</li><li>**Deploy to a New Resource Group** (Recommended for urgent cases):<br>```<br>azd down --force --purge<br>azd up<br>```</li><li>**Try a Different Region:**<br>Update region in `main.bicep` or `azure.yaml` to a less congested region (e.g., `westus2`, `centralus`, `northeurope`)</li><li>**Use a Different SKU/Tier:**<br>If using Free/Shared tier, upgrade to Basic or Standard<br>Check SKU availability: `az appservice list-locations --sku <sku-name>`</li></ul><br>**Reference:** [Azure App Service Plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans) |
6666

6767
--------------------------------

infra/main.bicep

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ param vmAdminUsername string?
150150
param vmAdminPassword string?
151151

152152
@description('Optional. Size of the Jumpbox Virtual Machine when created. Set to custom value if enablePrivateNetworking is true.')
153-
param vmSize string = 'Standard_DS2_v2'
153+
param vmSize string = 'Standard_D2s_v5'
154154

155155
@description('Optional: Existing Log Analytics Workspace Resource ID')
156156
param existingLogAnalyticsWorkspaceId string = ''
@@ -384,7 +384,7 @@ module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.21.0' = if (enable
384384
name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64)
385385
params: {
386386
name: take(jumpboxVmName, 15) // Shorten VM name to 15 characters to avoid Azure limits
387-
vmSize: vmSize ?? 'Standard_DS2_v2'
387+
vmSize: vmSize ?? 'Standard_D2s_v5'
388388
location: location
389389
adminUsername: vmAdminUsername ?? 'JumpboxAdminUser'
390390
adminPassword: vmAdminPassword ?? 'JumpboxAdminP@ssw0rd1234!'

infra/main.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "0.41.2.15936",
9-
"templateHash": "5621595257944878269"
9+
"templateHash": "15865612374745110055"
1010
}
1111
},
1212
"parameters": {
@@ -273,7 +273,7 @@
273273
},
274274
"vmSize": {
275275
"type": "string",
276-
"defaultValue": "Standard_DS2_v2",
276+
"defaultValue": "Standard_D2s_v5",
277277
"metadata": {
278278
"description": "Optional. Size of the Jumpbox Virtual Machine when created. Set to custom value if enablePrivateNetworking is true."
279279
}
@@ -9006,7 +9006,7 @@
90069006
"value": "[take(variables('jumpboxVmName'), 15)]"
90079007
},
90089008
"vmSize": {
9009-
"value": "[coalesce(parameters('vmSize'), 'Standard_DS2_v2')]"
9009+
"value": "[coalesce(parameters('vmSize'), 'Standard_D2s_v5')]"
90109010
},
90119011
"location": {
90129012
"value": "[parameters('location')]"
@@ -30053,8 +30053,8 @@
3005330053
},
3005430054
"dependsOn": [
3005530055
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').aiServices)]",
30056-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').openAI)]",
3005730056
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').cognitiveServices)]",
30057+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').openAI)]",
3005830058
"logAnalyticsWorkspace",
3005930059
"userAssignedIdentity",
3006030060
"virtualNetwork"
@@ -40364,9 +40364,9 @@
4036440364
}
4036540365
},
4036640366
"dependsOn": [
40367+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageQueue)]",
4036740368
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]",
4036840369
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageFile)]",
40369-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageQueue)]",
4037040370
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageDfs)]",
4037140371
"userAssignedIdentity",
4037240372
"virtualNetwork"

infra/main.waf.parameters.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
"vmAdminPassword": {
7575
"value": "${AZURE_ENV_VM_ADMIN_PASSWORD}"
7676
},
77+
"vmSize": {
78+
"value": "${AZURE_ENV_VM_SIZE}"
79+
},
7780
"usecase":{
7881
"value": "${AZURE_ENV_USE_CASE}"
7982
}

infra/main_custom.bicep

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ param vmAdminUsername string?
150150
param vmAdminPassword string?
151151

152152
@description('Optional. Size of the Jumpbox Virtual Machine when created. Set to custom value if enablePrivateNetworking is true.')
153-
param vmSize string = 'Standard_DS2_v2'
153+
param vmSize string = 'Standard_D2s_v5'
154154

155155
@description('Optional: Existing Log Analytics Workspace Resource ID')
156156
param existingLogAnalyticsWorkspaceId string = ''
@@ -384,7 +384,7 @@ module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.21.0' = if (enable
384384
name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64)
385385
params: {
386386
name: take(jumpboxVmName, 15) // Shorten VM name to 15 characters to avoid Azure limits
387-
vmSize: vmSize ?? 'Standard_DS2_v2'
387+
vmSize: vmSize ?? 'Standard_D2s_v5'
388388
location: location
389389
adminUsername: vmAdminUsername ?? 'JumpboxAdminUser'
390390
adminPassword: vmAdminPassword ?? 'JumpboxAdminP@ssw0rd1234!'

infra/modules/virtualNetwork.bicep

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,10 @@ param resourceSuffix string
181181
// VM Size Notes:
182182
// 1 B-series VMs (like Standard_B2ms) do not support accelerated networking.
183183
// 2 Pick a VM size that does support accelerated networking (the usual jump-box candidates):
184-
// Standard_DS2_v2 (2 vCPU, 7 GiB RAM, Premium SSD) // The most broadly available (it’s a legacy SKU supported in virtually every region).
185-
// Standard_D2s_v3 (2 vCPU, 8 GiB RAM, Premium SSD) // next most common
186-
// Standard_D2s_v4 (2 vCPU, 8 GiB RAM, Premium SSD) // Newest, so fewer regions availabl
184+
// Standard_D2s_v5 (2 vCPU, 8 GiB RAM, Premium SSD) // Current-gen, widely available, cost-effective (default).
185+
// Standard_DS2_v2 (2 vCPU, 7 GiB RAM, Premium SSD) // Legacy SKU, broadly available but older generation.
186+
// Standard_D2s_v3 (2 vCPU, 8 GiB RAM, Premium SSD) // Older generation alternative.
187+
// Standard_D2s_v4 (2 vCPU, 8 GiB RAM, Premium SSD) // Previous generation.
187188

188189
// Subnet Classless Inter-Doman Routing (CIDR) Sizing Reference Table (Best Practices)
189190
// | CIDR | # of Addresses | # of /24s | Notes |

0 commit comments

Comments
 (0)