Infrastructure as Code ▪ Provision on any infrastructure / service / cloud !6 Goals Amazon GitHub DigitalOcean Fastly Microsoft Azure Packet Heroku DNSimple Librato Google Cloud Docker VMWare Sphere Many more…
▪ Easily compose multiple tiers/services (IaaS to PaaS to SaaS) ▪ Safely change/iterate infrastructure over time ▪ Manage anything with an API ▪ One workflow, many clouds !7 Write, Plan, and Create Infrastructure as Code
human readable, machine editable JSON ▪ Dependency graph ▪ terraform plan shows you changes ▪ terraform apply executes those changes in order ▪ Collaboration, history, audit trail [Enterprise] !8 Key Features
Go, support for *nix, Windows ▪ Provider/Provisioner Plugins over RPC ▪ Split into Terraform Core and Terraform Providers (as of v0.10.0) ▪ Directed Acyclic Graph (DAG) !10 Architecture
Create Infrastructure as Code ▪ Provision on any infrastructure / service / cloud !18 Goals Amazon GitHub DigitalOcean Fastly Microsoft Azure Packet Heroku DNSimple Librato Google Cloud Docker VMWare Sphere Many more…
the specific Provider (API, SDK, Authentication) ▪ Define Resources that map to specific Services ▪ Resource: abstraction/lifecycle management for cloud units/ resources !19 Provider Responsibilities
versioning and release ▪ Enable the Provider community ▪ Per-project plugin management, version locking ▪ Minimal change to users !33 The Core/Provider split: Benefits
are able to write new plugins in order to support new functionality in Terraform ▪ If it has an API, it can (probably) be managed by Terraform !34 Plugins
Heroku app ▪ I already wrote the Lambda function ▪ Other things were already written (I’ll explain soon enough) ▪ Code is proof of concept, not production ready ▪ Live demos always contain dragons !38 DISCLAIMERS
▪ Setup a Lambda function ▪ Wrote a new Provider ▪ With 2 data sources ▪ Extended an existing Provider ▪ Added a new resource ▪ Installed locally ▪ Integrated and clicked a physical button (hopefully it worked) !39 What did we do..