0Pricing
Azure Fundamentals · Lekcja

Bicep: nowoczesna infrastruktura Azure jako kod

Poznaj zwięzłą składnię Bicep jako silnie typowaną abstrakcję nad kodem ARM JSON, przekonwertuj istniejący szablon ARM do formatu Bicep i wdróż go za pomocą interfejsu wiersza polecenia Azure CLI.

Bicep: nowoczesna infrastruktura Azure jako kod to bezpłatna lekcja Azure Fundamentals na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Azure Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.

Czym jest Bicep i dlaczego warto go używać?

Bicep to opracowany przez Microsoft język dziedzinowy (DSL), będący silnie typowaną i zwięzłą alternatywą dla szablonów ARM JSON. Bicep jest kompilowany do standardowego kodu ARM JSON, dlatego korzysta z tego samego silnika wdrażania ARM i od początku obsługuje wszystkie typy zasobów Azure. Bicep eliminuje dużą część kodu pomocniczego wymaganego przez surowy JSON oraz zapewnia lepsze bezpieczeństwo typów i obsługę IntelliSense.

Porównanie składni Bicep i ARM JSON

To samo konto magazynu, które w szablonie ARM wymaga około 25 wierszy kodu JSON, w Bicep zajmuje zaledwie około 8 wierszy. Bicep eliminuje '$schema', contentVersion, opakowującą tablicę resources oraz rozwlekłą składnię wyrażeń. Nazwy i typy właściwości pozostają identyczne, ponieważ Bicep jest bezpośrednią warstwą abstrakcji nad ARM JSON — w czasie wykonywania nie ma żadnej różnicy.

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

Parametry i dekoratory w Bicep

Parametry Bicep używają zwięzłej składni param name type = defaultValue. Bezpośrednio nad parametrem można zastosować dekoratory (poprzedzone znakiem @), aby dodać ograniczenia, takie jak @minLength(), @maxLength(), @allowed() i @description(). Dekorator @secure() oznacza parametr jako poufny i jest odpowiednikiem secureString w ARM JSON.

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

Zmienne i wyrażenia w Bicep

Zmienne Bicep deklaruje się za pomocą słowa kluczowego var; mogą one zawierać dowolne wyrażenie, w tym interpolację ciągów z użyciem składni '${value}'. Interpolacja ciągów jest jednym z najbardziej czytelnych usprawnień w porównaniu z ARM JSON — nie trzeba już używać wywołań funkcji concat(). Bicep obsługuje również wyrażenia warunkowe z użyciem operatora trójargumentowego condition ? trueValue : falseValue.

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

Deklaracje zasobów i nazwy symboliczne

W Bicep każdy zasób otrzymuje nazwę symboliczną — identyfikator używany do odwoływania się do niego w obrębie szablonu. Nazwa symboliczna nie jest tym samym co nazwa zasobu w Azure. Nazw symbolicznych należy używać do uzyskiwania dostępu do właściwości zasobów i ustanawiania niejawnych zależności przez odwoływanie się do jednego zasobu wewnątrz innego, co eliminuje potrzebę jawnej tablicy dependsOn.

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

Wartości wyjściowe w Bicep

Wartości wyjściowe w Bicep deklaruje się za pomocą słowa kluczowego output, po którym podaje się nazwę, typ i wartość wyjściową. Do właściwości wdrożonego zasobu można odwoływać się za pomocą nazwy symbolicznej i notacji kropkowej, która jest znacznie czytelniejsza niż funkcja ARM reference(). Wartości wyjściowe są niezbędne do przekazywania wartości między wywołaniami modułów Bicep.

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

Moduły Bicep

Moduły Bicep są odpowiednikiem połączonych szablonów w formacie ARM JSON i pozwalają podzielić infrastrukturę na komponenty wielokrotnego użytku. Moduł to po prostu inny plik .bicep. Odwołuje się do niego za pomocą słowa kluczowego module, przekazuje parametry i korzysta z jego wartości wyjściowych. Moduły można również publikować w usłudze Azure Container Registry i pobierać z niej, aby ponownie wykorzystywać je w całym zespole.

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

Konwertowanie szablonów ARM do formatu Bicep

Jeśli mają już Państwo istniejące szablony ARM JSON, interfejs Bicep CLI może zdekompilować je do formatu Bicep za pomocą bicep decompile. Wynik może wymagać ręcznego uporządkowania, ale stanowi doskonały punkt wyjścia. Firma Microsoft udostępnia również internetowy plac zabaw pod adresem aka.ms/bicepdemo, gdzie można wkleić kod ARM JSON i zobaczyć jego odpowiednik w formacie Bicep w czasie rzeczywistym.

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

Wdrażanie Bicep za pomocą interfejsu Azure CLI

Interfejs Azure CLI obsługuje pliki Bicep bezpośrednio — przed wdrożeniem nie trzeba ręcznie kompilować ich do formatu ARM JSON. Należy przekazać ścieżkę do pliku .bicep do polecenia az deployment group create za pomocą flagi --template-file, a interfejs CLI skompiluje plik automatycznie. Te same podkomendy validate i what-if działają z plikami Bicep dokładnie tak samo jak z kodem ARM JSON.

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

Pętle i warunki w Bicep

Bicep obsługuje pętle zasobów za pomocą składni for ... in, która pozwala utworzyć wiele wystąpień zasobu na podstawie parametru będącego tablicą, eliminując powielanie kodu metodą kopiuj-wklej. Słowo kluczowe if umożliwia warunkowe wdrażanie zasobów — zasób jest uwzględniany tylko wtedy, gdy określony warunek jest spełniony. Obie funkcje są odpowiednio kompilowane do konstrukcji ARM copy i condition.

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

Narzędzia Bicep i linting

Rozszerzenie Bicep dla Visual Studio Code zapewnia rozbudowaną funkcję IntelliSense, sprawdzanie typów i wyróżnianie błędów bezpośrednio podczas pisania. Interfejs Bicep CLI zawiera narzędzie linter, które wyszukuje naruszenia najlepszych praktyk, takie jak nieużywane parametry, brakujące opisy i nieprawidłowe wersje interfejsu API. Uruchomienie az bicep lint --file main.bicep w potoku CI pozwala wykryć problemy przed wdrożeniem.

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

Szybki sprawdzian

Sprawdź swoją wiedzę na temat zagadnień Microsoft Azure Fundamentals (AZ-900) przedstawionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji poznali Państwo następujące zagadnienia: Bicep to zwięzła, silnie typowana abstrakcja nad ARM JSON, kompilowana do standardowych szablonów ARM; moduły i pętle umożliwiają tworzenie wielokrotnego użytku i zgodnego z zasadą DRY kodu infrastruktury; a Azure CLI wdraża pliki Bicep bezpośrednio, obsługując ten sam proces validate/what-if/deploy. Następnie omówimy Terraform na platformie Azure.

Często zadawane pytania

Czy lekcja „Bicep: nowoczesna infrastruktura Azure jako kod” jest bezpłatna?

Tak — pełny tekst „Bicep: nowoczesna infrastruktura Azure jako kod” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Azure Fundamentals, przejdź na CoddyKit PRO. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.

Co nauczysz się w „Bicep: nowoczesna infrastruktura Azure jako kod”?

Poznaj zwięzłą składnię Bicep jako silnie typowaną abstrakcję nad kodem ARM JSON, przekonwertuj istniejący szablon ARM do formatu Bicep i wdróż go za pomocą interfejsu wiersza polecenia Azure CLI. Ćwiczysz Azure Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Azure Fundamentals?

Nie wymagamy żadnego doświadczenia. Azure Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Bicep: nowoczesna infrastruktura Azure jako kod”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Azure Fundamentals?

Tak. Każda lekcja Azure Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Jak działa Azure Resource Manager
  2. Pisanie szablonów ARM
  3. Bicep: nowoczesna infrastruktura Azure jako kod
  4. Terraform na platformie Azure
← Powrót do Azure Fundamentals