Exercício – Adicionar parâmetros e variáveis ao seu modelo Bicep

Concluído

Neste exercício, você atualizará o modelo do Bicep que criou anteriormente para que ele:

  • Aceite parâmetros para os locais e nomes dos recursos.
  • Use suas regras de negócio a fim de selecionar os SKUs certos para os recursos que estão sendo implantados.

Durante o processo, você vai:

  • Atualizar o modelo para incluir um parâmetro location.
  • Atualizar o modelo para incluir parâmetros e variáveis para os nomes de recursos.
  • Usar expressões para definir valores padrão para os parâmetros.
  • Atualizar o modelo para incluir variáveis para o SKU de cada recurso.
  • Testar a implantação para garantir que o modelo seja válido.

Adicionar os parâmetros de localização e nome do recurso

  1. No arquivo main.bicep no Visual Studio Code, adicione o seguinte código ao início 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 do Bicep adiciona linhas onduladas amarelas abaixo de cada nome de parâmetro e 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 a interpolação de cadeia de caracteres e a função uniqueString() para definir valores de parâmetro padrão. Alguém que esteja implantando esse modelo pode substituir os valores de parâmetro padrão, especificando os valores no momento da implementaçã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 os 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 do Plano do Serviço de Aplicativo precisam ser exclusivos apenas dentro do grupo de recursos deles. Essa diferença significa que não é uma preocupação usar o mesmo nome de Plano do Serviço de Aplicativo em diferentes implantações, desde que todas as implantações estejam indo para grupos de recursos distintos.

    Dica

    Você está especificando que o parâmetro location deve ser definido como westus3. Normalmente, você criaria recursos no mesmo local que o grupo de recursos usando a propriedade resourceGroup().location. Mas, ao trabalhar com a área restrita do Microsoft Learn, você precisa usar determinadas regiões do Azure que não correspondem ao local do grupo de recursos.

  2. Encontre os locais nas definições de recursos onde as propriedades location e name estão configuradas e atualize-as para usar os valores dos parâmetros. Depois de terminar, as definições de recurso 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
      }
    }
    
  3. Salve as alterações no arquivo.

Definir automaticamente os SKUs para cada tipo de ambiente

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

  2. Abaixo da linha que declara a variável appServicePlanName, 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 uma lógica if/then/else.

  3. Encontre os locais nas definições de recursos em que as propriedades sku estão configuradas e atualize-as para usar os valores dos parâmetros. Depois de terminar, as definições de recurso no arquivo Bicep deverão 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 recurso, onde sabe que esse valores não serão alterados entre as implantações.

  4. Salve as alterações no arquivo.

Verificar o arquivo 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 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 arquivo não corresponder, copie o exemplo ou ajuste o arquivo 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

Observe que você está especificando explicitamente o valor do parâmetro environmentType ao executar a implantação. Você não precisa especificar outros valores de parâmetros porque eles têm valores padrão válidos.

Verifique sua implantação

  1. No navegador, volte para o portal do Azure e vá para o grupo de recursos. Você ainda verá uma implantação bem-sucedida, porque a implantação usou o mesmo nome da primeira implantação.

  2. Selecione o link 1 com êxito.

  3. Selecione a implantação chamada principal e escolha Detalhes da implantação para expandir a lista de recursos implantados.

    Screenshot of the Azure portal interface for the specific deployment, with storage account and App Service resources listed with generated names.

  4. Observe que uma nova conta de armazenamento e um novo aplicativo do Serviço de Aplicativo foram implantados com nomes gerados aleatoriamente.