Freigeben über


Empfehlungen für die Verwendung der Infrastruktur als Code

Gilt für diese Checkliste für azure Well-Architected Framework Operational Excellence:

OE:05 Bereiten Sie Ressourcen und ihre Konfigurationen mithilfe eines standardisierten IaC-Ansatzes vor. Wie anderer Code entwerfen Sie IaC mit konsistenten Stilen, geeigneter Modularisierung und Qualitätssicherung. Bevorzugen Sie nach Möglichkeit einen deklarativen Ansatz.

In diesem Handbuch werden die Empfehlungen für die Verwendung von IaC als Standard für Ihre Infrastrukturbereitstellungen beschrieben. Mithilfe von IaC können Sie Ihre Infrastrukturbereitstellungen und -verwaltung in Ihre vorhandenen Softwareentwicklungsmethoden integrieren. Sie stellt eine konsistente, standardbasierte Methodik für die Entwicklung und Bereitstellung für alle Komponenten Ihrer Workload bereit. Wenn Sie sich auf manuelle Bereitstellungen verlassen, riskieren Sie Ihre Arbeitslast durch inkonsistente Konfigurationen und potenziell unsicheren Entwurf.

Definitionen

Begriff Definition
Deklarative Tools Eine Kategorie von Tools, die den Endzustand einer Bereitstellung definieren und vom System abhängig sind, um zu bestimmen, wie die Ressourcen bereitgestellt werden, die dem definierten Endstatus entsprechen.
Unveränderliche Infrastruktur Eine Infrastruktur, die durch neue Infrastruktur ersetzt werden soll, die die neue Konfiguration mit jeder Bereitstellung ausführt. Sie darf nicht geändert werden.
Imperative Tools Eine Kategorie von Tools, die die Ausführungsschritte auflisten, die zum gewünschten Endzustand führen.
Modul Eine Einheit der Abstraktion zum Dividieren von Ressourcengruppen, um komplexe Bereitstellungen zu vereinfachen.
Veränderbare Infrastruktur Eine Infrastruktur, die geändert werden soll. Bereitstellungen ändern die Konfiguration der Infrastruktur, anstatt sie durch neue Infrastruktur zu ersetzen.

Wichtige Entwurfsstrategien

Wie in der Lieferkette und der Standardisierung von Tools und Prozessen erläutert, sollten Sie nur über Code eine strenge Richtlinie für die Bereitstellung von Infrastrukturänderungen (einschließlich Konfigurationsänderungen) haben. Sie sollten IaC über Ihre kontinuierlichen Integrations- und Endlosbereitstellungspipelinen (CI/CD) bereitstellen. Durch die Einführung dieser Richtlinien wird Konsistenz bei Prozessen für alle IaC-Bereitstellungen erzwungen, das Risiko einer Konfigurationsabweichung in Ihren Umgebungen minimiert und die Infrastrukturkonsistenz in Ihren Umgebungen sichergestellt. Darüber hinaus sollten Sie Ihre IaC-Entwicklungs- und Bereitstellungstools und -prozesse in einem Stilhandbuch standardisieren. Empfehlungen für Ihren Stilleitfaden umfassen:

Deklaratives vor imperativen Tools bevorzugen

Deklarative Tools und die zugehörigen Dateien sind eine bessere Allgemeine Wahl für die Bereitstellung und Verwaltung von IaC als imperative Tools. Deklarative Tools verwenden eine einfachere Syntax für ihre Definitionsdateien, wobei nur der gewünschte Zustand der Umgebung definiert wird, nachdem die Bereitstellung abgeschlossen ist. Imperative Tools hängen davon ab, dass Sie die schritte definieren, die erforderlich sind, um zum gewünschten Endzustand zu gelangen, sodass die Dateien viel komplexer sein können als deklarative Dateien. Deklarative Definitionsdateien tragen auch dazu bei, die technische Verschuldung der Aufrechterhaltung von imperativem Code wie Bereitstellungsskripts zu verringern, die im Laufe der Zeit anfallen können.

Verwenden von systemeigenen und branchenüblichen Tools

Verwenden Sie die nativen Tools Ihrer Cloudplattform und andere branchenübliche Tools, die nativ in die Plattform integriert werden. Ihre Cloudplattform bietet Tools, um die Bereitstellung von IaC einfach und unkompliziert zu gestalten. Nutzen Sie diese Tools und andere Drittanbietertools, die native Integration haben, z. B. Terraform, anstatt Eigene Lösungen zu entwickeln. Systemeigene Tools werden von der Plattform unterstützt und enthalten integrierte Funktionen für die meisten Ihrer Anforderungen. Sie werden kontinuierlich vom Plattformanbieter aktualisiert und machen sie nützlicher, wenn sich die Plattform weiterentwickelt.

Hinweis

