Tutorial: Uso de archivos de parámetros para implementar la plantilla de Resource Manager

En este tutorial, aprenderá a usar archivos de parámetros para almacenar los valores que se pasan durante la implementación. En los tutoriales anteriores, usó parámetros insertados con el comando de implementación. Este enfoque funcionó para probar la plantilla de Azure Resource Manager (plantilla de ARM), pero al automatizar las implementaciones puede ser más fácil pasar un conjunto de valores del entorno. Los archivos de parámetros facilitan el empaquetado de los valores de los parámetros de un entorno específico. En este tutorial, creará archivos de parámetros para entornos de desarrollo y producción. Se tardan 12 minutos en completar esta instrucción.

Prerrequisitos

Aunque no es obligatorio, se recomienda realizar el tutorial sobre etiquetas.

Debe tener Visual Studio Code con la extensión Herramientas de Resource Manager y Azure PowerShell o la Interfaz de la línea de comandos de Azure (CLI). Para más información, consulte las herramientas de plantilla.

Revisión de la plantilla

La plantilla tiene muchos parámetros que puede proporcionar durante la implementación. Al final del tutorial anterior, la plantilla tenía el siguiente código archivo 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]"
    }
  }
}

Esta plantilla funciona bien, pero ahora desea administrar fácilmente los parámetros que pasa a la plantilla.

Adición de archivos de parámetros

Los archivos de parámetros son archivos JSON con una estructura similar a la plantilla. En el archivo, proporcione los valores de los parámetros que desea pasar durante la implementación.

Proporcione valores para los parámetros de la plantilla en el archivo de parámetros. El nombre de cada parámetro del archivo de parámetros debe coincidir con el nombre de un parámetro de la plantilla. El nombre no distingue entre mayúsculas y minúsculas, pero para ver fácilmente los valores coincidentes se recomienda que coincida con el uso de mayúsculas y minúsculas de la plantilla.

No es necesario proporcionar un valor para cada parámetro. Si un parámetro no especificado tiene un valor predeterminado, se usa ese valor durante la implementación. Si un parámetro no tiene un valor predeterminado y no se especifica en el archivo de parámetros, se le pedirá que proporcione un valor durante la implementación.

No se puede especificar un nombre de parámetro en el archivo de parámetros que no coincida con un nombre de parámetro en la plantilla. Recibirá un error cuando se proporcionan parámetros desconocidos.

En Visual Studio Code, cree un archivo con el siguiente contenido. Guarde el archivo con el nombre 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 archivo es el archivo de parámetros para el entorno de desarrollo. Observe que usa Standard_LRS para la cuenta de almacenamiento, asigna un nombre a los recursos con el prefijo dev y establece la etiqueta Environment en Dev.

De nuevo, cree un nuevo archivo con el siguiente contenido. Guarde el archivo con el nombre 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 archivo es el archivo de parámetros para el entorno de producción. Observe que usa Standard_GRS para la cuenta de almacenamiento, asigna un nombre a los recursos con el prefijo contoso y establece la etiqueta Environment en Production. En un entorno de producción real, también querrá usar una instancia de App Service con una SKU que no sea gratuita, usaremos esa SKU para este tutorial.

Implementar plantilla

Use la CLI de Azure o Azure PowerShell para implementar la plantilla.

Como prueba final de la plantilla, vamos a crear dos nuevos grupos de recursos. Uno para el entorno de desarrollo y otro para el entorno de producción.

En el caso de las variables de plantilla y parámetro, reemplace {path-to-the-template-file}, {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json} y las llaves {} por las rutas de acceso al archivo de plantilla y parámetro.

En primer lugar, vamos a implementar en el entorno de desarrollo.

$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

Ahora, realizaremos la implementación en el entorno de producción.

$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

Si se produjo un error en la implementación, use el modificador verbose para obtener información sobre los recursos que se están creando. Utilice el modificador debug para más información sobre la depuración.

Comprobación de la implementación

Para comprobar la implementación, explore el grupo de recursos desde Azure Portal.

  1. Inicie sesión en Azure Portal.
  2. En el menú izquierdo, seleccione Grupos de recursos.
  3. Verá los dos nuevos grupos de recursos implementados en este tutorial.
  4. Seleccione cualquier grupo de recursos y consulte los recursos implementados. Observe que coinciden con los valores especificados en el archivo de parámetros para ese entorno.

Limpieza de recursos

  1. En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.

  2. Active el nombre del grupo de recursos con hipervínculo junto a la casilla. Si ha completado esta serie, tiene tres grupos de recursos que eliminar: myResourceGroup, myResourceGroupDev y myResourceGroupProd.

  3. Seleccione Eliminar grupo de recursos en el menú superior.

    Precaución

    La eliminación de un grupo de recursos es irreversible.

  4. Escriba el nombre del grupo de recursos en la ventana emergente que se muestra y seleccione Eliminar.

Pasos siguientes

¡Enhorabuena! Ha terminado esta introducción a la implementación de plantillas en Azure. Si tiene comentarios y sugerencias, háganoslo saber en la sección de comentarios.

En la siguiente serie de tutoriales encontrará más información sobre la implementación de plantillas.