diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs index ac97e8a03ec..98059135d70 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs @@ -100,8 +100,11 @@ public static IResourceBuilder AddAzureAppSe }, Kind = "Linux", IsReserved = true, - // Enable per-site scaling so each app service can scale independently - IsPerSiteScaling = true + // Enable perSiteScaling or automatic scaling so each app service can scale independently + IsPerSiteScaling = !resource.EnableAutomaticScaling, + IsElasticScaleEnabled = resource.EnableAutomaticScaling, + // Capping the automatic scaling limit to 10 as per best practices + MaximumElasticWorkerCount = 10 }; infra.Add(plan); @@ -220,9 +223,9 @@ public static IResourceBuilder AddAzureAppSe /// /// Configures whether the Aspire dashboard should be included in the Azure App Service environment. /// - /// The AzureAppServiceEnvironmentResource to configure. + /// The to configure. /// Whether to include the Aspire dashboard. Default is true. - /// + /// A reference to the for chaining additional configuration."/> public static IResourceBuilder WithDashboard(this IResourceBuilder builder, bool enable = true) { builder.Resource.EnableDashboard = enable; @@ -271,4 +274,15 @@ public static IResourceBuilder WithAzureAppl builder.Resource.ApplicationInsightsResource = applicationInsightsBuilder.Resource; return builder; } + + /// + /// Configures whether automatic scaling should be enabled for the app services in Azure App Service environment. + /// + /// The to configure. + /// A reference to the for chaining additional configuration. + public static IResourceBuilder WithAutomaticScaling(this IResourceBuilder builder) + { + builder.Resource.EnableAutomaticScaling = true; + return builder; + } } diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs index 62788a0a46e..29d9351db6d 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs @@ -62,6 +62,11 @@ public class AzureAppServiceEnvironmentResource(string name, Action internal AzureApplicationInsightsResource? ApplicationInsightsResource { get; set; } + /// + /// Enables or disables automatic scaling for the App Service Plan. + /// + internal bool EnableAutomaticScaling { get; set; } + /// /// Gets the name of the App Service Plan. /// diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentUtility.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentUtility.cs index 4e7eddfe673..2190551bb95 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentUtility.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentUtility.cs @@ -64,8 +64,10 @@ public static WebSite AddDashboard(AzureResourceInfrastructure infra, UseManagedIdentityCreds = true, IsHttp20Enabled = true, Http20ProxyFlag = 1, - // Setting NumberOfWorkers to 1 to ensure dashboard runs on 1 instance + // Setting instance count to 1 to ensure dashboard runs on 1 instance NumberOfWorkers = 1, + FunctionAppScaleLimit = 1, + ElasticWebAppScaleLimit = 1, // IsAlwaysOn set to true ensures the app is always running IsAlwaysOn = true, AppSettings = [] diff --git a/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs b/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs index 61ad5b88ae5..72ea176d837 100644 --- a/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs +++ b/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs @@ -453,6 +453,27 @@ await Verify(manifest.ToString(), "json") .AppendContentAsFile(bicep, "bicep"); } + [Fact] + public async Task AddAppServiceToEnvironmentWithAutomaticScaling() + { + var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + + builder.AddAzureAppServiceEnvironment("env").WithAutomaticScaling(); + + using var app = builder.Build(); + + await ExecuteBeforeStartHooksAsync(app, default); + + var model = app.Services.GetRequiredService(); + + var environment = Assert.Single(model.Resources.OfType()); + + var (manifest, bicep) = await GetManifestWithBicep(environment); + + await Verify(manifest.ToString(), "json") + .AppendContentAsFile(bicep, "bicep"); + } + [Fact] public async Task AddAppServiceWithArgs() { diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceEnvironmentWithoutDashboardAddsEnvironmentResource.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceEnvironmentWithoutDashboardAddsEnvironmentResource.verified.bicep index 8e47759c46c..61c5be70a3d 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceEnvironmentWithoutDashboardAddsEnvironmentResource.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceEnvironmentWithoutDashboardAddsEnvironmentResource.verified.bicep @@ -34,8 +34,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.bicep new file mode 100644 index 00000000000..04a7112eac6 --- /dev/null +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.bicep @@ -0,0 +1,149 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param userPrincipalId string = '' + +param tags object = { } + +resource env_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2024-11-30' = { + name: take('env_mi-${uniqueString(resourceGroup().id)}', 128) + location: location + tags: tags +} + +resource env_acr 'Microsoft.ContainerRegistry/registries@2025-04-01' = { + name: take('envacr${uniqueString(resourceGroup().id)}', 50) + location: location + sku: { + name: 'Basic' + } + tags: tags +} + +resource env_acr_env_mi_AcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(env_acr.id, env_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')) + properties: { + principalId: env_mi.properties.principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') + principalType: 'ServicePrincipal' + } + scope: env_acr +} + +resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) + location: location + properties: { + elasticScaleEnabled: true + perSiteScaling: false + reserved: true + maximumElasticWorkerCount: 10 + } + kind: 'Linux' + sku: { + name: 'P0V3' + tier: 'Premium' + } +} + +resource env_contributor_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2024-11-30' = { + name: take('env_contributor_mi-${uniqueString(resourceGroup().id)}', 128) + location: location +} + +resource env_ra 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(resourceGroup().id, env_contributor_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')) + properties: { + principalId: env_contributor_mi.properties.principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7') + principalType: 'ServicePrincipal' + } +} + +resource dashboard 'Microsoft.Web/sites@2024-11-01' = { + name: take('${toLower('env')}-${toLower('aspiredashboard')}-${uniqueString(resourceGroup().id)}', 60) + location: location + properties: { + serverFarmId: env_asplan.id + siteConfig: { + numberOfWorkers: 1 + linuxFxVersion: 'ASPIREDASHBOARD|1.0' + acrUseManagedIdentityCreds: true + acrUserManagedIdentityID: env_mi.properties.clientId + appSettings: [ + { + name: 'Dashboard__Frontend__AuthMode' + value: 'Unsecured' + } + { + name: 'Dashboard__Otlp__AuthMode' + value: 'Unsecured' + } + { + name: 'Dashboard__Otlp__SuppressUnsecuredTelemetryMessage' + value: 'true' + } + { + name: 'Dashboard__ResourceServiceClient__AuthMode' + value: 'Unsecured' + } + { + name: 'WEBSITES_PORT' + value: '5000' + } + { + name: 'HTTP20_ONLY_PORT' + value: '4317' + } + { + name: 'WEBSITE_START_SCM_WITH_PRELOAD' + value: 'true' + } + { + name: 'AZURE_CLIENT_ID' + value: env_contributor_mi.properties.clientId + } + { + name: 'ALLOWED_MANAGED_IDENTITIES' + value: env_mi.properties.clientId + } + { + name: 'ASPIRE_ENVIRONMENT_NAME' + value: 'env' + } + ] + alwaysOn: true + http20Enabled: true + http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 + } + } + identity: { + type: 'UserAssigned' + userAssignedIdentities: { + '${env_contributor_mi.id}': { } + } + } + kind: 'app,linux,aspiredashboard' +} + +output name string = env_asplan.name + +output planId string = env_asplan.id + +output webSiteSuffix string = uniqueString(resourceGroup().id) + +output AZURE_CONTAINER_REGISTRY_NAME string = env_acr.name + +output AZURE_CONTAINER_REGISTRY_ENDPOINT string = env_acr.properties.loginServer + +output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = env_mi.id + +output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_CLIENT_ID string = env_mi.properties.clientId + +output AZURE_WEBSITE_CONTRIBUTOR_MANAGED_IDENTITY_ID string = env_contributor_mi.id + +output AZURE_WEBSITE_CONTRIBUTOR_MANAGED_IDENTITY_PRINCIPAL_ID string = env_contributor_mi.properties.principalId + +output AZURE_APP_SERVICE_DASHBOARD_URI string = 'https://${take('${toLower('env')}-${toLower('aspiredashboard')}-${uniqueString(resourceGroup().id)}', 60)}.azurewebsites.net' \ No newline at end of file diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.json b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.json new file mode 100644 index 00000000000..d3afcb328bb --- /dev/null +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.json @@ -0,0 +1,7 @@ +{ + "type": "azure.bicep.v0", + "path": "env.module.bicep", + "params": { + "userPrincipalId": "" + } +} \ No newline at end of file diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.bicep new file mode 100644 index 00000000000..2ba28bd3b6b --- /dev/null +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.bicep @@ -0,0 +1,149 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param userPrincipalId string = '' + +param tags object = { } + +resource env_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2024-11-30' = { + name: take('env_mi-${uniqueString(resourceGroup().id)}', 128) + location: location + tags: tags +} + +resource env_acr 'Microsoft.ContainerRegistry/registries@2025-04-01' = { + name: take('envacr${uniqueString(resourceGroup().id)}', 50) + location: location + sku: { + name: 'Basic' + } + tags: tags +} + +resource env_acr_env_mi_AcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(env_acr.id, env_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')) + properties: { + principalId: env_mi.properties.principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') + principalType: 'ServicePrincipal' + } + scope: env_acr +} + +resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) + location: location + properties: { + elasticScaleEnabled: false + perSiteScaling: true + reserved: true + maximumElasticWorkerCount: 10 + } + kind: 'Linux' + sku: { + name: 'P0V3' + tier: 'Premium' + } +} + +resource env_contributor_mi 'Microsoft.ManagedIdentity/userAssignedIdentities@2024-11-30' = { + name: take('env_contributor_mi-${uniqueString(resourceGroup().id)}', 128) + location: location +} + +resource env_ra 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(resourceGroup().id, env_contributor_mi.id, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')) + properties: { + principalId: env_contributor_mi.properties.principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7') + principalType: 'ServicePrincipal' + } +} + +resource dashboard 'Microsoft.Web/sites@2024-11-01' = { + name: take('${toLower('env')}-${toLower('aspiredashboard')}-${uniqueString(resourceGroup().id)}', 60) + location: location + properties: { + serverFarmId: env_asplan.id + siteConfig: { + numberOfWorkers: 1 + linuxFxVersion: 'ASPIREDASHBOARD|1.0' + acrUseManagedIdentityCreds: true + acrUserManagedIdentityID: env_mi.properties.clientId + appSettings: [ + { + name: 'Dashboard__Frontend__AuthMode' + value: 'Unsecured' + } + { + name: 'Dashboard__Otlp__AuthMode' + value: 'Unsecured' + } + { + name: 'Dashboard__Otlp__SuppressUnsecuredTelemetryMessage' + value: 'true' + } + { + name: 'Dashboard__ResourceServiceClient__AuthMode' + value: 'Unsecured' + } + { + name: 'WEBSITES_PORT' + value: '5000' + } + { + name: 'HTTP20_ONLY_PORT' + value: '4317' + } + { + name: 'WEBSITE_START_SCM_WITH_PRELOAD' + value: 'true' + } + { + name: 'AZURE_CLIENT_ID' + value: env_contributor_mi.properties.clientId + } + { + name: 'ALLOWED_MANAGED_IDENTITIES' + value: env_mi.properties.clientId + } + { + name: 'ASPIRE_ENVIRONMENT_NAME' + value: 'env' + } + ] + alwaysOn: true + http20Enabled: true + http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 + } + } + identity: { + type: 'UserAssigned' + userAssignedIdentities: { + '${env_contributor_mi.id}': { } + } + } + kind: 'app,linux,aspiredashboard' +} + +output name string = env_asplan.name + +output planId string = env_asplan.id + +output webSiteSuffix string = uniqueString(resourceGroup().id) + +output AZURE_CONTAINER_REGISTRY_NAME string = env_acr.name + +output AZURE_CONTAINER_REGISTRY_ENDPOINT string = env_acr.properties.loginServer + +output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = env_mi.id + +output AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_CLIENT_ID string = env_mi.properties.clientId + +output AZURE_WEBSITE_CONTRIBUTOR_MANAGED_IDENTITY_ID string = env_contributor_mi.id + +output AZURE_WEBSITE_CONTRIBUTOR_MANAGED_IDENTITY_PRINCIPAL_ID string = env_contributor_mi.properties.principalId + +output AZURE_APP_SERVICE_DASHBOARD_URI string = 'https://${take('${toLower('env')}-${toLower('aspiredashboard')}-${uniqueString(resourceGroup().id)}', 60)}.azurewebsites.net' diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.json b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.json new file mode 100644 index 00000000000..d3afcb328bb --- /dev/null +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithoutAutoScale.verified.json @@ -0,0 +1,7 @@ +{ + "type": "azure.bicep.v0", + "path": "env.module.bicep", + "params": { + "userPrincipalId": "" + } +} \ No newline at end of file diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsDefaultLocation.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsDefaultLocation.verified.bicep index 6ef1ab716fc..19794f9e4b1 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsDefaultLocation.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsDefaultLocation.verified.bicep @@ -34,8 +34,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -113,6 +115,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: { diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocation.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocation.verified.bicep index f44fa16e1d0..5c02ac261fd 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocation.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocation.verified.bicep @@ -34,8 +34,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -113,6 +115,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: { @@ -167,4 +171,4 @@ output AZURE_APP_SERVICE_DASHBOARD_URI string = 'https://${take('${toLower('env' output AZURE_APPLICATION_INSIGHTS_INSTRUMENTATIONKEY string = env_ai.properties.InstrumentationKey -output AZURE_APPLICATION_INSIGHTS_CONNECTION_STRING string = env_ai.properties.ConnectionString +output AZURE_APPLICATION_INSIGHTS_CONNECTION_STRING string = env_ai.properties.ConnectionString \ No newline at end of file diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocationParam.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocationParam.verified.bicep index 090d3108606..ace2e80b73d 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocationParam.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithApplicationInsightsLocationParam.verified.bicep @@ -36,8 +36,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -115,6 +117,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: { @@ -169,4 +173,4 @@ output AZURE_APP_SERVICE_DASHBOARD_URI string = 'https://${take('${toLower('env' output AZURE_APPLICATION_INSIGHTS_INSTRUMENTATIONKEY string = env_ai.properties.InstrumentationKey -output AZURE_APPLICATION_INSIGHTS_CONNECTION_STRING string = env_ai.properties.ConnectionString +output AZURE_APPLICATION_INSIGHTS_CONNECTION_STRING string = env_ai.properties.ConnectionString \ No newline at end of file diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithExistingApplicationInsights.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithExistingApplicationInsights.verified.bicep index 081dd32b056..8557885829e 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithExistingApplicationInsights.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceWithExistingApplicationInsights.verified.bicep @@ -1,4 +1,4 @@ -@description('The location for the resource(s) to be deployed.') +@description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location param userPrincipalId string = '' @@ -36,8 +36,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -115,6 +117,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: { diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddContainerAppEnvironmentAddsEnvironmentResource.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddContainerAppEnvironmentAddsEnvironmentResource.verified.bicep index dfad666fc70..926a9160fdd 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddContainerAppEnvironmentAddsEnvironmentResource.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddContainerAppEnvironmentAddsEnvironmentResource.verified.bicep @@ -34,8 +34,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -113,6 +115,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: { diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AzureAppServiceEnvironmentCanReferenceExistingAppServicePlan.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AzureAppServiceEnvironmentCanReferenceExistingAppServicePlan.verified.bicep index dfad666fc70..926a9160fdd 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AzureAppServiceEnvironmentCanReferenceExistingAppServicePlan.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AzureAppServiceEnvironmentCanReferenceExistingAppServicePlan.verified.bicep @@ -34,8 +34,10 @@ resource env_asplan 'Microsoft.Web/serverfarms@2024-11-01' = { name: take('envasplan-${uniqueString(resourceGroup().id)}', 60) location: location properties: { + elasticScaleEnabled: false perSiteScaling: true reserved: true + maximumElasticWorkerCount: 10 } kind: 'Linux' sku: { @@ -113,6 +115,8 @@ resource dashboard 'Microsoft.Web/sites@2024-11-01' = { alwaysOn: true http20Enabled: true http20ProxyFlag: 1 + functionAppScaleLimit: 1 + elasticWebAppScaleLimit: 1 } } identity: {