部署到 Azure 时,初始部署可能会出现如下错误并失败:
“指定的名称已在使用中”
本文介绍几种避免此问题的技术。
症状
将项目部署到AspireAzure时,应用模型中的资源将转换为Azure资源。 某些 Azure 资源具有全局范围的名称,例如 Azure 应用配置,其中所有实例都位于 [name].azconfig.io 全局命名空间中。
该值 [name] 派生自 Aspire 资源名称,以及基于资源组名称的随机字符。 但是,生成的字符串可能会超过应用配置中资源名称的允许长度。 因此,某些字符将被截断,以确保符合性。
当全局命名空间中发生冲突时,资源无法部署,因为 [name]+[truncated hash] 的组合不够唯一。
可能的解决方案
一种解决方法是避免对资源使用公用名称,例如 appconfig 或 storage。 而是选择更有意义的特定名称。 这减少了冲突的可能性,但不完全消除冲突。 在这种情况下,可以使用回调方法设置特定名称,并避免完全使用计算字符串。
请看下面的示例:
using Azure.Provisioning.AppConfiguration;
var appConfig = builder.AddAzureAppConfiguration("appConfig")
.ConfigureInfrastructure(infra =>
{
var appConfigStore = infra.GetProvisionableResources()
.OfType<AppConfigurationStore>()
.Single();
appConfigStore.Name = "noncalculatedname";
});