TF Series: Basics

This blog is the sub-part of "Terraform Associate 003 Series". To navigate back to the main Blog Page and know other topics of this series, click here. Here, we will be covering the Basic concepts of Terraform.

What is Terraform?

It is an Infrastructure as a Code (IaaC) and has been divided into Declarative and Cloud Agnostic IaaC. It is a good managing drift when compared to other IaC tools.

What is Terraform Cloud?

It is a SaaS offering for

  • Remote Stage Storage

  • Version Control Integrations

  • Collaborate on Infrastructure Changes in a single unified web portal [terraform.io/cloud].

Declarative Vs Imperative IaC tools

Declarative

  • What you see is what you get (Explicit)

  • More verbose, zero chance of misconfiguration.

  • Uses scripting Langs: JSON, YAML, XML

  • Other tools: AWS CFN, ARM templates (for AZ), Azure Blueprints, Cloud Deployment Manager (for GCP), Terraform

Imperative

  • You say what you want, and the rest is filled in (Implicit)

  • Less verbose, can end up with misconfiguration.

  • Does more than Declarative

  • Uses programming Langs: Python, Ruby, JavaScript

  • Other tools: AWS CDK, Pulumi

Declarative+

Terraform is declarative but the Terraform language features imperative-like functionality. Supports: Loops (For Each); Dynamic Blocks; Locals; Complex Data Structures (Map, Collections). Uses HCL (Terraform Language).

Infrastructure Lifecycle

Plan -> Design -> Build -> Test -> Deliver -> Maintain -> Retire.

Day 0: Plan & Design | Day 1: Develop & Iterate | Day 2: Go Live & Maintain.

Advantages of IaC Lifecycle

1) Reliability: IaC makes changes Idempotent, consistent, repeatable & predictable.

Idempotent: No matter how many times you run your IaC, you'll always end up with the same state that is expected.

2) Manageability: Enable mutation via code; Revised with minimal changes.

3) Sensibility: Avoid financial & reputational losses.

Non-Idempotent Vs Idempotent

Non-idempotent: In this case, when we deploy 2 VMs and then do some modifications in the code and re-deploy, it will give us a total of 4 VMs.
This means, that whenever the new configuration is done, it will provide other new deployments - which we don't usually want it to be like this. We expected 2 but, ended up with 4.

Idempotent: In this case, when we deploy 2 VMs and then modify the configuration & re-deploy that, it will modify in the previous state only and in total there will be only 2 VMs with new modifications. This will just delete, re-create or modify the older VMs to newer VMs. We expected 2 and ended up with 2.