Exercício - Adicione parâmetros e variáveis ao seu modelo Bicep
Neste exercício, você atualizará o modelo Bicep criado anteriormente para que:\
- Aceita parâmetros para os locais e nomes dos recursos.
- Usa suas regras de negócios para selecionar as SKUs certas para os recursos que estão sendo implantados.
Durante o processo, você:
- Atualize o modelo para incluir um
location
parâmetro. - Atualize o modelo para incluir parâmetros e variáveis para os nomes dos recursos.
- Use expressões para definir valores padrão para os parâmetros.
- Atualize o modelo para incluir variáveis para a SKU de cada recurso.
- Teste a implantação para garantir que o modelo seja válido.
Adicionar os parâmetros de localização e nome do recurso
No arquivo main.bicep no Visual Studio Code, adicione o seguinte código à parte superior do arquivo:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
O linter Bicep adiciona linhas onduladas amarelas abaixo de cada parâmetro e nome de variável para indicar que eles não são usados no modelo. Você corrigirá esse problema em breve.
Observe que você está usando expressões que incluem interpolação de cadeia de caracteres e a
uniqueString()
função para definir valores de parâmetro padrão. Alguém que implanta esse modelo pode substituir os valores de parâmetro padrão especificando os valores no momento da implantação, mas não pode substituir os valores das variáveis.Observe também que você está usando uma variável para o nome do plano do Serviço de Aplicativo do Azure, mas está usando parâmetros para os outros nomes. As contas de armazenamento e os aplicativos do Serviço de Aplicativo precisam de nomes globalmente exclusivos, mas os nomes dos planos do Serviço de Aplicativo precisam ser exclusivos apenas dentro do grupo de recursos. Essa diferença significa que não é uma preocupação usar o mesmo nome de plano do Serviço de Aplicativo em implantações diferentes, desde que as implantações estejam todas indo para grupos de recursos diferentes.
Gorjeta
Você está especificando que o
location
parâmetro deve ser definido comowestus3
. Normalmente, você criaria recursos no mesmo local que o grupo de recursos usando aresourceGroup().location
propriedade. Mas quando você trabalha com a área restrita do Microsoft Learn, precisa usar determinadas regiões do Azure que não correspondem ao local do grupo de recursos.Encontre os locais dentro das definições de recursos onde as propriedades e
name
estãolocation
definidas e atualize-os para usar os valores de parâmetro. Depois de terminar, as definições de recursos no arquivo Bicep devem ter esta aparência: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 as alterações ao ficheiro.
Definir automaticamente as SKUs para cada tipo de ambiente
No arquivo main.bicep no Visual Studio Code, adicione o seguinte parâmetro Bicep abaixo dos parâmetros que você criou na tarefa anterior:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
Observe que você está definindo um parâmetro com um conjunto de valores permitidos, mas não está especificando um valor padrão para esse parâmetro.
Abaixo da linha que declara a
appServicePlanName
variável, adicione as seguintes definições de variável:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
Observe que você está definindo esses valores de variáveis usando o operador ternário para expressar alguma
if/then/else
lógica.Encontre os locais dentro das definições de recursos onde as
sku
propriedades estão definidas e atualize-os para usar os valores de parâmetro. Depois de terminar, as definições de recursos no arquivo Bicep devem ter esta aparência: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 você não parametrizou tudo. Você definiu algumas propriedades diretamente nas definições de recursos, onde sabe que esses valores não serão alterados entre implantações.
Guarde as alterações ao ficheiro.
Verifique seu arquivo Bicep
Depois de concluir todas as alterações anteriores, o arquivo main.bicep deve ser semelhante a este exemplo:
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
}
}
Se o ficheiro não corresponder, copie o exemplo ou ajuste o ficheiro para corresponder ao exemplo.
Implantar o modelo Bicep atualizado
Execute o seguinte comando da CLI do Azure no terminal.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
Execute o seguinte comando do Azure PowerShell no terminal.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
Observe que você está especificando explicitamente o valor para o environmentType
parâmetro quando executa a implantação. Não é necessário especificar os outros valores de parâmetro, porque eles têm valores padrão válidos.
Verificar a implementação
No navegador, volte para o portal do Azure e vá para seu grupo de recursos. Você ainda verá uma implantação bem-sucedida, porque a implantação usou o mesmo nome da primeira implantação.
Selecione o link 1 Êxito .
Selecione a implantação chamada principal e, em seguida, selecione Detalhes da implantação para expandir a lista de recursos implantados.
Observe que um novo aplicativo do Serviço de Aplicativo e uma nova conta de armazenamento foram implantados com nomes gerados aleatoriamente.