Esportare modelli di Azure Resource Manager con PowerShellExport Azure Resource Manager templates with PowerShell

Resource Manager consente di esportare un modello di Resource Manager dalle risorse esistenti nella sottoscrizione.Resource Manager enables you to export a Resource Manager template from existing resources in your subscription. Il modello generato può essere usato per ottenere informazioni sulla sintassi del modello o per automatizzare la ridistribuzione della soluzione in base alle esigenze.You can use that generated template to learn about the template syntax or to automate the redeployment of your solution as needed.

È importante notare che è possibile esportare un modello in due modi diversi:It is important to note that there are two different ways to export a template:

  • È possibile esportare il modello vero e proprio usato per una distribuzione.You can export the actual template that you used for a deployment. Il modello esportato include tutti i parametri e le variabili uguali a quelli visualizzati nel modello originale.The exported template includes all the parameters and variables exactly as they appeared in the original template. Questo approccio è utile quando si vuole recuperare un modello.This approach is helpful when you need to retrieve a template.
  • È possibile esportare un modello che rappresenta lo stato attuale del gruppo di risorse.You can export a template that represents the current state of the resource group. Il modello esportato non si basa su un modello qualsiasi usato per la distribuzione,The exported template is not based on any template that you used for deployment. ma crea un modello che è uno snapshot del gruppo di risorse.Instead, it creates a template that is a snapshot of the resource group. Il modello esportato ha diversi valori hardcoded e probabilmente meno parametri di quelli che si definiscono in genere.The exported template has many hard-coded values and probably not as many parameters as you would typically define. Questo approccio è utile quando si modifica il gruppo di risorseThis approach is useful when you have modified the resource group. e in seguito è necessario acquisire il gruppo di risorse come modello.Now, you need to capture the resource group as a template.

Questo argomento illustra entrambi gli approcci.This topic shows both approaches.

Distribuire una soluzioneDeploy a solution

Per illustrare entrambi gli approcci per l'esportazione di un modello, si inizia con la distribuzione di una soluzione nella sottoscrizione in uso.To illustrate both approaches for exporting a template, let's start by deploying a solution to your subscription. Se si dispone già di un gruppo di risorse nella sottoscrizione che si vuole esportare, non è necessario distribuire la soluzione.If you already have a resource group in your subscription that you want to export, you do not have to deploy this solution. Il resto dell'articolo si riferisce tuttavia al modello per questa soluzione.However, the remainder of this article refers to the template for this solution. Lo script di esempio distribuisce un account di archiviazione.The example script deploys a storage account.

