Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sascha Askani - Cloud-Umgebungen mit Terraform verwalten - DevDay 2016

Sascha Askani - Cloud-Umgebungen mit Terraform verwalten - DevDay 2016

More Decks by Software Architektur Entwickler Community Dresden

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 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 Ser Web Server Web r Web Server Loadbalancer RDS Autoscaling Group Web Ser Web Server Web r Web Server RDS
  4. 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
  5. 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)
  6. 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()
  7. 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
  8. Cloud-Umgebungen mit Terraform verwalten ... Ressourcen – EC2 Loadbalancer 12

    ‣ Wir definieren den Loadbalancer, dem wir zwei Instanzen A und B zuweisen
  9. Cloud-Umgebungen mit Terraform verwalten ... Ressourcen – EC2 Instance 13

    ‣ Wir definieren die beiden Instanzen A und B
  10. Cloud-Umgebungen mit Terraform verwalten ... Ressourcen – Provisioner 14 ‣

    Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)
  11. Cloud-Umgebungen mit Terraform verwalten ... Ressourcen – VPC Security Group

    15 ‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs
  12. 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
  13. 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
  14. eu-central-2 Cloud-Umgebungen mit Terraform verwalten ... unser initiales Ziel 22

    eu-central-1 Autoscaling Group Loadbalancer Web Ser Web Server Web r Web Server Loadbalancer RDS Autoscaling Group Web Ser Web Server Web r Web 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.
  15. 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
  16. 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
  17. Cloud-Umgebungen mit Terraform verwalten ... Fazit 25 ‣ Bei Einsatz

    in Produktivumgebungen: ‣ Module verwenden ‣ Remote State verwenden ‣ “terraform_remote_state“ Provisioner verwenden
  18. 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! [email protected]
  19. 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/
  20. 29

  21. 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
  22. Cloud-Umgebungen mit Terraform verwalten ... Remote State Provider 31 ‣

    Zugriff auf vorhandenene Remote States ‣ Entkoppelung einzelner Komponenten ‣ Getrennte Verwaltung von aufeinander aufbauenden Komponenten
  23. 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