Slide 1

Slide 1 text

Let’s deploy code by Charlie Knudsen

Slide 2

Slide 2 text

Provisioning & Orchestration ● Provisioning - Getting infrastructure setup in a secure and fault tolerant manner ○ Getting necessary VMs in place ○ Firewall setup ○ DNS setup ● Orchestration - Pushing or pulling an application onto the provisioned infrastructure ○ Pushing the actual binaries/code ○ Targeting the proper VMs ○ Configuring the applications and load balancers ○ Running migrations Cloud deployment will often blur the lines between these tasks

Slide 3

Slide 3 text

PaaS vs IaaS ● PaaS - Platform as a service ○ A platform where you give them code and they handle both provisioning and orchestration ○ Heroku, GAE, Azure, OpenShift, CloudFoundry, Deis/Flynn/Kubernetes ○ Often deploy using git push ○ Often opinionated in how applications function. (i.e. 12 Factor App) ● IaaS - Infrastructure as a service ○ A platform where APIs are provided to allow you to provision infrastructure which the service provider will host ○ AWS, GCE, Rackspace, OpenStack

Slide 4

Slide 4 text

● Very well documented and easy to get started ○ Heroku Getting Started, Java Heroku Documentation, Ratpack documentation, Heroku addons, Architecting Applications for Heroku ● Very opinionated on how your application should function (i.e. 12Factor) ○ Stateless applications ○ Configured with environment variables ○ Deployed via git push ● Expensive when past the free tier ● Definitely worth trying out and using for fun/learning/low traffic projects Heroku

Slide 5

Slide 5 text

IaaS Commonalities ● All have the concept of a base image ● All require the users to determine how the application will be scaled and configured ● Most have a cloud init concept on startup ● All have unique product offerings and features

Slide 6

Slide 6 text

Burn base images ● Image burning front loads the downloading of software ● Reducing the bootstrap time and reliability of the bootstrap process ● Packer is an excellent cross cloud tool for burning images. Use it. ● If speed of startup is critical you could burn your whole application into an image ○ Remember migrations should not be run when images are burned ○ Last mile configuration should probably not be burned into the image Tips ● You can use the same base boxes building process for vagrant and production ● Bento project by chef has many great examples of burning vagrant images. ● Start building base images early. They will save you a lot of time. ● Help bootstrapping process by including install scripts and configuration management tool in base box

Slide 7

Slide 7 text

Configuration Management Main Contenders ● Chef - Ruby, mostly declarative, large community ● Puppet - Custom DSL, declarative, large community ● SaltStack - YAML, jinja, python modules and extension points ● Ansible - YAML, jinja, agent-less, python based extension points Tips ● Prototype more than one system out. You will be stuck with it for a while. ● Any one of these systems is better than nothing. Don’t rely on bash scripts for too long. ● Get a test system and linting tool in place for whatever you choose from day one ○ Make sure you treat your configuration building like code from day one

Slide 8

Slide 8 text

Provisioning Tools Full Infrastructure ● CloudFormation - AWS specific, declarative, fragile, json based, very complete ● HEAT - OpenStack version of CloudFormation ● Terraform - Cross cloud, declarative, still buggy, from Hashicorp, much potential ● Via cloud init bootstrapping config management systems these tools can do orchestration as well ● Much overlap with the orchestration tools found on next page Tips ● If you are in AWS you should probably leverage ASGs ● If using cloudformation you’ll probably want a tool allow for comments and multiple files ● Be careful with cloudformation. Lots of horror stories of getting in bad states.

Slide 9

Slide 9 text

Orchestration Tools Tools to help script SSH ● Bash SSH loop - Please no, hard to catch failure, not parallel ● Fabric - Python, task based, parallel execution ● Capistrano - Ruby, task based, parallel execution More than SSH ● Ansible - Python+yaml driven, ad-hoc shell, dynamic nodes ● SaltStack - ZeroMQ based, Modules, Master/minion model ● Rundeck - API-driven, Centralized, Workflows ● MCollective - Probably worth looking into if you use puppet? ● OpsWorks - Chef tightly integrated with AWS, also integrated with cloudformation More than just orchestration ● Asgard - Grails application, netflix OSS, AWS specific, Opinionated ● Elastic BeanStalk - AWS managed single app deployment, easier onboarding, bad docs

Slide 10

Slide 10 text

Other IaaS tips ● If deploying the IaaS provider spend time learning linux ○ Know how your init system works ○ Have at least basic knowledge of emacs or vim ○ Spend some time with unix tools (pipes / bash / grep / find / awk) ● Building packages early will make a lot of things easier ○ gradle-debian-plugin works to make deb packages ● Watch Docker since it is changing the landscape in a big way ○ Enables a polyglot stack much easier ○ gradle-docker works well to build docker containers from gradle ● Have a log aggregation system in place in all environments including vagrant ○ Splunk, Logstash/Kibana, Graylog2, Sentry (open source) ● Use vagrant so your dev environment is as close to production as possible

Slide 11

Slide 11 text

Questions?