Why You Need Ansible: Infrastructure as Code for All Modern Developers

Learn why Ansible is essential for modern developers. Complete guide to Ansible automation, configuration management, and infrastructure as code. Includes tutorials, examples, and best practices.

Michal Szajnecki
Michal Szajnecki
Jan 15, 202530 min read
Why You Need Ansible: Infrastructure as Code for All Modern Developers

As a developer, I never needed Ansible scripts; that was work for DevOps engineers who did their magic on all our servers. My automation solely depended on Bash scripts or simple one-liners in package.json. But for the last year, I spent more time with Ansible than I want to admit, just to set up fully compliant and secure VPS for my future projects. My script rose to a level where I think I can even try to offer them as part of my consulting service.

If you don't know yet, Ansible is an open-source automation platform that simplifies configuration management, application deployment, and infrastructure orchestration. If you're still managing servers manually or with custom bash scripts, this comprehensive Ansible guide will show you why Ansible should be your next infrastructure automation tool. Whether you're a developer looking to automate server setup, a DevOps engineer seeking better configuration management, or a system administrator wanting to streamline deployments, this article covers everything you need to know about Ansible automation.

The Problem: Manual Infrastructure Management

Pain Points of Manual Management

Common Scenarios:

  • SSH into multiple servers to run the same command
  • Inconsistent configurations across environments
  • No audit trail of changes
  • Difficult to reproduce environments
  • Time-consuming deployments
  • Human error in repetitive tasks
  • Fear of touching anything because it's going to explode

Real-World Impact:

# Manual process (error-prone)
ssh server1 "sudo apt update && sudo apt install nginx"
ssh server2 "sudo apt update && sudo apt install nginx"
ssh server3 "sudo apt update && sudo apt install nginx"
# What if server2 fails? No rollback, no tracking

Expert Insights:

  • The Phoenix Project 1 - DevOps novel highlighting manual process problems
  • Google SRE Book 2 - Site Reliability Engineering principles
  • The DevOps Handbook 3 - Best practices

Cost of Manual Management

Hidden Costs:

  • Time spent on repetitive tasks
  • Downtime from configuration errors
  • Inability to scale quickly
  • Knowledge silos (only one person knows how to run anything)
  • Compliance and audit challenges

Statistics:

  • Manual deployments take noticeably longer than automated ones
  • Configuration drift causes 40% of production incidents
  • Manual processes have higher error rates

References:

  • Puppet State of DevOps Report 4
  • DORA Metrics 5 - DevOps performance metrics

What is Ansible? Complete Guide to Ansible Automation

Overview: Understanding Ansible

Ansible is an agentless automation tool that uses SSH to manage remote systems. It's written in Python and uses YAML for configuration files (playbooks). Ansible automation enables you to automate server configuration, application deployment, and infrastructure management without installing agents on target machines.

Key Features:

  • Agentless: No software to install on managed nodes
  • Idempotent: Running the same playbook multiple times produces the same result
  • Simple: YAML syntax is human-readable and can be commented to give more context
  • Powerful: Can manage servers, network devices, cloud resources, developer machines, install games and even order pizza

Official Resources:

  • Ansible Documentation 6
  • Ansible Galaxy 7 - Community roles
  • Ansible GitHub 8

How Ansible Works: Architecture Explained

graph TD
    A[Ansible Control Node] -->|SSH| B[Server 1]
    A -->|SSH| C[Server 2]
    A -->|SSH| D[Server 3]

Video Tutorials:

  • Ansible for Beginners 9
  • Ansible Official Channel 10
  • Jeff Geerling's Ansible 101 11

Why Choose Ansible?

1. Agentless Architecture

Unlike Puppet or Chef, Ansible doesn't require agents on managed nodes.

Benefits:

  • No agent installation overhead
  • No agent maintenance
  • Works with any system that has SSH
  • Lower resource usage and cost

Comparison:

ToolAgent RequiredSetup Complexity
AnsibleNoLow
PuppetYesMedium
ChefYesMedium
SaltStackOptionalMedium

References:

  • Ansible vs Puppet vs Chef 12
  • Infrastructure Automation Tools Comparison 13

2. Simple YAML Syntax

Ansible playbooks are written in YAML, making them easy to read, write, and debug.

Example Playbook:

---
- name: Install and configure Nginx
  hosts: web_servers
  become: yes
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Start and enable Nginx
      systemd:
        name: nginx
        state: started
        enabled: yes

    - name: Copy Nginx configuration
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: restart nginx

  handlers:
    - name: restart nginx
      systemd:
        name: nginx
        state: restarted

Learning Resources:

  • Ansible Playbook Best Practices 14
  • YAML Syntax Guide 15

3. Idempotency

Ansible operations are idempotent - running the same playbook multiple times produces the same result.

