Von der Linux Bash 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 Thompson shell sh 1971 CCP (CCP) (1974) Bourne shell 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 tcsh, csh 1983[10] login/interacti VMS DCL[20] ve 1977? Hamilton C shell csh 1988[11] PowerShell PowerShell 2006 Scsh scsh 1994 rc rc 1989 Quelle: ksh (ksh93t+) ksh 1983[12][13] BeanShell ? 2005 Wikipedia pdksh ksh, sh 1989? fish 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/ubuntu/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.B. 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 Script
– 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 Pipeline
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