Tutorial: Utilizar ficheiros de parâmetros para implementar o modelo do ARM

Neste tutorial, vai aprender a utilizar ficheiros de parâmetros para armazenar os valores que transmite durante a implementação. Nos tutoriais anteriores, utilizou parâmetros inline com o comando de implementação. Esta abordagem funcionou para testar o modelo do Azure Resource Manager (modelo arm), mas ao automatizar implementações pode ser mais fácil transmitir um conjunto de valores para o seu ambiente. Os ficheiros de parâmetros facilitam o empacotar valores de parâmetros para um ambiente específico. Neste tutorial, vai criar ficheiros de parâmetros para ambientes de desenvolvimento e produção. Esta instrução demora 12 minutos a ser concluída.

Pré-requisitos

Recomendamos que conclua o tutorial sobre etiquetas, mas não é necessário.

Tem de ter o Visual Studio Code com a extensão ferramentas do Resource Manager e Azure PowerShell ou a Interface de Command-Line do Azure (CLI). Para obter mais informações, veja ferramentas de modelo.

Rever modelo

O modelo tem muitos parâmetros que pode fornecer durante a implementação. No final do tutorial anterior, o modelo tinha o seguinte ficheiro JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "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": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Este modelo funciona bem, mas agora quer gerir facilmente os parâmetros que transmite para o modelo.

Adicionar ficheiros de parâmetros

Os ficheiros de parâmetros são ficheiros JSON com uma estrutura semelhante ao seu modelo. No ficheiro, fornece os valores dos parâmetros que pretende transmitir durante a implementação.

No ficheiro de parâmetros, fornece valores para os parâmetros no seu modelo. O nome de cada parâmetro no ficheiro de parâmetros tem de corresponder ao nome de um parâmetro no seu modelo. O nome não é sensível a maiúsculas e minúsculas, mas para ver facilmente os valores correspondentes, recomendamos que corresponda à caixa do modelo.

Não tem de fornecer um valor para cada parâmetro. Se um parâmetro não especificado tiver um valor predefinido, esse valor é utilizado durante a implementação. Se um parâmetro não tiver um valor predefinido e não for especificado no ficheiro de parâmetros, ser-lhe-á pedido que forneça um valor durante a implementação.

Não pode especificar um nome de parâmetro no ficheiro de parâmetros que não corresponda a um nome de parâmetro no modelo. Recebe um erro quando fornece parâmetros desconhecidos.

No Visual Studio Code, crie um novo ficheiro com o seguinte conteúdo. Guarde o ficheiro com o nome azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

Este ficheiro é o seu ficheiro de parâmetros para o ambiente de desenvolvimento. Repare que utiliza Standard_LRS para a conta de armazenamento, atribui nomes aos recursos com um prefixo dev e define a Environment etiqueta como Dev.

Mais uma vez, crie um novo ficheiro com o seguinte conteúdo. Guarde o ficheiro com o nome azuredeploy.parameters.prod.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

Este ficheiro é o seu ficheiro de parâmetros para o ambiente de produção. Repare que utiliza Standard_GRS para a conta de armazenamento, atribui nomes a recursos com um prefixo contoso e define a Environment etiqueta como Produção. Num ambiente de produção real, também gostaria de utilizar um serviço de aplicações com um SKU que não seja gratuito, mas utilizamos esse SKU para este tutorial.

Implementar o modelo

Utilize a CLI do Azure ou Azure PowerShell para implementar o modelo.

Como teste final do seu modelo, vamos criar dois novos grupos de recursos. Um para o ambiente de desenvolvimento e outro para o ambiente de produção.

Para as variáveis de modelo e parâmetro, substitua {path-to-the-template-file}, {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json}e as chavetas pelos caminhos {} do modelo e do ficheiro de parâmetros.

Primeiro, vamos implementar no ambiente de desenvolvimento.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Agora, implementamos no ambiente de produção.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Nota

Se a implementação falhar, utilize o verbose comutador para obter informações sobre os recursos que está a criar. Utilize o debug comutador para obter mais informações sobre a depuração.

Verificar a implementação

Pode verificar a implementação ao explorar os grupos de recursos do portal do Azure.

  1. Inicie sessão no portal do Azure.
  2. No menu esquerdo, selecione Grupos de recursos.
  3. Verá os dois novos grupos de recursos que implementar neste tutorial.
  4. Selecione um grupo de recursos e veja os recursos implementados. Repare que correspondem aos valores que especificou no ficheiro de parâmetros desse ambiente.

Limpar os recursos

  1. Na portal do Azure, selecione Grupos de recursos no menu esquerdo.

  2. Selecione o nome do grupo de recursos hiperligado junto à caixa de verificação. Se concluir esta série, terá três grupos de recursos para eliminar: myResourceGroup, myResourceGroupDev e myResourceGroupProd.

  3. Selecione o ícone Eliminar grupo de recursos no menu superior.

    Atenção

    A eliminação de um grupo de recursos é irreversível.

  4. Escreva o nome do grupo de recursos na janela de pop-up apresentada e selecione Eliminar.

Passos seguintes

Parabéns! Concluiu esta introdução à implementação de modelos no Azure. Informe-nos se tiver comentários e sugestões na secção de comentários.

A próxima série de tutoriais vai mais detalhadamente sobre a implementação de modelos.