Exercício – Refatorar seu modelo para usar módulos
Neste exercício, você atualizará o modelo Bicep criado anteriormente para que ele use um módulo para os recursos do Serviço de Aplicativo do Azure. Os módulos ajudam a manter a intenção do modelo principal mais clara. Você poderá reutilizar o módulo do Serviço de Aplicativo em outros modelos, se desejar.
Durante o processo, você vai:
- Adicionar um novo módulo e mover os recursos do Serviço de Aplicativo para ele.
- Fazer referência ao módulo no modelo principal do Bicep.
- Adicionar uma saída para o nome do host do aplicativo de Serviço de Aplicativo e emiti-la nas implantações de módulo e modelo.
- Testar a implantação para garantir que o modelo seja válido.
Adicionar um novo arquivo de módulo
No Visual Studio Code, crie uma pasta chamada módulos na mesma pasta em que você criou o arquivo main.bicep. Na pasta módulos, crie um arquivo chamado appService.bicep. Salve o arquivo.
Adicione o seguinte conteúdo ao arquivo appService.bicep:
param location string param appServiceAppName string @allowed([ 'nonprod' 'prod' ]) param environmentType string var appServicePlanName = 'toy-product-launch-plan' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1' 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ê copiou os parâmetros e as variáveis de seu modelo main.bicep, porque o modelo appService.bicep precisa ser autossuficiente.
Salve as alterações no arquivo. Observe que o Visual Studio Code não mostra nenhum rabisco vermelho para indicar avisos sobre variáveis ausentes, parâmetros ausentes ou recursos inválidos.
Adicionar uma referência ao módulo pelo modelo pai
Agora que você tem um módulo completo para implantar os recursos do Serviço de Aplicativo, pode consultar o módulo dentro do modelo pai. Como o módulo implanta os recursos do Serviço de Aplicativo, você pode excluir os recursos e variáveis associados do modelo pai.
No arquivo main.bicep, exclua os recursos do Serviço de Aplicativo e as definições de variáveis
appServicePlanName
eappServicePlanSkuName
. Não exclua os parâmetros do Serviço de Aplicativo, pois você ainda precisa deles. Além disso, não exclua os parâmetros, a variável ou os recursos da conta de armazenamento.Na parte inferior do arquivo main.bicep, adicione o seguinte código Bicep:
module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName environmentType: environmentType } }
Observe que você está especificando os parâmetros para o módulo referenciando os parâmetros no modelo pai.
Salve as alterações no arquivo.
Adicionar o nome do host como uma saída
Adicione o seguinte código Bicep à parte inferior do arquivo appService.bicep:
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Esse código declara que uma saída para esse módulo, que será chamada de
appServiceAppHostName
, será do tipostring
. A saída obterá seu valor da propriedadedefaultHostName
do aplicativo do Serviço de Aplicativo.Salve as alterações no arquivo.
Essa saída é declarada dentro de um arquivo Bicep que usaremos como um módulo, portanto, estará disponível apenas para o modelo pai. Você também precisa retornar a saída para a pessoa que implantou o modelo.
Abra o arquivo main.bicep e adicione o seguinte código à parte inferior do arquivo:
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
Observe que essa saída é declarada de forma semelhante à saída no módulo. Mas, desta vez, você está referenciando a saída do módulo em vez de uma propriedade de recurso.
Salve as alterações no arquivo.
Verificar seus arquivos do Bicep
Depois de concluir todas as alterações anteriores, o arquivo main.bicep deverá 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 storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
module appService 'modules/appService.bicep' = {
name: 'appService'
params: {
location: location
appServiceAppName: appServiceAppName
environmentType: environmentType
}
}
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
Seu arquivo appService.bicep deve ser parecido com este exemplo:
param location string
param appServiceAppName string
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
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
}
}
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Se um dos arquivos não corresponder, copie o exemplo ou ajuste o modelo para corresponder ao exemplo.
Implantar o modelo Bicep atualizado
Execute o comando da CLI do Azure a seguir no terminal.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
Execute o comando do Azure PowerShell a seguir no terminal.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
Verifique sua implantação
No navegador, retorne ao portal do Azure. Vá para o grupo de recursos e veja que agora há duas implantações bem-sucedidas.
Selecione o link 2 com êxito. Observe que você tem uma implantação chamada principal na lista e uma nova implantação chamada appService.
Selecione a implantação chamada principal e escolha Detalhes da implantação para expandir a lista de recursos implantados.
Observe que a implantação do nosso módulo aparece na lista.
Selecione a guia Saídas. Observe que há uma saída chamada appServiceAppHostName com o nome do host do seu aplicativo de Serviço de Aplicativo. Copie o nome do host para a área de transferência.
Abra uma nova guia do navegador e cole o nome do host que você copiou. Você deve ver a página de boas-vindas do Serviço de Aplicativo padrão.
Parabéns! Você implantou com êxito as bases de um ótimo aplicativo.