簡體   English   中英

Azure ARM模板和REST API

[英]Azure ARM Templates and REST API

我正在嘗試學習Azure資源模板,並試圖了解何時使用它們以及何時使用REST API的工作流。

我的感覺是,在Azure中創建虛擬網絡和子網的情況很少見,一旦完成設置並希望不要過於頻繁地對其進行修改,便可以將其部署到該結構中。

因此,關於ARM模板,假設我有一個包含VNET和子網資源的模板。 要從https://docs.microsoft.com/zh-cn/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已經存在,則不提示用戶提供另一個模板的詳細信息?

我已閱讀並看到了增量模式(默認情況下,除非指定了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

我將使用此Azure 文檔 參考下面的相應部分:

增量和完整的部署

部署資源時,您可以指定部署是增量更新還是完整更新。 默認情況下,資源管理器將部署作為對資源組的增量更新進行處理。

通過增量部署,資源管理器

  1. 保留資源組中存在但模板中未指定的不變資源
  2. 添加模板中指定但資源組中不存在的資源
  3. 不會按模板中定義的相同條件重新供應資源組中存在的資源
  4. 重新供應在模板中具有更新設置的現有資源

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

  1. 刪除資源組中存在但模板中未指定的資源
  2. 添加模板中指定但資源組中不存在的資源
  3. 不會按模板中定義的相同條件重新供應資源組中存在的資源
  4. 重新供應在模板中具有更新設置的現有資源

要選擇增量更新還是完整更新,取決於您是否有正在使用的資源。 如果devops要求始終使資源與json模板中定義的資源保持同步,則應使用Complete Update模式。 使用模板和源代碼部署資源的最大好處是可以防止配置漂移,並且使用Complete Update模式是有利的。

至於指定參數(如果在參數文件中指定),則不必再次指定它們。

可以以增量模式部署新模板,這會將新資源添加到現有資源組中。 在模板中僅定義新資源,現有資源將不會更改。

從Powershell使用以下cmdlet

New-AzureRmResourceGroupDeployment -ResourceGroupName“ YourResourceGroupName” -TemplateFile“ path \\ to \\ template.json”-模式增量-Force

我的經驗法則是要刪除的內容,或者要在訂閱之間復制的內容,請使用ARM模板。

例如,我們想要測試環境中的東西,我只是將其ARM起來,在開發人員要求的東西(“嘿,我需要緩存”,“哦,我需要開始使用服務總線”的方式)上基於腳本,使用增量式模式下,我們可以將其推出到Dev中,然后當我們遷移到不同的環境時,您只需將其部署到Azure中的其他訂閱,它應該已准備就緒。

另外,我們已經開始在VMSS中配置我們自己的Cloud Load Test代理,VMSS是一個簡單的ARM模板,通過構建調用該模板,以擴展到x台機器,然后完成后,我們只是丟棄資源組。 它是可重復且可靠的,請確保您可以編寫腳本,但是由於TFS負責部署這些內容(還包含時間表)...

我遇到的一件美麗的事就是Key Vault,當您將其武裝起來並從服務總線,存儲帳戶/任何東西中撥出所有值時,您只需獲取連接字符串/密鑰/任何東西並將它們直接放入Key Vault,因此您無需擔心,如果您想重新生成任何內容(例如,開發人員想要更改緩存名稱或其他名稱,或者不小心將密鑰發布到GitHub),只需重新部署(通常我是只會破壞整個資源組),並為您更新文件庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM