Von Der Linux Bash Bis Zum Cloud Development
Total Page:16
File Type:pdf, Size:1020Kb
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 .