Esercitazione: Distribuire un modello di ARM locale

Informazioni su come distribuire un modello di Azure Resource Manager (modello di ARM) dal computer locale. Per completare l'esercitazione, sono necessari circa 8 minuti.

Questa è la prima esercitazione di una serie. Nelle esercitazioni successive della serie si modularizzerà il modello creando un modello collegato, si archivierà il modello collegato in un account di archiviazione e si proteggerà il modello collegato usando un token di firma di accesso condiviso nonché si apprenderà come creare una pipeline DevOps per distribuire i modelli. Questa serie riguarda la distribuzione dei modelli. Per informazioni sullo sviluppo dei modelli, vedere le esercitazioni per principianti.

Ottenere gli strumenti

Per iniziare, verificare di disporre degli strumenti necessari per distribuire i modelli.

Distribuzione dalla riga di comando

Per distribuire il modello, è necessario usare l'interfaccia della riga di comando di Azure oppure Azure PowerShell. Per le istruzioni di installazione, vedere:

Dopo aver installato Azure PowerShell o l'interfaccia della riga di comando di Azure, assicurarsi di accedere per la prima volta. Per informazioni, vedere Accesso - PowerShell or Accesso - Interfaccia della riga di comando di Azure.

Editor (facoltativo)

I modelli sono file JSON. Per controllare/modificare i modelli, è necessario un editor JSON valido. È consigliabile usare Visual Studio Code con l'estensione Strumenti di Resource Manager. Se è necessario installare questi strumenti, consultare Avvio rapido: Creare modelli di ARM con Visual Studio Code.

Rivedere il modello

Con il modello vengono distribuiti un account di archiviazione, un piano di servizio app e un'app Web. Se si è interessati alla creazione del modello, è possibile eseguire l'esercitazione sui modelli di avvio rapido. Tuttavia, questo passaggio non è necessario per completare questa esercitazione.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "projectName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11,
      "metadata": {
        "description": "Specify a project name that is used to generate resource names."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specify a location for the resources."
      }
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ],
      "metadata": {
        "description": "Specify the storage account type."
      }
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "Specify the Runtime stack of current web app"
      }
    }
  },
  "variables": {
    "storageAccountName": "[format('{0}{1}', parameters('projectName'), uniqueString(resourceGroup().id))]",
    "webAppName": "[format('{0}WebApp', parameters('projectName'))]",
    "appServicePlanName": "[format('{0}Plan', parameters('projectName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-01-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2022-09-01",
      "name": "[variables('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2022-09-01",
      "name": "[variables('webAppName')]",
      "location": "[parameters('location')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
      ]
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').primaryEndpoints]"
    }
  }
}

Importante

I nomi degli account di archiviazione devono essere univoci, di lunghezza compresa tra 3 e 24 caratteri e contenere solo numeri e lettere minuscole. La variabile del modello esempio storageAccountName combina il valore massimo di 11 caratteri del parametroprojectName con un valore uniqueString di 13 caratteri.

Salvare una copia del modello nel computer locale con l'estensione JSON, ad esempio azuredeploy.json. Questo modello verrà distribuito più avanti nell'esercitazione.

Accedere ad Azure

Per iniziare a usare Azure PowerShell o l'interfaccia della riga di comando di Azure per distribuire un modello, accedere con le credenziali di Azure.

Se si hanno più sottoscrizioni di Azure, selezionare quella da usare. Sostituire [SubscriptionID/SubscriptionName] e le parentesi quadre [] con le informazioni sulla sottoscrizione:

Set-AzContext [SubscriptionID/SubscriptionName]

Crea gruppo di risorse

Quando si distribuisce un modello, si specifica un gruppo di risorse che conterrà le risorse. Prima di eseguire il comando di distribuzione, creare il gruppo di risorse usando l'interfaccia della riga di comando di Azure oppure Azure PowerShell. Selezionare le schede nella sezione di codice seguente per scegliere tra Azure PowerShell e l'interfaccia della riga di comando di Azure. Gli esempi dell'interfaccia della riga di comando in questo articolo sono scritti per la shell Bash.

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource and resource group names"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup `
  -Name $resourceGroupName `
  -Location "Central US"

Distribuire un modello

Usare una o entrambe le opzioni di distribuzione per distribuire il modello.

$projectName = Read-Host -Prompt "Enter the same project name"
$templateFile = Read-Host -Prompt "Enter the template file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroupDeployment `
  -Name DeployLocalTemplate `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile $templateFile `
  -projectName $projectName `
  -verbose

Per informazioni dettagliate sulla distribuzione del modello con Azure PowerShell, vedere Distribuire le risorse con i modelli di Azure Resource Manager e Azure PowerShell.

Pulire le risorse

Eliminare le risorse distribuite eliminando il gruppo di risorse.

  1. Nel portale di Azure selezionare Gruppo di risorse nel menu a sinistra.
  2. Immettere il nome del gruppo di risorse nel campo Filtra per nome.
  3. Selezionare il nome del gruppo di risorse.
  4. Selezionare Elimina gruppo di risorse nel menu in alto.

Passaggi successivi

Si è appreso come distribuire un modello locale. Nell'esercitazione successiva il modello verrà separato in un modello principale e un modello collegato e verrà illustrato come archiviare e proteggere il modello collegato.