Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt
-
Upload
opencredo -
Category
Technology
-
view
1.390 -
download
0
Transcript of Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt
![Page 1: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/1.jpg)
EVOLVING YOUR INFRASTRUCTURE WITH TERRAFORM
Nicki Watt - CTO@techiewatt
12-06-2017
![Page 2: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/2.jpg)
ABOUT ME / OPENCREDO
▸OpenCredo CTO
▸Premiere HashiCorp partner
▸Hands on software development consultancy
▸Cloud, Data Engineering, DevSecOps
2
![Page 3: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/3.jpg)
AGENDA
▸Evolving your Terraform
▸Orchestrating your Terraform
▸Conclusion
3
![Page 4: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/4.jpg)
4
Evolving your Terraform (a journey from a client’s perspective)
![Page 5: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/5.jpg)
6
Example: E-Commerce System in AWS(delivered as a Micro-services architecture)
![Page 6: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/6.jpg)
7
Sample System
Simple
Kubernetes (K8S)
Environment
![Page 7: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/7.jpg)
8public DMZ & Bastion Box
k8s clusterSample System
Simple
Kubernetes (K8S)
Environment
database (RDS)
![Page 8: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/8.jpg)
9
Pass #1 -
In the beginning …
![Page 9: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/9.jpg)
10
https://github.com/mycompany/myproject terraform.tf
## Test VPCresource "aws_vpc" "test" { cidr_block = "10.0.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bastionresource "aws_instance" “test_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . .}
- terraform-prod.tf - terraform.tf - terraform.tfvars - terraform.tfstate
![Page 10: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/10.jpg)
11
We must to go to production this week …
![Page 11: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/11.jpg)
terraform.tf
## Test VPCresource "aws_vpc" "test" { cidr_block = "10.0.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bastionresource "aws_instance" “test_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . .}
## Prod VPCresource "aws_vpc" "prod" { cidr_block = "172.16.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
12
https://github.com/mycompany/myproject
- terraform-prod.tfbkp - terraform.tf - terraform.tfvars - terraform.tfstate
![Page 12: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/12.jpg)
terraform-test.tf
## Test VPCresource "aws_vpc" "test" { cidr_block = "10.0.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bast-ionresource "aws_instance" “test_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . .}
## Prod VPCresource "aws_vpc" "prod" { cidr_block = "10.0.0.3/24" enable_dns_support = true enable_dns_hostnames = true}
13
https://github.com/mycompany/myproject
terraform-prod.tf
## Prod VPCresource "aws_vpc" "prod" { cidr_block = "172.16.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bastionresource "aws_instance" “prod_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . .
- terraform-prod.tf - terraform-test.tf - terraform.tfvars - terraform.tfstate
![Page 13: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/13.jpg)
14
Need an upgraded CIDR range in TEST …
![Page 14: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/14.jpg)
15
- terraform-prod.tfbkp - terraform-test.tf - terraform.tfvars - terraform.tfstate
https://github.com/mycompany/myproject terraform-test.tf
## Test VPCresource "aws_vpc" "test" { cidr_block = "10.0.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bast-ionresource "aws_instance" “test_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . .}
## Prod VPCresource "aws_vpc" "prod" { cidr_block = "10.0.0.3/24" enable_dns_support = true enable_dns_hostnames = true}
terraform-prod.tf
## Prod VPCresource "aws_vpc" "prod" { cidr_block = "172.16.0.0/21" enable_dns_support = true enable_dns_hostnames = true}
## Staging Bastionresource "aws_instance" “prod_bastion" { ami = "ami-7abd5555" instance_type = "t2.large" . . . 15
![Page 15: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/15.jpg)
16
Help!
I seem to have deleted production
![Page 16: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/16.jpg)
17“terralith"
https://sites.google.com/site/laurenmcnanyspln/magnetic-fields
![Page 17: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/17.jpg)
▸Single state file
▸Single definition file
▸Hard coded config
▸Local state
Terralith: Characteristics
18
![Page 18: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/18.jpg)
▸Can’t manage environments separately
▸Config not that intuitive (big ball of mud)
▸Maintenance challenge: Duplicate Defs (not DRY)
Terralith - Pain points
19
![Page 19: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/19.jpg)
20
Pass #2
![Page 20: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/20.jpg)
21“multi terralith"
https://sites.google.com/site/laurenmcnanyspln/magnetic-fields
![Page 21: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/21.jpg)
▸Envs - Separate State Management
▸Multiple Terraform Definition Files
▸Better Use of Variables
Multi Terralith: Characteristics
22
![Page 22: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/22.jpg)
+ test - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
23
https://github.com/mycompany/myproject
networks.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = true enable_dns_hostnames = true}
vms.tf
resource "aws_instance" "node" { count = "${var.node_count}" ami = "ami-7abd5555" instance_type = “${var.vm_type}” . . .}
+ prod - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
![Page 23: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/23.jpg)
24
https://github.com/mycompany/myproject
networks.tf
resource "aws_vpc" "core" { cidr_block = “${var.cidr}” enable_dns_support = true enable_dns_hostnames = true}
vms.tf
resource "aws_instance" "node" { count = "${var.node_count}" ami = "ami-7abd5555" instance_type = “${var.vm_type}” . . .}
+ test - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
+ prod - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
![Page 24: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/24.jpg)
+ test - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
25
https://github.com/mycompany/myproject
networks.tf
resource "aws_vpc" "core" { cidr_block = “${var.cidr}” enable_dns_support = true enable_dns_hostnames = true}
vms.tf
resource "aws_instance" "node" { count = "${var.node_count}" ami = "ami-7abd5555" instance_type = “${var.vm_type}” . . .}
+ prod - networks.tf - vms.tf - terraform.tfvars - terraform.tfstate
![Page 25: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/25.jpg)
Terralith - (recap)
26
▸Can’t manage environments separately
▸Config not that intuitive (big ball of mud)
▸Maintenance challenge: Duplicate Defs (not DRY)
![Page 26: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/26.jpg)
Multi Terralith
27
▸Manage environment separately (separate state files per env)
▸More intuitive configuration(multiple files)
▸Maintenance challenge: Duplicate Defs (not DRY)
✅
"
![Page 27: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/27.jpg)
28
Pass #3
![Page 28: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/28.jpg)
29
“terramod"
Alan Chia (https://commons.wikimedia.org/wiki/File:Lego_Color_Bricks.jpg)
![Page 29: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/29.jpg)
▸Reusable modules
▸Envs compose themselves from modules
▸Restructuring of repo
30
Terramod: Characteristics
![Page 30: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/30.jpg)
31
database
core
k8s-cluster
![Page 31: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/31.jpg)
32
database
core
k8s-cluster
- VPC- All Subnets- Core Routing & Gateways- Bastion Host (OpenVPN server)
- Instances- Security Groups
- Amazon RDS- DB Subnet Group
![Page 32: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/32.jpg)
33
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
https://github.com/mycompany/myproject
separate env management & module defs
![Page 33: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/33.jpg)
34
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
https://github.com/mycompany/myproject
define logical components as re-usable modules
![Page 34: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/34.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
35
https://github.com/mycompany/myproject core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
resource "aws_subnet" "private" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.priv_cidr}" ... }
![Page 35: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/35.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
36
https://github.com/mycompany/myproject core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
resource "aws_subnet" "private" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.priv_cidr}" ... }
input.tf
variable "cidr" {}variable "dns” {}variable "dnsh" {}variable "dmz_cidr" {}variable "priv_cidr" {}
...
![Page 36: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/36.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
37
https://github.com/mycompany/myproject core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
resource "aws_subnet" "private" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.priv_cidr}" ... }
input.tf
variable "cidr" {}variable "dns” {}variable "dnsh" {}variable "dmz_cidr" {}variable "priv_cidr" {}
...
output.tf
output "priv_subnet_id" { value ="${aws_subnet.private.id}"}
...
![Page 37: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/37.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
38
https://github.com/mycompany/myproject
defines the contract of the module
![Page 38: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/38.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
39
https://github.com/mycompany/myproject terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}"
}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = "${module.core.priv_subnet_id}" }
![Page 39: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/39.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
40
https://github.com/mycompany/myproject terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}"
}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = "${module.core.priv_subnet_id}" }
![Page 40: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/40.jpg)
+ envs/[test|prod] - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
41
https://github.com/mycompany/myproject terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}"
}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = "${module.core.priv_subnet_id}" }
![Page 41: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/41.jpg)
▸Manage environment separately (separate state files per env)
▸More intuitive configuration(multiple files)
▸Maintenance challenge: Duplicate Defs (not DRY)
Multi Terralith
42
✅
"
![Page 42: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/42.jpg)
▸Manage environment separately (separate state files per env)
▸ Intuitive configuration(reusable modules)
▸Reduced Duplicate Definitions (DRYer)
Terramod
43
✅
"
✅
![Page 43: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/43.jpg)
44
Pass #4
![Page 44: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/44.jpg)
45
Alan Chia (https://commons.wikimedia.org/wiki/File:Lego_Color_Bricks.jpg)
terramod
Marcos Leal (https://commons.wikimedia.org/wiki/File:Army_(2995294027).jpg)
n
![Page 45: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/45.jpg)
▸Nested modules
▸base modules(low level infrastructure specific)
▸ logical modules(system specific)
▸Sometimes dedicated module repo46
Terramod : Characteristics n
![Page 46: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/46.jpg)
47
https://github.com/mycompany/myproject
+ envs + modules + project + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - k8s.tf - output.tf
logical (system specific) modules
![Page 47: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/47.jpg)
48
https://github.com/mycompany/myproject
+ envs + modules + common + aws + network + vpc + pub_subnet + priv_subnet + comps + instance + db-instance
+ envs + modules + project + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - k8s.tf - output.tf
logical (system specific) modules base (infra specific) modules
![Page 48: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/48.jpg)
49
https://github.com/mycompany/myproject
+ envs + modules + common + aws + network + vpc + pub_subnet + priv_subnet + comps + instance + db-instance
+ envs + modules + project + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - k8s.tf - output.tf
modules/project/core/core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
![Page 49: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/49.jpg)
modules/project/core/core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
+ envs + modules + project + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - k8s.tf - output.tf
50
https://github.com/mycompany/myproject
![Page 50: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/50.jpg)
modules/project/core/core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
+ envs + modules + common + aws + network + vpc + pub_subnet + priv_subnet + comps + instance + db-instance
50
https://github.com/mycompany/myproject
modules/project/core/core.tf
module "vpc" { source = "../../common/aws/net/vpc" cidr = "${var.vpc_cidr}"}
module "dmz-subnet" { source = "../../common/aws/net/pub-subnet" vpc_id = "${module.vpc.vpc_id}" subnet_cidrs = [ “${var.dmz_cidr}” ]}
module "priv-subnet" { source = "../../common/aws/net/priv-subnet" vpc_id = "${module.vpc.vpc_id}" subnet_cidrs = [ “${var.priv_cidr}” ]
![Page 51: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/51.jpg)
+ envs + modules + common + aws + network + vpc + pub_subnet + priv_subnet + comps + instance + db-instance
modules/project/core/core.tf
resource "aws_vpc" "core" { cidr_block = "${var.cidr}" enable_dns_support = "${var.dns}" enable_dns_hostnames = "${var.dnsh}"}
resource "aws_subnet" "dmz" { vpc_id = "${aws_vpc.core.id}" cidr_block = "${var.dmz_cidr}" map_public_ip_on_launch = 1 ... }
51
https://github.com/mycompany/myproject
modules/project/core/core.tf
module "vpc" { source = "../../common/aws/net/vpc" cidr = "${var.vpc_cidr}"}
module "dmz-subnet" { source = "../../common/aws/net/pub-subnet" vpc_id = "${module.vpc.vpc_id}" subnet_cidrs = [ “${var.dmz_cidr}” ]}
module "priv-subnet" { source = "../../common/aws/net/priv-subnet" vpc_id = "${module.vpc.vpc_id}" subnet_cidrs = [ “${var.priv_cidr}” ]
BUT …Issue #953 - Support the count parameter for modules
![Page 52: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/52.jpg)
▸Manage environment separately (separate state files per env)
▸ Intuitive configuration(reusable modules)
▸Reduced Duplicate Definitions (DRYer)
Terramod (recap)
52
✅
"
✅
![Page 53: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/53.jpg)
▸Manage environment separately (separate state files per env)
▸ Intuitive configuration(reusable modules)
▸Reduced Duplicate Definitions further (as DRY as possible given restrictions)
Terramod
53
n
✅
"
✅
![Page 54: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/54.jpg)
54
Time goes on …
![Page 55: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/55.jpg)
55
Maintenance required … - Make bastion box smaller -
![Page 56: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/56.jpg)
+ envs/prod - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
56
terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}" bastion_flav = "${var.bastion_flav}"}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" node_flavour = "${var.bastion_flav}" }
terraform.tfvars
vpc_cidr = “10.0.0.0/21”bastion_flav = “r4.large”node_flavour = “m4.4xlarge”
![Page 57: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/57.jpg)
+ envs/prod - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
57
terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}" bastion_flav = "${var.bastion_flav}"}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" node_flavour = "${var.bastion_flav}" }
terraform.tfvars
vpc_cidr = “10.0.0.0/21”bastion_flav = “m4.large”node_flavour = “m4.4xlarge”
![Page 58: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/58.jpg)
+ envs/prod - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
58
terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}" bastion_flav = "${var.bastion_flav}"}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" node_flavour = "${var.bastion_flav}" }
terraform.tfvars
vpc_cidr = “10.0.0.0/21”bastion_flav = “m4.large”node_flavour = “m4.4xlarge”
![Page 59: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/59.jpg)
59
Help!
I seem to be rebuilding the K8S cluster!
![Page 60: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/60.jpg)
+ envs/prod - config.tf - terraform.tf - terraform.tfvars - terraform.tfstate+ modules + core - input.tf - core.tf - output.tf + k8s-cluster - input.tf - dns.tf - vms.tf - output.tf
60
terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}" bastion_flav = "${var.bastion_flav}"}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" node_flavour = "${var.bastion_flav}" }
terraform.tfvars
vpc_cidr = “10.0.0.0/21”bastion_flav = “m4.large”node_flavour = “m4.4xlarge”
OOPS! Typo
![Page 61: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/61.jpg)
▸Can’t manage logical parts of our infrastructure independently
Next set of pain!
61
![Page 62: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/62.jpg)
62
Pass #5
![Page 63: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/63.jpg)
63
“terraservices"
https://commons.wikimedia.org/wiki/File:Caffeine_Molecule.png
![Page 64: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/64.jpg)
▸ Independent management of logical comps
▸ Isolates & Reduces Risk
▸ Aids with Multi Team Setups
▸Distributed (Remote State)
▸Requires additional orchestration effort
Terraservices - Characteristics
64
![Page 65: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/65.jpg)
65
database
core
k8s-cluster
- VPC- All Subnets- Core Routing & Gateways- Bastion Host (OpenVPN server)
- Instances- Security Groups
- Amazon RDS- DB Subnet Group
![Page 66: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/66.jpg)
+ envs + test - ... - ... - ... + k8s-cluster - ... + prod + core - ... - ... - ... + k8s-cluster - ...
66
- terraform.tfstate - terraform.tfvars - xxx.tf
Terraservices - Repo Structure
From
![Page 67: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/67.jpg)
67
- terraform.tfstate - terraform.tfvars - xxx.tf
To
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
Terraservices - Repo Structure
![Page 68: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/68.jpg)
+ envs + test - ... - ... - ... + k8s-cluster - ... + prod + core - ... - ... - ... + k8s-cluster - ...
68
envs/test/terraform.tf
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}" dmz_cidr = "${var.dmz_cidr}" priv_cidr = "${var.priv_cidr}"
}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = "${module.core.priv_subnet_id}" }
Terramod - Connecting (recap)
From
![Page 69: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/69.jpg)
69
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
envs/test/core/terraform.tf
# Optional but explicit! (Needs 0.9+) terraform { backend "local" { path = "terraform.tfstate" }}
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}"
envs/test/core/outputs.tf
output "priv_subnet_id" { value ="${module.core.priv_subnet_id}"}
Terraservices - Connecting
To
![Page 70: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/70.jpg)
70
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
envs/test/core/terraform.tf
# Optional but explicit! (Needs 0.9+) terraform { backend "local" { path = "terraform.tfstate" }}
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}"
envs/test/core/outputs.tf
output "priv_subnet_id" { value ="${aws_subnet.private.id}"}
envs/test/k8s-cluster/terraform.tf
data "terraform_remote_state" "core" { backend = "local" config { path = “../core/terraform.tfstate" }}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = “${data.terraform_remote_ state.core.priv_subnet_id}" } }
Terraservices - Connecting
To
![Page 71: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/71.jpg)
Terraservices - Characteristics
71
▸ Independent management of logical comps
▸ Isolates & Reduces Risk
▸ Aids with Multi Team Setups
▸Distributed (Remote State)
▸Requires additional orchestration effort
![Page 72: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/72.jpg)
72
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
envs/test/core/terraform.tf
# Optional but explicit! (Needs 0.9+) terraform { backend "local" { path = "terraform.tfstate" }}
module "core" { source = "../../modules/core" cidr = "${var.vpc_cidr}"
envs/test/core/outputs.tf
output "priv_subnet_id" { value ="${module.core.priv_subnet_id}"}
Terraservices - Distributed (Remote State)
From
![Page 73: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/73.jpg)
73
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
envs/test/core/terraform.tf
# Optional but explicit! (Needs 0.9+) terraform { backend "s3" { region = "eu-west-1" bucket = "myco/myproj/test" key = "core/terraform.tfstate" encrypt = "true" }}
envs/test/core/outputs.tf
output "priv_subnet_id" { value ="${module.core.priv_subnet_id}"}
Terraservices - Distributed (Remote State)
To
![Page 74: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/74.jpg)
74
+ envs + test + core - ... + database - ... + k8s-cluster - ... + prod + core - ... + database - ... + k8s-cluster - ...
envs/test/core/terraform.tf
# Optional but explicit! (Needs 0.9+) terraform { backend "s3" { region = "eu-west-1" bucket = "myco/myproj/test" key = "core/terraform.tfstate" encrypt = "true" }}
envs/test/core/outputs.tf
output "priv_subnet_id" { value ="${module.core.priv_subnet_id}"}
Terraservices - Distributed (Remote State)
To
envs/test/k8s-cluster/terraform.tf
data "terraform_remote_state" "core" { backend = "s3" config { region = "eu-west-1" bucket = "myco/myproj/test" key = "core/terraform.tfstate" encrypt = "true" }}
module "k8s-cluster" { source = "../../modules/k8s-cluster" num_nodes = "${var.k8s_nodes}" priv_subnet = “${data.terraform_remote_ state.core.priv_subnet_id}"
![Page 75: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/75.jpg)
75
+ envs + test|prod + core - ... + database - ... + k8s-cluster - ... + modules + common + aws + network + vpc + ...
Terraservices - Repo Isolation (Optional)
https://github.com/myco/myproj From
![Page 76: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/76.jpg)
76
+ envs + test|prod + core - ... + database - ... + k8s-cluster - ... + modules + common + aws + network + vpc + ...
Terraservices - Repo Isolation (Optional)
https://github.com/myco/myproj
https://github.com/myco/myproj-core
https://github.com/myco/myproj-db
https://github.com/myco/myproj-k8s
https://github.com/myco/tf-modcomm
To
![Page 77: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/77.jpg)
Terraservices - Characteristics
77
▸ Independent management of logical comps
▸ Isolates & Reduces Risk
▸ Aids with Multi Team Setups
▸Distributed (Remote State)
▸Requires additional orchestration effort
![Page 78: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/78.jpg)
78
Orchestrating your Terraform
![Page 79: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/79.jpg)
79
database
core
k8s-cluster
![Page 80: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/80.jpg)
80
database
core
k8s-cluster
![Page 81: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/81.jpg)
81
Orchestration System
![Page 82: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/82.jpg)
82
Orchestration System
Laptop, Local State & READMEs
![Page 83: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/83.jpg)
83
Orchestration System
Laptop, Local State & READMEs
![Page 84: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/84.jpg)
84
Orchestration System
Laptops, Local State & READMEs
![Page 85: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/85.jpg)
85
Orchestration System
Laptops, Local State & READMEs
Remote State
![Page 86: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/86.jpg)
86
Orchestration System
Laptops, Local State & READMEs
Remote State
![Page 87: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/87.jpg)
87
Orchestration System
Laptops, Remote State, Shared Services,
& READMEs
![Page 88: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/88.jpg)
88
Orchestration System
Who builds the infrastructure
that builds the infrastructure ?
![Page 89: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/89.jpg)
89
Orchestration System
Jenkins, Remote State,Custom Scripts, Shared Services,
& READMEs
![Page 90: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/90.jpg)
90
Orchestration System
Custom Systems & Tooling
![Page 91: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/91.jpg)
91
Orchestration System
SaaS Offerings (HashiCorp Enterprise
Products)
![Page 92: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/92.jpg)
92
It’s not just about the structure of the code …
You also need to evolve your supporting orchestration system &
processes
![Page 93: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/93.jpg)
93
Conclusion
![Page 94: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/94.jpg)
94
Evolving Terraform Setup
![Page 95: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/95.jpg)
95
EVOLVING YOUR TERRAFORM SETUP
▸Terralith
▸Multi Terralith - Envs: Independent management
▸Terramod
▸Terramod - Modules : Maintainability & Reuse
▸Terraservices - Logical Components: Independent management
n
![Page 96: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/96.jpg)
96
EVOLVING YOUR TERRAFORM SETUP
▸Terralith
▸Multi Terralith - Envs: Independent management
▸Terramod
▸Terramod - Modules : Maintainability & Reuse
▸Terraservices - Logical Components: Independent management
n
![Page 97: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/97.jpg)
97
EVOLVING YOUR TERRAFORM SETUP
▸Terralith
▸Multi Terralith - Envs: Independent management
▸Terramod
▸Terramod - Modules : Maintainability & Reuse
▸Terraservices - Logical Components: Independent management
n
![Page 98: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/98.jpg)
98
EVOLVING YOUR TERRAFORM SETUP
▸Terralith
▸Multi Terralith - Envs: Independent management
▸Terramod
▸Terramod - Modules : Maintainability & Reuse
▸Terraservices - Logical Components: Independent management
n
![Page 99: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/99.jpg)
99
EVOLVING YOUR TERRAFORM SETUP
▸Terralith
▸Multi Terralith - Envs: Independent management
▸Terramod
▸Terramod - Modules : Maintainability & Reuse
▸Terraservices - Logical Components: Independent management
n
![Page 100: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/100.jpg)
100
Also need to consider how to evolve the management & orchestration of Terraform
![Page 101: Hashidays London 2017 - Evolving your Infrastructure with Terraform By Nicki Watt](https://reader034.fdocuments.us/reader034/viewer/2022050614/5aab55e67f8b9a43728b4c55/html5/thumbnails/101.jpg)
101
Thanks!
@techiewatt