Infrastructure as Code with Python

Loading

Infrastructure as Code (IaC) is the practice of automating infrastructure provisioning and management using code. Python is widely used in IaC to manage cloud resources, automate deployments, and configure systems.

What You’ll Learn

What is IaC?
Benefits of IaC
Tools for IaC with Python
Writing IaC with Terraform and Python
Automating AWS Infrastructure with Boto3
Using Ansible for Configuration Management
Deploying Kubernetes with Python


1. What is Infrastructure as Code (IaC)?

IaC enables automated infrastructure management through scripts and configuration files instead of manual setup.

Instead of using a GUI or CLI to configure servers, you define everything in code.
Popular cloud providers like AWS, Azure, and GCP support IaC.
Python simplifies automation, making infrastructure deployment fast, repeatable, and scalable.


2. Benefits of IaC

Automation: No manual intervention needed.
Scalability: Easily manage multiple environments (dev, staging, production).
Consistency: Eliminates configuration drift.
Version Control: Store infrastructure code in Git.
Cost Efficiency: Quickly scale up/down based on demand.


3. Tools for IaC with Python

3.1 Terraform

Infrastructure provisioning tool that works with AWS, Azure, GCP.
✔ Define infrastructure in .tf files.
✔ Use Python scripts to interact with Terraform.

3.2 AWS Boto3

AWS SDK for Python to automate cloud resources.
✔ Manage EC2, S3, IAM, Lambda, RDS, etc.

3.3 Ansible

Configuration management tool using YAML playbooks.
✔ Automates server setup and app deployments.

3.4 Kubernetes Python Client

Manages Kubernetes clusters with Python scripts.
✔ Automate deployments, scaling, and networking.


4. Using Terraform with Python

4.1 Install Terraform and Python SDK

pip install python-terraform

4.2 Write Terraform Script (main.tf)

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

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

4.3 Execute Terraform with Python

from python_terraform import Terraform

tf = Terraform()
tf.init()
tf.apply(skip_plan=True)

This will create an AWS EC2 instance using Terraform with Python.


5. Automating AWS with Boto3

5.1 Install Boto3

pip install boto3

5.2 Create an EC2 Instance with Python

import boto3

ec2 = boto3.client('ec2', region_name='us-east-1')

response = ec2.run_instances(
ImageId='ami-12345678',
InstanceType='t2.micro',
MinCount=1,
MaxCount=1
)

print("EC2 Instance Created:", response['Instances'][0]['InstanceId'])

This script launches an EC2 instance in AWS.


6. Configuration Management with Ansible

6.1 Install Ansible and Python API

pip install ansible

6.2 Ansible Playbook (setup.yml)

- hosts: all
tasks:
- name: Install Nginx
apt:
name: nginx
state: present

6.3 Run Ansible with Python

import ansible_runner

result = ansible_runner.run(private_data_dir='.', playbook='setup.yml')
print(result.status)

This installs Nginx on all specified servers.


7. Deploying Kubernetes with Python

7.1 Install Kubernetes Python Client

pip install kubernetes

7.2 Deploy an Application to Kubernetes

from kubernetes import client, config

config.load_kube_config()
v1 = client.CoreV1Api()

deployment = client.V1Deployment(
metadata=client.V1ObjectMeta(name="nginx-deployment"),
spec=client.V1DeploymentSpec(
replicas=2,
selector={"matchLabels": {"app": "nginx"}},
template=client.V1PodTemplateSpec(
metadata={"labels": {"app": "nginx"}},
spec=client.V1PodSpec(
containers=[client.V1Container(
name="nginx",
image="nginx:latest",
ports=[client.V1ContainerPort(container_port=80)]
)]
)
)
)
)

apps_v1 = client.AppsV1Api()
apps_v1.create_namespaced_deployment(namespace="default", body=deployment)
print("Nginx Deployment Created!")

This script deploys an Nginx app to a Kubernetes cluster.

Leave a Reply

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