Von der Linux bis zum Cloud Development Kit Matthias Fuchs, @hias222 DOAG Konferenz, Nürnberg, 2019/11/20 Agenda • Basics – Scripting – Shell – Von Funktional bis Deklarativ – Die Toolwelt • Ziele • Szenarios – Ausführen eines Jobs – Bereitstellen einer Applikation mit Server – Eine Umgebung - Die Cloud • Clean Code • Programming in Scripting

3 Von Bash bis CDK Scripting Shell

1976 sh 1971 CCP (CCP) (1974) 1977 version sh 1977 OS/2 CMD.EXE CMD 1987 Bourne shell current version sh 1977 Windows CMD.EXE[nb 5] CMD 1993 POSIX shell[6] sh 1992[7] 1989 4DOS, NDOS 4DOS, NDOS (1986) bash (v4) bash, sh 1989[8] 4OS2 4OS2 1992 csh csh 1978 TCC (formerly 4NT) TCC 1993 tcsh, csh 1983[10] login/interacti VMS DCL[20] ve 1977? Hamilton shell csh 1988[11] PowerShell PowerShell 2006 scsh 1994 rc 1989 Quelle: ksh (ksh93t+) ksh 1983[12][13] BeanShell ? 2005 Wikipedia pdksh ksh, sh 1989? fish 2005[21] command zsh zsh 1990 Ion ion 2015[22] shells ash sh 1989

Von Bash bis CDK Shell Beispiel #!/bin/functionscripte_kopierenbashsend_message { #______send_messageretVal=$1$? scripte_kopieren ______subject=$2 ______createfolderstructuremessage="$HOSTNAME $3" #send_messageif [ $retVal$? createfolderstructure-ne 0 ]; then source $sourcedir/send_msg.sh "$HOSTNAME" "${subject}" "failure $ servicedir{postfixinstallationmessage}"=/errorhome/ubuntubase /bhs/services downloaddirsend_messageelse=/home$? Postfixinstallation//bhs/downloads installdir=/homesource/ubuntu$sourcedir/bhs/deployments/send_msg.sh "$HOSTNAME" "${subject}" "success $ brokeruser{message}"=ubuntuinfo base brokerpasswordfi =system brokerrole} =amq UNIT_NAME=broker.service SERVICE_NAME=function createfolderstructurebroker { SERVICE_USER=mkdir -m 755 ubuntu- p $targetdir/{deployments,downloads,services,logs,configs,backups,scripts} mkdir -m 700 -p $homedir/devops/{backups,data,tmp,logs,scripts,configs} mkdir -m 600 -p $homedir/devops/.smbcredentials } function postfixinstallation { debconf-set-selections <<< "postfix postfix/relayhost string ganymede.bhs- Von Bash bis CDK corrugated.de" debconf-set- Prozedural/Funktional vs. Deklarativ

Funktional Deklarativ • Im Vordergrund steht die • Das „Wie“ steht im Beschreibung des Vordergrund Problems/Aufgabe • Rekursiv, verwendet • Spezielle domain-specific Funktionen ohne languages (DSLs) notwendig • z.. Puppet's configuration globalen State management language • .z.B. Ansible

Von Bash bis CDK EC2 anlegen: Prozedural vs. Deklarativ

Von Bash bis CDK EC2 löschen: Procedural vs Deklarativ

Von Bash bis CDK Tools im Vergleich

Chef Puppet Ansible Terraform Type Config Config Config Orchestration Architektur Client/Server Client/Server Client Client State No No No Yes Sprache Procedural Deklarativ Procedural Deklarativ Master Yes Yes No No Community 562/5.794/3.832 515/5.299/6.110 4.386/37.161/20.677 1.261/16.837/1.462 Contr./Stars/Libs * StackOverflow 5.982 3.585 11.746 2.730

* https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c#b264

Von Bash bis CDK Agenda • Basics – Scripting – Shell – Von Funktional bis Deklarativ – Die Toolwelt • Ziele • Szenarios – Ausführen eines Jobs – Bereitstellen einer Applikation mit Server – Eine Umgebung - Die Cloud • Clean Code • Programming in Scripting

11 Von Bash bis CDK Ziele

• Provisoning – Bereitstellen neuer Infrastruktur – Server, Storage, Netzwerk etc. • Deployment – Einspielen neuer Applikationen • Sonstiges – Backup, Restore – Patching – Monitoring • … Konfiguration

Von Bash bis CDK Konfiguration

• Configuration management Ansible, Puppet, SaltStack, and Chef sind für Konfigurationsaufgaben vorgesehen (configuration management - CM). – Installation und Management der Software auf bestehenden Instanzen – Start von Services oder Skripts, Ändern von Konfigurations Dateien – Ziel ist keine Manuelle Konfiguration

• Configuration orchestration Terraform oder (AWS) Templates eigenen sich als Orchestrierungs Tools. Die Tools stellen Instanzen und Umgebungen bereit, Die Konfiguration wird oft von anderen Tools s.o. übernommen. – Komplexe Umgebungen erstellen – Ziel ist keine Manuellen Eingriffe

