Continuous Delivery setzt auf die Automatisierung von Entwicklungs- und Betriebsprozessen, um die Performance und Qualität in der IT zu erhöhen. Mit Terraform zeigte der Referent ein Tool, mit dessen Hilfe Infrastruktur effizient verwaltet werden kann.
Der Referent demonstrierte live den Aufbau einer Cloud-Infrastruktur aus virtuellen Instanzen, Netzen, Loadbalancing und DNS bei Amazon AWS. Weiterhin ging er auf Herausforderungen und Vorteile (immutable Infrastructure) ein, die sich dadurch bei der Implementierung von Continuous-Delivery-Pipelines für die Entwicklung und den Betrieb ergeben.
4. Cloud-Umgebungen mit Terraform verwalten
... Continuous Delivery
4
Herausforderungen
‣ Vollständige Automatisierung der Prozesse
‣ Dev/Prod Parity – Werkzeuge und Prozesse der
Umgebungen identisch halten
‣ Infrastructure as Code – Nachvollziehbarkeit,
alles kommt aus einem Repository
Organi-
sation
Continuous
Delivery
Plattform
App
Architektur
5. Cloud-Umgebungen mit Terraform verwalten
... Was ist Terraform?
5
Ziel
‣ “[...] Terraform is a tool for building, changing,
and versioning infrastructure safely and
efficiently. [...]“ (https://terraform.io/intro/)
Beispiel
‣
Organi-
sation
Continuous
Delivery
Plattform
App
Architektur
6. eu-central-2
Cloud-Umgebungen mit Terraform verwalten
... das Beispiel
Quelle: https://aws.amazon.com/de/architecture/ 6
eu-central-1
Autoscaling Group
Loadbalancer
3 Tier Umgebung
‣ Web Tier
‣ Application Tier
‣ Datenbank Tier
Web SerWeb Server Web rWeb Server
Loadbalancer
RDS
Autoscaling Group
Web SerWeb Server Web rWeb Server
RDS
8. Cloud-Umgebungen mit Terraform verwalten
... erster Schritt, Terraform Konzepte
8
Region eu-central-1
eu-central-1a eu-central-1b
Instance_a
Loadbalancer
Instance_b
Security Group
1. Region mit zwei Availability Zones
2. Ein Loadbalancer
3. Eine Security Gruppe
4. Je eine Instanz pro Zone
9. Cloud-Umgebungen mit Terraform verwalten
... die Konfigurationsdateien
9
‣ Format: Alle Dateien (*.tf / tf.json) werden ausgewertet
‣ Variables: enthält die Variablen, die wir in den
Konfigurationsdateien verwenden
‣ Override: überschreibt existierende Ressourcen und ist als
einzige nicht additiv
‣ Outputs: Informationen, die wir über die Umgebung
ausgeben wollen
‣ Provider: Provider konfigurieren (AWS)
10. Cloud-Umgebungen mit Terraform verwalten
... von Variablen und Funktionen
10
‣ Der Zugriff auf Variablen wird durch den Prefix var. gekennzeichnet
‣ Auswertung: ${var.ssh_keyname} oder ${count.index +1}
‣ Zugriff auf andere Ressourcen erfolgt über die ID: ${aws_instance.foo.id}
‣ Es existieren verschiedene Funktionen wie beispielsweise lookup(), join()
11. Cloud-Umgebungen mit Terraform verwalten
... die Provider
11
‣ Definieren die zu verwendenden Backend-APIs (AWS, Azure, …)
‣ Es sind Aliase zur Verwendung mehrerer Provider gleichzeitig möglich
‣ Provider-Instanzen über “alias“ Definition
12. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – EC2 Loadbalancer
12
‣ Wir definieren den Loadbalancer, dem wir zwei Instanzen A und B zuweisen
14. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – Provisioner
14
‣ Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)
15. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – VPC Security Group
15
‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs
17. Cloud-Umgebungen mit Terraform verwalten
... Command Line Interface (Auszug)
17
‣ apply Infrastruktur aufbauen
‣ destroy Infrastruktur abbauen
‣ graph Ressourcen Graph erstellen (dot)
‣ plan Ausführungsplan anzeigen
‣ show Plan bzw. State ausgeben
‣ taint/untaint Ressourcen zur Neuerstellung markieren
19. Cloud-Umgebungen mit Terraform verwalten
... State
19
‣ Speichert den Zustand nach dem Ausführen von
Terraform (.tfstate) in einer JSON Datei
‣ Kann remote gespeichert werden, um ihn von
verschiedenen Stellen ausführen zu können
‣ Terraform Cli
‣ output (State File ausgeben)
‣ refresh (State File aktualisieren)
‣ remote (State File initial remote ablegen)
‣ AWS CLI wird benötigt
22. eu-central-2
Cloud-Umgebungen mit Terraform verwalten
... unser initiales Ziel
22
eu-central-1
Autoscaling Group
Loadbalancer
Web SerWeb Server Web rWeb Server
Loadbalancer
RDS
Autoscaling Group
Web SerWeb Server Web rWeb Server
RDS
3 Tier Umgebung
‣ Um die fehlenden Ressourcen mit
Terraform abbilden zu können,
benötigen wir ein genaueres
Verständnis der AWS VPC
Konzepte.
23. Cloud-Umgebungen mit Terraform verwalten
... AWS Virtual Private Cloud (VPC) Konzepte und Ausblick
Quelle: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/default-vpc.html 23
Amazon AWS
Instanz
Security Group
Subnetz
ACL
Routing Table
Internet Gateway
1. Amazon Struktur in unser Beispiel integrieren
2. Ressourcen für Tier 2 und 3 hinzufügen
3. Instanzen durch Autoscaling Gruppen ersetzen
24. Cloud-Umgebungen mit Terraform verwalten
... Fazit
24
‣ Eigene Anforderungen prüfen, ob sie mit Terraform umsetzbar sind
‣ Schnelle aktive Weiterentwicklung
‣ Typische Verwendungszwecke
‣ Einwegumgebungen
‣ Demo Umgebungen
‣ Self-Service Cluster
25. Cloud-Umgebungen mit Terraform verwalten
... Fazit
25
‣ Bei Einsatz in Produktivumgebungen:
‣ Module verwenden
‣ Remote State verwenden
‣ “terraform_remote_state“ Provisioner verwenden
26. Vielen Dank!
Sascha Askani,
IT Engineering & Operations
inovex GmbH
Ludwig-Erhard-Allee 6
76133 Karlsruhe
Sie möchten individuelle
Beratung? Nehmen Sie
Kontakt mit uns auf!
info@inovex.de
27. Anhang
... wo Sie in Ruhe nachlesen können
27
Terraform Dokumentation
‣ https://terraform.io/docs
AWS Dokumentation
‣ https://aws.amazon.com/de/architecture/
‣ http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/
‣ http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/
30. Cloud-Umgebungen mit Terraform verwalten
... Module
30
‣ Wiederverwendbare Komponente(n) gruppiert
‣ Nested Modules
‣ terraform get löst Abhängigkeiten auf
‣ Ablage in
‣ Lokalen Pfaden
‣ git
‣ Github / Bitbucket (speziell)
‣ http URLs
31. Cloud-Umgebungen mit Terraform verwalten
... Remote State Provider
31
‣ Zugriff auf vorhandenene Remote States
‣ Entkoppelung einzelner Komponenten
‣ Getrennte Verwaltung von aufeinander aufbauenden Komponenten
32. Cloud-Umgebungen mit Terraform verwalten
... Lifecycle
32
‣ Kontrolle der Reihenfolge und Zulässigkeit von Änderungen
‣ create_before_destroy: Neue Ressourcen werden aufgebaut, bevor alte
gelöscht werden (aktuell NICHT bei taint)
‣ prevent_destroy: Wenn gesetzt, schlägt jeder apply fehl, der diese
Ressource löschen würde.
‣ ignore_changes: Einstellungen, die beim diff ignoriert werden und somit
keine Änderung auslösen