本文說明如何使用 Azure Resource Manager REST API 搭配 Azure Resource Manager 範本(ARM 範本)將資源部署至 Azure。
您可以將範本包含在要求本文中,或連結至檔案。 使用檔案時,它可以是本機檔案或可透過 URI 取得的外部檔案。 當您的範本位於記憶體帳戶中時,您可以限制對範本的存取,並在部署期間提供共用存取簽章 (SAS) 令牌。
先決條件
所需權限
若要將 Bicep 檔案或 Azure Resource Manager(ARM)範本部署,您需要擁有對於所部署資源的寫入權限,以及對於Microsoft.Resources/deployments資源類型的所有操作權限。 例如,若要部署虛擬機器,您需要 Microsoft.Compute/virtualMachines/write 和 Microsoft.Resources/deployments/* 權限。 假設狀況作業具有相同的權限需求。
Azure CLI 2.76.0 版或更新版本 和 Azure PowerShell 13.4.0 版或更新版本 會引進 ValidationLevel 參數,以判斷 ARM 在此程式期間驗證 Bicep 範本的徹底程度。 如需詳細資訊,請參閱 假設命令
如需角色與權限的清單,請參閱 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設定為 累加。 若要執行完整的部署,請將 設定mode為 [完成]。 使用完整模式時請小心,因為您可能會不小心刪除範本中未包含的資源。{ "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) 令牌。 如需詳細資訊,請參閱使用共用存取簽章委派存取。
如果您需要為參數提供敏感性值(例如密碼),請將該值新增至密鑰保存庫。 在部署期間擷取密鑰保存庫,如上一個範例所示。 如需詳細資訊,請參閱在部署期間使用 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": "2025-06-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" } } } }若要取得範本部署的狀態,請使用 部署 - 取得。
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範本的結構和語法。