Denken Sie daran, dass Entwickler von Cloudanbietern und Drittanbietern ihre Tools und APIs aktualisieren, das Risiko unerwarteter Probleme bei verwendung der neuesten Version in Ihrer Workload ausführen können. Stellen Sie sicher, dass Sie neue Versionen von Tools und APIs gründlich testen, bevor Sie sie übernehmen. Vermeiden Sie auch die Verwendung des Flags "neueste" beim Aufrufen eines Tools oder einer API in Ihrem Bereitstellungscode. Achten Sie darauf, die neueste bekannte gute Version für Ihre Workload aufzurufen.

Verwenden des richtigen Tools für die Aufgabe

Verwenden Sie die richtigen Tools für bestimmte Aufgaben und Infrastrukturtypen. Mehrere Aufgaben, die über Bereitstellungen hinausgehen, sind an einem Infrastrukturlebenszyklus beteiligt. Die Konfiguration muss beispielsweise angewendet und verwaltet werden, und das Tool, das Sie für Skriptbereitstellungen wie Bicep verwenden, ist möglicherweise nicht das beste Tool für jeden Verwaltungsvorgang.

Ebenso erfordert das Anwenden der gewünschten Zustandskonfiguration (DSC) für verschiedene Infrastrukturtypen möglicherweise unterschiedliche Tools. Beispielsweise gibt es spezielle Tools wie Ansible für die Verwaltung von DSC für VMs, während Flux ein gutes Werkzeug für die Verwaltung von DSC auf Kubernetes-Clustern ist. Plattform as a Service (PaaS)-Dienste bieten möglicherweise verschiedene Tools für die Konfigurationsverwaltung (z. B. Azure-App Konfiguration), die über IaC verarbeitet werden können. Software as a Service (SaaS)-Dienste sind möglicherweise eingeschränkter, da sie stärker von der Plattform gesteuert werden.

Überlegen Sie sich alle Aufgaben und Arten von Infrastruktur, die für Ihre IaC-Praktiken vorgesehen sind, und standardisieren Sie tools, die sie erledigen müssen, und können in Ihre Entwicklungs- und Verwaltungspraktiken integriert werden.

Unterstützen mehrerer Umgebungen

Ihre Skripts und Vorlagen sollten flexibel genug sein, um eine Vielzahl von Umgebungen problemlos bereitzustellen. Verwenden Sie Parameter, Variablen und Konfigurationsdateien, um einen Standardsatz von Ressourcen bereitzustellen, die geändert werden können, um eine beliebige Umgebung im Code-Heraufstufungsstapel bereitzustellen. Abstrakte Einstellungen wie Ressourcengröße, Anzahl, Name, Speicherorte für die Bereitstellung und einige Konfigurationseinstellungen. Achten Sie jedoch darauf, nicht zu viel abstrahieren zu müssen. Es gibt Einstellungen, die mit einem Parameter oder einer Variablen abstrahiert werden können, die sich möglicherweise nicht im Verlauf des Workloadlebenszyklus ändern oder sich selten ändern. Sie sollten nicht abstrahiert werden.

Hinweis

Vermeiden Sie die Verwendung unterschiedlicher IaC-Ressourcen für verschiedene Umgebungen. Sie sollten beispielsweise keine unterschiedlichen Terraform-Dateien für Produktions- und Testumgebungen haben. Alle Umgebungen sollten eine Datei verwenden. Sie können diese Datei bei Bedarf in verschiedenen Umgebungen bearbeiten.

Verwenden Des richtigen Gleichgewichts beim Kapseln der Funktionalität

Strategisieren und standardisieren Sie die Verwendung von Modulen. Wie Parameter und Variablen können Module Ihre Infrastrukturbereitstellungen wiederholbar machen. Denken Sie jedoch darüber nach, wie Sie sie verwenden. Eine standardisierte Abstraktionsstrategie trägt dazu bei, dass Module erstellt werden, um bestimmte, vereinbarte Ziele zu erfüllen. Verwenden Sie Module, um komplexe Konfigurationen oder Kombinationen von Ressourcen zu kapseln. Vermeiden Sie Module, wenn Sie nur die Standardkonfiguration der Ressource verwenden. Achten Sie außerdem darauf, neue Module zu entwickeln. Verwenden Sie verwaltete Open-Source-Module bei Bedarf in z. B. nicht sensiblen Szenarien.

Manuelle Schritte im Dokument

Dokumentieren Sie Standards für manuelle Schritte. Möglicherweise gibt es Schritte im Zusammenhang mit der Bereitstellung und Wartung der Infrastruktur, die speziell für Ihre Umgebung gelten und manuelle Eingriffe erfordern. Stellen Sie sicher, dass diese Schritte so weit wie möglich minimiert und klar dokumentiert sind. Standardieren Sie in Ihrem Stilleitfaden und Standardbetriebsverfahren manuelle Schritte, um sicherzustellen, dass Aufgaben sicher und konsistent ausgeführt werden.

