Handbuch Infrastructure as Code, 2nd Edition

Book description

IaC ist ein Ansatz, bei dem IT-Infrastrukturleistungen wie Rechenleistung, Speicherplatz und Netzwerkressourcen mithilfe von maschinenlesbarem Code bereitgestellt und gemanagt werden.

In diesem Praxisbuch zeigt Ihnen Kief Morris von ThoughtWorks, wie Sie die von DevOps-Teams entwickelte Prinzipien, Praktiken und Patterns effektiv verwenden, um in der Cloud sicher und flexibel Infrastruktur zu managen. Es vermittelt, wie nicht nur Server, sondern auch komplexe Container-Plattformen (Stacks) aufgesetzt werden. Sie erfahren, wie sie mithilfe von Cloud- und Automatisierungstechnologien Änderungen einfach, sicher und schnell vornehmen. Sie lernen, wie Sie gewissermaßen alles als Code definieren und setzen Praktiken aus dem Softwaredesign ein, um ein System aus kleinen, lose gekoppelten Elementen aufzubauen.

Zielgruppen sind Mitarbeiterinnen und Mitarbeiter in der Systemadministration, Infrastruktur-Entwicklung, Softwareentwicklung und Architektur.

Table of contents

  1. Cover
  2. Titel
  3. Impressum
  4. Inhalt
  5. Vorwort
    1. Warum ich dieses Buch geschrieben habe
    2. Was in dieser Auflage neu und anders ist
    3. Was kommt als Nächstes?
    4. Was dieses Buch ist und was es nicht ist
    5. Etwas Geschichte zu Infrastructure as Code
    6. Für wen dieses Buch gedacht ist
    7. Prinzipien, Praktiken und Patterns
    8. Die ShopSpinner-Beispiele
    9. In diesem Buch verwendete Konventionen
    10. Danksagung
  6. Teil I Grundlagen
    1. 1 Was ist Infrastructure as Code?
    2. Aus der Eisenzeit in das Cloud-Zeitalter
    3. Infrastructure as Code
    4. Vorteile von Infrastructure as Code
    5. Infrastructure as Code nutzen, um für Änderungen zu optimieren
    6. Einwand »Wir haben gar nicht so häufig Änderungen, sodass sich Automation nicht lohnt«
    7. Einwand »Wir sollten erst bauen und danach automatisieren«
    8. Einwand »Wir müssen zwischen Geschwindigkeit und Qualität entscheiden«
    9. Die Four Key Metrics
    10. Drei zentrale Praktiken für Infrastructure as Code
    11. Zentrale Praktik: Definieren Sie alles als Code
    12. Zentrale Praktik: Kontinuierliches Testen und die gesamte aktuelle Arbeit ausliefern
    13. Zentrale Praktik: Kleine einfache Elemente bauen, die Sie unabhängig voneinander ändern können
    14. Zusammenfassung
    15. 2 Prinzipien der Infrastruktur im Cloud-Zeitalter
    16. Prinzip: Gehen Sie davon aus, dass Systeme unzuverlässig sind
    17. Prinzip: Alles reproduzierbar machen
    18. Fallstrick: Snowflake-Systeme
    19. Prinzip: Erstellen Sie wegwerfbare Elemente
    20. Prinzip: Variationen minimieren
    21. Konfigurationsdrift
    22. Prinzip: Stellen Sie sicher, dass Sie jeden Prozess wiederholen können
    23. Zusammenfassung
    24. 3 Infrastruktur-Plattformen
    25. Die Elemente eines Infrastruktur-Systems
    26. Dynamische Infrastruktur-Plattform
    27. Infrastruktur-Ressourcen
    28. Computing-Ressourcen
    29. Storage-Ressourcen
    30. Networking-Ressourcen
    31. Zusammenfassung
    32. 4 Zentrale Praktik: Definieren Sie alles als Code
    33. Warum Sie Ihre Infrastruktur als Code definieren sollten
    34. Was Sie als Code definieren können
    35. Wählen Sie Werkzeuge mit externalisierter Konfiguration aus
    36. Managen Sie Ihren Code in einer Versionsverwaltung
    37. Programmiersprachen für Infrastruktur
    38. Infrastruktur-Scripting
    39. Deklarative Infrastruktur-Sprachen
    40. Programmierbare, imperative Infrastruktur-Sprachen
    41. Deklarative und imperative Sprachen für Infrastruktur
    42. Domänenspezifische Infrastruktur-Sprachen
    43. Allgemein nutzbare Sprachen und DSLs für die Infrastruktur
    44. Implementierungs-Prinzipien beim Definieren von Infrastructure as Code
    45. Halten Sie deklarativen und imperativen Code voneinander getrennt
    46. Behandeln Sie Infrastruktur-Code wie echten Code
    47. Zusammenfassung
  7. Teil II Arbeiten mit Infrastruktur-Stacks
    1. 5 Infrastruktur-Stacks als Code bauen
    2. Was ist ein Infrastruktur-Stack?
    3. Stack-Code
    4. Stack-Instanzen
    5. Server in einem Stack konfigurieren
    6. Low-Level-Infrastruktur-Sprachen
    7. High-Level-Infrastruktur-Sprachen
    8. Patterns und Antipatterns für das Strukturieren von Stacks
    9. Antipattern: Monolithic Stack
    10. Pattern: Application Group Stack
    11. Pattern: Service Stack
    12. Pattern: Micro Stack
    13. Zusammenfassung
    14. 6 Umgebungen mit Stacks bauen
    15. Worum es bei Umgebungen geht
    16. Auslieferungsumgebungen
    17. Mehrere Produktivumgebungen
    18. Umgebungen, Konsistenz und Konfiguration
    19. Patterns zum Bauen von Umgebungen
    20. Antipattern: Multiple-Enviroment Stack
    21. Antipattern: Copy-Paste Environments
    22. Pattern: Reusable Stack
    23. Umgebungen mit mehreren Stacks erstellen
    24. Zusammenfassung
    25. 7 Stack-Instanzen konfigurieren
    26. Eindeutige Kennungen durch Stack-Parameter erstellen
    27. Beispiel-Stack-Parameter
    28. Patterns zum Konfigurieren von Stacks
    29. Antipattern: Manual Stack Parameters
    30. Pattern: Stack Environment Variables
    31. Pattern: Scripted Parameters
    32. Pattern: Stack Configuration Files
    33. Pattern: Wrapper-Stack
    34. Pattern: Pipeline Stack Parameters
    35. Pattern: Stack Parameter Registry
    36. Konfigurations-Registry
    37. Eine Konfigurations-Registry implementieren
    38. Eine oder mehrere Konfigurations-Registries
    39. Secrets als Parameter nutzen
    40. Secrets verschlüsseln
    41. Secretlose Autorisierung
    42. Secrets zur Laufzeit injizieren
    43. Wegwerf-Secrets
    44. Zusammenfassung
    45. 8 Zentrale Praktik: Kontinuierlich testen und ausliefern
    46. Warum Infrastruktur-Code kontinuierlich testen?
    47. Was kontinuierliches Testen bedeutet
    48. Was sollten wir bei der Infrastruktur testen?
    49. Herausforderungen beim Testen von Infrastruktur-Code
    50. Herausforderung: Tests für deklarativen Code haben häufig nur einen geringen Wert
    51. Herausforderung: Das Testen von Infrastruktur-Code ist langsam
    52. Herausforderung: Abhängigkeiten verkomplizieren die Test-Infrastruktur
    53. Progressives Testen
    54. Testpyramide
    55. Schweizer-Käse-Testmodell
    56. Infrastruktur-Delivery-Pipelines
    57. Pipeline-Stages
    58. Scope von Komponenten, die in einer Stage getestet werden
    59. Scope von Abhängigkeiten für eine Stage
    60. Plattformelemente, die für eine Stage erforderlich sind
    61. Software und Services für die Delivery-Pipeline
    62. Testen in der Produktivumgebung
    63. Was Sie außerhalb der Produktivumgebung nicht nachbauen können
    64. Die Risiken beim Testen in der Produktivumgebung managen
    65. Zusammenfassung
    66. 9 Infrastruktur-Stacks testen
    67. Beispiel-Infrastruktur
    68. Der Beispiel-Stack
    69. Pipeline für den Beispiel-Stack
    70. Offline-Test-Stages für Stacks
    71. Syntax-Checks
    72. Statische Offline-Code-Analyse
    73. Statische Code-Analyse per API
    74. Testen mit einer Mock-API
    75. Online-Test-Stages für Stacks
    76. Preview: Prüfen, welche Änderungen vorgenommen werden
    77. Verifikation: Aussagen über Infrastruktur-Ressourcen treffen
    78. Ergebnisse: Prüfen, dass die Infrastruktur korrekt arbeitet
    79. Test-Fixtures für den Umgang mit Abhängigkeiten verwenden
    80. Test-Doubles für Upstream-Abhängigkeiten
    81. Test-Fixtures für Downstream-Abhängigkeiten
    82. Komponenten refaktorieren, um sie isolieren zu können
    83. Lebenszyklus-Patterns für Testinstanzen von Stacks
    84. Pattern: Persistent Test Stack
    85. Pattern: Ephemeral Test Stack
    86. Antipattern: Dual Persistent and Ephemeral Stack Stages
    87. Pattern: Periodic Stack Rebuild
    88. Pattern: Continuous Stack Reset
    89. Test-Orchestrierung
    90. Unterstützen Sie lokales Testen
    91. Vermeiden Sie eine enge Kopplung mit Pipeline-Tools
    92. Tools zur Test-Orchestrierung
    93. Zusammenfassung
  8. Teil III Mit Servern und anderen Anwendungs-Laufzeitplattformen arbeiten
    1. 10 Anwendungs-Laufzeitumgebungen
    2. Cloud-native und anwendungsgesteuerte Infrastruktur
    3. Ziele für eine Anwendungs-Laufzeitumgebung
    4. Deploybare Teile einer Anwendung
    5. Deployment-Pakete
    6. Anwendungen auf Server deployen
    7. Anwendungen als Container verpacken
    8. Anwendungen auf Server-Cluster deployen
    9. Anwendungen auf Anwendungs-Cluster deployen
    10. Pakete zum Deployen von Anwendungen auf Cluster
    11. FaaS-Serverless-Anwendungen deployen
    12. Anwendungsdaten
    13. Datenschemata und -strukturen
    14. Cloud-native Storage-Infrastruktur für Anwendungen
    15. Anwendungs-Connectivity
    16. Service Discovery
    17. Zusammenfassung
    18. 11 Server als Code bauen
    19. Was gibt es auf einem Server
    20. Woher Dinge kommen
    21. Server-Konfigurationscode
    22. Code-Module für die Serverkonfiguration
    23. Code-Module für die Serverkonfiguration designen
    24. Server-Code versionieren und weitergeben
    25. Serverrollen
    26. Server-Code testen
    27. Server-Code progressiv testen
    28. Was Sie bei Server-Code testen
    29. Wie Sie Server-Code testen
    30. Eine neue Server-Instanz erstellen
    31. Eine neue Server-Instanz per Hand erstellen
    32. Einen Server mit einem Skript erstellen
    33. Einen Server mit einem Stack-Management-Tool erstellen
    34. Die Plattform für das automatische Erstellen von Servern konfigurieren
    35. Einen Server mit einem Network-Provisioning-Tool erstellen
    36. Server vorbereiten
    37. Hot-Cloning eines Servers
    38. Einen Server-Snapshot verwenden
    39. Ein sauberes Server-Image erstellen
    40. Eine neue Server-Instanz konfigurieren
    41. Eine Server-Instanz ausbacken
    42. Server-Images backen
    43. Backen und Ausbacken kombinieren
    44. Serverkonfiguration beim Erstellen eines Servers anwenden
    45. Zusammenfassung
    46. 12 Änderungen an Servern managen
    47. Patterns zum Changemanagement: Wann Änderungen angewendet werden
    48. Antipattern: Apply on Change
    49. Pattern: Continuous Configuration Synchronization
    50. Pattern: Immutable Server
    51. Wie Sie Serverkonfigurationscode anwenden
    52. Pattern: Push Server Configuration
    53. Pattern: Pull Server Configuration
    54. Andere Ereignisse im Lebenszyklus eines Servers
    55. Eine Server-Instanz stoppen und erneut starten
    56. Eine Server-Instanz ersetzen
    57. Einen ausgefallenen Server wiederherstellen
    58. Zusammenfassung
    59. 13 Server-Images als Code
    60. Ein Server-Image bauen
    61. Warum ein Server-Image bauen?
    62. Wie Sie ein Server-Image bauen
    63. Tools zum Bauen von Server-Images
    64. Online Image Building
    65. Offline Image Building
    66. Ursprungsinhalte für ein Server-Image
    67. Aus einem Stock-Server-Image bauen
    68. Ein Server-Image von Grund auf bauen
    69. Herkunft eines Server-Image und seiner Inhalte
    70. Ein Server-Image ändern
    71. Ein frisches Image aufwärmen oder backen
    72. Ein Server-Image versionieren
    73. Server-Instanzen aktualisieren, wenn sich ein Image ändert
    74. Ein Server-Image in mehreren Teams verwenden
    75. Umgang mit größeren Änderungen an einem Image
    76. Eine Pipeline zum Testen und Ausliefern eines Server-Image verwenden
    77. Build-Stage für ein Server-Image
    78. Test-Stage für ein Server-Image
    79. Delivery-Stages für ein Server-Image
    80. Mehrere Server-Images verwenden
    81. Server-Images für unterschiedliche Infrastruktur-Plattformen
    82. Server-Images für unterschiedliche Betriebssysteme
    83. Server-Images für unterschiedliche Hardware-Architekturen
    84. Server-Images für unterschiedliche Rollen
    85. Server-Images in Schichten erstellen
    86. Code für mehrere Server-Images verwenden
    87. Zusammenfassung
    88. 14 Cluster als Code bauen
    89. Lösungen für Anwendungs-Cluster
    90. Cluster as a Service
    91. Packaged Cluster Distribution
    92. Stack-Topologien für Anwendungs-Cluster
    93. Monolithischer Stack, der Cluster as a Service nutzt
    94. Monolithischer Stack für eine Packaged-Cluster-Lösung
    95. Pipeline für einen monolithischen Anwendungs-Cluster-Stack
    96. Beispiel für mehrere Stacks in einem Cluster
    97. Strategien zur gemeinsamen Verwendung von Anwendungs-Clustern
    98. Ein großes Cluster für alles
    99. Getrennte Cluster für Auslieferungs-Stages
    100. Cluster für die Governance
    101. Cluster für Teams
    102. Service Mesh
    103. Infrastruktur für FaaS Serverless
    104. Zusammenfassung
  9. Teil IV Infrastruktur designen
    1. 15 Zentrale Praktik: Kleine, einfache Elemente
    2. Für Modularität designen
    3. Eigenschaften gut designter Komponenten
    4. Regeln für das Designen von Komponenten
    5. Design-Entscheidungen durch Testen
    6. Infrastruktur modularisieren
    7. Stack-Komponenten versus Stacks als Komponenten
    8. Einen Server in einem Stack verwenden
    9. Grenzen zwischen Komponenten ziehen
    10. Grenzen mit natürlichen Änderungsmustern abstimmen
    11. Grenzen mit Komponenten-Lebenszyklen abstimmen
    12. Grenzen mit Organisationsstrukturen abstimmen
    13. Grenzen schaffen, die Resilienz fördern
    14. Grenzen schaffen, die Skalierbarkeit ermöglichen
    15. Grenzen auf Sicherheits- und Governance-Aspekte abstimmen
    16. Zusammenfassung
    17. 16 Stacks aus Komponenten bauen
    18. Infrastruktur-Sprachen für Stack-Komponenten
    19. Deklarativen Code mit Modulen wiederverwenden
    20. Stack-Elemente dynamisch mit Bibliotheken erstellen
    21. Patterns für Stack-Komponenten
    22. Pattern: Facade Module
    23. Antipattern: Obfuscation Module
    24. Antipattern: Unshared Module
    25. Pattern: Bundle Module
    26. Antipattern: Spaghetti Module
    27. Pattern: Infrastructure Domain Entity
    28. Eine Abstraktionsschicht bauen
    29. Zusammenfassung
    30. 17 Stacks als Komponenten einsetzen
    31. Abhängigkeiten zwischen Stacks erkennen
    32. Pattern: Resource Matching
    33. Pattern: Stack Data Lookup
    34. Pattern: Integration Registry Lookup
    35. Dependency Injection
    36. Zusammenfassung
  10. Teil V Infrastruktur bereitstellen
    1. 18 Infrastruktur-Code organisieren
    2. Projekte und Repositories organisieren
    3. Ein Repository oder viele?
    4. Ein Repository für alles
    5. Ein eigenes Repository für jedes Projekt (Microrepo)
    6. Mehrere Repositories mit mehreren Projekten
    7. Unterschiedliche Arten von Code organisieren
    8. Projektsupport-Dateien
    9. Projektübergreifende Tests
    10. Dedizierte Projekte für Integrationstests
    11. Code anhand des Domänenkonzepts organisieren
    12. Dateien mit Konfigurationswerten organisieren
    13. Infrastruktur- und Anwendungscode managen
    14. Infrastruktur und Anwendungen ausliefern
    15. Anwendungen mit Infrastruktur testen
    16. Infrastruktur vor der Integration testen
    17. Infrastruktur-Code zum Deployen von Anwendungen nutzen
    18. Zusammenfassung
    19. 19 Infrastruktur-Code ausliefern
    20. Auslieferungsprozess von Infrastruktur-Code
    21. Ein Infrastruktur-Projekt bauen
    22. Infrastruktur-Code als Artefakt verpacken
    23. Infrastruktur-Code mit einem Repository ausliefern
    24. Projekte integrieren
    25. Pattern: Build-Time Project Integration
    26. Pattern: Delivery-Time Project Integration
    27. Pattern: Apply-Time Project Integration
    28. Infrastruktur-Tools durch Skripte verpacken
    29. Konfigurationswerte zusammenführen
    30. Wrapper-Skripte vereinfachen
    31. Zusammenfassung
    32. 20 Team-Workflows
    33. Die Menschen
    34. Wer schreibt Infrastruktur-Code?
    35. Code auf Infrastruktur anwenden
    36. Code von Ihrem lokalen Rechner aus anwenden
    37. Code von einem zentralisierten Service anwenden lassen
    38. Private Infrastruktur-Instanzen
    39. Quellcode-Branches in Workflows
    40. Konfigurationsdrift verhindern
    41. Automatisierungs-Verzögerung minimieren
    42. Ad-hoc-Anwendung vermeiden
    43. Code kontinuierlich anwenden
    44. Immutable Infrastruktur
    45. Governance in einem Pipeline-basierten Workflow
    46. Zuständigkeiten neu ordnen
    47. Shift Left
    48. Ein Beispielprozess für Infrastructure as Code mit Governance
    49. Zusammenfassung
    50. 21 Infrastruktur sicher ändern
    51. Reduzieren Sie den Umfang von Änderungen
    52. Kleine Änderungen
    53. Refaktorieren – ein Beispiel
    54. Unvollständige Änderungen in die Produktivumgebung übernehmen
    55. Parallele Instanzen
    56. Abwärtskompatible Transformationen
    57. Feature Toggles
    58. Live-Infrastruktur ändern
    59. Infrastruktur-Chirurgie
    60. Expand and Contract
    61. Zero-Downtime-Änderungen
    62. Kontinuität
    63. Kontinuität durch das Verhindern von Fehlern
    64. Kontinuität durch schnelles Wiederherstellen
    65. Kontinuierliches Disaster Recovery
    66. Chaos Engineering
    67. Für Ausfälle planen
    68. Datenkontinuität in einem sich ändernden System
    69. Sperren
    70. Aufteilen
    71. Replizieren
    72. Neu laden
    73. Ansätze zur Datenkontinuität mischen
    74. Zusammenfassung
  11. Fußnoten
  12. Index
  13. Über den Autor
  14. Kolophon

Product information

  • Title: Handbuch Infrastructure as Code, 2nd Edition
  • Author(s): Kief Morris
  • Release date: November 2021
  • Publisher(s): dpunkt
  • ISBN: 9783960091707