Ejercicio: Adición de parámetros y variables a la plantilla de Bicep
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
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 enwestus3
. Normalmente, crearía recursos en la misma ubicación que el grupo de recursos mediante la propiedadresourceGroup().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.Busque los lugares dentro de las definiciones de recursos donde están establecidas las propiedades y
location
yname
, 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 } }
Guarde los cambios en el archivo.
Establecimiento automático de las SKU para cada tipo de entorno
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.
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
.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.
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
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.
Seleccione el vínculo 1 Succeeded (1 correcta).
Seleccione la implementación llamada main y, después, Detalles de la implementación para expandir la lista de recursos implementados.
Observe que se han implementado una nueva aplicación App Service y una nueva cuenta de almacenamiento con nombres generados aleatoriamente.