Cloud-Umgebungen mit Terraform
verwalten
20.04.2016
SaschaAskani
Cloud-Umgebungen mit Terraform verwalten
... über inovex und den Referenten
2
Übersicht
3
Umgebung konfigurieren
Umgebung verwalten
Fazit und Ausblick
Einführung
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
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
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
Übersicht
7
Umgebung konfigurieren
Umgebung verwalten
Fazit und Ausblick
Einführung
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
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)
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()
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
Cloud-Umgebungen mit Terraform verwalten
...die VPC
12
‣ Bildet den Rahmen für das Folgende
‣ Grundlagen werden definiert: Subnetze, Routing-Tabellen, Internet-Gateways...
Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – EC2 Loadbalancer
13
‣ Wir definieren den Loadbalancer, dem wir die Instanzen A und B zuweisen
Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – EC2 Instance
14
‣ Wir definieren die beiden Instanzen A und B
Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – Provisioner
15
‣ Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)
Cloud-Umgebungen mit Terraform verwalten
... Ressourcen – VPC Security Group
16
‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs
Übersicht
17
Umgebung konfigurieren
Umgebung verwalten
Fazit und Ausblick
Einführung
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)
Cloud-Umgebungen mit Terraform verwalten
19
einfacher Graph
Cloud-Umgebungen mit Terraform verwalten
Graph
20
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
Cloud-Umgebungen mit Terraform verwalten
22
DEMO
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
Übersicht
24
Umgebung konfigurieren
Umgebung verwalten
Fazit und Ausblick
Einführung
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
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
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
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
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
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/
Anhang
31
Lizenz des Vortrags
‣ Creative Commons (by-nc-nd)
32
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
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

Infrastructure as code: Cloud-Umgebungen mit Terraform verwalten

  • 1.
  • 2.
    Cloud-Umgebungen mit Terraformverwalten ... über inovex und den Referenten 2
  • 3.
  • 4.
    Cloud-Umgebungen mit Terraformverwalten ... 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 Terraformverwalten ... 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 Terraformverwalten ... 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
  • 7.
  • 8.
    Cloud-Umgebungen mit Terraformverwalten ... 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 Terraformverwalten ... 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 Terraformverwalten ... 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 Terraformverwalten ... die Provider 11 ‣ Definieren die zu verwendenden Backend-APIs (AWS, Azure, …) ‣ Kombination mehrerer Provider gleichzeitig ‣ Provider-Instanzen über “alias“ Definition
  • 12.
    Cloud-Umgebungen mit Terraformverwalten ...die VPC 12 ‣ Bildet den Rahmen für das Folgende ‣ Grundlagen werden definiert: Subnetze, Routing-Tabellen, Internet-Gateways...
  • 13.
    Cloud-Umgebungen mit Terraformverwalten ... Ressourcen – EC2 Loadbalancer 13 ‣ Wir definieren den Loadbalancer, dem wir die Instanzen A und B zuweisen
  • 14.
    Cloud-Umgebungen mit Terraformverwalten ... Ressourcen – EC2 Instance 14 ‣ Wir definieren die beiden Instanzen A und B
  • 15.
    Cloud-Umgebungen mit Terraformverwalten ... Ressourcen – Provisioner 15 ‣ Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)
  • 16.
    Cloud-Umgebungen mit Terraformverwalten ... Ressourcen – VPC Security Group 16 ‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs
  • 17.
  • 18.
    Cloud-Umgebungen mit Terraformverwalten ... 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)
  • 19.
    Cloud-Umgebungen mit Terraformverwalten 19 einfacher Graph
  • 20.
  • 21.
    Cloud-Umgebungen mit Terraformverwalten ... 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
  • 22.
  • 23.
    Cloud-Umgebungen mit Terraformverwalten ... 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
  • 24.
  • 25.
    eu-central-2 Cloud-Umgebungen mit Terraformverwalten ... 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 Terraformverwalten ... 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 Terraformverwalten ... 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 Terraformverwalten ... 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, ITEngineering & 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 Siein 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/
  • 31.
    Anhang 31 Lizenz des Vortrags ‣Creative Commons (by-nc-nd)
  • 32.
  • 33.
    Cloud-Umgebungen mit Terraformverwalten ... 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 Terraformverwalten ... Remote State Provider 34 ‣ Zugriff auf vorhandenene Remote States ‣ Entkoppelung einzelner Komponenten ‣ Getrennte Verwaltung von aufeinander aufbauenden Komponenten durch verschiedene Teams