Von Bash bis CDK Agenda • Basics – Scripting – Shell – Von Funktional bis Deklarativ – Die Toolwelt • Ziele • Szenarios – Ausführen eines Jobs – Bereitstellen einer Applikation mit Server – Eine Umgebung - Die Cloud • Clean Code • Programming in Scripting

14 Von Bash bis CDK Beispiel Shell

– Backup einer Datenbank • Lange Historie – Ändern eines Parameters in einer Applikation • Gewachsen – Installation einer Software – Automatischer Ablauf von mehreren Schritten • Erprobt – Überwachung, Monitoring

-> Änderungen schwierig und aufwendig

Von Bash bis CDK Script und mehr … • Nicht nur shell • Python, Perl, Node.js • Übernahme von vorhandenen libraries • Nutzung der Programmierung • Passende Umgebung für das Problem

Von Bash bis CDK Konfiguration eines Servers

• Ansible vs. Puppet • Agentless vs Agent • Deklarativ vs. Funktional • Idempotent vs. Puppet Enterprise & Immutable Ansible Tower

Von Bash bis CDK Konfiguration

ssh Puppet ssl Master

Tower Admin Client Rundeck Ansible App Repo App + Agent Optional

Installation und Konfiguration: - Datenbanken, Updates - Linux (Hosts, User, Gruppen, Netzwerk) - Deploy in Build

Von Bash bis CDK Applikation und Server

Build Configure Start It Image Image

Von Bash bis CDK Packer Packer.json

packer validate base-cc-image.json packer build -var 'aws_profile=myprod' -var 'region=eu-central-1' -var 'env_name=dev‘ packer.json Von Bash bis CDK Packer Packer.json

Von Bash bis CDK Ansible check.yml Wird aus Packer aufgerufen

Von Bash bis CDK Packer and Ansible Ansible main Role file

Von Bash bis CDK … und wie wird es benutzt?

Von Bash bis CDK All Together

Von Bash bis CDK AWS Infrastructure Ladesäulen Backend AWS Cloud

Amazon Elastic Container Elastic Load Balancing Service

Amazon Kinesis Amazon RDS Keycloak bastion Data Streams

Von Bash bis CDK Umgebung

• Terraform

Von Bash bis CDK Nice Things

• Backend State in S3

Von Bash bis CDK Nice things

• remote Backend

Von Bash bis CDK Aufteilen in Module

• Module sind Ressourcen, die gemeinsam genutzt werden können • Parametrisierung der Module

Von Bash bis CDK Daten für Ansible übergeben

Daten für ansible

Von Bash bis CDK Aufruf in Ansible • ansible-playbook -i /etc/ansible/terraform.py playbook.yml https://nicholasbering.ca/tools/2018/01/08/introducing- terraform-provider-ansible/ Aber auch mit: - Abfrage tf.state mit Ansible - Aufrufen terraform aus Ansible

Von Bash bis CDK Agenda • Basics – Scripting – Shell – Von Funktional bis Deklarativ – Die Toolwelt • Ziele • Szenarios – Ausführen eines Jobs – Bereitstellen einer Applikation mit Server – Eine Umgebung - Die Cloud • Clean Code • Programming in Scripting

33 Von Bash bis CDK Clean Code Allgemein

• Standard Konventionen verwenden • Immer einfach. Komplexität reduzieren. • Boy scout rule. Der Code saubere verlassen als man ihn vorgefunden hat. • Nur den „root cause“ bearbeiten. Konzentration auf das wesentliche.

Von Bash bis CDK Und für Scripting …

• Konventionen für Scripting einhalten – Namensgebung – Variablen • So einfach wie möglich – Kurze Funktionen – Lesbar (regex, perl, sed) • Mehrere Files mit logischer Trennung • So wenig Konfigurationsparameter wie möglich • Kommentare – Code erklärt sich selbst – Unnötige Kommentare vermeiden

Von Bash bis CDK Und auch beim Scripting … • Erprobte Konzepte übernehmen – Git – Review • Testing • Ausführung: – Build Pipelines – automatisches Rollout

Von Bash bis CDK Agenda • Basics – Scripting – Shell – Von Funktional bis Deklarativ – Die Toolwelt • Ziele • Szenarios – Ausführen eines Jobs – Bereitstellen einer Applikation mit Server – Eine Umgebung - Die Cloud • Clean Code • Programming in Scripting

37 Von Bash bis CDK Script Programming

• Beispiel CDK • software development framework for defining cloud infrastructure • Alternativen: pulumi

Von Bash bis CDK Von Bash bis CDK Lessons Learned • Infrastruktur Scripte im App-Code integrieren • Auch Scripte sind Code, die nach Regeln erstellt werden sollten • Scripting mit Programmiersprachen ermöglichen neue Möglichgkeiten, es ist aber auch mehr KnowHow in der Verarbeitung notwendig

Von Bash bis CDK