Exercício - Refatore seu modelo para usar módulos

Concluído

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

  1. 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.

  2. 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@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-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.

  3. 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.

  1. 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.

  2. 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.

  3. Guarde as alterações ao ficheiro.

Adicionar o nome do host como uma saída

  1. 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 tipo string. A saída tomará seu valor da defaultHostName propriedade do aplicativo do Serviço de Aplicativo.

  2. 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.

  3. 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.

  4. 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@2022-09-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@2022-03-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2022-03-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

  1. No navegador, volte para o portal do Azure. Vá para o seu grupo de recursos e verá que agora há duas implantações bem-sucedidas.

  2. Selecione o link 2 Bem-sucedido . Observe que você tem uma implantação chamada main na lista e uma nova implantação chamada appService.

    Screenshot of the Azure portal interface for the deployments, with the two deployments listed and succeeded statuses.

  3. 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.

    Screenshot of the Azure portal interface for the specific deployment, with one resource listed.

  4. 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.

    Screenshot of the Azure portal interface for the specific deployment's outputs.

  5. 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.

    Screenshot of the default App Service welcome page.

Parabéns! Você implantou com sucesso as bases para um ótimo aplicativo.