Example:

- name: Ensure user exists
  user:
    name: deploy
    state: present
    groups: sudo

Running this task multiple times won't create duplicate users - it ensures the user exists with the specified configuration.

Benefits:

  • Safe to run repeatedly
  • Can be used for both initial setup and updates
  • Reduces risk of errors
  • Enables continuous configuration management

4. Extensive Module Library

Ansible comes with hundreds of built-in modules for common tasks.

Popular Modules:

  • apt, yum, dnf - Package management
  • systemd, service - Service management
  • copy, template - File management
  • user, group - User management
  • docker_container, docker_image - Docker management
  • ec2_instance, gcp_compute_instance - Cloud resources

Module Documentation:

  • Ansible Module Index 16
  • Ansible Collections 17

5. Cloud Integration

Ansible integrates with major cloud providers.

Supported Clouds:

  • AWS (100+ modules)
  • Azure (50+ modules)
  • Google Cloud Platform (30+ modules)
  • DigitalOcean, Linode, Vultr, OVH

Example:

- name: Create EC2 instance
  amazon.aws.ec2_instance:
    name: web-server
    instance_type: t3.micro
    image_id: ami-0c55b159cbfafe1f0
    key_name: my-key
    security_groups:
      - web-sg
    tags:
      Environment: production

Cloud Resources:

  • Ansible AWS Collection 18
  • Ansible Azure Collection 19
  • Ansible GCP Collection 20

Real-World Use Cases

Use Case 1: Web Server Configuration

Scenario: Configure 10 web servers identically

Without Ansible:

  • SSH to each server manually
  • Run commands on each
  • Hope you don't make mistakes
  • No way to verify consistency

With Ansible:

---
- name: Configure web servers
  hosts: web_servers
  become: yes
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present

    - name: Configure firewall
      ufw:
        rule: allow
        port: "80"
        proto: tcp

    - name: Deploy application
      git:
        repo: https://github.com/company/app.git
        dest: /var/www/app
        version: main

Time Saved: 2 hours → 5 minutes

Use Case 2: Database Cluster Setup

Scenario: Set up PostgreSQL cluster with replication

Ansible Playbook:

---
- name: Setup PostgreSQL cluster
  hosts: db_servers
  become: yes
  vars:
    postgresql_version: "18"
  tasks:
    - name: Install PostgreSQL
      apt:
        name: "postgresql-{{ postgresql_version }}"
        state: present

    - name: Configure PostgreSQL
      template:
        src: postgresql.conf.j2
        dest: /etc/postgresql/{{ postgresql_version }}/main/postgresql.conf
      notify: restart postgresql

    - name: Setup replication
      postgresql_user:
        name: replicator
        password: "{{ vault_replicator_password }}"
        priv: "REPLICATION"
      when: inventory_hostname == groups['db_servers'][0]

Benefits:

  • Consistent configuration
  • Automated replication setup
  • Version controlled
  • Repeatable

Use Case 3: Multi-Environment Deployment

Scenario: Deploy application to dev, staging, and production

Ansible Structure:

ansible/
  playbooks/
    deploy.yml
  inventory/
    dev.yml
    staging.yml
    production.yml
  group_vars/
    dev/
      vars.yml
    staging/
      vars.yml
    production/
      vars.yml

Deployment:

# Deploy to dev
ansible-playbook -i inventory/dev.yml playbooks/deploy.yml

# Deploy to staging
ansible-playbook -i inventory/staging.yml playbooks/deploy.yml

# Deploy to production
ansible-playbook -i inventory/production.yml playbooks/deploy.yml

Case Studies:

  • Netflix Ansible Usage 21
  • NASA Ansible Implementation 22

Getting Started with Ansible

Installation

On macOS:

brew install ansible

On Ubuntu/Debian:

sudo apt update
sudo apt install ansible

On RHEL/CentOS:

sudo yum install ansible

Using pip:

pip install ansible

Official Installation Guide:

  • Ansible Installation 23

Your First Playbook

Create playbook.yml:

---
- name: My First Playbook
  hosts: localhost
  tasks:
    - name: Print hello world
      debug:
        msg: "Hello, Ansible!"

    - name: Create a file
      copy:
        content: "This file was created by Ansible"
        dest: /tmp/ansible-test.txt

Run it:

ansible-playbook playbook.yml

Video Tutorials:

  • Ansible Quick Start 24
  • Ansible in 10 Minutes 25

Inventory Setup

Create inventory.ini:

[web_servers]
web1.example.com
web2.example.com

[db_servers]
db1.example.com

