Erstellen und Verwenden von Bicep-Modulen

Abgeschlossen

Module sind unabhängige Bicep-Dateien. Sie enthalten in der Regel mehrere Ressourcen, die zusammen bereitgestellt werden. Module können von jeder anderen Bicep-Vorlage verwendet werden.

Durch die Verwendung von Modulen können Sie Ihren Bicep-Code wiederverwenden und Ihre Bicep-Dateien lesbarer und verständlicher gestalten, da sie jeweils auf eine bestimmte Aufgabe ausgerichtet sind. Ihre Hauptvorlagen stellen dann mehrere Module zusammen.

Vorteile von Modulen

In Ihrem Spielzeugunternehmen haben Sie Cloudressourcen mithilfe vieler einzelner Bicep-Dateien bereitgestellt. Im Laufe der Zeit werden diese Vorlagen immer größer. Schließlich verfügen Sie über monolithischen Code, der schwer zu lesen und zu durchlaufen ist, und der noch schwieriger zu verwalten ist.

Dieser Ansatz zwingt Sie auch, Teile des Codes zu duplizieren, wenn Sie ihn in anderen Vorlagen wiederverwenden möchten. Wenn Sie etwas ändern, müssen Sie mehrere Dateien durchsuchen und aktualisieren.

Bicep-Module helfen Ihnen beim Bewältigen dieser Herausforderungen, indem Sie Ihren Code in kleinere, besser verwaltbare Dateien aufteilen, auf die mehrere Vorlagen verweisen können. Module bieten ihnen einige wichtige Vorteile.

Wiederverwendbarkeit

Nachdem Sie ein Modul erstellt haben, können Sie es in mehreren Bicep-Dateien wiederverwenden, auch wenn die Dateien für verschiedene Projekte oder Workloads vorgesehen sind. Wenn Sie beispielsweise eine Projektmappe erstellen, können Sie separate Module für die App-Komponenten, die Datenbank und die netzwerkbezogenen Ressourcen erstellen. Wenn Sie dann mit der Arbeit an einem anderen Projekt mit ähnlichen Netzwerkanforderungen beginnen, können Sie das entsprechende Modul wiederverwenden.

Diagram that shows a template referencing three modules: application, database, and networking. The networking module is then reused in another template.

Sie können Module sogar innerhalb Ihres Teams, innerhalb Ihrer Organisation oder für die Azure-Community freigeben. In einem künftigen Microsoft Learn-Modul erfahren Sie mehr über das Freigeben von Bicep-Modulen.

Kapselung

Module helfen Ihnen, verwandte Ressourcendefinitionen zusammenzuhalten. Wenn Sie beispielsweise eine Azure Functions-App definieren, stellen Sie in der Regel die App, einen Hostingplan für die App und ein Speicherkonto für die Metadaten der App bereit. Diese drei Komponenten werden separat definiert, stellen aber eine logische Gruppierung von Ressourcen dar. Daher kann es sinnvoll sein, sie als Modul zu definieren.

So muss Ihre Hauptvorlage die Details der Bereitstellung einer Funktions-App nicht kennen. Dies liegt in der Verantwortung des Moduls.

Kombinierbarkeit

Nachdem Sie eine Gruppe von Modulen erstellt haben, können Sie sie zusammensetzen. Beispielsweise können Sie ein Modul erstellen, das ein virtuelles Netzwerk bereitstellt, und ein weiteres Modul, das einen virtuellen Computer bereitstellt. Sie definieren Parameter und Ausgaben für jedes Modul, damit Sie die wichtigen Informationen von einem Modul an das andere senden können.

Diagram that shows a template referencing two modules and passing the output from one to the parameter of another.

Tipp

Es ist hilfreich, sich Bicep-Module als Bausteine vorzustellen, die Sie auf unterschiedliche Weise kombinieren können, um Ihre Bereitstellungen zu unterstützen.

Funktionalität

Möglicherweise müssen Sie gelegentlich Module verwenden, um auf bestimmte Funktionen zuzugreifen. Beispielsweise können Sie Module und Schleifen zusammen verwenden, um mehrere Ressourcengruppen bereitzustellen. Sie können auch Module verwenden, um Ressourcen in verschiedenen Bereichen in einer einzelnen Bereitstellung zu definieren.

Erstellen eines Moduls

Ein Modul ist eine normale Bicep-Datei. Sie erstellen es genau wie jede andere Bicep-Datei.

