modernisation of Puppet code base • Will be implementing Terraform for FNB in Q3 • Moved back to SA from UK “recently” (3 years ago) • Owner/Director of Ascendant Systems
gave us Vagrant and Packer • Fully open source • Written in Golang • Single binary • Multiple platforms • Frequent stable releases • Supported version: Terraform Enterprise “Terraform enables you to safely and predictably create, change, and improve production infrastructure”
SCM • Testable • Can be integrated into CI pipelines • Declarative DSL using HCL • All resources declared once • Downside: Rigid ‘code’ structure • Limited conditionals • Safety first • Separate Plan and apply phase
specific service • Same syntax/structure for any provider • Can be used for on-premises infra • Extensive AWS support • New providers/resources added continuously
and Operations can work with the same toolset. • Moves Operations teams closer to the developer mindset: • Testing changes • Run Operational changes in CI • Allows Developers a means of applying operational changes.
• No built-in secret management • Must be handled separately • We use eyaml • Integrates with Hashicorp’s Vault • TLS provider to manage certs • Auditing: SCM and CI are crucial
release - 0.5.0 • Some rough edges • Required a wrapper • domed city • Initial experiences: • Far too much duplication of config • Use a nested directory structure • Ecosystem directories - one per ecosystem • Nested environment directories within each ecosystem
- more DRY • Moving building blocks into SCM • Wider implementation • More teams, better growth • Adding to CI pipelines • Visibility within organisation • Slack / chat notifications / monitoring • Auditing and Change management
code to be easily re-used • Code can be stored in public repos - Github • Nested modules means even more reduction of duplication • “local” modules allows code to be tested locally before being moved into their own repo • One main drawback - no “count” parameter
• Local • error prone • must be checked into SCM in order to be shared • Secrets in plain text in SCM • Remote • Easily shared • S3 bucket to share state • No native locking (TF < 0.9.0)
of the plan phase! • Exercise caution - you can remove all of your infrastructure in a single run • Use “prevent_destroy” if needed - for example, when creating database instances • ALWAYS check the output of the plan phase! especially in CI pipelines