【问题标题】:how to ensure unique names within an arm template?如何确保手臂模板中的唯一名称?
【发布时间】:2019-02-14 15:21:48
【问题描述】:

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

我们有大约 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


    【解决方案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】:

      您可以使用诸如 time arm 模板部署开始之类的东西,并将其传递到模板中,并据此生成唯一名称。所有的 arm 模板函数都是确定性的,所以如果你传递相同的输入,你总是会得到相同的输出。日期\时间功能尚未实现(afaik)。在此之前,您需要依赖外部源来生成名称\前缀\某些东西,以便 arm 模板生成唯一名称。

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

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

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

      【讨论】:

      • 有一个uniqueString 函数可用。值得信赖
      • 不,它是确定性的,这意味着如果你传入相同的输入,你总是会得到相同的输出。
      • 我找不到可以提供给它的非确定性输入。
      猜你喜欢
      • 2023-03-04
      • 2020-06-22
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多