[web_servers:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/id_rsa

Or use YAML:

all:
  children:
    web_servers:
      hosts:
        web1.example.com:
        web2.example.com:
      vars:
        ansible_user: deploy
    db_servers:
      hosts:
        db1.example.com:

References:

  • Ansible Inventory 26
  • Dynamic Inventory 27

Advanced Features

1. Roles

Organize playbooks into reusable roles.

Role Structure:

roles/
  nginx/
    tasks/
      main.yml
    handlers/
      main.yml
    templates/
      nginx.conf.j2
    vars/
      main.yml
    defaults/
      main.yml

Using Roles:

---
- name: Configure web server
  hosts: web_servers
  roles:
    - nginx
    - ssl
    - monitoring

Resources:

  • Ansible Roles 28
  • Ansible Galaxy 7 - Find community roles

2. Vault for Secrets

Encrypt sensitive data with Ansible Vault.

Create encrypted file:

ansible-vault create secrets.yml

Edit encrypted file:

ansible-vault edit secrets.yml

Use in playbook:

- name: Use encrypted variable
  debug:
    msg: "Password is {{ vault_password }}"

References:

  • Ansible Vault 29
  • Vault Best Practices 30

3. Ansible Tower / AWX

Enterprise automation platform built on Ansible.

Features:

  • Web UI for playbook execution
  • Role-based access control
  • Job scheduling
  • Inventory management
  • Reporting and analytics

Resources:

  • Ansible Tower 31
  • AWX (Open Source) 32
  • AWX Documentation 33

Performance and Scalability

Ansible Performance

Optimization Tips:

  • Use async and poll for long-running tasks
  • Enable pipelining for faster execution
  • Use strategy: free for parallel execution
  • Limit forks based on system resources

Example:

- name: Long-running task
  command: /usr/bin/long-script.sh
  async: 3600
  poll: 10

Benchmarks:

  • Ansible Performance Tuning 34
  • Scaling Ansible 35

When to Use Ansible vs Alternatives

Use Ansible when:

  • You need agentless automation
  • You want simple YAML syntax
  • You manage heterogeneous environments
  • You need quick setup and learning curve

Consider alternatives when:

  • You need real-time configuration (use SaltStack)
  • You need complex state management (use Terraform)
  • You're cloud-only (use cloud-native tools)

Comparison Resources:

  • Ansible vs Terraform 36
  • Ansible vs Puppet 12

Ansible Best Practices: Expert Tips

1. Use Version Control

Always store playbooks in Git:

git init
git add .
git commit -m "Initial Ansible playbooks"

2. Follow Naming Conventions

  • Use descriptive names
  • Organize by function or environment
  • Use consistent file structure

3. Document Your Playbooks

---
# This playbook configures web servers
# Author: Your Name
# Last Updated: YYYY-MM-DD
- name: Configure web servers
  hosts: web_servers
  # ...

4. Test Before Production

  • Use test environments
  • Run in check mode first: ansible-playbook --check
  • Use staging before production

5. Use Roles and Collections

  • Reuse community roles from Ansible Galaxy
  • Create your own roles for common tasks
  • Use collections for cloud providers

Expert Resources:

  • Ansible Best Practices 14
  • Ansible Style Guide 37

Frequently Asked Questions (FAQ)

What is Ansible used for?

Ansible is used for configuration management, application deployment, infrastructure automation, and orchestration. It helps automate repetitive IT tasks across multiple servers and environments.

Is Ansible free?

Yes, Ansible is open-source and free to use. Ansible Tower (now called Ansible Automation Platform) is the commercial enterprise version with additional features.

Do I need to install Ansible on all servers?

No, Ansible is agentless. You only need to install it on the control node (your local machine or a dedicated server). It connects to managed nodes via SSH.

What programming language does Ansible use?

Ansible playbooks are written in YAML, while Ansible itself is written in Python. You don't need to know Python to use Ansible effectively.

How does Ansible compare to Terraform?

Ansible focuses on configuration management and application deployment, while Terraform specializes in infrastructure provisioning. Many teams use both: Terraform for creating infrastructure and Ansible for configuring it.

Can Ansible work with cloud providers?

Yes, Ansible has extensive cloud integration with AWS, Azure, Google Cloud Platform, and many other cloud providers through collections and modules.

Learning Resources

Official Documentation

  • Ansible Documentation 6
  • Ansible User Guide 38
  • Ansible Module Index 16

Video Courses

  • Ansible Official Training 39
  • Red Hat Ansible Training 40
  • Jeff Geerling's Ansible Course 41

Books

  • Ansible: Up and Running 42 - By Lorin Hochstein
  • Ansible for DevOps 43 - By Jeff Geerling
  • Mastering Ansible 44 - By James Freeman

Community

  • Ansible Reddit 45
  • Ansible IRC 46
  • Ansible Mailing Lists 47

References

  1. IT Revolution. "The Phoenix Project." https://www.itrevolution.com/the-phoenix-project/
  2. Google. "Site Reliability Engineering Books." https://sre.google/books/
  3. IT Revolution. "The DevOps Handbook." https://www.itrevolution.com/the-devops-handbook/
  4. Puppet. "State of DevOps Report." https://puppet.com/resources/report/state-of-devops-report/
  5. Google Cloud. "Using the Four Keys to Measure Your DevOps Performance." https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance
  6. Red Hat. "Ansible Documentation." https://docs.ansible.com/
  7. Red Hat. "Ansible Galaxy." https://galaxy.ansible.com/
  8. Ansible. "Ansible GitHub Repository." https://github.com/ansible/ansible
  9. YouTube. "Ansible for Beginners." https://www.youtube.com/results?search_query=ansible+for+beginners
  10. Ansible. "Ansible Official Channel." https://www.youtube.com/@AnsibleAutomation
  11. YouTube. "Jeff Geerling's Ansible 101." https://www.youtube.com/results?search_query=jeff+geerling+ansible
  12. Red Hat. "Ansible vs Puppet vs Chef." https://www.redhat.com/en/topics/automation/ansible-vs-puppet-vs-chef
  13. G2. "Infrastructure Automation Tools Comparison." https://www.g2.com/categories/infrastructure-automation
  14. Red Hat. "Ansible Playbook Best Practices." https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html
  15. Red Hat. "YAML Syntax Guide." https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
  16. Red Hat. "Ansible Module Index." https://docs.ansible.com/ansible/latest/collections/index_module.html
  17. Red Hat. "Ansible Collections." https://docs.ansible.com/ansible/latest/user_guide/collections_using.html
  18. Red Hat. "Ansible AWS Collection." https://docs.ansible.com/ansible/latest/collections/amazon/aws/
  19. Red Hat. "Ansible Azure Collection." https://docs.ansible.com/ansible/latest/collections/azure/azcollection/
  20. Red Hat. "Ansible GCP Collection." https://docs.ansible.com/ansible/latest/collections/google/cloud/
  21. Ansible. "Netflix Ansible Usage Case Study." https://www.ansible.com/case-studies/netflix
  22. Ansible. "NASA Ansible Implementation Case Study." https://www.ansible.com/case-studies/nasa
  23. Red Hat. "Ansible Installation Guide." https://docs.ansible.com/ansible/latest/installation_guide/index.html
  24. YouTube. "Ansible Quick Start." https://www.youtube.com/results?search_query=ansible+quick+start
  25. YouTube. "Ansible in 10 Minutes." https://www.youtube.com/results?search_query=ansible+10+minutes
  26. Red Hat. "Ansible Inventory." https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
  27. Red Hat. "Dynamic Inventory." https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html
  28. Red Hat. "Ansible Roles." https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html
  29. Red Hat. "Ansible Vault." https://docs.ansible.com/ansible/latest/user_guide/vault.html
  30. Red Hat. "Vault Best Practices." https://docs.ansible.com/ansible/latest/user_guide/vault.html#best-practices
  31. Red Hat. "Ansible Tower." https://www.ansible.com/products/tower
  32. Ansible. "AWX (Open Source)." https://github.com/ansible/awx
  33. Ansible. "AWX Documentation." https://github.com/ansible/awx/blob/devel/README.md
  34. Red Hat. "Ansible Performance Tuning." https://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html
  35. Red Hat. "Scaling Ansible." https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
  36. Spacelift. "Ansible vs Terraform." https://www.spacelift.io/blog/terraform-vs-ansible
  37. Red Hat. "Ansible Style Guide." https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_documenting.html
  38. Red Hat. "Ansible User Guide." https://docs.ansible.com/ansible/latest/user_guide/index.html
  39. Ansible. "Ansible Official Training." https://www.ansible.com/resources/get-started
  40. Red Hat. "Red Hat Ansible Training." https://www.redhat.com/en/services/training/do407-automation-ansible-i
  41. Jeff Geerling. "Ansible 101 Course." https://www.jeffgeerling.com/ansible-101
  42. O'Reilly. "Ansible: Up and Running." https://www.oreilly.com/library/view/ansible-up-and/9781491975328/
  43. Jeff Geerling. "Ansible for DevOps." https://www.ansiblefordevops.com/
  44. Packt Publishing. "Mastering Ansible." https://www.packtpub.com/product/mastering-ansible-fourth-edition/9781789951547
  45. Reddit. "Ansible Community." https://www.reddit.com/r/ansible/
  46. Red Hat. "Ansible IRC Channels." https://docs.ansible.com/ansible/latest/community/communication.html#irc-channels
  47. Red Hat. "Ansible Mailing Lists." https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information
Michal Szajnecki

Michal Szajnecki

Share Article: