Bicep
-
Vereinfachung der Erstellung einer Infrastruktur mit Hilfe von Code → Infrastructure-as-Code (IaC)
-
Domain-spezifische Sprache
-
nutzt deklarative Syntax, um Azure Ressourcen / eine bestimmte Cloud-Landschaft zu deployen
-
durch
.bicep-Datei -
Aktionen des Azure Resource Manager durch
.bicep-Datei- Ressourcen deployen, wenn man neue Komponenten in
.bicep-Datei hinzufügt - Ressourcen umkonfigurieren, wenn sich Parameter ändern
- Ressourcen löschen, wenn man Komponenten aus
.bicep-Datei entfernt
- Ressourcen deployen, wenn man neue Komponenten in
-
vergleicht aktuellen Zustand der Azure-Ressourcen mit Zustand im Code → keine Zustandsverwaltung
-
Funktionsweise
- automatische Konvertierung von Bicep zu JSON für Azure Resource Manager
- Azure Resource Manager untersucht Unterschiede und behebt diese
-
Workflow

-
Bicep Plugin in Visual Studio Code
Installation
Version prüfen:
az bicep version
Installieren:
az bicep install
Aufbau .bicep-Datei
siehe Microsoft Learn Azure - Bicep documentation - Bicep file structure and syntax
@<decorator>(<argument>)
metadata <metadata-name> = ANY
targetScope = '<scope>'
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
// parameters that can be transfered through the deployment command
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
@<decorator>(<argument>)
var <variable-name> = <variable-value>
// creation of a resource
@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>
Resource Groups
- benötigen
targetScope-Einstellung (aufsubscription), damit der Resource Group Name nicht mit anderen Azure-Benutzern kollidiertsubscriptionoderglobal
targetScope = 'subscription'
// param with default value
param location string = deployment().location
param name string
resource rg 'Microsoft.Resources/resourceGroups@2018-05-01' = {
location: location
name: name
}
Container Instance
param name string = 'azure-studle'
param location string = resourceGroup().location
param image string
param registry string
param username string
@secure()
param password string
resource containerGroups_azure_studle_name_resource 'Microsoft.ContainerInstance/containerGroups@2022-10-01-preview' = {
name: name
location: location
// ...
}
Deployment
Links
Vorgehen
-
bei Azure CLI anmelden
-
lokal
- per Browser anmelden
az login -
CI/CD
- in automatisierten Skripts kann man sich nicht per Browser anmelden → Headless-Lösung für CI-Skripts
- Vorgehen
-
Service Principal auf Subscription-Scope mit Rolle Owner erstellen:
az ad sp- Service Principal -
Output mit AppId, Passwort und Tenant merken
-
mit Daten anmelden:
az login --service-principal -u <app-id> -p <password> --tenant <tenant>
-
-
-
Umgebung deployen
az deployment sub- Ressource in Subscription erstellenaz deployment group- Ressource in Resource Group erstellen- Parameter können mit
--parameters value1=key1 value2=key2übergeben werden
Beispiel:
az login --service-principal -u <app-id> -p <password> --tenant <tenant>
az deployment sub create --location switzerlandnorth --template-file template.bicep --parameters name=uek-210