Esercizio - Distribuire i modelli di Azure Resource Manager

Completato

Nota

La prima volta che si attiva una sandbox e si accettano le condizioni, l'account Microsoft viene associato a una nuova directory di Azure denominata Microsoft Learn Sandbox. Si viene aggiunti a una sottoscrizione speciale denominata Concierge Subscription.

In questa unità viene distribuito un modello di Azure Resource Manager dal computer e da un repository GitHub specificando un URI.

Importante

Questo esercizio usa Strumenti di Azure Resource Manager per Visual Studio Code. Assicurarsi di installare questa estensione in Visual Studio Code.

Configurare l'ambiente con la sottoscrizione della sandbox di Microsoft Learn

Per eseguire ogni distribuzione in questa unità, è necessario accedere all'account Azure dal terminale di Visual Studio Code.

Verificare di accedere allo stesso account che ha attivato la sandbox.

Accedere ad Azure

  1. Dal terminale in Visual Studio Code eseguire il comando seguente per accedere ad Azure. Eseguendo questo comando viene aperta una finestra del browser che consente di accedere al proprio account.

    Connect-AzAccount
    
  2. Dopo aver effettuato l'accesso, viene visualizzato un elenco di sottoscrizioni associate all'account nel terminale. Se è stata attivata la sandbox, l'elenco includerà la sottoscrizione Concierge.

  3. Verificare il nome della sottoscrizione. Il comando seguente elenca le sottoscrizioni i nomi e i rispettivi ID in un formato di tabella di facile lettura. Cercare Concierge Subscription.

    Get-AzSubscription
    
  4. Modificare la sottoscrizione attiva impostandola sulla sottoscrizione Concierge Subscription.

    $context = Get-AzSubscription -SubscriptionName "Concierge Subscription" | Set-AzContext
    

Impostare il gruppo di risorse predefinito

A questo punto è necessario impostare il gruppo di risorse creato nella sandbox come gruppo di risorse predefinito. Per eseguire questa operazione, è necessario prima di tutto ottenere il nome del gruppo di risorse eseguendo il comando seguente.

Get-AzResourceGroup | where-object ResourceGroupName -match "learn" | Set-AzDefault

In questo comando usare il nome della risorsa ottenuto dal comando precedente. Sarà simile a learn-a73131a1-b618-48b8-af70-21af7ca420c4. Questo comando consente di omettere il parametro dagli altri comandi di Azure PowerShell in questo esercizio.

Nota

In genere, quando si esegue un comando di PowerShell o dell'interfaccia della riga di comando di Azure per distribuire un modello, è necessario specificare il nome del gruppo di risorse di destinazione. Eseguendo il comando precedente, è stato impostato il contesto della distribuzione. Il nome del gruppo di risorse sandbox è stato specificato eseguendo il comando Set-AzDefault di PowerShell:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Distribuire un modello locale

Nell'esercizio seguente si distribuisce un modello dal computer locale. Il nome del gruppo di risorse usato in genere per la distribuzione nell'ambiente locale non è necessario a questo punto, perché nella sezione precedente è già stato definito il gruppo di risorse predefinito.

  1. Per iniziare, copiare e incollare il contenuto del codice del modello seguente in un file in una directory locale. Ad esempio, usare C:\JSON\maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Dopo aver salvato il file in locale, è possibile usare il comando di PowerShell per distribuirlo a livello del gruppo di risorse, come descritto nell'unità precedente. Nello specifico, usare il comando New-AzResourceGroupDeployment.

    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-"+"$today"
    
    New-AzResourceGroupDeployment `
    -Name $DeploymentName `
    -TemplateFile $templateFile
    

    Al termine, i risultati saranno simili all’esempio seguente.

    DeploymentName          : DeployLocalTemplate-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:50:04 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Eseguire la distribuzione dello stesso modello locale con i valori dei parametri

Nell'esercizio precedente il modello è stato distribuito usando il valore predefinito del parametro. Quando si distribuisce un modello di Azure Resource Manager locale, può essere necessario passare i valori dei parametri. È possibile usare parametri inline o un file di parametri.

