Upgrade & Secure Your Future with DevOps, SRE, DevSecOps, MLOps!

We spend hours scrolling social media and waste money on things we forget, but won’t spend 30 minutes a day earning certifications that can change our lives.
Master in DevOps, SRE, DevSecOps & MLOps by DevOpsSchool!

Learn from Guru Rajesh Kumar and double your salary in just one year.


Get Started Now!

Ansible: Dynamic Ansible Inventory Script for AWS EC2 Public IPs

Below is a simple dynamic inventory Bash script for Ansible that queries all EC2 instances in your AWS account, gets their public IPs, and outputs a valid Ansible inventory.
You just need the AWS CLI installed and properly configured (aws configure), and the script will work anywhere you have permissions.


Dynamic Ansible Inventory Script for AWS EC2 Public IPs

Save this as ec2_dynamic_inventory.sh and make it executable (chmod +x ec2_dynamic_inventory.sh).

#!/bin/bash

# Simple AWS EC2 Dynamic Inventory for Ansible (public IPs)
# Requirements: awscli, jq

REGION="${AWS_REGION:-ap-south-1}"

get_instances() {
    aws ec2 describe-instances \
        --region "$REGION" \
        --filters "Name=instance-state-name,Values=running" \
        --query 'Reservations[*].Instances[*].{PublicIp:PublicIpAddress,Name:Tags[?Key==`Name`]|[0].Value,Id:InstanceId}' \
        --output json
}

if [[ "$1" == "--list" ]]; then
    INSTANCES=$(get_instances)
    HOSTS=$(echo "$INSTANCES" | jq -r '.[][] | select(.PublicIp != null) | .PublicIp' | jq -R . | jq -s .)
    cat <<EOF
{
  "aws_ec2_public": {
    "hosts": $HOSTS
  }
}
EOF
    exit 0
elif [[ "$1" == "--host" ]]; then
    # Not needed for most use cases; required by Ansible interface.
    echo "{}"
    exit 0
else
    echo "Usage: $0 --list|--host <hostname>"
    exit 1
fi

Code language: PHP (php)

Usage

  • Plain text for -i ./ec2_dynamic_inventory.sh: ./ec2_dynamic_inventory.sh
  • JSON for -i ./ec2_dynamic_inventory.sh --list (for Ansible dynamic inventory integration): ./ec2_dynamic_inventory.sh --list

Requirements

  • Install the AWS CLI (yum install awscli or pip install awscli)
  • Install jq (yum install jq or apt install jq)
  • Run aws configure first, or ensure AWS credentials are available in your environment.

How It Works

  • Lists all running EC2 instances with public IPs in your chosen AWS region.
  • Outputs a group called [aws_ec2_public] with each instance’s public IP as a host.
  • Also supports --list for JSON output compatible with Ansible’s dynamic inventory system.

Sample Output

Text (INI) output:

[aws_ec2_public]
13.233.139.133
3.7.218.154
...
Code language: CSS (css)

JSON output for --list:

{
  "aws_ec2_public": {
    "hosts": [
      "13.233.139.133",
      "3.7.218.154"
    ]
  }
}
Code language: JSON / JSON with Comments (json)

You can now use this script with Ansible:

ansible -i ./ec2_dynamic_inventory.sh all -m ping

or for playbooks:

ansible-playbook -i ./ec2_dynamic_inventory.sh myplaybook.yml

Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments

Certification Courses

DevOpsSchool has introduced a series of professional certification courses designed to enhance your skills and expertise in cutting-edge technologies and methodologies. Whether you are aiming to excel in development, security, or operations, these certifications provide a comprehensive learning experience. Explore the following programs:

DevOps Certification, SRE Certification, and DevSecOps Certification by DevOpsSchool

Explore our DevOps Certification, SRE Certification, and DevSecOps Certification programs at DevOpsSchool. Gain the expertise needed to excel in your career with hands-on training and globally recognized certifications.

0
Would love your thoughts, please comment.x
()
x