Im Allgemeinen ist es keine bewährte Methode, ein Modul für jede Ressource zu erstellen, die Sie bereitstellen. Ein gutes Bicep-Modul definiert in der Regel mehrere verwandte Ressourcen. Wenn Sie jedoch über eine komplexe Ressource mit vielen Konfigurationen verfügen, kann es sinnvoll sein, ein einzelnes Modul zu erstellen, um die Komplexität zu kapseln. Dieser Ansatz sorgt dafür, dass Ihre Hauptvorlagen einfach und übersichtlich sind.

Aufteilen einer vorhandenen Bicep-Vorlage in Module

Sie können eine große Bicep-Vorlage erstellen und dann entscheiden, dass sie in Module aufgeteilt werden soll. Manchmal ist es offensichtlich, wie Sie eine große Bicep-Datei aufteilen sollten. Möglicherweise verfügen Sie über eine Reihe von Ressourcen, die in einem Modul eindeutig zusammengehören. In anderen Fällen ist es nicht so einfach, die Ressourcen zu bestimmen, die in ein Modul gruppiert werden sollen.

Die Bicep-Schnellansicht kann Ihnen helfen, eine Übersicht über Ihre gesamte Bicep-Datei zu erhalten. Die Schnellansicht ist in der Bicep-Erweiterung für Visual Studio Code enthalten.

Öffnen Sie zum Anzeigen der Schnellansicht den Visual Studio Code-Explorer, klicken Sie auf die Bicep-Datei, und halten Sie die Maustaste gedrückt (oder klicken Sie mit der rechten Maustaste darauf). Klicken Sie anschließend auf Bicep-Schnellansicht öffnen. Die Schnellansicht zeigt eine grafische Darstellung der Ressourcen in Ihrer Bicep-Datei. Sie umfasst Linien zwischen Ressourcen, um die Abhängigkeiten anzuzeigen, die Bicep erkennt.

Sie können die Schnellansicht verwenden, um Ihre Dateien aufzuteilen. Überlegen Sie, ob die Visualisierung Ressourcencluster veranschaulicht. Es kann sinnvoll sein, diese Cluster zusammen in ein Modul zu verschieben.

Betrachten Sie beispielsweise die folgende Visualisierung für eine Bicep-Datei. Es werden zwei unterschiedliche Ressourcengruppen definiert. Es kann sinnvoll sein, sie in separaten Datenbank- und Netzwerkmodulen zu gruppieren.

Schachteln von Modulen

Module können andere Module enthalten. Mithilfe dieser Schachtelungstechnik können Sie einige Module erstellen, die kleine Ressourcengruppen bereitstellen, und diese dann zu größeren Modulen zusammensetzen, die komplexe Topologien von Ressourcen definieren. Eine Vorlage kombiniert diese Teile zu einem bereitstellbaren Artefakt.

Tipp

Obwohl es möglich ist, mehrere Ebenen von Modulen zu schachteln, kann dies kompliziert werden. Wenn Sie eine Fehlermeldung erhalten oder ein anderer Fehler auftritt, ist es schwieriger, herauszufinden, was Sie korrigieren müssen, wenn Sie über viele Schachtelungsebenen verfügen.

Bei komplexen Bereitstellungen ist es manchmal sinnvoll, Bereitstellungspipelines zu verwenden, um mehrere Vorlagen bereitzustellen, anstatt eine einzelne Vorlage zu erstellen, die nur Schachtelungen verwendet. In einem zukünftigen Microsoft Learn-Modul erfahren Sie mehr über Bereitstellungspipelines.

Auswählen passender Dateinamen

Achten Sie darauf, für jedes Modul einen aussagekräftigen Dateinamen zu verwenden. Der Dateiname wird effektiv zum Bezeichner für das Modul. Es ist wichtig, dass Ihre Kollegen durch einen Blick auf den Dateinamen sofort den Zweck des Moduls verstehen können.

Verwenden des Moduls in einer Bicep-Vorlage

Sie verwenden ein Modul in einer Bicep-Vorlage, indem Sie das Schlüsselwort module wie folgt verwenden:

module appModule 'modules/app.bicep' = {
  name: 'myApp'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

Eine Moduldefinition umfasst die folgenden Komponenten:

  • das Schlüsselwort module.
  • Ein symbolischer Name, z. B. appModule. Dieser Name wird in dieser Bicep-Datei verwendet, wenn Sie auf das Modul verweisen möchten. Der symbolische Name wird in Azure nie angezeigt.
  • Der Modulpfad, z. B. modules/app.bicep. Dies ist in der Regel der Pfad zu einer Bicep-Datei in Ihrem lokalen Dateisystem. In einem zukünftigen Microsoft Learn-Modul erfahren Sie, wie Sie Module mithilfe von Registrierungen und Vorlagenspezifikationen freigeben können, die über eigene Modulpfadformate verfügen.

    Tipp