Per passare i parametri inline alla distribuzione, è necessario specificare i nomi dei parametri con il cmdlet New-AzResourceGroupDeployment. Nell'esercizio seguente si passeranno i parametri come parametri inline e come file di parametri.

  1. Usando lo stesso modello dell'esercizio precedente, si costruirà una tabella hash contenente i valori per i parametri del modello necessari.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-2-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterObject $parameters
    

    Al termine, i risultati saranno simili ai seguenti:

    DeploymentName          : DeployLocalTemplate-2-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:51:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

    Invece di passare parametri come valori inline nello script, può essere più facile usare un file JSON contenente i valori dei parametri. Il file di parametri può essere un file locale o un file esterno/remoto con un URI accessibile. Per altre informazioni sul file dei parametri, vedere Creare il file di parametri di Resource Manager.

  2. Per passare un file di parametri locale, usare il parametro TemplateParameterFile nello stesso comando già usato. Tuttavia, è prima necessario creare e salvare il file di parametri.

    1. Poiché si usa Visual Studio Code con l'estensione Strumenti di Azure Resource Manager, è possibile aprire il modello di Azure Resource Manager salvato in locale e selezionare il collegamento Select/create parameter file (Selezionare o creare un file di parametri) ....

    2. Selezionare Nuovo nel menu e quindi selezionare Solo parametri obbligatori. L'estensione crea un file di parametri basato sul modello attualmente aperto.

    Screenshot che mostra le selezioni per creare un file di parametri in Visual Studio Code.

  3. Usare il comando di PowerShell seguente con il parametro TemplateParameterFile.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $TemplateParameterFile= "C:\JSON\maintemplate.parameters.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-3-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterFile $TemplateParameterFile
    

    Dopo la distribuzione, i risultati devono essere simili all'esempio seguente.

    DeploymentName          : DeployLocalTemplate-3-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:54:40 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Distribuire un modello esterno o remoto

In alcuni casi, è necessario eseguire la distribuzione da una posizione esterna o remota anziché da un modello nel computer locale. ad esempio in un repository di controllo del codice sorgente come GitHub. È possibile, in alternativa, archiviarli in un account di archiviazione di Azure per consentire l'accesso condiviso nell'organizzazione.

  1. Per distribuire un modello esterno, usare il parametro TemplateUri.

    Nel prossimo esercizio si distribuirà un modello di Azure Resource Manager da un repository GitHub. Poiché il repository è pubblico, non è necessario preoccuparsi di distribuire un modello che richiede un token di firma di accesso condiviso (SAS). Per informazioni dettagliate sull'uso di una posizione remota privata o sicura, vedere Distribuire un modello privato con un token SAS.

    L'URI del modello per l'esercizio è https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Si tratta di un modello breve che distribuisce un account di archiviazione di base nell'ambiente sandbox.

  2. Il comando di PowerShell è del tutto identico a quello per un modello locale. L'unica differenza è che il parametro -TemplateUri sostituisce il parametro -TemplateFile.

    Usare il codice seguente per eseguire la distribuzione nella sandbox fornita:

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-4-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    I risultati sono simili alla schermata seguente. Forniscono informazioni dettagliate sul percorso del modello.

    DeploymentName          : DeployLocalTemplate-4-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:56:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
                              Uri            :
                              https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountType    String                     Standard_LRS
                              location              String                     westus
    
    Outputs                 :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountName    String                     storepgxosadmbq77e
    
    DeploymentDebugLogLevel :
    
    

Nota

Questa sezione è stata scritta usando comandi dell'interfaccia della riga di comando di Azure nel sottosistema Windows per Linux (WSL2) su Windows 10. I comandi sono gli stessi sia che si usi l'interfaccia della riga di comando di Azure in una shell PowerShell, CMD o Bash. Può tuttavia essere diverso il modo in cui vengono gestite le variabili.

