Lepszy schemat nazw zasobów Azure
W .NET Aspire wersji 9.0 ogólnie dostępnej schemat nazewnictwa zasobów Azure został zaktualizowany do bardziej niezawodnego i elastycznego systemu. Ta zmiana rozwiązuje kwestie związane z poprzednim schematem nazewnictwa, które spowodowały problemy, takie jak obcięcie nazw i nieprawidłowe wdrożenia oprogramowania.
Wersja wprowadzona
.NET .NET Aspire 9.0 (ogólna dostępność)
Poprzednie zachowanie
Poprzednia wersja używała wczesnej/alfa wersji Azure.Provisioning
, która stosowała schemat nazewnictwa dążący do bycia najmniej wspólnym mianownikiem dla wszystkich zasobów. Często powodowało to obcięcie nazw lub nieprawidłowe nazwy.
protected string GetGloballyUniqueName(string resourceName)
=> $"toLower(take('{resourceName}${{uniqueString(resourceGroup().id)}}', 24))";
Nowe zachowanie
Nowa wersja Azure.Provisioning
używa bardziej zaawansowanego schematu nazewnictwa, który uwzględnia określone wymagania poszczególnych typów zasobów, takie jak maksymalna długość i prawidłowe znaki.
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 zmiany powodującej niezgodność
Ta zmiana jest zmianą zachowawczą.
Zalecana akcja
Użytkownicy, którzy chcą zachować stary schemat nazewnictwa, mogą dostosować obiekt AzureProvisioningContext
CDK. Można to zrobić, konfigurując klasę AzureProvisioningOptions
i wstawiając program rozpoznawania AzureResourceNamePropertyResolverAspireV8
.
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Interfejsy API, których dotyczy problem
Żaden.