TerraWeek Day 01: Introduction to Terraform and Terraform Basics

TerraWeek Day 01: Introduction to Terraform and Terraform Basics

  • Introduction:

    Welcome to the TerraWeek challenge, a journey into the world of Terraform - a powerful tool for managing infrastructure as code. Over the next seven days, we'll dive deep into Terraform, exploring its capabilities, best practices, and real-world applications.

  • What is Terraform and how can it help you manage infrastructure as code?

    HashiCorp Terraform is an Infrastructure As A Code (IAAC)tool that lets you define both cloud and on-prem resources in human-readable configuration files that you can version, reuse, and share.

    Terraform is a declarative, open-source tool that allows you to define your infrastructure as code using a high-level configuration language. With Terraform, you can specify the desired state of your infrastructure in a human-readable configuration file, known as a Terraform configuration file or HCL (HashiCorp Configuration Language) file.

    How can it help you manage infrastructure as a code?

    1. Multi-Cloud Support: Terraform supports multiple cloud providers, including AWS, Azure, GCP, and more, making it a versatile choice for hybrid or multi-cloud environments

    2. Modularity: Terraform modules allow you to encapsulate and reuse infrastructure configurations, promoting code reusability and maintainability.

    3. Automation: Terraform automates the provisioning and configuration of infrastructure resources, reducing manual and error-prone tasks.

    4. Version Control: Infrastructure code can be versioned and managed just like application code, providing a history of changes and the ability to collaborate effectively.

  • Why do we need Terraform and how does it simplify infrastructure provisioning?

    Traditional infrastructure provisioning often involves manual processes, which can be time-consuming and error-prone. With Terraform, you can define your infrastructure as code, making it easier to:

    1. Reproducibility: Terraform enables you to create and manage infrastructure consistently across different environments, ensuring that development, staging, and production environments match.

    2. Change Management: Terraform tracks changes to your infrastructure and allows you to plan and apply updates safely, minimizing downtime and risk.

    3. Scalability: As your infrastructure needs grow, Terraform can easily scale with you. You can reuse modules, create templates, and deploy resources across multiple environments effortlessly.

  • How can you install Terraform and set up the environment for AWS?

    Run the following commands for the installation of Terraform on Linux

      sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
      wget -O- https://apt.releases.hashicorp.com/gpg | \
      gpg --dearmor | \
      sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
      #Verify the key's fingerprint.
      gpg --no-default-keyring \
      --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
      echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
      https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
      sudo tee /etc/apt/sources.list.d/hashicorp.list
      sudo apt update
      sudo apt-get install terraform

    To check the version run a command- terraform --version

  • Explain the important terminologies of Terraform with the example at least (5 crucial terminologies)

    1. Resource: In Terraform, a resource represents a tangible infrastructure component, such as a virtual machine, database, or network. Here's an example of defining an AWS EC2 instance resource:

      resource "Ec2_instance" "example" {
        ami           = "ami-0c55b159cbfafe1f0"
        instance_type = "t2.micro"

    2. Provider: A provider is responsible for interacting with a specific cloud or service API. It defines the connection details and credentials required to manage resources on that platform. For AWS, you might configure a provider like this:

      provider "aws" {
        region = "us-east-2"

    3. Variable: Variables allow you to parameterize your Terraform configurations, making them more flexible and reusable. Example:

      variable "region" {
        type = string
        default = "us-east-2"

    4. Module: Modules are reusable components that encapsulate a set of resources and their configurations. They promote code modularity and help you structure your infrastructure code. Here's an example of using a module:

       module "s3_bucket_tf" {
         source = "terraform-aws-modules/s3-TF/aws"
         bucket_name = "tf-bucket"
         acl         = "private"
         region      = "us-east-2"

    5. Output: Outputs in Terraform allow you to extract information from your infrastructure and make it available for other configurations or external systems. For example, you can output the public IP of an EC2 instance:

      output "instance_public_ip" {
        value = aws_instance.example.public_ip