Besseres Azure-Ressourcennamensschema
In .NET Aspire 9.0 GA wurde das Azure Ressourcenbenennungsschema auf ein robusteres und flexibleres System aktualisiert. Diese Änderung behebt Probleme mit dem vorherigen Benennungsschema, was zu Problemen wie dem Abschneiden von Namen und ungültigen Bereitstellungen führte.
Eingeführte Version
.NET .NET Aspire 9.0 GA
Vorheriges Verhalten
Die vorherige Version hat eine frühe/Alpha-Version von Azure.Provisioning
verwendet, die ein Benennungsschema verwendet hat, das versucht hat, den am wenigsten gemeinsamen Nenner aller Ressourcen zu sein. Dies führte häufig zu verkürzten oder ungültigen Namen.
protected string GetGloballyUniqueName(string resourceName)
=> $"toLower(take('{resourceName}${{uniqueString(resourceGroup().id)}}', 24))";
Neues Verhalten
Die neue Version von Azure.Provisioning
verwendet ein komplexeres Benennungsschema, das die spezifischen Anforderungen jedes Ressourcentyps berücksichtigt, z. B. maximale Länge und gültige Zeichen.
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);
}
Art der Unterbrechungsänderung
Diese Änderung ist eine Verhaltensänderung.
Empfohlene Aktion
Benutzer, die das alte Benennungsschema beibehalten möchten, können das Azure CDK-ProvisioningContext
-Objekt anpassen. Dazu können Sie die AzureProvisioningOptions
Klasse konfigurieren und den AzureResourceNamePropertyResolverAspireV8
Resolver einfügen.
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Betroffene APIs
Nichts.