使用 ARM 範本和 Azure Resource Manager REST API 部署資源
在此文章
所需的權限
部署範圍
使用 REST API 部署
使用 ARMClient 進行部署
部署名稱
下一步
顯示其他 2 個
此文章說明如何使用 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
如需租用戶層級部署的詳細資訊,請參閱在租用戶層級建立資源 。
本文中的範例會使用資源群組部署。
設定一般參數和標頭 (包括驗證權杖)。
如果您要部署到不存在的資源群組,請先建立資源群組。 提供您的訂用帳戶識別碼、新資源群組的名稱,以及需要解決方案的位置。 如需詳細資訊,請參閱建立資源群組 。
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 是一個簡單的命令列工具,可叫用 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
的儲存體帳戶,則您會具有兩個儲存體帳戶,且在部署歷程記錄中會具有兩個項目。
為了避免因同時部署而發生衝突,並確保部署歷程記錄中項目的唯一性,請為每個部署提供唯一的名稱。