Partilhar via


Melhor esquema de nomes de recursos Azure

No .NET Aspire 9.0 GA, o esquema de nomenclatura de recursos Azure foi atualizado para um sistema mais robusto e flexível. Essa alteração resolve problemas com o esquema de nomenclatura anterior, que causavam problemas como truncamento de nomes e implantações inválidas.

Versão introduzida

.NET .NET Aspire 9.0 GA

Comportamento anterior

A versão anterior usava uma versão inicial/alfa do Azure.Provisioning, que empregava um esquema de nomenclatura que tentava ser o denominador menos comum de todos os recursos. Isso geralmente resultava em nomes truncados ou inválidos.

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

Novo comportamento

A nova versão do Azure.Provisioning usa um esquema de nomenclatura mais sofisticado que considera os requisitos específicos de cada tipo de recurso, como comprimento máximo e 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 alteração significativa

Esta mudança é uma mudança comportamental.

Os usuários que desejam manter o esquema de nomenclatura antigo podem personalizar o Azure objeto CDK ProvisioningContext. Isso pode ser feito configurando a classe AzureProvisioningOptions e inserindo o resolvedor de AzureResourceNamePropertyResolverAspireV8.

var builder = DistributedApplication.CreateBuilder(args);

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

APIs afetadas

Nenhuma.