Sdílet prostřednictvím


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í.

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ý.