{"record":{"id":"bf7a8c01fc67097d","repo":"microsoft/aspire","slug":"an-azure-subscription-id-is-required-set-the-azure","errorCode":null,"errorMessage":"An Azure subscription id is required. Set the Azure:SubscriptionId configuration value.","messagePattern":"An Azure subscription id is required\\. Set the Azure:SubscriptionId configuration value\\.","errorType":"validation","errorClass":"MissingConfigurationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure/Provisioning/Internal/BaseProvisioningContextProvider.cs","lineNumber":93,"sourceCode":"        // Must start with a letter\n        if (!char.IsLetter(name[0]))\n        {\n            return false;\n        }\n\n        // Cannot end with a period\n        if (name.EndsWith('.'))\n        {\n            return false;\n        }\n\n        // No consecutive periods\n        return !name.Contains(\"..\");\n    }\n\n    public virtual async Task<ProvisioningContext> CreateProvisioningContextAsync(CancellationToken cancellationToken = default)\n    {\n        var subscriptionId = _options.SubscriptionId ?? throw new MissingConfigurationException(\"An Azure subscription id is required. Set the Azure:SubscriptionId configuration value.\");\n\n        var credential = _tokenCredentialProvider.TokenCredential;\n\n        if (_tokenCredentialProvider is DefaultTokenCredentialProvider defaultProvider)\n        {\n            defaultProvider.LogCredentialType();\n        }\n\n        var armClient = _armClientProvider.GetArmClient(credential, subscriptionId);\n\n        var (subscriptionResource, tenantResource) = await armClient.GetSubscriptionAndTenantAsync(cancellationToken).ConfigureAwait(false);\n\n        _logger.LogInformation(\"Default subscription: {name} ({subscriptionId})\", subscriptionResource.DisplayName, subscriptionResource.Id);\n        _logger.LogInformation(\"Tenant: {tenantId}\", tenantResource.TenantId);\n\n        if (string.IsNullOrEmpty(_options.Location))\n        {\n            throw new MissingConfigurationException(\"An azure location/region is required. Set the Azure:Location configuration value.\");","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure/Provisioning/Internal/BaseProvisioningContextProvider.cs#L75-L111","documentation":"BaseProvisioningContextProvider.CreateProvisioningContextAsync requires an Azure subscription id to create a ProvisioningContext. When options.SubscriptionId is null it throws MissingConfigurationException directing you to set the Azure:SubscriptionId configuration value. Aspire provisioning cannot target Azure without knowing which subscription to deploy into.","triggerScenarios":"Running an AppHost that provisions Azure resources with no SubscriptionId in options and no Azure:SubscriptionId configuration entry (appsettings.json, environment variable Azure__SubscriptionId, or AZURE_SUBSCRIPTION_ID depending on setup).","commonSituations":"Fresh checkout without azd/az login setup; running in CI without the config value; local user secrets never initialized; switching machines where the Azure state/config was not carried over.","solutions":["Add \"Azure\": { \"SubscriptionId\": \"<your-sub-id>\" } to appsettings.json or user secrets of the AppHost.","Set the environment variable Azure__SubscriptionId (or AZURE_SUBSCRIPTION_ID if wired that way) before running the AppHost.","Run `azd auth login` / `az login` and initialize the environment (azd init or provision once) so the value is captured.","Or set options.SubscriptionId programmatically when configuring the Azure provisioning options."],"exampleFix":"// appsettings.json\n// before\n{ }\n// after\n{ \"Azure\": { \"SubscriptionId\": \"00000000-0000-0000-0000-000000000000\" } }","handlingStrategy":"validation","validationCode":"var subId = configuration[\"Azure:SubscriptionId\"];\nif (string.IsNullOrEmpty(subId))\n{\n    throw new InvalidOperationException(\"Set Azure:SubscriptionId (appsettings or Azure__SubscriptionId env var) before provisioning.\");\n}","typeGuard":null,"tryCatchPattern":"try { await provider.CreateProvisioningContextAsync(ct); } catch (MissingConfigurationException ex) when (ex.Message.Contains(\"SubscriptionId\")) { /* prompt user to configure subscription */ }","preventionTips":["Run `azd init` or `azd provision` once so Azure settings (subscription, location) are persisted.","Keep Azure:SubscriptionId in user secrets for local dev.","Set Azure__SubscriptionId in CI environment variables."],"tags":["azure","configuration","provisioning","missing-config"],"backgroundTag":"missing-required-config","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}