Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tipp
Dieser Inhalt ist ein Auszug aus dem eBook, Architecting Cloud Native .NET Applications for Azure, verfügbar auf .NET Docs oder als kostenlose herunterladbare PDF, die offline gelesen werden kann.
Cloudeigene Systeme umfassen Microservices, Container und modernes Systemdesign, um Geschwindigkeit und Flexibilität zu erzielen. Sie stellen automatisierte Build- und Releasephasen bereit, um konsistenten und Qualitätscode sicherzustellen. Aber das ist nur ein Teil der Geschichte. Wie stellen Sie die Cloudumgebungen bereit, auf denen diese Systeme ausgeführt werden?
Moderne cloudeigene Anwendungen nutzen die allgemein akzeptierte Praxis der Infrastruktur als Code oder IaC. Mit IaC automatisieren Sie die Plattformbereitstellung. Im Wesentlichen wenden Sie Software engineering-Praktiken wie Tests und Versionsverwaltung auf Ihre DevOps-Praktiken an. Ihre Infrastruktur und Bereitstellungen sind automatisiert, konsistent und wiederholbar. Ebenso wie die kontinuierliche Bereitstellung das herkömmliche Modell manueller Einsätze automatisiert, revolutioniert Infrastructure as Code (IaC) die Verwaltung von Anwendungsumgebungen.
Mit Tools wie Azure Resource Manager (ARM), Terraform und der Azure Command Line Interface (CLI) können Sie die erforderliche Cloudinfrastruktur deklarativ skripten.
Azure Resource Manager-Vorlagen
ARM steht für Azure Resource Manager. Es handelt sich um ein API-Bereitstellungsmodul, das in Azure integriert und als API-Dienst verfügbar gemacht wird. ARM ermöglicht es Ihnen, die in azure-Ressourcengruppe enthaltenen Ressourcen in einem einzigen koordinierten Vorgang bereitzustellen, zu aktualisieren, zu löschen und zu verwalten. Sie stellen das Modul mit einer JSON-basierten Vorlage bereit, die die benötigten Ressourcen und deren Konfiguration angibt. ARM koordiniert die Bereitstellung automatisch in der richtigen Reihenfolge, in der Abhängigkeiten beachtet werden. Das Modul sorgt für Idempotenz. Wenn bereits eine gewünschte Ressource mit derselben Konfiguration vorhanden ist, wird die Bereitstellung ignoriert.
Azure Resource Manager-Vorlagen sind eine JSON-basierte Sprache zum Definieren verschiedener Ressourcen in Azure. Das grundlegende Schema sieht ungefähr wie in Abbildung 10-14 aus.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"apiProfile": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
Abbildung 10-14 – Das Schema für eine Resource Manager-Vorlage
In dieser Vorlage kann ein Speichercontainer innerhalb des Ressourcenabschnitts wie folgt definiert werden:
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-07-01",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
Abbildung 10-15 – Ein Beispiel für ein Speicherkonto, das in einer Resource Manager-Vorlage definiert ist
Eine ARM-Vorlage kann mit dynamischen Umgebungs- und Konfigurationsinformationen parametrisiert werden. Auf diese Weise kann sie wiederverwendet werden, um verschiedene Umgebungen zu definieren, z. B. Entwicklung, QA oder Produktion. Normalerweise erstellt die Vorlage alle Ressourcen innerhalb einer einzelnen Azure-Ressourcengruppe. Es ist möglich, bei Bedarf mehrere Ressourcengruppen in einer einzelnen Ressourcen-Manager-Vorlage zu definieren. Sie können alle Ressourcen in einer Umgebung löschen, indem Sie die Ressourcengruppe selbst löschen. Die Kostenanalyse kann auch auf Ressourcengruppenebene ausgeführt werden, was eine schnelle Buchführung der Kosten der einzelnen Umgebungen ermöglicht.
Es gibt viele Beispiele für ARM-Vorlagen, die im Azure-Schnellstartvorlagenprojekt auf GitHub verfügbar sind. Sie können das Erstellen einer neuen Vorlage oder das Ändern einer vorhandenen Vorlage beschleunigen.
Ressourcen-Manager-Vorlagen können auf viele Arten ausgeführt werden. Vielleicht ist die einfachste Möglichkeit, sie einfach in das Azure-Portal einzufügen. Bei experimentellen Bereitstellungen kann diese Methode schnell sein. Sie können auch als Teil eines Build- oder Releaseprozesses in Azure DevOps ausgeführt werden. Es gibt Aufgaben, die Verbindungen mit Azure nutzen, um die Vorlagen auszuführen. Änderungen an Ressourcen-Manager-Vorlagen werden inkrementell angewendet, was bedeutet, dass zum Hinzufügen einer neuen Ressource nur das Hinzufügen zur Vorlage erforderlich ist. Das Werkzeug wird Unterschiede zwischen den aktuellen Ressourcen und den in der Vorlage definierten bereinigen. Anschließend werden Ressourcen erstellt oder geändert, sodass sie mit dem in der Vorlage definierten Wert übereinstimmen.
Terraformierung
Cloudnative Anwendungen sind oft so konstruiert, dass sie cloud agnostic sind. Dies bedeutet, dass die Anwendung nicht eng mit einem bestimmten Cloudanbieter gekoppelt ist und in jeder öffentlichen Cloud bereitgestellt werden kann.
Terraform ist ein kommerzielles Vorlagentool, das Cloud-native Anwendungen in allen wichtigen Cloud-Playern bereitstellen kann: Azure, Google Cloud Platform, AWS und AliCloud. Anstatt JSON als Vorlagendefinitionssprache zu verwenden, wird die etwas terse HCL (Hashicorp Configuration Language) verwendet.
Eine Terraform-Beispieldatei, die mit der vorherigen Ressourcen-Manager-Vorlage (Abbildung 10-15) übereinstimmt, ist in Abbildung 10-16 dargestellt:
provider "azurerm" {
version = "=1.28.0"
}
resource "azurerm_resource_group" "testrg" {
name = "production"
location = "West US"
}
resource "azurerm_storage_account" "testsa" {
name = "${var.storageAccountName}"
resource_group_name = "${azurerm_resource_group.testrg.name}"
location = "${var.region}"
account_tier = "${var.tier}"
account_replication_type = "${var.replicationType}"
}
Abbildung 10-16 – Ein Beispiel für eine Resource Manager-Vorlage
Terraform bietet auch intuitive Fehlermeldungen für Problemvorlagen. Es gibt auch eine praktische Überprüfungsaufgabe, die in der Buildphase verwendet werden kann, um Vorlagenfehler frühzeitig abzufangen.
Wie bei Ressourcen-Manager-Vorlagen stehen Befehlszeilentools zur Bereitstellung von Terraform-Vorlagen zur Verfügung. Es gibt auch von der Community erstellte Aufgaben in Azure-Pipelines, die Terraform-Vorlagen überprüfen und anwenden können.
Manchmal geben Terraform- und ARM-Vorlagen aussagekräftige Werte aus, z. B. eine Verbindungszeichenfolge zu einer neu erstellten Datenbank. Diese Informationen können in der Build-Pipeline erfasst und in nachfolgenden Prozessen verwendet werden.
Azure CLI-Skripts und -Aufgaben
Schließlich können Sie Azure CLI nutzen, um Ihre Cloudinfrastruktur deklarativ zu skripten. Azure CLI-Skripts können erstellt, gefunden und freigegeben werden, um fast jede Azure-Ressource bereitzustellen und zu konfigurieren. Die CLI ist einfach mit einer sanften Lernkurve zu verwenden. Skripts werden in PowerShell oder Bash ausgeführt. Sie sind auch einfach zu debuggen, insbesondere im Vergleich zu ARM-Vorlagen.
Azure CLI-Skripts funktionieren gut, wenn Sie Ihre Infrastruktur abreißen und erneut bereitstellen müssen. Das Aktualisieren einer vorhandenen Umgebung kann schwierig sein. Viele CLI-Befehle sind nicht idempotent. Dies bedeutet, dass sie die Ressource jedes Mal neu erstellen, wenn sie ausgeführt werden, auch wenn die Ressource bereits vorhanden ist. Es ist immer möglich, Code hinzuzufügen, der auf das Vorhandensein jeder Ressource überprüft, bevor sie erstellt wird. Auf diese Weise kann Ihr Skript jedoch aufgebläht und schwer zu verwalten sein.
Diese Skripts können auch in Azure DevOps-Pipelines eingebettet werden als Azure CLI tasks. Durch das Ausführen der Pipeline wird das Skript aufgerufen.
Abbildung 10-17 zeigt einen YAML-Codeausschnitt, der die Version von Azure CLI und die Details des Abonnements auflistet. Beachten Sie, wie Azure CLI-Befehle in einem Inlineskript enthalten sind.
- task: AzureCLI@2
displayName: Azure CLI
inputs:
azureSubscription: <Name of the Azure Resource Manager service connection>
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
az --version
az account show
Abbildung 10-17 – Azure CLI-Skript
Im Artikel Was ist Infrastructure as Code, Autor Sam Guckenheimer, beschreibt, wie "Teams, die IaC implementieren, stabile Umgebungen schnell und in großem Umfang bereitstellen können. Teams vermeiden manuelle Konfigurationen von Umgebungen und erzwingen Konsistenz durch Darstellung des gewünschten Zustands ihrer Umgebungen über Code. Infrastrukturbereitstellungen mit IaC sind wiederholbar und verhindern Laufzeitprobleme, die durch Konfigurationsabweichungen oder fehlende Abhängigkeiten verursacht werden. DevOps-Teams können mit einer einheitlichen Reihe von Methoden und Tools zusammenarbeiten, um Anwendungen und ihre unterstützende Infrastruktur schnell, zuverlässig und in großem Umfang bereitzustellen."