Dokumentieren Sie Standards zum Behandeln verwaister Ressourcen. Je nach den Tools, die Sie für die Konfigurationsverwaltung und deren Einschränkungen verwenden, kann es vorkommen, dass eine bestimmte Ressource von Ihrer Workload nicht mehr benötigt wird und Ihre IaC-Tools die Ressource nicht automatisch entfernen können. Angenommen, Sie wechseln von VMs zu einem PaaS-Dienst für einige Funktionen, und die IaC-Tools haben keine Logik zum Entfernen der eingestellten Ressourcen. Diese Ressourcen können verwaist werden, wenn sich das Workloadteam nicht daran erinnert, sie manuell zu löschen. Um diese Szenarien zu behandeln, standardisieren Sie eine Strategie, um nach verwaisten Ressourcen zu suchen und sie zu löschen. Außerdem müssen Sie überlegen, wie Sie sicherstellen können, dass Ihre Vorlagen auf dem neuesten Stand sind. Untersuchen Sie die Einschränkungen Ihrer IaC-Tools, um zu verstehen, was Sie in diesen Situationen möglicherweise planen müssen.

Beachten Sie die folgenden Empfehlungen, die für die Verwendung von IaC für Ihre Workload gelten.

Verwenden eines mehrschichtigen Ansatzes für IaC-Pipelines

Verwenden Sie einen mehrschichtigen Ansatz, um Ihre IaC-Pipelines innerhalb des Workloadstapels auszurichten. Die Aufteilung Ihrer IaC-Pipelines in Ebenen hilft Ihnen bei der Verwaltung komplexer Umgebungen. Die Bereitstellung von Dutzenden oder Hunderten von Ressourcen als monolithisches Paket ist ineffizient und kann zu zahlreichen Problemen führen, wie z. B. nicht funktionsfähige Abhängigkeiten. Die Verwendung mehrerer Pipelines, die auf Ebenen ausgerichtet sind, die aus Ressourcen bestehen, deren Bereitstellungszyklen oder Faktoren wie Funktionalität eng übereinstimmen, erleichtert die Verwaltung von IaC-Bereitstellungen.

Die Kerninfrastruktur wie Netzwerkressourcen benötigt selten komplexere Änderungen als Konfigurationsupdates, sodass diese Ressourcen eine IaC-Pipeline mit geringem Touchzugriff bilden sollten. Je nach Komplexität Ihrer Arbeitsauslastung verfügen Sie möglicherweise über eine oder mehrere IaC-Pipelines mit mittlerer Toucheingabe und High-Touch-IaC-Pipelines . Die Verwendung eines Kubernetes-basierten Anwendungsstapels als Beispiel kann eine mittlere Touchebene aus den Clustern, Speicherressourcen und Datenbankdiensten bestehen. High-Touch-Layer würden aus den Anwendungscontainern bestehen, die sehr häufig in einem kontinuierlichen Zustellungsmodus aktualisiert werden.

Behandeln von IaC- und Anwendungscode

Wenn Sie Ihre IaC-Artefakte genauso behandeln wie Ihre Anwendungscode-Artefakte, können Sie bei der Verwaltung des Codes in allen Pipelines die gleiche Sorgfalt walten lassen. Darüber hinaus sollten IaC-Entwicklungs- und Bereitstellungspraktiken Anwendungspraktiken spiegeln. Standards für Versionssteuerung, Verzweigung, Codeförderung und Qualität sollten alle identisch sein. Erwägen Sie außerdem, Ihre IaC-Ressourcen zusammen mit Ihren Anwendungscoderessourcen zu verbinden. Dadurch wird sichergestellt, dass dieselben Prozesse bei jeder Bereitstellung befolgt werden, und Sie können Probleme wie versehentliche Bereitstellungsinfrastrukturen vor dem erforderlichen Anwendungscode vermeiden oder umgekehrt.

Zentrale Standards und Ressourcen verwenden

Arbeiten Sie mit anderen Teams in Ihrer Organisation zusammen, um Standardisierung und Wiederverwendbarkeit zu ermöglichen. Große Organisationen können manchmal über mehrere Teams verfügen, die Workloads entwickeln und unterstützen. Die Zusammenarbeit in allen Teams hilft Ihnen, Bibliotheken, Vorlagen und Module wiederzuverwenden, um Effizienz und Konsistenz in Arbeitsauslastungsumgebungen zu erzielen. Ebenso sollten IaC-Tools in der gesamten Organisation standardisiert werden, soweit dies praktisch ist.

Erzwingen der Sicherheit im IaC-Code