Accedere ad Azure

  1. Dal terminale in Visual Studio Code eseguire il comando seguente per accedere ad Azure. Eseguendo questo comando viene aperta una finestra del browser che consente di accedere al proprio account.

    az login
    
  2. Dopo aver effettuato l'accesso, viene visualizzato un elenco JSON delle sottoscrizioni associate all'account nel terminale. Se è stata attivata la sandbox, l'elenco includerà la sottoscrizione Concierge.

  3. Ottenere l'ID sottoscrizione. Il comando seguente elenca le sottoscrizioni e i rispettivi ID. L'ID sottoscrizione corrisponde alla terza colonna. Cercare Concierge Subscription e copiare la terza colonna. Dovrebbe essere simile a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    az account list -o table
    
  4. Modificare la sottoscrizione attiva impostandola sulla sottoscrizione Concierge Subscription. Assicurarsi di sostituire {Your subscription ID} con l'ID della sottoscrizione Concierge ottenuto con il comando precedente.

    az account set -s {Your subscription ID}
    

Impostare il gruppo di risorse predefinito

A questo punto è necessario impostare il gruppo di risorse creato nella sandbox come gruppo di risorse predefinito. Per eseguire questa operazione, è necessario prima di tutto ottenere il nome del gruppo di risorse usando il comando seguente:

az group list -o table

In questo comando usare il nome della risorsa ottenuto dal comando precedente. Sarà simile a learn-a73131a1-b618-48b8-af70-21af7ca420c4. Questo comando consente di omettere il parametro dagli altri comandi dell'interfaccia della riga di comando di Azure in questo esercizio.

Nota

In genere, quando si usa un comando dell'interfaccia della riga di comando di Azure per distribuire un modello occorre specificare il nome del gruppo di risorse di destinazione. Nell'esercizio in questo modulo questo requisito viene ignorato impostando il contesto della distribuzione. Nel passaggio successivo viene specificato il nome del gruppo di risorse dell'ambiente sandbox usando il comando az configure dell'interfaccia della riga di comando di Azure.

az configure --defaults group={Resource Group Name}

Distribuire un modello locale

