Continuous Delivery setzt auf die Automatisierung von Entwicklungs- und Betriebsprozessen, um die Performance und Qualität im Applikationsbetrieb zu erhöhen. Hierbei ist Terraform ein passendes Werkzeug, mit dessen Hilfe Infrastruktur effizient verwaltet werden kann. Die Session erläutert den Aufbau einer Cloud-Infrastruktur bei Amazon AWS mit Terraform, bestehend aus virtuellen Instanzen, Netzen, Load Balancing und DNS. Die Herausforderungen und Vorteile (Immutable Infrastructure), die sich dadurch bei der Implementierung von Continuous-Delivery-Pipelines für die Entwicklung und den Betrieb ergeben, werden dann anhand des Beispiels diskutiert.
Event: JAX 2016, 20.04.2016
Speaker: Sascha Askani, inovex GmbH
Mehr Tech-Vorträge: https://www.inovex.de/de/content-pool/vortraege/
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
DNS
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 mit CNAME
3. Eine Security Gruppe
4. Je eine Instanz pro Zone
VPC
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, …)
‣ Kombination mehrerer Provider gleichzeitig
‣ Provider-Instanzen über “alias“ Definition
12. Cloud-Umgebungen mit Terraform verwalten
...die VPC
12
‣ Bildet den Rahmen für das Folgende
‣ Grundlagen werden definiert: Subnetze, Routing-Tabellen, Internet-Gateways...
13. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – EC2 Loadbalancer
13
‣ Wir definieren den Loadbalancer, dem wir die Instanzen A und B zuweisen
15. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – Provisioner
15
‣ Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)
16. Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – VPC Security Group
16
‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs
18. Cloud-Umgebungen mit Terraform verwalten
... Command Line Interface (Auszug)
18
‣ plan Ausführungsplan anzeigen
‣ apply Infrastruktur aufbauen
‣ destroy Infrastruktur abbauen
‣ show Plan bzw. State ausgeben
‣ taint/untaint Ressourcen zur Neuerstellung markieren
‣ graph Ressourcen Graph erstellen (dot)
21. Cloud-Umgebungen mit Terraform verwalten
... State
21
‣ Speichert den Zustand nach dem Ausführen von
Terraform (.tfstate) in einer JSON Datei
‣ Terraform CLI
‣ output (State File ausgeben)
‣ refresh (State File aktualisieren)
‣ remote (State File initial remote ablegen)
‣ Kann remote gespeichert werden, um ihn von
verschiedenen Stellen ausführen zu können
‣ AWS CLI wird für remote state benötigt
23. Cloud-Umgebungen mit Terraform verwalten
... Lifecycle
23
‣ 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
25. eu-central-2
Cloud-Umgebungen mit Terraform verwalten
... unser initiales Ziel
25
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.
VPC
26. 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 26
Amazon AWS
Instanz
Security Group
Subnetz
ACL
Routing Table
Internet Gateway
1. Weitergehende Amazon Struktur integrieren
2. Ressourcen für Tier 2 und 3 hinzufügen
3. Instanzen durch Autoscaling Gruppen ersetzen
27. Cloud-Umgebungen mit Terraform verwalten
... Fazit
27
‣ Eigene Anforderungen prüfen, ob sie mit Terraform umsetzbar sind
‣ Schnelle aktive Weiterentwicklung
‣ Typische Verwendungszwecke
‣ Einwegumgebungen
‣ Demo Umgebungen
‣ Self-Service Cluster
28. Cloud-Umgebungen mit Terraform verwalten
... Fazit
28
‣ Bei Einsatz in Produktivumgebungen:
‣ Module verwenden
‣ Remote State verwenden (ggfs. Atlas)
‣ “terraform_remote_state“ Provisioner verwenden
‣ Images bauen mit Packer, Referenzieren in terraform + Lifecycle =
Immutable Infrastructure
29. 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
30. Anhang
... wo Sie in Ruhe nachlesen können
30
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/
33. Cloud-Umgebungen mit Terraform verwalten
... Module
33
‣ Wiederverwendbare Komponente(n) gruppiert
‣ Nested Modules
‣ terraform get löst Abhängigkeiten auf
‣ Ablage in
‣ Lokalen Pfaden
‣ git (allgemein)
‣ Github / Bitbucket (speziell)
‣ http URLs
34. Cloud-Umgebungen mit Terraform verwalten
... Remote State Provider
34
‣ Zugriff auf vorhandenene Remote States
‣ Entkoppelung einzelner Komponenten
‣ Getrennte Verwaltung von aufeinander aufbauenden Komponenten durch
verschiedene Teams