  Developing a software service requires a strict software development life
cycle and process. This process demands controlling all application code
through source control management as well as a rigorous versioning and
branching strategy. However, the platform and infrastructure also benefit from
this rigor. Software services must be deployed to a target run time environment
and provisioning that environment through manual user actions is tedious and
error-prone. Provisioning manually also becomes prohibitive as the number of
resources grow and spread globally over multiple regions. The answer is to
apply the same rigor to provisioning the infrastructure as applied to
developing the application software. Terraform provides a platform allowing
infrastructure resources to be defined in code. This code not only allows the
automation of the infrastructure provisioning but also allows for a strict
development and review life cycle, same as the application software.
