Tools: Installing Terraform and Setting Up Your Environment

Tools: Installing Terraform and Setting Up Your Environment

What You'll Learn

Prerequisites

Step 1: Install Terraform

For Ubuntu/Debian

For Amazon Linux 2 (Recommended)

Verify Installation

Step 2: Install AWS CLI (Recommended)

For Ubuntu/Debian

For Amazon Linux 2

Verify Installation

Step 3: Create IAM User for Terraform

In AWS Console:

Step 4: Configure AWS Credentials

Verify Configuration

Step 5: Set Up Your Working Directory

Step 6: (Optional) Install VS Code with Terraform Extension

Install VS Code

Install Terraform Extension

Step 7: Test Your Setup

Troubleshooting Common Issues

Issue 1: "terraform: command not found"

Issue 2: "Unable to locate credentials"

Issue 4: Permission denied errors

What's Next?

Key Takeaways

πŸ“Œ Wrapping Up

πŸ’‘ What’s Next

🌐 Portfolio & Work

πŸ› οΈ Services I Offer

🀝 Let’s Connect πŸ‘‹ Hey there, tech enthusiasts! I'm Sarvar, a Cloud Architect with a passion for transforming complex technological challenges into elegant solutions. With extensive experience spanning Cloud Operations (AWS & Azure), Data Operations, Analytics, DevOps, and Generative AI, I've had the privilege of architecting solutions for global enterprises that drive real business impact. Through this article series, I'm excited to share practical insights, best practices, and hands-on experiences from my journey in the tech world. Whether you're a seasoned professional or just starting out, I aim to break down complex concepts into digestible pieces that you can apply in your projects. Let's dive in and explore the fascinating world of cloud technology together! πŸš€ In this guide, we will walk through the step-by-step process of installing Terraform and preparing your local environment for infrastructure automation. ⚠️ Important: Never share or commit these credentials to version control! You'll be prompted for: Create a simple test file: Run Terraform commands: Solution: Add Terraform to PATH or reinstall Solution: Run aws configure again and verify credentials Solution: Check ~/.aws/credentials file exists and has correct format Solution: Verify IAM user has necessary permissions In the next article, we'll: βœ… Terraform is installed and working

βœ… AWS CLI is configured with credentialsβœ… You can verify your AWS identityβœ… Your development environment is readyβœ… You understand the basic Terraform commands Next Article: Part 3: Provisioning Your First AWS Resource Thank you for reading. I hope this article provided practical insights and a clearer understanding of the topic. If you found this useful: More deep dives are coming soon on: Follow along for weekly insights and hands-on guides. You can explore my full body of work, certifications, architecture projects, and technical articles here: If you're looking for hands-on guidance or collaboration, I provide: I’d love to hear your thoughts. Feel free to drop a comment or connect with me on: For collaborations, consulting, or technical discussions, reach out at: πŸ“§ [email protected] Found this helpful? Share it with your team. ⭐ Star the repo β€’ πŸ“– Follow the series β€’ πŸ’¬ Ask questions Made by Sarvar Nadaf

🌐 https://sarvarnadaf.com Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

