"Infrastructure as Code" für Anfänger XP Days Germany David Völkel 27.11.2015
@davidvoelkel @softwerkskammer @codecentric TDD & Design CD & DevOp
Continuous Integration Automatic Build VCS Application
Automation Quality VCS Application Reproducible Faster Docs
Tip of the Iceberg? VCS App
Tip of the Iceberg? VCS App OS & Packages Config VM Network
Continuous Delivery VCS App OS & Packages Infrastructure? Config VM Network
Continuous Delivery Infrastructure as Code Software VCS OS & Packages Config VM Network
Agenda 1. Deployment 2. Provisioning 3. Environments 4. VM Management 5. SDN App OS & Packages Config VM Network DEMO
1.DEPLOYMENT App OS & Packages Config VM Image: Rigo Peter
Deployment SSH/SCP mvn Plugins App Server
Auto Deployment CI Build Pipeline VCS Build & Unit Tests Deployment Integration Tests App Server
App Server Options Distro Package Manager Fat-JARs Image: RRZEicons
App OS & Packages Config VM 2. PROVISION Box by Даниил Пронин from the Noun Project
Snowflake Servers
Snowflake Servers Work of Art
Configuration Management Server Provisioning Installation Config VCS Image: KUKA Systems GmbH
Configuration Management 90er 00er 10er CFEngine Chef Puppet Salt Ansible
Desired State Configuration Declarative Tests itself Idempotent
Our Provision 1.0 > mvn package (per jdeb) > scp software_and_provi.deb server # dpkg i *.deb # puppet apply > smoketest server Software VCS Build & Unit Tests Provision Deployment OS & Packages Config Server
Refactoring to 2.0 no shell no jdeb faster easier Windows OK
DEV TEST PROD App OS & Packages Config VM 3.ENVIRONMENTS Computer by Danny Sturgess from the Noun Project
Configuration Global vs. Environment mail.send.retry=3 reminder.intervall=7 mysql.url = jdbc:mysql://test-mysql-db/users mysql.driver = com.mysql.jdbc.driver mysql.user = username mysql.password = secretpassword oracle.url = jdbc:oracle://oracle-test/bills oracle.driver = oracle.jdbc.driver.oracledriver oracle.user = username2 oracle.password = secretpassword2
Configuration Global vs. Environment mail.send.retry=3 reminder.intervall=7 mysql.url = jdbc:mysql://test-mysql-db/users mysql.driver = com.mysql.jdbc.driver mysql.user = username mysql.password = secretpassword oracle.url = jdbc:oracle://oracle-test/bills oracle.driver = oracle.jdbc.driver.oracledriver oracle.user = username2 oracle.password = secretpassword2
Configuration Global vs. Environment mail.send.retry=3 reminder.intervall=7 mysql.driver = com.mysql.jdbc.driver oracle.driver = oracle.jdbc.driver.oracledriver mysql.url = jdbc:mysql://test-mysql-db/users mysql.user = username mysql.password = secretpassword oracle.url = jdbc:oracle://oracle-test/bills oracle.user = username2 oracle.password = secretpassword2
Configuration Global vs. Environment deploy(env) mail.send.retry=3 reminder.intervall=7 mysql.driver = com.mysql.jdbc.driver oracle.driver = oracle.jdbc.driver.oracledriver mysql.url = jdbc:mysql://test-mysql-db/users mysql.user = username mysql.password = secretpassword oracle.url = jdbc:oracle://oracle-test/bills oracle.user = username2 oracle.password = secretpassword2
Latest Config No branching!
App OS & Packages Config VM 4. VM MANAGEMENT Data Center Server Virtualization by Rahul KULKARNI from the Noun Project
Desired State Configuration Drift! Drift
Phoenix Server clean slate Clone Golden Master vs. DSC? Phoenix Image: RoFra
Technology Packer & AWS AMI VMWare VSphere Phoenix Image: RoFra
Security Patches? Rotate by Thomas Helbig from the Noun Project
Immutable Servers Freeze State Logs Config DB/Storage Image: Deutsche Fotothek
Pipeline Clone VM & Provision OS & Packages DEV VM VCS Provision Golden Master VM Image
VCS App Code Pipeline Build & UT Clone VM & Provision OS & Packages DEV VM VCS Provision Golden Master VM Image
VCS App Code Config Pipeline Build & UT Deploy Clone VM & Provision App & DEV Config OS & Packages DEV VM VCS Provision Golden Master VM Image
VCS App Code Config Pipeline Build & UT Deploy Int Test Clone VM & Provision App & DEV Config OS & Packages DEV VM VCS Provision Golden Master VM Image
Pipeline VCS App Code Config Build & UT Deploy Int Test Deploy Test App & DEV Config App & TEST Config Clone VM & Provision OS & Packages DEV VM OS & Packages Test VM VCS Provision
Pipeline VCS App Code Config Build & UT Deploy Int Test Deploy Test App & TEST Config Clone VM & Provision OS & Packages Test VM VCS Provision
Pipeline VCS App Code Config Build & UT Deploy Int Test Deploy Test App & TEST Config Clone VM & Provision OS & Packages Test VM VCS Provision Deploy Prod
Packer Pipeline Packer Temp Instance VCS Provision Golden Master AMI
Packer Pipeline Packer OS & Packages Temp Instance VCS Provision Golden Master AMI
Packer Pipeline Packer OS & Packages Temp Instance VCS Provision Golden Master AMI Provisioned AMI
Demo Ansible Jar Deploy Ansible Provision Vagrant, Packer, Ansible EC2 Module Terraform App OS & Packages Config VM Network https://github.com/davidvoelkel/infrastructure-as-code-demo https://youtu.be/aiaolpshgum
Resumee Version & automate infrastructure Living Documentation Quality, works on my machine Layers top to bottom
@davidvoelkel
Licence Creative Commons Attribution-ShareAlike 3.0