Ansible Pilot

Search for AWS EC2 AMI ID by Region - Ansible module ec2_ami_info

How to automate the search of an AWS EC2 machine AMI ID running the operating system RHEL-8.3.0 in the region "us-east-1" using Ansible Playbook and ec2_ami_info module.

July 13, 2022
Access the Complete Video Course and Learn Quick Ansible by 200+ Practical Lessons

How to Search for EC2 AMI ID by AWS Region with Ansible?

I’m going to show you a live demo and some simple Ansible code.

I’m Luca Berton and welcome to today’s episode of Ansible Pilot.

Ansible Search for EC2 AMI ID by AWS Region

Let’s talk about the Ansible module ec2_ami_info. The full name is amazon.aws.ec2_ami_info, which means that is part of the collection of modules to interact with AWS. The module’s purpose is to gather information about ec2 AMIs.

Parameters

Example:

name: "RHEL-8.3.0_HVM-*-x86_64-*Hourly*"
region: "us-east-1"

The following parameters are useful in order to Search for EC2 AMI ID by AWS Region using the module ec2_ami_info. The only parameter needed is the filters and specify the filters keys and values. For example, let’s search for Red Hat Enterprise Linux machines version 8.3.0 running on HVM infrastructure, architecture x86_64 Hourly paid.

The Best Resources For Ansible

Video Course

Books

demo

How to Search for EC2 AMI ID by AWS Region with Ansible. I’m going to show you how to Gather Information on a specific “RHEL-8.3.0_HVM” AWS EC2 Hourly Machine for the region “us-east-1” and select the EC2 AMI ID using Ansible Playbook.

code

---
- name: AMI search
  hosts: localhost
  become: false
  gather_facts: false
  vars:
    aws_region: "us-east-1"
    aws_name: "RHEL-8.3.0_HVM-*-x86_64-*Hourly*"
  tasks:
    - name: search for AMI
      amazon.aws.ec2_ami_info:
        filters:
          name: "{{ aws_name }}"
          region: "{{ aws_region }}"
      register: ami_found
    - name: print AMI
      ansible.builtin.debug:
        var: ami_found

execution

$ ansible-playbook ami_search.yml 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'
PLAY [AMI search] *********************************************************************************
TASK [search for existing AMI] ********************************************************************
ok: [localhost]
TASK [debug] **************************************************************************************
ok: [localhost] => {
    "ami_found": {
        "changed": false,
        "failed": false,
        "images": [
            {
                "architecture": "x86_64",
                "block_device_mappings": [
                    {
                        "device_name": "/dev/sda1",
                        "ebs": {
                            "delete_on_termination": true,
                            "encrypted": false,
                            "snapshot_id": "snap-03f2e24f30f580353",
                            "volume_size": 10,
                            "volume_type": "gp2"
                        }
                    }
                ],
                "creation_date": "2020-11-02T11:01:38.000Z",
                "deprecation_time": "2022-11-02T11:01:38.000Z",
                "description": "Provided by Red Hat, Inc.",
                "ena_support": true,
                "hypervisor": "xen",
                "image_id": "ami-096fda3c22c1c990a",
                "image_location": "309956199498/RHEL-8.3.0_HVM-20201031-x86_64-0-Hourly2-GP2",
                "image_type": "machine",
                "name": "RHEL-8.3.0_HVM-20201031-x86_64-0-Hourly2-GP2",
                "owner_id": "309956199498",
                "platform_details": "Red Hat Enterprise Linux",
                "public": true,
                "root_device_name": "/dev/sda1",
                "root_device_type": "ebs",
                "sriov_net_support": "simple",
                "state": "available",
                "tags": {},
                "usage_operation": "RunInstances:0010",
                "virtualization_type": "hvm"
            }
        ]
    }
}
PLAY RECAP ****************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[[email protected] aws]$

idempotency

$ ansible-playbook ami_search.yml 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'
PLAY [AMI search] *********************************************************************************
TASK [search for existing AMI] ********************************************************************
ok: [localhost]
TASK [debug] **************************************************************************************
ok: [localhost] => {
    "ami_found": {
        "changed": false,
        "failed": false,
        "images": [
            {
                "architecture": "x86_64",
                "block_device_mappings": [
                    {
                        "device_name": "/dev/sda1",
                        "ebs": {
                            "delete_on_termination": true,
                            "encrypted": false,
                            "snapshot_id": "snap-03f2e24f30f580353",
                            "volume_size": 10,
                            "volume_type": "gp2"
                        }
                    }
                ],
                "creation_date": "2020-11-02T11:01:38.000Z",
                "deprecation_time": "2022-11-02T11:01:38.000Z",
                "description": "Provided by Red Hat, Inc.",
                "ena_support": true,
                "hypervisor": "xen",
                "image_id": "ami-096fda3c22c1c990a",
                "image_location": "309956199498/RHEL-8.3.0_HVM-20201031-x86_64-0-Hourly2-GP2",
                "image_type": "machine",
                "name": "RHEL-8.3.0_HVM-20201031-x86_64-0-Hourly2-GP2",
                "owner_id": "309956199498",
                "platform_details": "Red Hat Enterprise Linux",
                "public": true,
                "root_device_name": "/dev/sda1",
                "root_device_type": "ebs",
                "sriov_net_support": "simple",
                "state": "available",
                "tags": {},
                "usage_operation": "RunInstances:0010",
                "virtualization_type": "hvm"
            }
        ]
    }
}
PLAY RECAP ****************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[[email protected] aws]$

code with ❤️ in GitHub

Recap

Now you know how to Search for EC2 AMI ID by AWS Region with Ansible. Subscribe to the YouTube channel, Medium, Website, Twitter, and Substack to not miss the next episode of the Ansible Pilot.

Academy

Learn the Ansible automation technology with some real-life examples in my

My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps

BUY the Complete PDF BOOK to easily Copy and Paste the 200+ Ansible code

Want to keep this project going? Please donate

Access the Complete Video Course and Learn Quick Ansible by 200+ Practical Lessons
Trustpilot
Follow me

Subscribe not to miss any new releases

FREE Top 10 Best Practices

Top 10 Best Practices of Ansible Automation: save time, reduce errors and stress