2

私は Azure Resource Templates について学習しようとしています。また、いつそれらを使用し、いつ REST API を使用するかの背後にあるワークフローを理解しようとしています。

私の感覚では、Azure で仮想ネットワークとサブネットを作成することはかなり珍しいことです。必要に応じて設定を行ったら、あまり頻繁に変更せずに、その構造にデプロイします。

ARM テンプレートに関して、VNET とサブネットのリソースを含むテンプレートがあるとします。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、LB、サブネット、NIC など) を一度に定義してからデプロイするというワークフローですか? その後、VM やスケール セットなどをデプロイする場合は、REST API を使用してリソース グループ / VNET サブネットにデプロイしますか? または、ARM テンプレートを段階的に構築し、VNET が既に存在する場合 (たとえば)、ユーザーが別の 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

4

3 に答える 3

2

この Azureドキュメントに便乗します。以下の適切なセクションを参照してください。

段階的および完全な展開

リソースをデプロイするときは、デプロイが増分更新または完全更新のいずれかであることを指定します。既定では、Resource Manager はデプロイをリソース グループの増分更新として処理します。

増分デプロイでは、Resource Manager

  1. リソース グループに存在するがテンプレートで指定されていないリソースを変更せずに残します
  2. テンプレートで指定されているが、リソース グループには存在しないリソースを追加します
  3. テンプレートで定義されたのと同じ条件で、リソース グループに存在するリソースを再プロビジョニングしません。
  4. テンプレートの設定を更新した既存のリソースを再プロビジョニングします

デプロイが完了すると、Resource Manager は次のことを行います。

  1. リソース グループに存在するが、テンプレートで指定されていないリソースを削除します
  2. テンプレートで指定されているが、リソース グループには存在しないリソースを追加します
  3. テンプレートで定義されたのと同じ条件で、リソース グループに存在するリソースを再プロビジョニングしません。
  4. テンプレートの設定を更新した既存のリソースを再プロビジョニングします

増分更新または完全更新を選択するには、使用中のリソースがあるかどうかによって異なります。DevOps の要件が、リソースを常に json テンプレートで定義されているものと同期させることである場合は、Complete Updateモードを使用する必要があります。リソースのデプロイにテンプレートとソース コードを使用する最大の利点は、構成のドリフトを防ぐことであり、Complete Updateモードを使用することは有益です。

パラメーターの指定に関しては、パラメーター ファイルで指定した場合は、再度指定する必要はありません。

于 2017-01-06T15:43:29.120 に答える