# Update package list -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update # Install required packages -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y gnupg software-properties-common -weight: 500;">wget # Add HashiCorp GPG key -weight: 500;">wget -O- https://-weight: 500;">apt.releases.hashicorp.com/gpg | \ gpg --dearmor | \ -weight: 600;">sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg # Add HashiCorp repository echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ https://-weight: 500;">apt.releases.hashicorp.com $(lsb_release -cs) main" | \ -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/hashicorp.list # Update and -weight: 500;">install Terraform -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y terraform # Update package list -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update # Install required packages -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y gnupg software-properties-common -weight: 500;">wget # Add HashiCorp GPG key -weight: 500;">wget -O- https://-weight: 500;">apt.releases.hashicorp.com/gpg | \ gpg --dearmor | \ -weight: 600;">sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg # Add HashiCorp repository echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ https://-weight: 500;">apt.releases.hashicorp.com $(lsb_release -cs) main" | \ -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/hashicorp.list # Update and -weight: 500;">install Terraform -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y terraform # Update package list -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update # Install required packages -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y gnupg software-properties-common -weight: 500;">wget # Add HashiCorp GPG key -weight: 500;">wget -O- https://-weight: 500;">apt.releases.hashicorp.com/gpg | \ gpg --dearmor | \ -weight: 600;">sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg # Add HashiCorp repository echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ https://-weight: 500;">apt.releases.hashicorp.com $(lsb_release -cs) main" | \ -weight: 600;">sudo tee /etc/-weight: 500;">apt/sources.list.d/hashicorp.list # Update and -weight: 500;">install Terraform -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y terraform # Install -weight: 500;">yum-config-manager -weight: 600;">sudo -weight: 500;">yum -weight: 500;">install -y -weight: 500;">yum-utils # Add HashiCorp repository -weight: 600;">sudo -weight: 500;">yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo # Install Terraform -weight: 600;">sudo -weight: 500;">yum -y -weight: 500;">install terraform # Install -weight: 500;">yum-config-manager -weight: 600;">sudo -weight: 500;">yum -weight: 500;">install -y -weight: 500;">yum-utils # Add HashiCorp repository -weight: 600;">sudo -weight: 500;">yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo # Install Terraform -weight: 600;">sudo -weight: 500;">yum -y -weight: 500;">install terraform # Install -weight: 500;">yum-config-manager -weight: 600;">sudo -weight: 500;">yum -weight: 500;">install -y -weight: 500;">yum-utils # Add HashiCorp repository -weight: 600;">sudo -weight: 500;">yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo # Install Terraform -weight: 600;">sudo -weight: 500;">yum -y -weight: 500;">install terraform terraform version terraform version terraform version Terraform v1.14.x on linux_amd64 Terraform v1.14.x on linux_amd64 Terraform v1.14.x on linux_amd64 # Download AWS CLI installer -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # Install unzip if not present -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y unzip # Unzip the installer unzip awscliv2.zip # Run the installer -weight: 600;">sudo ./aws/-weight: 500;">install # Clean up rm -rf aws awscliv2.zip # Download AWS CLI installer -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # Install unzip if not present -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y unzip # Unzip the installer unzip awscliv2.zip # Run the installer -weight: 600;">sudo ./aws/-weight: 500;">install # Clean up rm -rf aws awscliv2.zip # Download AWS CLI installer -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # Install unzip if not present -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y unzip # Unzip the installer unzip awscliv2.zip # Run the installer -weight: 600;">sudo ./aws/-weight: 500;">install # Clean up rm -rf aws awscliv2.zip # Download and -weight: 500;">install -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip -weight: 600;">sudo ./aws/-weight: 500;">install rm -rf aws awscliv2.zip # Download and -weight: 500;">install -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip -weight: 600;">sudo ./aws/-weight: 500;">install rm -rf aws awscliv2.zip # Download and -weight: 500;">install -weight: 500;">curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip -weight: 600;">sudo ./aws/-weight: 500;">install rm -rf aws awscliv2.zip aws --version aws --version aws --version aws-cli/2.x.x Python/3.x.x Linux/x.x.x aws-cli/2.x.x Python/3.x.x Linux/x.x.x aws-cli/2.x.x Python/3.x.x Linux/x.x.x aws configure aws configure aws configure AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID> AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY> Default region name [None]: us-east-1 (or your preferred region) Default output format [None]: json AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID> AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY> Default region name [None]: us-east-1 (or your preferred region) Default output format [None]: json AWS Access Key ID [None]: <YOUR_ACCESS_KEY_ID> AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY> Default region name [None]: us-east-1 (or your preferred region) Default output format [None]: json aws sts get-caller-identity aws sts get-caller-identity aws sts get-caller-identity { "UserId": "AIDASRZSGHJSDC6XXXXX", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/terraform" } { "UserId": "AIDASRZSGHJSDC6XXXXX", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/terraform" } { "UserId": "AIDASRZSGHJSDC6XXXXX", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/terraform" } # Create project directory mkdir -p ~/terraform-projects cd ~/terraform-projects # Create your first project folder mkdir my-first-terraform cd my-first-terraform # Create project directory mkdir -p ~/terraform-projects cd ~/terraform-projects # Create your first project folder mkdir my-first-terraform cd my-first-terraform # Create project directory mkdir -p ~/terraform-projects cd ~/terraform-projects # Create your first project folder mkdir my-first-terraform cd my-first-terraform # Ubuntu/Debian -weight: 500;">wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg -weight: 600;">sudo -weight: 500;">install -D -o root -g root -m 644 packages.microsoft.gpg /etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg -weight: 600;">sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/-weight: 500;">apt/sources.list.d/vscode.list' -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y code # Ubuntu/Debian -weight: 500;">wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg -weight: 600;">sudo -weight: 500;">install -D -o root -g root -m 644 packages.microsoft.gpg /etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg -weight: 600;">sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/-weight: 500;">apt/sources.list.d/vscode.list' -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y code # Ubuntu/Debian -weight: 500;">wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg -weight: 600;">sudo -weight: 500;">install -D -o root -g root -m 644 packages.microsoft.gpg /etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg -weight: 600;">sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/-weight: 500;">apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/-weight: 500;">apt/sources.list.d/vscode.list' -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">update -weight: 600;">sudo -weight: 500;">apt-get -weight: 500;">install -y code cat > test.tf << 'EOF' terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } # This is just a test - we won't create any resources yet output "account_id" { value = data.aws_caller_identity.current.account_id } data "aws_caller_identity" "current" {} EOF cat > test.tf << 'EOF' terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } # This is just a test - we won't create any resources yet output "account_id" { value = data.aws_caller_identity.current.account_id } data "aws_caller_identity" "current" {} EOF cat > test.tf << 'EOF' terraform { required_version = ">= 1.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } # This is just a test - we won't create any resources yet output "account_id" { value = data.aws_caller_identity.current.account_id } data "aws_caller_identity" "current" {} EOF # Initialize Terraform terraform init # Validate configuration terraform validate # See what would happen (no resources created) terraform plan # Initialize Terraform terraform init # Validate configuration terraform validate # See what would happen (no resources created) terraform plan # Initialize Terraform terraform init # Validate configuration terraform validate # See what would happen (no resources created) terraform plan Terraform has been successfully initialized! Success! The configuration is valid. Changes to Outputs: + account_id = "123456789012" Terraform has been successfully initialized! Success! The configuration is valid. Changes to Outputs: + account_id = "123456789012" Terraform has been successfully initialized! Success! The configuration is valid. Changes to Outputs: + account_id = "123456789012" rm test.tf rm -rf .terraform .terraform.lock.hcl rm test.tf rm -rf .terraform .terraform.lock.hcl rm test.tf rm -rf .terraform .terraform.lock.hcl - Install Terraform on Linux (Ubuntu/Amazon Linux) - Install AWS CLI - Configure AWS credentials - Verify your setup - Set up VS Code for Terraform development - A Linux server or local machine (Ubuntu 20.04+ or Amazon Linux 2) - AWS account with IAM user credentials - Basic command line knowledge - Go to IAM β†’ Users β†’ Create User - Username: terraform (or your preferred name) - Select "Provide user access to the AWS Management Console" (optional) - Attach policies: AdministratorAccess (for learning; use restricted policies in production) - Create user - Go to Security Credentials β†’ Create Access Key - Select "Command Line Interface (CLI)" - Download or copy: Access Key ID Secret Access Key - Access Key ID - Secret Access Key - Access Key ID - Secret Access Key - Open VS Code - Go to Extensions (Ctrl+Shift+X) - Search for "HashiCorp Terraform" - Click Install - Syntax highlighting - Auto-completion - Formatting (terraform fmt) - Create our first AWS resource (S3 bucket) - Understand Terraform workflow (init, plan, apply, destroy) - Learn about Terraform state - Explore basic Terraform syntax - Terraform Documentation - AWS CLI Documentation - Terraform AWS Provider - ❀️ Like if it added value - πŸ¦„ Unicorn if you’re applying it today - πŸ’Ύ Save it for your next optimization session - πŸ”„ Share it with your team - Cloud Operations - GenAI & Agentic AI - DevOps Automation - Data & Platform Engineering - Cloud Architecture Consulting (AWS / Azure) - DevSecOps & Automation Design - FinOps Optimization Reviews - Technical Writing (Cloud, DevOps, GenAI) - Product & Architecture Reviews - Mentorship & 1:1 Technical Guidance