Azure ARM模板和REST API [英] Azure ARM Templates and REST API

查看:0
本文介绍了Azure ARM模板和REST API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试学习Azure资源模板,并尝试了解何时使用它们以及何时使用REST API背后的工作流程。

我的感觉是,在Azure中创建虚拟网络和子网是一件相当不常见的事情,一旦你按照你想要的方式进行了设置,你就不会太频繁地修改它,你就会把东西部署到那个结构中。

因此,关于ARM模板,假设我有一个包含用于VNET和Subnet的资源的模板。以https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-template-walkthrough#virtual-network-and-subnet中的例子为例,我可能有:

{
"apiVersion": "2015-06-15",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('vnetName')]",
"location": "[resourceGroup().location]",
"properties": {
 "addressSpace": {
   "addressPrefixes": [
     "10.0.0.0/16"
   ]
 },
 "subnets": [
   {
     "name": "[variables('subnetName')]",
     "properties": {
       "addressPrefix": "10.0.0.0/24"
     }
   }
 ]
}
}

我将其部署到资源组。假设我随后添加了一个负载均衡器并重新部署了模板。在这种情况下,用户会被要求再次提供vnetName参数的值,当然不能提供相同的值,因此我们最终会得到另一个不是我们想要的VNET。

那么,您定义ARM模板(VNET、LBS、子网、NIC等)然后部署的工作流是一次性的吗?然后,当您想要部署VM、扩展集等时,您可以使用REST API进行部署,然后部署到资源组/VNET子网?或者,有没有一种方法可以逐步构建ARM模板,并多次部署它,以便在(例如)已经存在VNET的情况下,不会提示用户提供另一个的详细信息?

我已仔细阅读并查看了增量模式(除非指定了Complete,否则为默认模式),但不确定这是否相关以及如何使用。

非常感谢您的帮助!

更新

确定,我现在可以使用azure group deployment create -f azuredeploy.json -g ARM-Template-Tests -m Incremental,并已从

修改了模板中的VNET资源
{
  "apiVersion": "2016-09-01",
  "type": "Microsoft.Network/virtualNetworks",
  "name": "[variables('virtualNetworkName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "addressSpace": {
      "addressPrefixes": [
        "[variables('addressPrefix')]"
      ]
    },
    "subnets": [
      {
        "name": "[variables('subnetName')]",
        "properties": {
          "addressPrefix": "[variables('subnetPrefix')]"
        }
      }
    ]
  }
},

{
  "apiVersion": "2015-05-01-preview",
  "type": "Microsoft.Network/virtualNetworks",
  "name": "[parameters('virtualNetworkName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "addressSpace": {
      "addressPrefixes": [
        "[parameters('addressPrefix')]"
      ]
    },
    "subnets": [
      {
        "name": "[parameters('subnet1Name')]",
        "properties": {
          "addressPrefix": "[parameters('subnet1Prefix')]"
        }
      },
      {
        "name": "[parameters('gatewaySubnet')]",
        "properties": {
          "addressPrefix": "[parameters('gatewaySubnetPrefix')]"
        }
      }
    ]
  }
},

但子网不变。他们是否应该使用azure group deployment create -f azuredeploy.json -g ARM-Template-Tests -m Incremental

推荐答案

我要背上这个Azuredocumentation。参考下面的相应部分:

增量和完整部署

部署资源时, 您可以指定部署是增量更新还是 完成更新。默认情况下,资源管理器将部署处理为 对资源组的增量更新。

使用增量部署,资源管理器

  1. 保持资源组中存在但未在模板中指定的资源不变
  2. 添加在模板中指定但在资源组中不存在的资源
  3. 不会在模板中定义的相同条件下重新置备资源组中存在的资源
  4. 重新置备已更新模板中设置的现有资源

完成部署后,资源管理器:

  1. 删除资源组中存在但未在模板中指定的资源
  2. 添加在模板中指定但在资源组中不存在的资源
  3. 不会在模板中定义的相同条件下重新置备资源组中存在的资源
  4. 重新置备已更新模板中设置的现有资源
选择增量更新还是完全更新取决于您是否有正在使用的资源。如果DEVOPS要求始终使资源与json模板中定义的资源同步,则应使用Complete Update模式。使用模板和源代码部署资源的最大好处是防止配置漂移,并且使用Complete Update模式是有益的。

至于指定参数,如果您在参数文件中指定,则不必再次指定它们。

这篇关于Azure ARM模板和REST API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