Cloud-Umgebungen mit Terraform verwalten...Cloud-Umgebungen mit Terraform verwalten 20.04.2016...

Preview:

Citation preview

Cloud-Umgebungen mit Terraform verwalten

20.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

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 verwaltenGraph

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 GmbHLudwig-Erhard-Allee 676133 Karlsruhe

Sie möchten individuelle Beratung? Nehmen SieKontakt 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

Recommended