【问题标题】:Azure ARM Template variable: Get Subscription name propertyAzure ARM 模板变量:获取订阅名称属性
【发布时间】:2017-02-25 05:06:32
【问题描述】:

有没有办法将当前订阅名称放入变量中?

类似这样的:

  "variables": {
     "Purpose":  "[subscription().SubscriptionName]"
  },

Visual Studio 说“‘订阅’的属性必须是以下之一:id、subscriptionId、tenantId。”所以上面的行不通。

我还找到了一些“参考”功能的例子,并尝试使用它:

"variables": {
   "SubName": "[reference('/subscriptions/subscription().subscriptionId','2015-01-01').outputs.name.value]"
},

但是在调用模板时会出错:

function 'reference' is not expected at this location

我不确定我应该把它放在哪里以及如何将它放入变量中。

在 PowerShell 中,我可以这样做: (Get-AzureRmSubscription).subscriptionname

出于兴趣,我们有几个订阅。订阅名称包含一个 3 位数的“短代码”,用于命名给定订阅中的资源组。除了更容易确定什么属于什么之外,它没有其他用途。这是我们命名约定的一部分,可帮助管理员(不是特别熟悉 Azure)轻松查看哪些资源在哪里。我知道还有其他方法,例如 RBAC 等,但 Microsoft 不断捕获凭据 cookie 并不适合使用不同凭据登录到不同的订阅。

谢谢 W.

【问题讨论】:

    标签: azure arm-template


    【解决方案1】:

    我能够让subscription().subscriptionId 在我的模板的变量中工作。

    我认为您看到的这个错误是 Azure 读取模板的结果。基于Microsoft's reference documentation,变量中不能使用引用:

    备注

    引用函数的值来自运行时状态,因此不能在变量部分中使用。

    我得到了相同的function 'reference' is not expected at this location,直到我将我的实际引用调用移动到模板的正文中。

    【讨论】:

      【解决方案2】:

      你应该可以使用:

      subscription().displayName
      

      (我会收到一个关于 VS 行为的错误)

      【讨论】:

        【解决方案3】:

        在撰写此答案时(2016 年 10 月 16 日),恐怕您不能。

        根据docs,这是 subsbscription() 返回的内容:

        {
           "id": "/subscriptions/#####",
           "subscriptionId": "#####",
           "tenantId": "#####"
        }
        

        所以你应该预料到subscription().SubscriptionName 会失败。

        在我链接的同一个文档中,cmets 部分对此进行了讨论,请参阅comment #2694777590,其中 Microsoftie 说:

        好的 - 我添加了一个错误以将 name 属性添加到 subcription() 表达式。

        这是 2016 年 6 月 6 日,所以我猜它正在路上。

        作为一种解决方法,您可以从正在执行模板的事物中注入订阅名称。例如,如果它是 PowerShell,你可以这样做

        $subName = (Get-AzureRmSubscription).subscriptionname
        New-AzureRmResourceGroupDeployment ... -SecscriptionName $subName
        

        另外,我不知道根据您谈到的订阅名称进行字符串操作的目的是什么,但如果要创建订阅范围的唯一名称,一个好的做法是使用 uniqueString(subscription().subscriptionId) 作为名称的一部分。

        【讨论】:

        • 谢谢@itaysk。我已经用更多信息更新了我的问题。在与 Microsoft 会面后做出最近的设计决定后,我们决定放弃 PS(因为它显然是“旧”方式)并使用 JSON 模板。在添加该功能之前,我将使用 PS 为资源建立名称。
        猜你喜欢
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 2020-12-27
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 2018-03-17
        相关资源
        最近更新 更多