Bättre Azure resursnamnsschema
I .NET Aspire 9.0 GA har Azure resursnamngivningsschema uppdaterats till ett mer robust och flexibelt system. Den här ändringen åtgärdar problem med det tidigare namngivningsschemat, vilket orsakade problem som avkortning av namn och ogiltiga implementeringar.
Version introducerad
.NET .NET Aspire 9.0 GA
Tidigare beteende
Den tidigare versionen använde en tidig/alfa-version av Azure.Provisioning
, som använde ett namngivningsschema som försökte vara den minst vanliga nämnaren för alla resurser. Detta resulterade ofta i trunkerade eller ogiltiga namn.
protected string GetGloballyUniqueName(string resourceName)
=> $"toLower(take('{resourceName}${{uniqueString(resourceGroup().id)}}', 24))";
Nytt beteende
Den nya versionen av Azure.Provisioning
använder ett mer avancerat namngivningsschema som tar hänsyn till de specifika kraven för varje resurstyp, till exempel maximal längd och giltiga tecken.
public override BicepValue<string>? ResolveName(
ProvisioningContext context,
Resource resource,
ResourceNameRequirements requirements)
{
string prefix = SanitizeText(
resource.ResourceName, requirements.ValidCharacters);
string separator =
requirements.ValidCharacters.HasFlag(ResourceNameCharacters.Hyphen) ? "-" :
requirements.ValidCharacters.HasFlag(ResourceNameCharacters.Underscore) ? "_" :
requirements.ValidCharacters.HasFlag(ResourceNameCharacters.Period) ? "." :
"";
BicepValue<string> suffix = GetUniqueSuffix(context, resource);
return BicepFunction.Take(
BicepFunction.Interpolate(
$"{prefix}{separator}{suffix}"), requirements.MaxLength);
}
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Rekommenderad åtgärd
Användare som vill underhålla det gamla namngivningsschemat kan anpassa Azure CDK-ProvisioningContext
objekt. Detta kan göras genom att konfigurera klassen AzureProvisioningOptions
och infoga AzureResourceNamePropertyResolverAspireV8
-lösaren.
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Berörda API:er
Ingen.
.NET Aspire