Automatisieren der Bereitstellung mithilfe von Azure Resource Manager-Vorlagen und Bicep
Die Automatisierung der Datenbankbereitstellung ist eine entscheidende Fähigkeit, wenn es gilt, einen zuverlässigen und nachhaltigen Entwicklungsprozess zu etablieren. In diesem Modul wird auch beschrieben, wie Sie ARM-Vorlagen und Bicep-Dateien in Datenbankbereitstellungen verwenden.
ARM-Vorlage
Azure Resource Manager(ARM)-Vorlagen sind JavaScript Object Notation(JSON)-Dokumente, die die Ressourcen beschreiben, die in einer Azure-Ressourcengruppe bereitgestellt werden sollen. ARM-Vorlagen sind deklarativ und ermöglichen es Ihnen, Ihre Ressourcen und Eigenschaften anzugeben, ohne eine vollständige Sequenz von Programmierbefehlen schreiben zu müssen.
Mit ARM-Vorlagen können Sie die gesamte Infrastruktur mithilfe eines deklarativen Frameworks erstellen und bereitstellen. Beispielsweise können Sie nicht nur einen virtuellen Computer, sondern auch dessen Netzwerk- und Speicherabhängigkeiten in einem einzigen Dokument bereitstellen. ARM-Vorlagen unterstützen auch die Orchestrierung, mit der die Bereitstellung von interdependenten Ressourcen verwaltet wird, sodass sie in der richtigen Reihenfolge und mit der entsprechenden Erweiterbarkeit erstellt werden, wodurch Sie PowerShell- oder Bash-Skripts ausführen können, nachdem Sie Ihre Ressourcen bereitgestellt haben.
Vorteile
ARM-Vorlagen bieten folgende Vorteile:
Wiederholbar – ARM-Vorlagen sind idempotent. Das heißt, dass Sie Ihre Infrastruktur während des gesamten Entwicklungslebenszyklus wiederholt bereitstellen und Vertrauen darin haben können, dass Ihre Ressourcen auf konsistente Weise bereitgestellt werden.
Orchestrierung – Mit ARM-Vorlagen wird die Komplexität beim Sortieren von Vorgängen für Bereitstellungen behandelt; wenn möglich, werden Ressourcen parallel und nicht seriell bereitgestellt, sodass Bereitstellungen beschleunigt werden.
Modular – ARM-Vorlagen können geteilt und kombiniert werden, sodass Sie die benötigten Bereitstellungen erstellen können.
Exportierbarer Code – Eine hervorragende Möglichkeit zum Erlernen der Vorlagensyntax besteht darin, die aktuelle Vorlage zu exportieren. Mit dem Exportieren von Vorlagen können Sie Ihre Umgebung für Notfallwiederherstellungs- oder Dokumentationszwecke ganz einfach neu erstellen.
Erstellungstools – ARM-Vorlagen können mithilfe der kostenlos verfügbaren Anwendung Visual Studio Code und der Erweiterung des Vorlagentools erstellt werden. IntelliSense, Syntaxhervorhebung, Inlinehilfe und viele andere Sprachfunktionen stehen Ihnen zur Verfügung. Zusätzlich zu Visual Studio Code können Sie auch Visual Studio verwenden.
Bereitstellen einer ARM-Vorlage mit PowerShell
Sie haben mehrere Optionen für den Umfang Ihrer Bereitstellung, wenn Sie PowerShell und ARM-Vorlagen verwenden. Sie können Ressourcen für eine Ressourcengruppe, ein Abonnement, eine Verwaltungsgruppe (eine Sammlung von Abonnements unter einer Azure-Vorlage, die häufig für große unternehmensweite Bereitstellungen verwendet wird) oder einen Mandanten bereitstellen.
Sehen wir uns eine JSON-ARM-Vorlagendefinition an, um eine Einzeldatenbank in SQL-Datenbank zu erstellen:
{
"$schema": "https://schema.management.azure.com/schemas/2021-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "17606057535442789180"
}
},
"parameters": {
"serverName": {
"type": "string",
"defaultValue": "[uniqueString('sql', resourceGroup().id)]",
"metadata": {
"description": "The name of the SQL logical server."
}
},
"sqlDBName": {
"type": "string",
"defaultValue": "SampleDB",
"metadata": {
"description": "The name of the SQL Database."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"administratorLogin": {
"type": "string",
"metadata": {
"description": "The administrator username of the SQL logical server."
}
},
"administratorLoginPassword": {
"type": "secureString",
"metadata": {
"description": "The administrator password of the SQL logical server."
}
}
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2022-02-01",
"name": "[parameters('serverName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]"
}
},
{
"type": "Microsoft.Sql/servers/databases",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', parameters('serverName'), parameters('sqlDBName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', parameters('serverName'))]"
]
}
]
}
In diesem Beispiel wird eine einzelne Datenbank mit einem von zwei Einkaufsmodellen definiert. Beim Erstellen der Datenbank geben Sie auch den Server an, der sie verwaltet, und die Azure-Region, in der sie sich befindet.
Wie im folgenden PowerShell-Beispiel gezeigt, kann diese Konfiguration aus einem URI bereitgestellt werden:
$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter an Azure location (e.g., centralus)"
$adminUser = Read-Host -Prompt "Enter the SQL server administrator username"
$adminPassword = Read-Host -Prompt "Enter the SQL server administrator password" -AsSecureString
$resourceGroupName = "${projectName}rg"
# Create a new resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location
# Deploy resources using an ARM template
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.sql/sql-database/azuredeploy.json" -administratorLogin $adminUser -administratorLoginPassword $adminPassword
Dieses Skript fordert den Benutzer zur Eingabe eines Projektnamens, eines Azure-Speicherorts, eines SQL Server-Administratorbenutzernamens und eines Kennworts auf. Anschließend wird eine neue Ressourcengruppe am angegebenen Speicherort erstellt und Ressourcen mithilfe einer Azure Resource Manager-Vorlage (ARM) aus einer angegebenen URI bereitgestellt. Die ARM-Vorlage richtet eine SQL-Datenbank mit den angegebenen Administratoranmeldeinformationen ein.
Bicep
Azure Bicep ist eine deklarative Sprache, die für die Bereitstellung von Azure-Ressourcen entwickelt wurde. Es bietet eine präzise, zuverlässige Erstellungserfahrung, die die Codewiederverwendung unterstützt, wodurch es zu einem hervorragenden Infrastructure-as-Code (IaC)-Tool wird.
Bicep ist nicht für eine allgemeine Programmiersprache vorgesehen. Stattdessen ist es ein spezielles Tool zum Erstellen von Dateien, die Azure-Infrastrukturressourcen und deren Eigenschaften deklarieren. Dieser Ansatz stellt eine konsistente Ressourcenbereitstellung während des gesamten Entwicklungslebenszyklus sicher.
Vorteile
Im Folgenden werden ein paar Vorteile von Bicep aufgeführt:
Kontinuierliche vollständige Unterstützung – Bicep bietet Unterstützung für alle Ressourcentypen und API-Versionen für Azure-Dienste. Das bedeutet, dass Sie, sobald ein Ressourcenanbieter neue Ressourcentypen und API-Versionen einführt, diese in Ihrer Bicep-Datei verwenden können, ohne auf ein Toolupdate warten zu müssen.
Einfache Syntax – Im Vergleich zu einer entsprechenden JSON-Datei sind Bicep-Dateien präziser und einfacher zu lesen.
Einfach zu verwenden: Bicep erfordert kein vorheriges Wissen über Programmiersprachen und ist einfach zu schreiben und zu verstehen.

