Terraform with Python

Loading

Terraform is an Infrastructure as Code (IaC) tool that automates cloud resource provisioning. Python can be integrated with Terraform to:
Automate Terraform execution
Manage infrastructure programmatically
Use APIs for dynamic configurations
Handle Terraform state and outputs

This guide explains how to use Terraform with Python, covering installation, automation, and best practices.


1. Setting Up Terraform and Python

1.1 Installing Terraform

For Linux/macOS

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt update && sudo apt install terraform -y

For Windows

  1. Download from Terraform’s website.
  2. Add Terraform to the system PATH.
  3. Verify installation: terraform --version

1.2 Installing Python and Dependencies

Ensure Python is installed (python3 --version), then install required libraries:

pip install python-terraform boto3
  • python-terraform: Interacts with Terraform CLI
  • boto3: AWS SDK for managing cloud resources

2. Running Terraform with Python

2.1 Using Python to Execute Terraform Commands

The python-terraform library allows running Terraform commands inside Python scripts.

from python_terraform import Terraform

# Initialize Terraform
tf = Terraform(working_dir='./terraform_project')

# Run Terraform commands
tf.init()
tf.plan()
tf.apply(skip_plan=True)

print("Terraform execution completed.")

2.2 Passing Variables from Python to Terraform

You can dynamically pass variables to Terraform from Python:

tf.apply(var={'region': 'us-east-1', 'instance_type': 't2.micro'})

In Terraform (main.tf):

variable "region" {}
variable "instance_type" {}

resource "aws_instance" "example" {
ami = "ami-12345678"
instance_type = var.instance_type
region = var.region
}

3. Automating Terraform Execution with Python

3.1 Example: Deploying an AWS EC2 Instance

Step 1: Create Terraform configuration (main.tf)

provider "aws" {
region = "us-east-1"
}

resource "aws_instance" "web" {
ami = "ami-12345678"
instance_type = "t2.micro"
}

Step 2: Python script to automate Terraform deployment

import os
from python_terraform import Terraform

# Set AWS credentials
os.environ['AWS_ACCESS_KEY_ID'] = 'your_access_key'
os.environ['AWS_SECRET_ACCESS_KEY'] = 'your_secret_key'

# Define Terraform directory
tf = Terraform(working_dir='./terraform_project')

# Run Terraform commands
tf.init()
tf.apply(skip_plan=True)

print("AWS EC2 instance deployed successfully!")

Run the script:

python deploy.py

4. Using Terraform State and Outputs in Python

4.1 Reading Terraform Outputs

Terraform outputs can be accessed from Python:

output = tf.output()
print("Instance Public IP:", output['public_ip']['value'])

Modify main.tf to define an output:

output "public_ip" {
value = aws_instance.web.public_ip
}

5. Integrating Terraform with Python for CI/CD

5.1 Automating Terraform in Jenkins Pipelines

Create a Jenkinsfile to run Terraform:

pipeline {
agent any

stages {
stage('Initialize Terraform') {
steps {
sh 'terraform init'
}
}

stage('Apply Terraform') {
steps {
sh 'terraform apply -auto-approve'
}
}
}
}

5.2 Using Python in CI/CD to Manage Infrastructure

Python can be used to:
Automate Terraform workflows in GitHub Actions
Trigger Terraform scripts dynamically
Manage infrastructure from a Flask/Django app

Example: Trigger Terraform from a Flask API

from flask import Flask
from python_terraform import Terraform

app = Flask(__name__)
tf = Terraform(working_dir='./terraform_project')

@app.route('/deploy', methods=['GET'])
def deploy():
tf.apply(skip_plan=True)
return "Infrastructure Deployed!"

if __name__ == '__main__':
app.run(debug=True)

Run the Flask server:

python app.py

Then, visit:

http://localhost:5000/deploy

Leave a Reply

Your email address will not be published. Required fields are marked *