【问题标题】:How to create a new resource in Azure ARM templates?如何在 Azure ARM 模板中创建新资源?
【发布时间】:2016-07-08 00:45:03
【问题描述】:

好的,我已经使用 ARM 模板 - https://azure.microsoft.com/en-us/documentation/articles/web-sites-integrate-with-vnet 完成了此处描述的所有操作。除了一件事 - 启用与预先存在的 VNET 的 VNET 集成。

这可以在 ARM 模板中完成吗? 谢谢!

【问题讨论】:

  • 你能分享你的模板,这样我就不用重新开始了吗?
  • 我希望可以,但这是针对客户的,而且它很大,有很多参数和变量。抱歉,做不到。

标签: azure arm-template


【解决方案1】:

这是一个可能对您有所帮助的示例模板。修改自this quickstart sample in GitHub

{
   "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "hostingPlanName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of the hosting plan to use in Azure."
         }
      },
      "webSiteName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of the Azure Web app to create."
         }
      },
      "vnetName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of an existing Azure VNet which has a Gateway Subnet already, and is in the resource group you are going to deploy."
         }
      },
      "skuName": {
         "type": "string",
         "defaultValue": "S1",
         "allowedValues": [
            "S1",
            "S2",
            "S3",
            "P1",
            "P2",
            "P3",
            "P4"
         ],
         "metadata": {
            "description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
         }
      },
      "skuCapacity": {
         "type": "int",
         "defaultValue": 1,
         "minValue": 1,
         "metadata": {
            "description": "Describes plan's instance count"
         }
      }
   },
   "resources": [
      {
         "apiVersion": "2015-08-01",
         "name": "[parameters('hostingPlanName')]",
         "type": "Microsoft.Web/serverfarms",
         "location": "[resourceGroup().location]",
         "tags": {
            "displayName": "HostingPlan"
         },
         "sku": {
            "name": "[parameters('skuName')]",
            "capacity": "[parameters('skuCapacity')]"
         },
         "properties": {
            "name": "[parameters('hostingPlanName')]"
         }
      },
      {
         "apiVersion": "2015-08-01",
         "name": "[parameters('webSiteName')]",
         "type": "Microsoft.Web/sites",
         "location": "[resourceGroup().location]",
         "tags": {
            "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
            "displayName": "Website"
         },
         "dependsOn": [
            "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
         ],
         "properties": {
            "name": "[parameters('webSiteName')]",
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
         },
         "resources": [
            {
               "apiVersion": "2015-08-01",
               "name": "web",
               "type": "config",
               "dependsOn": [
                  "[concat('Microsoft.Web/sites/', parameters('webSiteName'))]"
               ],
               "properties": {
                  "pythonVersion": "3.4"
               }
            },
            {
              "apiVersion": "2015-08-01",
              "name": "[parameters('vnetName')]",
              "type": "virtualNetworkConnections",
              "location": "[resourceGroup().location]",
              "dependsOn": [
                  "[concat('Microsoft.Web/sites/', parameters('webSiteName'))]"
              ],
              "properties": {
                  "vnetResourceId": "[concat(resourceGroup().id, '/providers/Microsoft.Network/virtualNetworks/', parameters('vnetName'))]"
              }
            }
         ]
      }
   ]
}

这里有 3 件事你应该小心。

  1. 模板以 python Web 应用模板开头,并添加了“Microsoft.Web/sites/virtualNetworkConnections”资源。因此,如果您使用其他编程语言,您可以从其他模板开始。

  2. 预先存在的 VNet 应位于您正在部署的同一资源组中。如果您使用的 VNet 不在同一个资源组中,则应修改“Microsoft.Web/sites/virtualNetworkConnections”的“properties”中的“vnetResourceId”。

  3. 您正在使用的 VNet 应该已经有一个带有点到站点地址的网关。否则,您将无法将 Web 应用程序集成到 VNet。更多详情请见Configure a Point-to-Site connection to a virtual network using PowerShell

更新:关于我是如何获得这些信息的,好吧,网上没有太多关于这个的信息。该模板是基于 PowerShell 解决方案和我对 ARM 模板的了解构建的。 PowerShell 解决方案在this article 中提供。获取 ARM 模板的另一种可能方法是在一个资源组中创建这些资源,然后在门户中导出资源组的模板。但是,对于这种情况,这是行不通的,因为资源类型“Microsoft.Web/sites/virtualNetworkConnections”尚不受支持。但是,您仍然可以通过带有选项 -debug 的 PowerShell 命令 Get-AzureRmResource 查看 REST API。

Get-AzureRmResource -ResourceGroupName <resource group> -ResourceType Microsoft.Web/sites/virtualNetworkConnections -Name <web app>/<VNet> -debug -ApiVersion 2015-08-01

您将获得以下 REST API。

URI:

https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Web/sites/<web app>/virtualNetworkConnections/<VNet>?api-version=2015-08-01

主体:

{
  "id": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Web/sites/<web app>/virtualNetworkConnections/<VNet>",
  "name": "<VNet>",
  "type": "Microsoft.Web/sites/virtualNetworkConnections",
  "location": "<Location>",
  "tags": null,
  "properties": {
    "vnetResourceId": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<VNet>"
    "certThumbprint": "<Thumbprint>",
    "certBlob": "<cert>",
    "routes": null,
    "resyncRequired": false,
    "dnsServers": null
  }
}

跳过一些自动生成的值,你会得到和我写的非常相似的模板:

{
  "name": "<VNet>",
  "type": "Microsoft.Web/sites/virtualNetworkConnections",
  "location": "<Location>",
  "properties": {
    "vnetResourceId": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<VNet>"
  }
}

【讨论】:

  • 您介意解释一下您是如何获得此信息的吗?资源浏览器?你从哪里得到这个架构?谢谢!
  • 感谢您的更新!我不知道 -debug 的技巧!不错!
  • 这对我也很有效!不过,通过 resources.azure.com 的资源浏览器查找资源对我来说是找到 json 模板的更好方法。从 Providers,我深入到:Microsoft.Web/sites//virtualNetworkConnections 以获取要创建的网络资源
  • 我已经尝试过这个模板,但是如果我部署模板,则会添加 vNet,但门户网站告诉我证书不同步(并且 vNet 不起作用)。我尝试添加 certThumbprint 和 certBlob 参数,但我仍然遇到同样的问题。如果我检查资源浏览器,我可以看到 certBlob 设置正确,但指纹没有。您知道可能出了什么问题吗?
  • 无法使用 ARM 同步证书。您必须使用 Powershell 来执行此操作:social.msdn.microsoft.com/Forums/en-US/…
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2019-03-13
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多