Chapter 4. How to Create Reusable Infrastructure with Terraform Modules
At the end of Chapter 3, you deployed the architecture shown in Figure 4-1.
Figure 4-1. A load balancer, web server cluster, and database
This works great as a first environment, but you typically need at least two environments: one for your team’s internal testing (“staging”) and one that real users can access (“production”), as shown in Figure 4-2. Ideally, the two environments are nearly identical, though you might run slightly fewer/smaller servers in staging to save money.
Figure 4-2. Two environments, each with its own load balancer, web server cluster, and database
How do you add this production environment without having to copy and paste all of the code from staging? For example, how do you avoid having to copy and paste all the code in stage/services/webserver-cluster into prod/services/webserver-cluster and all the code in stage/data-stores/mysql into prod/data-stores/mysql?
In a general-purpose programming language such as Ruby, if you had the same code copied and pasted in several places, you could put that code inside of a function and reuse that function everywhere:
defexample_function()puts"Hello, World"end# Other places in your codeexample_function()
With Terraform, you can put your ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access