View
6
Download
0
Category
Preview:
Citation preview
TerraformEin Einblick der Möglichkeiten von
Infrastructure-as-Code
Dr. Sebastian Oehlke
27.04.2019
Terraforming - Begriffserklärung
https://en.wikipedia.org/wiki/Image:MarsTransitionV.jpg
#atix #graz19 #IaC
Motivation
Wir brauchen jetzt n-Ressourcen, die folgendeAnforderungen erfüllen …
#atix #graz19 #IaC
Terraform - Kurzbeschreibung
I Infrastructure-as-code
I Hashicorp (Vagrant, Vault, Packer)
#atix #graz19 #IaC
Terraform - Kurzbeschreibung
I Kodifiziert API-Befehle in deklaritive Konfigurationsdateien
I Open-Source
#atix #graz19 #IaC
Terraform - Kurzbeschreibung
I Sicher und vorhersagbar
I Erstellen, Ändern, Verbessernder Infrastruktur
I Kombination vonverschiedenen Providern
I Code teilen, Versionskontrolle,Review-Möglichkeit
I Modular
I Gut zu automatisieren
#atix #graz19 #IaC
Terraform - Kurzbeschreibung
I Sicher und vorhersagbar
I Erstellen, Ändern, Verbessernder Infrastruktur
I Kombination vonverschiedenen Providern
I Code teilen, Versionskontrolle,Review-Möglichkeit
I Modular
I Gut zu automatisieren
#atix #graz19 #IaC
Auszug an Möglichkeiten mit Terraform
Provider-Gruppen:
I Verwaltung vonCloud-Diensten
I Verwaltung vonContainer-Plattformen
I Network Providern
I Version Control
I Monitoring & SystemManagement
I Databases
⇒ Wenn es eine API hat, geht vermutlich das Management via Terraform
#atix #graz19 #IaC
Auszug an Möglichkeiten mit Terraform
Provider-Gruppen:
I Verwaltung vonCloud-Diensten
I Verwaltung vonContainer-Plattformen
I Network Providern
I Version Control
I Monitoring & SystemManagement
I Databases
⇒ Wenn es eine API hat, geht vermutlich das Management via Terraform
#atix #graz19 #IaC
Schema
Infrastructure
ProviderCode Ressource 2
Ressource 1
Ressource 3
Ressource …
#atix #graz19 #IaC
Ablaufplan
Code
Check
done
terraform plan
terraform apply
terraform init
(terraform destroy)
I Check der Syntax und ladender benötigten Plugins
I Erstellen von Übersicht
I Was bereits vorhandenI Was wird geändertI Was für Operationen
werden durchgeführt
I Provider Kommunikation (API)
I (Entfernen der Ressource(n))
#atix #graz19 #IaC
Ablaufplan
Code
Check
done
terraform plan
terraform apply
terraform init
(terraform destroy)
I Check der Syntax und ladender benötigten Plugins
I Erstellen von Übersicht
I Was bereits vorhandenI Was wird geändertI Was für Operationen
werden durchgeführt
I Provider Kommunikation (API)
I (Entfernen der Ressource(n))
#atix #graz19 #IaC
Variables
In Datei: variables.tf
variable "region" {description = "Region to be used"}
In Datei: terraform.tfvars
region = "eu-central-1"
Im Code:
region = "${var.region}"
⇒ Kombinierbar mit Modulen
#atix #graz19 #IaC
Variables
In Datei: variables.tf
variable "region" {description = "Region to be used"}
In Datei: terraform.tfvars
region = "eu-central-1"
Im Code ab Version 0.12:
region = var.region
⇒ Kombinierbar mit Modulen
#atix #graz19 #IaC
Modules
module "name" {source = "/path/to/folder"variable1 = "foo"variable2 = "bar"
}
module "frontend" {source = "git::git@github.com:user/i-modules.git//m-name?ref=v0.1"
variable1 = 8variable2 = 20
}
#atix #graz19 #IaC
Modules
module "name" {source = "/path/to/folder"variable1 = "foo"variable2 = "bar"
}
module "frontend" {source = "git::git@github.com:user/i-modules.git//m-name?ref=v0.1"
variable1 = 8variable2 = 20
}
#atix #graz19 #IaC
Zusammenarbeit mit Backends
User 2
User 3
User N
Backend
#atix #graz19 #IaC
Rolle von Provisioning
Ressource nativ
Provisioner
Ressourcekonfiguriert
I Notwendigkeit abhängig vonProvider/Ressourcentyp (VM vs.Container)
I Einrichten von 1-N Ressourcen
I Nutzen von Facts undIdempotenz
#atix #graz19 #IaC
Rolle von Provisioning
Ressource nativ
Provisioner
Ressourcekonfiguriert
I Notwendigkeit abhängig vonProvider/Ressourcentyp (VM vs.Container)
I Einrichten von 1-N Ressourcen
I Nutzen von Facts undIdempotenz
#atix #graz19 #IaC
Ansible vs. Terraform
AnsibleI Configuration management
I Verwenden der Facts fürweitere Operationen
I Geeignet um Ressourceeinzurichten
I Dry-run nicht so informativ wasgeändert werden soll
TerraformI Ressource orchestration
I Übersichtliche Auflistung, wasgeändert wird
I Sehr rudimentäres provisioning
⇒ Kombination um Vorteile beider zu nutzen
#atix #graz19 #IaC
Ansible vs. Terraform
AnsibleI Configuration management
I Verwenden der Facts fürweitere Operationen
I Geeignet um Ressourceeinzurichten
I Dry-run nicht so informativ wasgeändert werden soll
TerraformI Ressource orchestration
I Übersichtliche Auflistung, wasgeändert wird
I Sehr rudimentäres provisioning
⇒ Kombination um Vorteile beider zu nutzen
#atix #graz19 #IaC
Ansible vs. Terraform
AnsibleI Configuration management
I Verwenden der Facts fürweitere Operationen
I Geeignet um Ressourceeinzurichten
I Dry-run nicht so informativ wasgeändert werden soll
TerraformI Ressource orchestration
I Übersichtliche Auflistung, wasgeändert wird
I Sehr rudimentäres provisioning
⇒ Kombination um Vorteile beider zu nutzen
#atix #graz19 #IaC
Kombination von Ansible und Terraform
Vorteil Ansible
I Wiederverwendungexistierender Rollen
I Nutzung vonDistro-unabhängigen Modulen
Vorteil Terraform
I Ressourcenmanagement
I Detailliertere Übersicht derÄnderungen
I Drift detection
I Komplette Lifecycle Kontrolle(Erstellen, Ändern, Entfernen)
I Gleiche Sprache umInfrastruktur und Ressourceneinzurichten
#atix #graz19 #IaC
Kombination von Ansible und Terraform
Ansible
Terraform Ressource(n)
AusführenInventory
Setup
Provisioning
#atix #graz19 #IaC
Demo - Ansible - Terraform - AWS
ansible-playbook --inventory=terraform-inventory ../main.yaml
#atix #graz19 #IaC
Demo - Ansible - terraform - AWS
---- hosts: localhost
connection: localgather_facts: Falsetasks:- name: Run terraform
terraform:project_path: '{{ project_dir }}'state: presentvariables:
counts : "{{ counts | default(1)}}"- name: Reload inventory
meta: refresh_inventory
- hosts: "aws"remote_user: userbecome: trueroles:- role: nginx
...
#atix #graz19 #IaC
Terraform Code
provider "aws" {region = "${var.region}"shared_credentials_file = "${var.loc}"profile = "${var.profile}"
}
#atix #graz19 #IaC
Terraform Code
resource "aws_instance" "web" {count = "${var.counts}"ami = "${var.ami}"instance_type = "${var.ami_type}"key_name = "${var.aws_keyname}"vpc_security_group_ids = ["${var.sg_id}"]provisioner "remote-exec" {
inline = ["sudo apt-get update && sudo apt -y install python",
]connection {
type = "ssh"user = "ubuntu"private_key = "${file(var.pkey)}"agent = false
}}tags {
Name = "${var.aws_tag}-${count.index}"}
}
#atix #graz19 #IaC
Demo - Ansible - Terraform - AWS
#atix #graz19 #IaC
Kritik und Ausblick
Aktuelle KritikpunkteI Sehr gute Übersicht der potentiellen Änderungen bevor diese
durchgeführt werden
I Code ist recht Provider-Spezifisch
I Durch unterschiedlicher Technologie nicht alle Settings lassensich 1:1 übertragen
I Provisinors sind recht limitiert
I aktuell nur Chef, Salt und rudimentäre ProvisinorsI aktuell kein Support für Ansible oder Puppet
Terraform ist immer noch in 0.x Status dewegen werden viele Sachen nochaddressiert und können innerhalb nächster Zeit schon umgesetzt werden
#atix #graz19 #IaC
Terraform - Ein Versuch ist es Wert
https://en.wikipedia.org/wiki/Image:MarsTransitionV.jpg
#atix #graz19 #IaC
Recommended