使用 Azure PowerShell 匯出範本

為了協助建立 Azure Resource Manager 範本,您可以從現有的資源匯出範本。 匯出的範本可協助您了解部署資源的 JSON 語法和屬性。 若要將未來的部署自動化,請從匯出的範本開始,並針對您的案例加以修改。 匯出範本流程會嘗試建立可使用的範本。 不過,大部分匯出的範本都需要先進行一些修改,才能用於部署 Azure 資源。

Resource Manager 可讓您挑選一或多個要匯出至範本的資源。 您可以完全將焦點放在範本中所需的資源上。

本文說明如何透過 Azure PowerShell 匯出範本。 如需其他選項,請參閱:

選擇適合的匯出選項

有兩種方式可以匯出範本:

  • 從資源群組或資源匯出。 此選項會從現有資源產生新範本。 匯出的範本是資源群組目前狀態的「快照集」。 您可以匯出整個資源群組或該資源群組內的特定資源。

  • 從歷程記錄儲存。 此選項會擷取用於部署範本的完整複本。 您可以從部署歷程記錄中指定部署。

根據您選擇的選項,匯出的範本會有不同的品質。

從資源群組或資源 從歷程記錄
範本會自動產生。 建議您在部署前先改善程式碼。 範本是範本作者所建立範本的完整複本。 不需進行任何變更,即可重新部署。
範本是資源目前狀態的快照集。 其中包括您在部署之後所做的任何手動變更。 範本只會顯示部署時的資源狀態。 其中不會包括您在部署之後所做的任何手動變更。
您可以從資源群組中選取要匯出的資源。 特定部署的所有資源皆包括在內。 您無法挑選那些資源的子集,或加入在不同時間新增的資源。
範本包括資源的所有屬性,包括您通常不會在部署期間設定的一些屬性。 重複使用範本之前,建議您先移除或清除這些屬性。 範本只包括部署所需的屬性。 範本更疏鬆且更容易讀取。
範本可能未包括您重複使用時所需的所有參數。 範本中大部分的屬性值都是硬式編碼。 若要在其他環境中重新部署範本,您必須新增可提升設定資源能力的參數。 您可以取消選取 [包含參數],如此一來,就能製作自己的參數。 範本包括的參數可讓您輕鬆地在不同的環境中重新部署。

從資源群組或資源匯出範本的時機:

  • 您必須擷取在原始部署之後對資源所做的變更。
  • 您想要選取要匯出的資源。
  • 資源不是使用範本建立。

從歷程記錄匯出範本的時機:

  • 您需要易於重複使用的範本。
  • 您不需要包括原始部署之後所做的變更。

限制

匯出不保證都會成功。 匯出不是將預先存在的資源轉換成可在生產環境中使用之範本的可靠方式。 最好是使用手動編寫的 Bicep 檔案ARM 範本terraform,從頭開始建立資源。

從資源群組或資源匯出時,即會從每個資源類型的已發佈結構描述中產生匯出的範本。 有時,結構描述不會具備最新版本的資源類型。 請檢查匯出的範本,以確保其中包括您需要的屬性。 視需要編輯匯出的範本,以使用您需要的 API 版本。

匯出的範本中可能會遺失部分密碼參數。 您必須檢查範本參考,並手動新增這些參數,然後才能使用範本來部署資源。

匯出範本功能不支援匯出 Azure Data Factory 資源。 若要了解如何匯出 Data Factory 資源,請參閱複製或重製 Azure Data Factory 中的資料處理站

若要匯出透過傳統部署模型建立的資源,您必須將資源移轉至 Resource Manager 部署模型

如果您在匯出範本時收到警告,指出有資源類型未匯出,您仍然可以探索該資源的屬性。 如需資源屬性,請參閱範本參考。 您也可以查看 Azure REST API 中的資源類型。

您建立匯出範本的資源群組有 200 個資源的限制。 如果您嘗試匯出的資源群組具有 200 個以上的資源,則會顯示錯誤訊息 Export template is not supported for resource groups more than 200 resources

從資源群組匯出範本

設定資源群組之後,您可以匯出資源群組的 Azure Resource Manager 範本。

若要匯出資源群組中的所有資源,請使用 Export-AzResourceGroup Cmdlet 並提供資源群組名稱。

Export-AzResourceGroup -ResourceGroupName demoGroup

這會將範本儲存為本機檔案。

您可以選取要匯出的資源,而不用匯出資源群組中的所有資源。

若要匯出單一資源,請傳遞該資源識別碼。

$resource = Get-AzResource `
  -ResourceGroupName <resource-group-name> `
  -ResourceName <resource-name> `
  -ResourceType <resource-type>
Export-AzResourceGroup `
  -ResourceGroupName <resource-group-name> `
  -Resource $resource.ResourceId

若要匯出多筆資源,請以陣列的方式傳遞資源識別碼。

Export-AzResourceGroup `
  -ResourceGroupName <resource-group-name> `
  -Resource @($resource1.ResourceId, $resource2.ResourceId)

匯出範本時,您可以指定是否要在範本中使用參數。 依預設會包含資源名稱的參數,但是參數沒有預設值。

"parameters": {
  "serverfarms_demoHostPlan_name": {
    "type": "String"
  },
  "sites_webSite3bwt23ktvdo36_name": {
    "type": "String"
  }
}

如果您在匯出範本時使用 -SkipResourceNameParameterization 參數,則範本中不會包含資源名稱的參數。 相對地,資源名稱會直接在資源上設定為其目前的值。 您無法在部署期間自訂名稱。

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-09-01",
    "name": "demoHostPlan",
    ...
  }
]

如果您在匯出範本時使用 -IncludeParameterDefaultValue 參數,則範本參數會包含預設值,此值會設為目前的值。 您可以使用該預設值,或傳入不同的值來覆寫預設值。

"parameters": {
  "serverfarms_demoHostPlan_name": {
    "defaultValue": "demoHostPlan",
    "type": "String"
  },
  "sites_webSite3bwt23ktvdo36_name": {
    "defaultValue": "webSite3bwt23ktvdo36",
    "type": "String"
  }
}

從部署歷程記錄儲存範本

您可以從部署歷程記錄中的部署儲存範本。 您取得的範本會與用於部署的範本完全相同。

若要從資源群組部署取得範本,請使用 Save-AzResourceGroupDeploymentTemplate Cmdlet。 您可以指定要擷取的部署名稱。 如需取得部署名稱的說明,請參閱使用 Azure Resource Manager 檢視部署歷程記錄

Save-AzResourceGroupDeploymentTemplate -ResourceGroupName demoGroup -DeploymentName demoDeployment

範本會以部署的名稱儲存為本機檔案。

若要取得部署於其他層級的範本,請使用:

下一步