如何确保手臂模板中的唯一名称?

问题描述 投票:0回答:2

我们如何确保连接资源具有唯一名称?

我们有大约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模板中强制执行某个值是唯一的?

c# .net azure-devops azure-logic-apps arm-template
2个回答
1
投票

在您的资源名称和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传递它。


2
投票

您可以使用类似时间臂模板部署的内容,并在模板中传递并基于此生成唯一名称。所有arm模板函数都是确定性的,因此如果传递相同的输入,则总是得到相同的输出。日期\时间功能尚未实施(afaik)。在此之前,您需要依靠外部源为arm模板生成名称\前缀\,以生成唯一名称。

但这会导致您无法更新现有内容的问题,除非您知道第一次运行时提供的“种子”。

另一种强制执行的方式 - 为每个部署使用单独的资源组,我知道它不是最佳的,但是这会起作用(不确定逻辑应用程序连接tbh,它们是全局唯一的吗?如果它们那么这不起作用)。

你可能会创建一个模板,对现有资源进行过滤(有点),但它不会直截了当(它会变得非常hacky,更容易在其他地方实现这种逻辑)。

© www.soinside.com 2019 - 2024. All rights reserved.