Delen via


Een beter Azure naamgevingsschema

In .NET Aspire 9.0 Algemene Beschikbaarheid is het naamgevingsschema voor Azure resources bijgewerkt naar een robuuster en flexibeler systeem. Met deze wijziging worden problemen opgelost met het vorige naamgevingsschema, waardoor problemen zoals het afkappen van namen en ongeldige implementaties zijn veroorzaakt.

Versie geïntroduceerd

.NET .NET Aspire 9.0 GA

Vorig gedrag

De vorige versie gebruikte een vroege/alfaversie van Azure.Provisioning, waarbij een naamgevingsschema werd gebruikt dat probeerde de minst voorkomende noemer van alle resources te zijn. Dit heeft vaak geresulteerd in afgekapte of ongeldige namen.

protected string GetGloballyUniqueName(string resourceName)
    => $"toLower(take('{resourceName}${{uniqueString(resourceGroup().id)}}', 24))";

Nieuw gedrag

De nieuwe versie van Azure.Provisioning maakt gebruik van een geavanceerder naamgevingsschema dat rekening houdt met de specifieke vereisten van elk resourcetype, zoals maximale lengte en geldige tekens.

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);
}

Type wijziging die bestaande functionaliteit beïnvloedt

Deze wijziging is een gedragswijziging.

Gebruikers die het oude naamgevingsschema willen behouden, kunnen het Azure CDK-ProvisioningContext-object aanpassen. U kunt dit doen door de AzureProvisioningOptions-klasse te configureren en de AzureResourceNamePropertyResolverAspireV8 resolver in te voegen.

var builder = DistributedApplication.CreateBuilder(args);

builder.Services.Configure<AzureProvisioningOptions>(options =>
{
    options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});

Getroffen API's

Geen.