32
Cloud-Umgebungen mit Terraform verwalten DevDay - 12.04.2016 Sascha Askani

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

Embed Size (px)

Citation preview

Cloud-Umgebungen mit Terraform verwalten

DevDay - 12.04.2016Sascha Askani

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

ContinuousDelivery

Plattform AppArchitektur

Cloud-Umgebungen mit Terraform verwalten... Was ist Terraform?

5

Ziel

‣ “[...] Terraform is a tool for building, changing, and versioning infrastructure safely andefficiently. [...]“ (https://terraform.io/intro/)

Beispiel

Organi-sation

ContinuousDelivery

Plattform AppArchitektur

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

Ü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

3. Eine Security Gruppe

4. Je eine Instanz pro Zone

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, …)

‣ Es sind Aliase zur Verwendung mehrerer Provider gleichzeitig möglich

‣ Provider-Instanzen über “alias“ Definition

Cloud-Umgebungen mit Terraform verwalten... Ressourcen – EC2 Loadbalancer

12

‣ Wir definieren den Loadbalancer, dem wir zwei Instanzen A und B zuweisen

Cloud-Umgebungen mit Terraform verwalten... Ressourcen – EC2 Instance

13

‣ Wir definieren die beiden Instanzen A und B

Cloud-Umgebungen mit Terraform verwalten... Ressourcen – Provisioner

14

‣ Werden einmalig beim Einrichten der VM ausgeführt (z.B. Chef, Exec, File)

Cloud-Umgebungen mit Terraform verwalten... Ressourcen – VPC Security Group

15

‣ Wir benötigen eine einfache Security Gruppe für Zugriffe auf unserer VMs

Übersicht

16

Umgebung konfigurieren

Umgebung verwalten

Fazit und Ausblick

Einführung

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

Cloud-Umgebungen mit Terraform verwaltenGraph

18

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

Cloud-Umgebungen mit Terraform verwalten

20

DEMO

Übersicht

21

Umgebung konfigurieren

Umgebung verwalten

Fazit und Ausblick

Einführung

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.

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

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

Cloud-Umgebungen mit Terraform verwalten... Fazit

25

‣ Bei Einsatz in Produktivumgebungen:

‣ Module verwenden

‣ Remote State verwenden

‣ “terraform_remote_state“ Provisioner verwenden

Vielen Dank!Sascha Askani,IT Engineering & Operations

inovex GmbHLudwig-Erhard-Allee 676133 Karlsruhe

Sie möchten individuelle Beratung? Nehmen SieKontakt mit uns auf!

[email protected]

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/

Anhang

28

Lizenz des Vortrags

‣ Creative Commons (by-nc-nd)

29

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

Cloud-Umgebungen mit Terraform verwalten... Remote State Provider

31

‣ Zugriff auf vorhandenene Remote States

‣ Entkoppelung einzelner Komponenten

‣ Getrennte Verwaltung von aufeinander aufbauenden Komponenten

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