Exercício - Refatore 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ê pode reutilizar o módulo Serviço de Aplicativo em outros modelos, se desejar.
Durante o processo, você:
- Adicione um novo módulo e mova os recursos do Serviço de Aplicativo para ele.
- Consulte o módulo a partir do modelo Bicep principal.
- Adicione uma saída para o nome de host do aplicativo do Serviço de Aplicativo e emite-a a partir das implantações de módulo e modelo.
- Teste a implantação para garantir que o modelo seja válido.
Adicionar um novo arquivo de módulo
No Visual Studio Code, crie uma nova pasta chamada modules na mesma pasta onde você criou o arquivo main.bicep . Na pasta modules, crie um arquivo chamado appService.bicep. Guarde o ficheiro.
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 variáveis do seu modelo main.bicep , porque o modelo appService.bicep precisa ser independente.
Guarde as alterações ao ficheiro. 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 a partir do 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
appServicePlanName
variáveisappServicePlanSkuName
. Não exclua os parâmetros do Serviço de Aplicativo, porque 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 seu módulo fazendo referência aos parâmetros no modelo pai.
Guarde as alterações ao ficheiro.
Adicionar o nome do host como uma saída
Adicione o seguinte código Bicep na parte inferior do arquivo appService.bicep :
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Este código declara que uma saída para este módulo, que será nomeado
appServiceAppHostName
, será do tipostring
. A saída tomará seu valor dadefaultHostName
propriedade do aplicativo do Serviço de Aplicativo.Guarde as alterações ao ficheiro.
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 na parte inferior do arquivo:
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
Observe que essa saída é declarada de maneira semelhante à saída no módulo. Mas, desta vez, você está fazendo referência à saída do módulo em vez de uma propriedade de recurso.
Guarde as alterações ao ficheiro.
Verifique seus arquivos 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 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 se parecer 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 ficheiros não corresponder, copie o exemplo ou ajuste o modelo 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
Verificar a implementação
No navegador, volte para o portal do Azure. Vá para o seu grupo de recursos; agora há duas implantações bem-sucedidas.
Selecione o link 2 Bem-sucedido . Observe que você tem uma implantação chamada main na lista e uma nova implantação chamada appService.
Selecione a implantação chamada principal e, em seguida, selecione Detalhes da implantação para expandir a lista de recursos implantados.
Observe que nossa implantação de 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 do 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 padrão do Serviço de Aplicativo.
Parabéns! Você implantou com sucesso as bases para um ótimo aplicativo.