New-AzureRmResourceGroup -Name ExampleGroup -Location "South Central US"
New-AzureRmResourceGroupDeployment -ResourceGroupName ExampleGroup `
  -DeploymentName NewStorage
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

Salvare il modello dalla cronologia di distribuzioneSave template from deployment history

È possibile recuperare un modello dalla cronologia della distribuzione usando il comando Save-AzureRmResourceGroupDeploymentTemplate.You can retrieve a template from your deployment history by using the Save-AzureRmResourceGroupDeploymentTemplate command. L'esempio seguente illustra come salvare il modello distribuito in precedenza:The following example saves the template that you previously deploy:

Save-AzureRmResourceGroupDeploymentTemplate -ResourceGroupName ExampleGroup -DeploymentName NewStorage

Restituisce il percorso del modello.It returns the location of the template.

Path
----
C:\Users\exampleuser\NewStorage.json

Aprendo il file si nota che si tratta dello stesso modello usato per la distribuzione.Open the file, and notice that it is the exact template you used for deployment. I parametri e le variabili corrispondono al modello di GitHub.The parameters and variables match the template from GitHub. È possibile ridistribuire il modello.You can redeploy this template.

Esportare il gruppo di risorse come modelloExport resource group as template

Invece di recuperare un modello dalla cronologia di distribuzione, è possibile recuperarne uno che rappresenta lo stato attuale di un gruppo di risorse usando il comando Export-AzureRmResourceGroup.Instead of retrieving a template from the deployment history, you can retrieve a template that represents the current state of a resource group by using the Export-AzureRmResourceGroup command. Il comando è utile quando sono state apportate numerose modifiche al gruppo di risorse e nessun modello esistente è in grado di rappresentarle tutte.You use this command when you have made many changes to your resource group and no existing template represents all the changes.

Export-AzureRmResourceGroup -ResourceGroupName ExampleGroup

Restituisce il percorso del modello.It returns the location of the template.

Path
----
C:\Users\exampleuser\ExampleGroup.json

Aprendo il file si nota che è diverso rispetto al modello di GitHub.Open the file, and notice that it is different than the template in GitHub. Contiene parametri diversi e non include variabili.It has different parameters and no variables. I valori dello SKU e della posizione della risorsa di archiviazione sono impostati come hardcoded.The storage SKU and location are hard-coded to values. L'esempio seguente mostra il modello esportato, ma il modello in uso presenta un nome di parametro leggermente diverso:The following example shows the exported template, but your template has a slightly different parameter name:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccounts_nf3mvst4nqb36standardsa_name": {
      "defaultValue": null,
      "type": "String"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "Storage",
      "name": "[parameters('storageAccounts_nf3mvst4nqb36standardsa_name')]",
      "apiVersion": "2016-01-01",
      "location": "southcentralus",
      "tags": {},
      "properties": {},
      "dependsOn": []
    }
  ]
}

È possibile ridistribuire questo modello, ma è necessario individuare un nome univoco per l'account di archiviazione.You can redeploy this template, but it requires guessing a unique name for the storage account. Il nome del parametro è leggermente diverso.The name of your parameter is slightly different.

New-AzureRmResourceGroupDeployment -ResourceGroupName ExampleGroup `
  -TemplateFile C:\Users\exampleuser\ExampleGroup.json `
  -storageAccounts_nf3mvst4nqb36standardsa_name tfnewstorage0501

Personalizzare il modello esportatoCustomize exported template

È possibile modificare questo modello per renderlo più flessibile e facile da usare.You can modify this template to make it easier to use and more flexible. Per consentire più posizioni, modificare la proprietà location affinché usi la stessa posizione del gruppo di risorse:To allow for more locations, change the location property to use the same location as the resource group:

"location": "[resourceGroup().location]",

Per evitare di dover individuare un nome univoco per l'account di archiviazione, rimuovere il parametro per il nome dell'account di archiviazione.To avoid having to guess a uniques name for storage account, remove the parameter for the storage account name. Aggiungere un parametro per il suffisso del nome di archiviazione e uno SKU di archiviazione:Add a parameter for a storage name suffix, and a storage SKU:

"parameters": {
    "storageSuffix": {
      "type": "string",
      "defaultValue": "standardsa"
    },
    "storageAccountType": {
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS"
      ],
      "type": "string",
      "metadata": {
        "description": "Storage Account type"
      }
    }
},

Aggiungere una variabile che costruisce il nome dell'account di archiviazione con la funzione uniqueString:Add a variable that constructs the storage account name with the uniqueString function:

"variables": {
    "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
  },

Impostare il nome dell'account di archiviazione sulla variabile:Set the name of the storage account to the variable:

"name": "[variables('storageAccountName')]",

Impostare lo SKU sul parametro:Set the SKU to the parameter:

"sku": {
    "name": "[parameters('storageAccountType')]",
    "tier": "Standard"
},

Il modello si presenta ora come segue:Your template now looks like:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageSuffix": {
      "type": "string",
      "defaultValue": "standardsa"
    },
    "storageAccountType": {
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS"
      ],
      "type": "string",
      "metadata": {
        "description": "Storage Account type"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat(uniquestring(resourceGroup().id), parameters('storageSuffix'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "sku": {
        "name": "[parameters('storageAccountType')]",
        "tier": "Standard"
      },
      "kind": "Storage",
      "name": "[variables('storageAccountName')]",
      "apiVersion": "2016-01-01",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {},
      "dependsOn": []
    }
  ]
}

Ridistribuire il modello modificato.Redeploy the modified template.

Passaggi successiviNext steps