Lepší schéma názvů prostředků Azure
Ve verzi .NET Aspire 9.0 GA bylo schéma pojmenování prostředků Azure aktualizováno na robustnější a flexibilnější systém. Tato změna řeší problémy s předchozím schématem pojmenování, které způsobilo problémy, jako je zkrácení názvu nebo neplatné nasazení.
Představená verze
.NET .NET Aspire 9.0 GA
Předchozí chování
Předchozí verze používala dřívější/alfa verzi Azure.Provisioning
, která používala schéma pojmenování, které se pokusilo být nejméně společným jmenovatelem všech prostředků. Výsledkem jsou často zkrácené nebo neplatné názvy.
protected string GetGloballyUniqueName(string resourceName)
=> $"toLower(take('{resourceName}${{uniqueString(resourceGroup().id)}}', 24))";
Nové chování
Nová verze Azure.Provisioning
používá sofistikovanější schéma pojmenování, které bere v úvahu konkrétní požadavky každého typu prostředku, například maximální délku a platné znaky.
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 zásadní změny
Tato změna je změnou chování.
Doporučená akce
Uživatelé, kteří chtějí zachovat staré schéma pojmenování, mohou přizpůsobit objekt Azure CDK ProvisioningContext
. To lze provést konfigurací třídy AzureProvisioningOptions
a vložením překladače AzureResourceNamePropertyResolverAspireV8
.
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Ovlivněná rozhraní API
Žádný.