Wenden Sie das Prinzip "Sicherheit als Code" an, um sicherzustellen, dass die Sicherheit Teil der Bereitstellungspipeline ist. Schließen Sie die Überprüfung von Sicherheitsrisiken und die Konfiguration im Rahmen des IaC-Entwicklungsprozesses ein. Scannen Sie Ihre IaC-Repositorys nach Schlüsseln und geheimen Schlüsseln, die verfügbar gemacht werden. Ein Vorteil der Verwendung von IaC ist, dass sicherheitsorientierte Teammitglieder Code vor der Bereitstellung überprüfen können, um sicherzustellen, dass die konfiguration, die für die Freigabe durch Sicherheit genehmigt wird, tatsächlich das ist, was für die Produktion bereitgestellt wird. Ausführliche Anleitungen finden Sie unter Empfehlungen zum Sichern eines Entwicklungslebenszyklus.

Testen Sie Routine- und Nicht-Routineaktivitäten. Testen Sie Bereitstellungen, Konfigurationsupdates und Wiederherstellungsprozesse, einschließlich Bereitstellungsrollbackprozesse.

Übernehmen eines unveränderlichen Bereitstellungsmodells

Die Wahl zwischen der Bereitstellung von mutablen und unveränderlichen Infrastrukturen hängt von einigen Faktoren ab. Wenn Ihre Workload geschäftskritisch ist, empfiehlt es sich, unveränderliche Infrastruktur zu verwenden. Ebenso kann die Verwendung unveränderlicher Infrastruktur sinnvoll sein, wenn Sie über ein ausgereiftes Infrastrukturdesign verfügen, das auf Bereitstellungsstempeln basiert, da Sie Anwendungscode und neue Infrastruktur zuverlässig bereitstellen können. Umgekehrt kann die Verwendung der veränderbaren Infrastruktur eine bessere Wahl sein, wenn Ihre sicheren Bereitstellungspraktiken diktieren, dass der Rollout mit Bereitstellungen bei entbedenklichen Bereitstellungsproblemen die bevorzugte Option ist. In diesem Fall würden Sie die Infrastruktur wahrscheinlich aktualisieren.

Überlegungen

Höhere Spezialisierung: In einigen Fällen bietet die Einführung neuer Sprachen in Ihrem Workload-Team eine Lernkurve, und die Anbietereinbindung kann dies zu einer schlechten Wahl machen. Die Schulung Ihrer Teammitglieder und die Analyse des richtigen Tools basierend auf dem Toolunterstützung Ihrer Cloudanbieter ist erforderlich.

Erhöhter Wartungsaufwand: Die Wartung von Codebasis und Tools ist erforderlich, um Ihre IaC-Implementierung aktuell und sicher zu halten. Verfolgen Sie Ihre technischen Schulden richtig und fördern Sie eine Kultur, in der die Schuldenreduzierung belohnt wird.

Erhöhte Zeit für Konfigurationsänderungen: Die Bereitstellung der Infrastruktur mithilfe von Befehlszeilenanweisungen oder direkt aus einem Portal erfordert keine Codierungszeit und/oder Testartefakte. Minimieren Sie die Bereitstellungszeit, indem Sie empfohlene Methoden wie Codeüberprüfungen und Qualitätssicherungsmethoden ausführen.

Erhöhte Komplexität der Modularisierung: Die Verwendung von mehr Modulen und Parametrisierung erhöht die Zeit, die zum Debuggen und Dokumentieren des Systems benötigt wird, und fügt eine Abstraktionsebene hinzu. Ausgleichen der Modularisierung, um Komplexität zu reduzieren und Überbau zu vermeiden.

Azure-Erleichterung

Azure Resource Manager-Vorlagen (ARM-Vorlagen) und Bicep sind azure-native Tools für die Bereitstellung der Infrastruktur mithilfe deklarativer Syntax. ARM-Vorlagen werden in JSON geschrieben, während Bicep eine domänenspezifische Sprache ist. Beide können problemlos in Azure-Pipelines oder GitHub Actions CI/CD-Pipelines integriert werden.

Terraform ist ein weiteres deklaratives IaC-Tool, das in Azure vollständig unterstützt wird. Sie kann zum Bereitstellen und Verwalten der Infrastruktur verwendet werden und kann in Ihre CI/CD-Pipeline integriert werden.

Sie können Microsoft Defender für Cloud verwenden, um Fehlkonfigurationen in IaC zu ermitteln.

Beispiel

Sehen Sie sich die Azure Virtual Desktop Landing Zone Accelerator-Architektur und die zugehörige Referenzimplementierung an, um ein Beispiel für eine Virtual Desktop-Implementierung zu erhalten, die über bereitgestellte Ressourcen-Manager-, Bicep- oder Terraform-Dateien bereitgestellt werden kann.

Checkliste für operative Exzellenz

Lesen Sie den vollständigen Satz von Empfehlungen.