Die folgenden Beispiele zeigen den Unterschied zwischen einer Bicep-Datei und der entsprechenden JSON-Vorlage. In beiden Beispielen wird ein Speicherkonto bereitgestellt.
{
"$schema": "https://schema.management.azure.com/schemas/2021-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('toylaunch{0}', uniqueString(resourceGroup().id))]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Bicep im Vergleich zu JSON
Sowohl Bicep als auch JSON können zum Bereitstellen einer Datenbank verwendet werden. Bicep ist präziser und einfacher zu lesen. Hier ist ein Beispiel für eine JSON-Datei für die Bereitstellung einer Datenbank:
Sie können auch die Bicep-Erweiterung für Visual Studio Code installieren, um Ihre Bicep-Dateien zu erstellen, da der Editor umfassende IntelliSense- und Syntaxüberprüfungsfunktionen bereitstellt.
Bereitstellen einer Azure SQL-Datenbank mithilfe von Bicep und PowerShell
Sie können mühelos eine Azure SQL-Datenbank mit Bicep und PowerShell erstellen. Eine einzelne Datenbank enthält einen definierten Satz von Rechen-, Speicher-, Ein-/Ausgabe- und Speicherressourcen, die über eines von zwei Preismodellen verfügbar sind. Beim Einrichten einer einzelnen Datenbank geben Sie auch einen Server an, der sie verwalten und in einer Azure-Ressourcengruppe in einer ausgewählten Region platzieren soll.
Die in dieser Schnellstartanleitung verwendete Bicep-Datei stammt aus den Azure-Schnellstartvorlagen.
@description('The name of the SQL logical server.')
param serverName string = uniqueString('sql', resourceGroup().id)
@description('The name of the SQL Database.')
param sqlDBName string = 'SampleDB'
@description('Location for all resources.')
param location string = resourceGroup().location
@description('The administrator username of the SQL logical server.')
param administratorLogin string
@description('The administrator password of the SQL logical server.')
@secure()
param administratorLoginPassword string
resource sqlServer 'Microsoft.Sql/servers@2022-02-01' = {
name: serverName
location: location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
}
resource sqlDB 'Microsoft.Sql/servers/databases@2022-02-01' = {
parent: sqlServer
name: sqlDBName
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
}
Um diese Datei bereitzustellen, speichern Sie sie als main.bicep auf Ihrem lokalen Computer, und führen Sie die folgenden Befehle in PowerShell aus.
New-AzResourceGroup -Name exampleRG -Location eastus
New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -administratorLogin "<admin-login>"
Quellcodeverwaltung für Vorlagen
ARM-Vorlagen und Bicep-Dateien veranschaulichen Infrastruktur als Code. Mit Hardwareressourcen, die hinter APIs abstrahiert werden, wird Ihre gesamte Infrastruktur zu einem integralen Bestandteil Ihres Anwendungscodes. Genau wie Anwendungs- oder Datenbankcode ist es wichtig, diesen Code zu schützen und zu versionieren. Neben der internen Versionsverwaltung innerhalb der Vorlage sollte ihr Quellcodeverwaltungssystem auch Ihre Vorlagen versionieren.
In der Regel erstellen Datenbankadministratoren keine Vorlagen von Grund auf neu. Stattdessen können sie sie mithilfe des Azure-Portals erstellen oder Vorlagen aus den Schnellstartvorlagen verwenden, die von Microsoft auf GitHub bereitgestellt werden.
Wenn Sie auf der GitHub-Seite für SQL-Datenbankvorlagen "Bereitstellen in Azure" auswählen, gelangen Sie zum Azure-Portal. Die Vorlage wird geladen, und Sie müssen nur ein paar Details wie Ressourcengruppe, Standort und Administratoranmeldeinformationen eingeben. Wählen Sie danach "Überprüfen" und dann "Erstellen" aus, um die Bereitstellung zu starten. Das Portal behandelt den Rest und zeigt Ihnen den Status an, bis er abgeschlossen ist.