使用 ARM 範本和 Azure Resource Manager REST API 部署資源
此文章說明如何使用 Azure Resource Manager REST API 與 Azure Resource Manager 範本 (ARM 範本),將您的資源部署至 Azure。
您可以在要求本文中納入範本,也可以連結至檔案。 使用檔案時,該檔案可以是本機檔案,也可以是透過 URI 所取得的外部檔案。 當範本位於儲存體帳戶中時,您可以限制範本的存取權,並在部署期間提供共用存取簽章 (SAS) 權杖。
所需的權限
若要部署 Bicep 檔案或 ARM 範本,您需要對即將進行部署的資源具備寫入存取權,並可存取 Microsoft.Resources/部署資源類型上的所有作業。 例如,若要部署虛擬機器,您需要 Microsoft.Compute/virtualMachines/write
和 Microsoft.Resources/deployments/*
權限。 假設狀況作業具有相同的權限需求。
如需角色與權限的清單,請參閱 Azure 內建角色。
部署範圍
您可以將部署的目標設為資源群組、Azure 訂用帳戶、管理群組或租用戶。 視部署的範圍而定,您可以使用不同的命令。
若要部署至資源群組,請使用 [部署 - 建立]。 要求會傳送至:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
若要部署至訂用帳戶,請使用 [部署 - 在訂用帳戶範圍建立]。 要求會傳送至:
PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
如需訂用帳戶層級部署的詳細資訊,請參閱在訂用帳戶層級建立資源群組和資源。
若要部署到管理群組,請使用 [部署 - 在管理群組範圍建立]。 要求會傳送至:
PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
如需管理群組層級部署的詳細資訊,請參閱在管理群組層級建立資源。
若要部署至租用戶,請使用 [部署 - 在租用戶範圍建立或更新]。 要求會傳送至:
PUT https://management.azure.com/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
如需租用戶層級部署的詳細資訊,請參閱在租用戶層級建立資源。
本文中的範例會使用資源群組部署。
使用 REST API 部署
設定一般參數和標頭 (包括驗證權杖)。
如果您要部署到不存在的資源群組,請先建立資源群組。 提供您的訂用帳戶識別碼、新資源群組的名稱,以及需要解決方案的位置。 如需詳細資訊,請參閱建立資源群組。
PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
使用如下的要求本文:
{ "location": "West US", "tags": { "tagname1": "tagvalue1" } }
在部署範本之前,您可以預覽範本將對您的環境進行的變更。 使用假設狀況作業來驗證範本是否會如預期進行變更。 假設狀況也能驗證範本是否有錯誤。
若要部署範本,請在要求 URI 中提供您的訂用帳戶識別碼、資源群組的名稱、部署的名稱。
PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
在要求本文中,提供您的範本和參數檔案的連結。 如需參數檔案的詳細資訊,請參閱建立 Resource Manager 參數檔案。
請注意,
mode
會設定為 Incremental。 若要執行完整部署,請將mode
設定為 Complete。 使用完整模式時請務必謹慎,因為您可能會不小心刪除不在範本中的資源。{ "properties": { "templateLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json", "contentVersion": "1.0.0.0" }, "parametersLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json", "contentVersion": "1.0.0.0" }, "mode": "Incremental" } }
如果您想要記錄回應內容、要求內容或兩者,可在要求中包括
debugSetting
。{ "properties": { "templateLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json", "contentVersion": "1.0.0.0" }, "parametersLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json", "contentVersion": "1.0.0.0" }, "mode": "Incremental", "debugSetting": { "detailLevel": "requestContent, responseContent" } } }
您可以設定儲存體帳戶以使用共用存取簽章 (SAS) Token。 如需詳細資訊,請參閱使用共用存取簽章委派存取。
如果您需要提供參數機密的值 (例如密碼),請將該值加入金鑰保存庫。 在部署期間擷取金鑰保存庫,如先前範例所示。 如需詳細資訊,請參閱在部署期間使用 Azure Key Vault 以傳遞安全的參數值。
不要連結至含有範本和參數的檔案,而是將它們納入要求本文中。 下列範例顯示內嵌範本和參數的要求本文:
{ "properties": { "mode": "Incremental", "template": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageAccountType": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_ZRS", "Premium_LRS" ], "metadata": { "description": "Storage Account type" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } }, "variables": { "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2022-09-01", "name": "[variables('storageAccountName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('storageAccountType')]" }, "kind": "StorageV2", "properties": {} } ], "outputs": { "storageAccountName": { "type": "string", "value": "[variables('storageAccountName')]" } } }, "parameters": { "location": { "value": "eastus2" } } } }
若要取得範本部署的狀態,請使用 Deployments - Get。
GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
使用 ARMClient 進行部署
ARMClient 是一個簡單的命令列工具,可叫用 Azure Resource Manager API。 若要安裝此工具,請參閱 ARMClient (英文)。
列出您的訂用帳戶:
armclient GET /subscriptions?api-version=2021-04-01
若要列出您的資源群組:
armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01
以您的 Azure 訂用帳戶識別碼取代 <subscription-id>。
若要在美國中部區域中建立資源群組:
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 "{location: 'central us', properties: {}}"
或者,您可以將主體放入名為 CreateRg.json 的 JSON 檔案:
{
"location": "Central US",
"properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'
如需詳細資訊,請參閱 ARMClient:適用於 Azure API 的命令列工具 (英文)。
部署名稱
您可以為部署命名,例如 ExampleDeployment
。
每次執行部署時,資源群組的部署歷程記錄便會新增一筆具有部署名稱的項目。 如果您執行另一個部署並提供相同名稱,則系統會將先前的項目取代為目前的部署。 如果您想在部署歷程記錄中維護唯一的項目,請為每個部署提供唯一的名稱。
若要建立唯一的名稱,您可以指派隨機數字。 或者,加入日期值。
如果您使用相同的部署名稱,同時對同一個資源群組執行部署,則只會完成最後一個部署。 具有相同名稱但尚未完成的任何部署,都會由最後一個部署所取代。 例如,如果您執行名為 newStorage
的部署來部署名為 storage1
的儲存體帳戶,且同時執行另一個名為 newStorage
的部署來部署名為 storage2
的儲存體帳戶,則您只會部署一個儲存體帳戶。 產生的儲存體帳戶名稱為 storage2
。
但是,如果您執行名為 newStorage
的部署來部署名為 storage1
的儲存體帳戶,並在其完成後立即執行另一個名為 newStorage
的部署來部署名為 storage2
的儲存體帳戶,則您會具有兩個儲存體帳戶。 一個名稱為 storage1
,另一個名稱則為 storage2
。 但是,您在部署歷程記錄中只會具有一個項目。
若您為每個部署指定唯一的名稱,便可以同時執行這些部署,而不會發生衝突。 如果您執行名為 newStorage1
的部署來部署名為 storage1
的儲存體帳戶,且同時執行另一個名為 newStorage2
的部署來部署名為 storage2
的儲存體帳戶,則您會具有兩個儲存體帳戶,且在部署歷程記錄中會具有兩個項目。
為了避免因同時部署而發生衝突,並確保部署歷程記錄中項目的唯一性,請為每個部署提供唯一的名稱。
下一步
- 在您收到錯誤時,若要回復為成功的部署,請參閱錯誤回復至成功部署。
- 若要指定如何處理存在於資源群組中、但尚未定義於範本中的資源,請參閱 Azure Resource Manager 部署模式。
- 若要了解如何處理非同步 REST 作業,請參閱追蹤非同步 Azure 作業 (英文)。
- 若要深入了解範本,請參閱瞭解 ARM 範本的結構和語法。