如何确保 arm 模板中的唯一名称?
how to ensure unique names within an arm template?
我们如何确保连接资源具有唯一的名称?
我们有大约 100 个逻辑应用程序连接到 sftp 和 blob 存储等。一个例子是:
"azureblob_1_Connection_Name": {
"value": "azureblob-1"
},
"azureblob_1_Connection_DisplayName": {
"value": "my-blob-con"
},
"azureblob_1_accountName": {
"value": "blobdocumentstor"
}
由于缺乏自动化,另一个逻辑应用程序可能使用相同的连接名称:azureblob-1
,但它可能具有不同的属性,例如 accountName
可能不同:
"azureblob_1_accountName": {
"value": "differentdocstor"
}
部署具有相同连接名称的逻辑应用时,它将替换现有连接!
我们如何确保连接不被覆盖?
是否可以在 arm 模板中强制某个值是唯一的?
您可以使用诸如 time arm template deployment started 之类的东西并将其传递到模板中并基于该名称生成唯一名称。所有的 arm 模板函数都是确定性的,所以如果你传递相同的输入,你总是会得到相同的输出。 Date\time 功能尚未实现 (afaik)。在此之前,您需要依赖外部源生成 names\prefixes\something 以便 arm 模板生成唯一名称。
但这会导致无法更新现有内容的问题,除非您知道第一次提供的 "seed" 运行。
另一种强制执行的方式 - 为每个部署使用单独的资源组,我知道它不是最佳的,但它会起作用(不确定逻辑应用程序连接,但它们是全局唯一的吗?如果它们是那么这不是工作)。
您或许可以创建一个模板来对现有资源进行(有点)过滤,但它不会是直截了当的(它真的很 hacky,更容易在别处实现此逻辑)。
在您的资源名称中使用一些前缀,并在 arm 模板中使用 uniqueString
函数来生成一个唯一的名称。
示例:
"functionApp_appServicePlanName": {
"defaultValue": "[concat('assamplefnappsvc',uniqueString(resourceGroup().id))]",
"metadata": {
"description": "Name of the app service plan to host function app."
},
"type": "string"
}
上述资源默认值将自动生成。您还可以编写自定义逻辑来生成唯一字符串,并在部署模板的任何地方从 PowerShell / .NET 传递它。
我们如何确保连接资源具有唯一的名称?
我们有大约 100 个逻辑应用程序连接到 sftp 和 blob 存储等。一个例子是:
"azureblob_1_Connection_Name": {
"value": "azureblob-1"
},
"azureblob_1_Connection_DisplayName": {
"value": "my-blob-con"
},
"azureblob_1_accountName": {
"value": "blobdocumentstor"
}
由于缺乏自动化,另一个逻辑应用程序可能使用相同的连接名称:azureblob-1
,但它可能具有不同的属性,例如 accountName
可能不同:
"azureblob_1_accountName": {
"value": "differentdocstor"
}
部署具有相同连接名称的逻辑应用时,它将替换现有连接!
我们如何确保连接不被覆盖?
是否可以在 arm 模板中强制某个值是唯一的?
您可以使用诸如 time arm template deployment started 之类的东西并将其传递到模板中并基于该名称生成唯一名称。所有的 arm 模板函数都是确定性的,所以如果你传递相同的输入,你总是会得到相同的输出。 Date\time 功能尚未实现 (afaik)。在此之前,您需要依赖外部源生成 names\prefixes\something 以便 arm 模板生成唯一名称。
但这会导致无法更新现有内容的问题,除非您知道第一次提供的 "seed" 运行。
另一种强制执行的方式 - 为每个部署使用单独的资源组,我知道它不是最佳的,但它会起作用(不确定逻辑应用程序连接,但它们是全局唯一的吗?如果它们是那么这不是工作)。
您或许可以创建一个模板来对现有资源进行(有点)过滤,但它不会是直截了当的(它真的很 hacky,更容易在别处实现此逻辑)。
在您的资源名称中使用一些前缀,并在 arm 模板中使用 uniqueString
函数来生成一个唯一的名称。
示例:
"functionApp_appServicePlanName": {
"defaultValue": "[concat('assamplefnappsvc',uniqueString(resourceGroup().id))]",
"metadata": {
"description": "Name of the app service plan to host function app."
},
"type": "string"
}
上述资源默认值将自动生成。您还可以编写自定义逻辑来生成唯一字符串,并在部署模板的任何地方从 PowerShell / .NET 传递它。