Compartir a través de


Esquema mejorado del nombre del recurso Azure

En la versión 9.0 de .NET Aspire GA (disponibilidad general), el esquema de nomenclatura de recursos Azure se ha actualizado a un sistema más sólido y flexible. Este cambio soluciona problemas con el esquema de nomenclatura anterior, lo que provocaba problemas como el truncamiento de nombres y las implementaciones no válidas.

Versión introducida

.NET .NET Aspire 9.0 GA

Comportamiento anterior

La versión anterior usaba una versión temprana o alfa de Azure.Provisioning, que empleaba un esquema de nomenclatura que intentó ser el denominador menos común de todos los recursos. Esto a menudo dio lugar a nombres truncados o no válidos.

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

Nuevo comportamiento

La nueva versión de Azure.Provisioning usa un esquema de nomenclatura más sofisticado que tiene en cuenta los requisitos específicos de cada tipo de recurso, como la longitud máxima y los caracteres válidos.

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

Tipo de cambio importante

Este cambio es un cambio de comportamiento .

Los usuarios que quieran mantener el esquema de nomenclatura antiguo pueden personalizar el objeto AzureProvisioningContext CDK. Para ello, configure la clase AzureProvisioningOptions e inserte el solucionador de AzureResourceNamePropertyResolverAspireV8.

var builder = DistributedApplication.CreateBuilder(args);

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

Las APIs afectadas

Ninguno.