    Sie können auch eine JSON-ARM-Vorlage (Azure Resource Manager) als Modul verwenden. Diese Option kann hilfreich sein, wenn Sie über eine Reihe von Vorlagen verfügen, die Sie noch nicht zu Bicep migriert haben.

  • Die name-Eigenschaft, die den Namen der Bereitstellung angibt. Weitere Informationen zu Bereitstellungen finden Sie im nächsten Abschnitt.
  • Die params-Eigenschaft zum Angeben von Werten für die Parameter, die das Modul erwartet. Weitere Informationen zu Modulparametern finden Sie in der nächsten Lerneinheit.

Funktionsweise von Modulen

Das Verständnis der Funktionsweise von Modulen ist für deren Verwendung nicht erforderlich, aber es kann Ihnen helfen, Probleme mit Ihren Bereitstellungen zu untersuchen oder unerwartetes Verhalten zu erklären.

Bereitstellungen

In Azure ist eine Bereitstellung eine spezielle Ressource, die einen Bereitstellungsvorgang darstellt. Bereitstellungen sind Azure-Ressourcen mit dem Ressourcentyp Microsoft.Resources/deployments. Wenn Sie eine Bicep-Bereitstellung übermitteln, erstellen oder aktualisieren Sie eine Bereitstellungsressource. Ebenso erstellt das Portal beim Erstellen von Ressourcen im Azure-Portal eine Bereitstellungsressource für Sie.

Allerdings werden nicht bei allen Änderungen an Azure-Ressourcen Bereitstellungen erstellt oder verwendet. Wenn Sie beispielsweise das Azure-Portal verwenden, um eine vorhandene Ressource zu ändern, wird in der Regel keine Bereitstellung erstellt, um die Änderung vorzunehmen. Wenn Sie Tools von Drittanbietern wie Terraform verwenden, um Ihre Ressourcen bereitzustellen oder zu konfigurieren, werden möglicherweise keine Bereitstellungen erstellt.

Wenn Sie eine Bicep-Datei mithilfe der Azure CLI oder mit Azure PowerShell bereitstellen, können Sie optional den Namen der Bereitstellung angeben. Wenn Sie keinen Namen angeben, erstellt die Azure CLI oder Azure PowerShell automatisch einen Bereitstellungsnamen basierend auf dem Dateinamen der Vorlage. Wenn Sie beispielsweise eine Datei namens main.bicep bereitstellen, lautet der Standardbereitstellungsname main.

Wenn Sie Module verwenden, erstellt Bicep eine separate Bereitstellung für jedes Modul. Die name-Eigenschaft, die Sie für das Modul angeben, wird zum Namen der Bereitstellung. Wenn Sie eine Bicep-Datei bereitstellen, die ein Modul enthält, werden mehrere Bereitstellungsressourcen erstellt: eine für die übergeordnete Vorlage und eine für jedes Modul.

Angenommen, Sie erstellen eine Bicep-Datei namens main.bicep. Dabei wird ein Modul mit dem Namen myApp definiert. Wenn Sie die Datei main.bicep bereitstellen, werden zwei Bereitstellungen erstellt. Die erste trägt den Namen main, und es wird eine weitere Bereitstellung namens myApp erstellt, die Ihre Anwendungsressourcen enthält.

Diagram that shows two Bicep files, each of which has a separate deployment name.

Sie können die Details der Bereitstellungsressourcen auflisten und anzeigen, um den Status Ihrer Bicep-Bereitstellungen zu überwachen oder den Verlauf der Bereitstellungen anzuzeigen. Wenn Sie jedoch den gleichen Namen für eine Bereitstellung wiederverwenden, überschreibt Azure die letzte Bereitstellung mit dem gleichen Namen. Wenn Sie den Bereitstellungsverlauf verwalten müssen, stellen Sie sicher, dass Sie für jede Bereitstellung einen eindeutigen Namen verwenden. Sie können das Datum und die Uhrzeit der Bereitstellung in den Namen aufnehmen, damit dieser eindeutig ist.

Generierte JSON-ARM-Vorlagen

Wenn Sie eine Bicep-Datei bereitstellen, konvertiert Bicep sie in eine JSON-ARM-Vorlage. Diese Konvertierung wird auch als Transpilieren bezeichnet. Die Module, die von der Vorlage verwendet werden, werden in die JSON-Datei eingebettet. Unabhängig davon, wie viele Module Sie in Ihre Vorlage einschließen, wird nur eine einzelne JSON-Datei erstellt.

In dem im vorherigen Abschnitt erläuterten Beispiel generiert Bicep eine einzelne JSON-Datei, obwohl ursprünglich zwei Bicep-Dateien vorhanden waren.

Diagram that shows two Bicep files, which are transpiled into a single JSON file.