Ejercicio: Adición de parámetros y variables a la plantilla de Bicep

Completado

En este ejercicio, actualizará la plantilla de Bicep que ha creado anteriormente para que:\

  • Acepte parámetros para las ubicaciones y los nombres de los recursos.
  • Use las reglas de negocio para seleccionar las SKU correctas para los recursos que se implementan.

Durante el proceso, hará lo siguiente:

  • Actualizará la plantilla para incluir un parámetro location.
  • Actualizará la plantilla para incluir parámetros y variables para los nombres de recursos.
  • Usará expresiones para establecer valores predeterminados para los parámetros.
  • Actualizará la plantilla para incluir variables para la SKU de cada recurso.
  • Probará la implementación para asegurarse de que la plantilla sea válida.

Adición de los parámetros de ubicación y nombre de recurso

  1. En el archivo main.bicep en Visual Studio Code, agregue el código siguiente en la parte superior:

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    El linter de Bicep agrega líneas onduladas amarillas debajo de cada uno de los nombres de parámetro y de variable para indicar que no se usan en la plantilla. Pronto corregirá este problema.

    Tenga en cuenta que va a usar expresiones que incluyen la interpolación de cadenas y la función uniqueString() para definir los valores de parámetro predeterminados. Alguien que implemente esta plantilla puede invalidar los valores de parámetro predeterminados especificando los valores en el momento de la implementación, pero no puede invalidar los valores de variable.

    Observe también que va a usar una variable para el nombre del plan de App Service de Azure, pero que usará parámetros para los demás nombres. Las cuentas de almacenamiento y las aplicaciones de App Service necesitan nombres globalmente únicos, pero los nombres de planes de App Service solo deben ser únicos dentro de su grupo de recursos. Esta diferencia significa que no pasa nada por usar el mismo nombre de plan de App Service en distintas implementaciones, siempre y cuando todas las implementaciones estén en grupos de recursos diferentes.

    Sugerencia

    Está especificando que el parámetro location debe establecerse en westus3. Normalmente, crearía recursos en la misma ubicación que el grupo de recursos mediante la propiedad resourceGroup().location. Pero cuando trabaja con el espacio aislado Microsoft Learn, debe usar determinadas regiones de Azure que no coincidan con la ubicación del grupo de recursos.

  2. Busque los lugares dentro de las definiciones de recursos donde están establecidas las propiedades y location y name, y actualícelos para que usen los valores de parámetro. Una vez que haya terminado, las definiciones de recurso del archivo de Bicep deberían ser así:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: 'Standard_LRS'
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. Guarde los cambios en el archivo.

Establecimiento automático de las SKU para cada tipo de entorno

  1. En el archivo main.bicep de Visual Studio Code, agregue el siguiente parámetro de Bicep debajo de los parámetros que creó en la tarea anterior:

    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    

    Observe que va a definir un parámetro con un conjunto de valores permitidos, pero que no especifica un valor predeterminado para este parámetro.

  2. Debajo de la línea que declara la variable appServicePlanName, agregue las siguientes definiciones de variable:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    Tenga en cuenta que establece los valores de estas variables con el operador ternario para expresar cierta lógica if/then/else.

  3. Busque los lugares dentro de las definiciones de recursos donde están establecidas las propiedades sku y actualícelos para que usen los valores de parámetro. Una vez que haya terminado, las definiciones de recurso del archivo de Bicep deberían ser así:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountSkuName
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    Observe que no ha parametrizado todo. Estableció algunas propiedades justo en las definiciones de recursos donde sabe que estos valores no cambiarán entre implementaciones.

  4. Guarde los cambios en el archivo.

Comprobación del archivo de Bicep

Una vez completados todos los cambios anteriores, el archivo main.bicep debe tener el siguiente aspecto:

param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Si el archivo no coincide, copie el ejemplo o ajuste el archivo para que coincida con el ejemplo.

Implementación de la plantilla de Bicep actualizada

Ejecute el siguiente comando de la CLI de Azure en el terminal.

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

Ejecute el siguiente comando de Azure PowerShell en el terminal.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

Observe que va a especificar explícitamente el valor del parámetro environmentType al ejecutar la implementación. No es necesario especificar los otros valores de parámetros, porque tienen valores predeterminados válidos.

Comprobación de la implementación

  1. En el explorador, vuelve a Azure Portal y al grupo de recursos. Seguirá viendo una implementación correcta, ya que esta habrá usado el mismo nombre que la primera.

  2. Seleccione el vínculo 1 Succeeded (1 correcta).

  3. Seleccione la implementación llamada main y, después, Detalles de la implementación para expandir la lista de recursos implementados.

    Captura de pantalla de la interfaz de Azure Portal para la implementación concreta. Se indican la cuenta de almacenamiento y los recursos de App Service con nombres generados.

  4. Observe que se han implementado una nueva aplicación App Service y una nueva cuenta de almacenamiento con nombres generados aleatoriamente.