Cvičení – přidání parametrů a proměnných do šablony Bicep

Dokončeno

V tomto cvičení aktualizujete dříve vytvořenou šablonu Bicep tak, aby:\

  • Přijímá parametry pro umístění a názvy prostředků.
  • Pomocí obchodních pravidel vyberete správné skladové položky pro nasazované prostředky.

Během tohoto procesu:

  • Aktualizujte šablonu tak, aby zahrnovala location parametr.
  • Aktualizujte šablonu tak, aby zahrnovala parametry a proměnné pro názvy prostředků.
  • Pomocí výrazů nastavte výchozí hodnoty parametrů.
  • Aktualizujte šablonu tak, aby zahrnovala proměnné pro skladovou položku každého prostředku.
  • Otestujte nasazení a ujistěte se, že je šablona platná.

Přidání parametrů názvu umístění a prostředku

  1. V souboru main.bicep v editoru Visual Studio Code přidejte do horní části souboru následující kód:

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Linter Bicep přidá žluté vlnovky pod každý parametr a název proměnné, aby bylo možné označit, že se v šabloně nepoužívají. Tento problém brzy vyřešíte.

    Všimněte si, že používáte výrazy, které obsahují interpolaci řetězců a uniqueString() funkci k definování výchozích hodnot parametrů. Někdo, kdo tuto šablonu nasazuje, může přepsat výchozí hodnoty parametrů zadáním hodnot v době nasazení, ale nemůže přepsat hodnoty proměnných.

    Všimněte si také, že pro název plánu služby Aplikace Azure používáte proměnnou, ale pro ostatní názvy používáte parametry. Účty úložiště a aplikace App Service potřebují globálně jedinečné názvy, ale názvy plánů služby App Service musí být jedinečné jenom v rámci skupiny prostředků. Tento rozdíl znamená, že se nejedná o použití stejného názvu plánu služby App Service v různých nasazeních, pokud se všechna nasazení nacházejí v různých skupinách prostředků.

    Tip

    Určujete, že location parametr by měl být nastaven na westus3hodnotu . Za normálních okolností byste prostředky vytvořili ve stejném umístění jako skupina prostředků pomocí resourceGroup().location vlastnosti. Když ale pracujete s sandboxem Microsoft Learn, musíte použít určité oblasti Azure, které neodpovídají umístění skupiny prostředků.

  2. Najděte místa v definicích prostředků, kde location jsou nastaveny vlastnosti, name a aktualizujte je tak, aby používaly hodnoty parametrů. Po dokončení by definice prostředků v souboru Bicep měly vypadat takto:

    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. Uložte změny souboru.

Automatické nastavení skladových položek pro každý typ prostředí

  1. V souboru main.bicep v editoru Visual Studio Code přidejte následující parametr Bicep pod parametry, které jste vytvořili v předchozí úloze:

    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    

    Všimněte si, že definujete parametr se sadou povolených hodnot, ale nezadáváte výchozí hodnotu pro tento parametr.

  2. Pod řádek, který deklaruje proměnnou appServicePlanName , přidejte následující definice proměnných:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    Všimněte si, že tyto hodnoty proměnných nastavujete pomocí ternárního operátoru k vyjádření určité if/then/else logiky.

  3. Najděte místa v definicích prostředků, kde sku jsou vlastnosti nastaveny, a aktualizujte je tak, aby používaly hodnoty parametrů. Po dokončení by definice prostředků v souboru Bicep měly vypadat takto:

    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
      }
    }
    

    Všimněte si, že jste neparametrizovali všechno. Nastavili jste některé vlastnosti přímo v definicích prostředků, kde víte, že se tyto hodnoty mezi nasazeními nezmění.

  4. Uložte změny souboru.

Ověření souboru Bicep

Po dokončení všech předchozích změn by měl váš soubor main.bicep vypadat jako v tomto příkladu:

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
  }
}

Pokud se váš soubor neshoduje, zkopírujte příklad nebo upravte soubor tak, aby odpovídal příkladu.

Nasazení aktualizované šablony Bicep

V terminálu spusťte následující příkaz Azure CLI.

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

V terminálu spusťte následující příkaz Azure PowerShellu.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

Všimněte si, že při spuštění nasazení explicitně zadáváte hodnotu environmentType parametru. Nemusíte zadávat další hodnoty parametrů, protože mají platné výchozí hodnoty.

Kontrola nasazení

  1. V prohlížeči se vraťte na web Azure Portal a přejděte do skupiny prostředků. Stále uvidíte jedno úspěšné nasazení, protože nasazení použilo stejný název jako první nasazení.

  2. Vyberte odkaz 1 Úspěch.

  3. Vyberte nasazení s názvem hlavní a pak výběrem podrobností o nasazení rozbalte seznam nasazených prostředků.

    Snímek obrazovky s rozhraním webu Azure Portal pro konkrétní nasazení s účtem úložiště a prostředky služby App Service, které jsou uvedené s vygenerovanými názvy

  4. Všimněte si, že byla nasazena nová aplikace a účet úložiště služby App Service s náhodně generovanými názvy.