Nell'esercizio seguente si distribuisce un modello dal computer locale. Il nome del gruppo di risorse usato in genere per la distribuzione nell'ambiente locale non è necessario a questo punto, perché nella sezione precedente è già stato definito il gruppo di risorse predefinito.

  1. Per iniziare, copiare e incollare il contenuto del codice del modello seguente in un file in una directory locale. Ad esempio, usare C:\JSON\maintemplate.json o /mnt/c/Users/you/json/maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Dopo aver salvato il file in locale, è possibile usare il comando dell'interfaccia della riga di comando di Azure per distribuirlo a livello del gruppo di risorse, come descritto nell'unità precedente. Nello specifico, usare az deployment group create.

    Nota

    Nell'esempio seguente il file modello si trova in una cartella json nell'unità principale del sottosistema Windows per Linux (WSL2). Modificare il comando in base alla shell scelta.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-"$today
    
    az deployment group create \
      --name $deploymentname \
      --template-file $templateFile
    

    Al termine, l'output risultante dovrebbe essere simile all'esempio seguente. Per assicurarsi che la distribuzione sia riuscita, cercare la riga "provisioningState": "Succeeded".

    {
      "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/    learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
          }
        ],
        "outputs": null,
        "parameters": {
          "costCenterIO": {
            "type": "String",
            "value": "12345"
          },
          "ownerName": {
            "type": "String",
            "value": "John Smith"
          },
          "vnetName": {
            "type": "String",
            "value": "VNet-001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Network",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "virtualNetworks"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "11553431046699679955",
        "templateLink": null,
        "timestamp": "2020-08-19T14:47:06.403362+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Eseguire la distribuzione dello stesso modello locale con i valori dei parametri

Nell'esercizio precedente il modello è stato distribuito usando il valore predefinito del parametro. Quando si distribuisce un modello di Azure Resource Manager locale, può essere necessario passare i valori dei parametri. È possibile usare parametri inline o un file di parametri.

Nell'esercizio seguente si passano parametri inline alla distribuzione. È necessario specificare i nomi dei parametri, indipendentemente dal fatto che si usino parametri inline o un file di parametri, usando il comando az deployment group create.

  1. Usando lo stesso modello dell'esercizio precedente, costruire una variabile che contiene i parametri in un formato di stringa JSON per i parametri del modello necessari.

    Nota

    Nell'esempio seguente il file modello si trova in una cartella json nel sottosistema Windows per Linux (WSL2). Modificare il comando in base alla shell e al sistema operativo scelti.

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-2-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters "$parameters"
    

    Al termine, i risultati saranno simili all'esempio seguente. Per verificare che il comando sia riuscito, vedere la sezione "parameters" e il valore "provisioningState".

      {- Finished ..
        "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T16:40:20.249786+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    Invece di passare parametri come valori inline nello script, può essere più facile usare un file JSON contenente i valori dei parametri. Il file di parametri può essere un file locale o un file esterno/remoto con un URI accessibile. Per altre informazioni sul file dei parametri, vedere Creare il file di parametri di Resource Manager.

  2. Per passare un file di parametri locale, usare il parametro --parameters nello stesso comando già usato. Tuttavia, è prima necessario creare e salvare il file di parametri.

    1. Poiché si usa Visual Studio Code con l'estensione Strumenti di Azure Resource Manager, è possibile aprire il modello di Azure Resource Manager salvato in locale e selezionare il collegamento Select or create a parameter file to enable full validation (Selezionare o creare un file di parametri per consentire la convalida completa).

    2. Scegliere Nuovo dal menu. L'estensione crea un file di parametri basato sul modello attualmente aperto.

    Screenshot che mostra le selezioni per creare un file di parametri in Visual Studio Code.

  3. Usare il comando dell'interfaccia della riga di comando di Azure con il parametro --parameters.

    Nota

    Nell'esempio seguente il file modello si trova in una cartella json nel sottosistema Windows per Linux (WSL2). Modificare il comando in base alla shell e al sistema operativo scelti.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    templateparameterfile=/mnt/c/Users/<UserName>/json/maintemplate.parameters.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters $templateparameterfile
    

    Dopo la distribuzione, i risultati devono essere simili all'esempio seguente.

      {- Finished ..
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
        "location": null,
        "name": "DeployLocalTemplate-3-2020-08-19",
        "properties": {
          "correlationId": "cccc2222-dd33-4444-55ee-666666ffffff",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T20:42:44.069215+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Distribuire un modello esterno o remoto

In alcuni casi, è necessario eseguire la distribuzione da una posizione esterna o remota anziché da un modello nel computer locale. ad esempio in un repository di controllo del codice sorgente come GitHub. È possibile, in alternativa, archiviarli in un account di archiviazione di Azure per consentire l'accesso condiviso nell'organizzazione.

  1. Per distribuire un modello esterno, usare il parametro --template-uri.

In questo esercizio si distribuisce un modello di Azure Resource Manager da un repository GitHub. Poiché il repository è pubblico, non è necessario preoccuparsi di distribuire un modello che richiede un token di firma di accesso condiviso (SAS). Per informazioni dettagliate sull'uso di una posizione remota privata o sicura, vedere Distribuire un modello privato con un token SAS.

L'URI del modello per l'esercizio è https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Si tratta di un modello breve che distribuisce un account di archiviazione di base nell'ambiente sandbox.

  1. L'interfaccia della riga di comando di Azure è del tutto identica a quella per un modello locale. L'unica differenza è che il parametro --template-uri sostituisce il parametro --template-file.

  2. Usare il codice seguente per eseguire la distribuzione nella sandbox fornita:

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-4-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    I risultati sono simili al blocco di codice seguente. Forniscono informazioni dettagliate sul percorso del modello nella sezione "templateLink". Indicano anche se la distribuzione è riuscita nella sezione "provisioningState".

    {- Finished ..
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "dddd3333-ee44-5555-66ff-777777aaaaaa",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
          }
        ],
        "outputs": {
          "storageAccountName": {
            "type": "String",
            "value": "store7zk7eyqew54l4"
          }
        },
        "parameters": {
          "location": {
            "type": "String",
            "value": "westus"
          },
          "storageAccountType": {
            "type": "String",
            "value": "Standard_LRS"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Storage",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "storageAccounts"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12600309984865991765",
        "templateLink": {
          "contentVersion": "1.0.0.0",
          "id": null,
          "relativePath": null,
          "uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
        },
        "timestamp": "2020-08-19T20:53:36.759312+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }