From 432d925d6b3738ce6b02dba20b1b867e3bb4ab73 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 31 Oct 2025 03:41:19 +0000 Subject: [PATCH 1/3] Initial plan From e0d3a15068e419674a83a9125251ad7653ff05c9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 31 Oct 2025 03:55:13 +0000 Subject: [PATCH 2/3] Add automatic scaling support for Azure App Service Environment - Added EnableAutomaticScaling property to AzureAppServiceEnvironmentResource - Updated AppServicePlan to configure elasticScaleEnabled, perSiteScaling, and maximumElasticWorkerCount based on EnableAutomaticScaling flag - Added WithAutomaticScaling() extension method to enable automatic scaling - Updated dashboard configuration to set FunctionAppScaleLimit and ElasticWebAppScaleLimit to 1 - Updated XML documentation for WithDashboard method - Added test for automatic scaling feature - Updated all existing snapshot test files with new properties Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> --- .../AzureAppServiceEnvironmentExtensions.cs | 22 ++- .../AzureAppServiceEnvironmentResource.cs | 5 + .../AzureAppServiceEnvironmentUtility.cs | 4 +- .../AzureAppServiceTests.cs | 21 +++ ...oardAddsEnvironmentResource.verified.bicep | 2 + ...ronmentWithAutomaticScaling.verified.bicep | 149 ++++++++++++++++++ ...ironmentWithAutomaticScaling.verified.json | 7 + ...tionInsightsDefaultLocation.verified.bicep | 4 + ...ApplicationInsightsLocation.verified.bicep | 6 +- ...cationInsightsLocationParam.verified.bicep | 6 +- ...ExistingApplicationInsights.verified.bicep | 6 +- ...mentAddsEnvironmentResource.verified.bicep | 4 + ...renceExistingAppServicePlan.verified.bicep | 4 + 13 files changed, 232 insertions(+), 8 deletions(-) create mode 100644 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.bicep create mode 100644 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureAppServiceTests.AddAppServiceToEnvironmentWithAutomaticScaling.verified.json diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs index 91c643c5671..d31e739f627 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs @@ -98,8 +98,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); @@ -218,9 +221,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; @@ -269,4 +272,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 83058be3c90..0dfaaaf6c01 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs @@ -185,6 +185,11 @@ await context.ReportingStep.CompleteAsync( /// 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 d29d717515a..9bb3ff6f1fb 100644 --- a/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs +++ b/tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs @@ -454,6 +454,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.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: { From c3d84df50b4d191340f8da57b350cc42fc9fe089 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 31 Oct 2025 03:57:49 +0000 Subject: [PATCH 3/3] Fix XML documentation for WithAutomaticScaling return type Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> --- .../AzureAppServiceEnvironmentExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs index d31e739f627..321c17eac33 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentExtensions.cs @@ -277,7 +277,7 @@ public static IResourceBuilder WithAzureAppl /// 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. + /// A reference to the for chaining additional configuration. public static IResourceBuilder WithAutomaticScaling(this IResourceBuilder builder) { builder.Resource.EnableAutomaticScaling = true;