# Gathering ec2 instance facts with only a region and instance id?

**URL:** <https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441>\
**Category:** Ansible Project\
**Created:** [October 5, 2015, 8:13pm UTC](https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441 "2015-10-05T20:13:26Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Frank\_Perks](https://avatars.discourse-cdn.com/v4/letter/f/90ced4/32.png) [@Frank\_Perks](https://forum.ansible.com/u/Frank_Perks)\
**Post date:** [October 5, 2015, 8:13pm UTC](https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441/1 "2015-10-05T20:13:26Z")

</div>

So i have a small problem, the only thing i have from the output of another tool is just an instance\_id, along with its region. I need to grab some more information about the ec2 instance (such as the platform, tags, etc) in order to actually determine what inventory groups it belongs in.

Unfortunately i cannot figure out how to actually acquire facts about this through ansible.

The ec2 module seems to be soly for the purpose of creating ec2 instances, and attempting to pass in region, instance\_id, and state=present results in errors, about image not being defined. (which i get since if the ec2 instance doesn’t exist it will create it).

ec2\_remote\_facts only seems to work with ec2 instance tags/values, and unfortunately i don’t have those.

ec2\_facts actually requires me to connect to the ec2 instance and gather facts locally. (which i can’t do since i can’t figure out the actual public\_ip of the instance).

Is there any other options/alternatives? (I know i can get it from the awscli tool and pipe the json into yaml and then into a variable, but that feels kind of gross).

---

<div class="post-metadata">

**Author:** ![Josh\_Smift1](https://avatars.discourse-cdn.com/v4/letter/j/bcef8e/32.png) [@Josh\_Smift1](https://forum.ansible.com/u/Josh_Smift1)\
**Post date:** [October 5, 2015, 8:22pm UTC](https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441/2 "2015-10-05T20:22:32Z")

</div>

If it's in your (dynamic) inventory, you might be able to do something  
with with\_dict and hostvars and when, because the instance ID is one of  
the things in hostvars. I can try to put together an example if that makes  
no sense or sounds hard.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Josh (jbs@care.com)

This email is intended for the person(s) to whom it is addressed and may contain information that is PRIVILEGED or CONFIDENTIAL. Any unauthorized use, distribution, copying, or disclosure by any person other than the addressee(s) is strictly prohibited. If you have received this email in error, please notify the sender immediately by return email and delete the message and any attachments from your system.

---

<div class="post-metadata">

**Author:** ![Frank\_Perks](https://avatars.discourse-cdn.com/v4/letter/f/90ced4/32.png) [@Frank\_Perks](https://forum.ansible.com/u/Frank_Perks)\
**Post date:** [October 5, 2015, 8:42pm UTC](https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441/3 "2015-10-05T20:42:14Z")

</div>

Thanks. Unfortunately it is not part of my dynamic inventory.

Anisble runs a tool that provisions a bunch of ec2 instances, installs and configures a bunch of software on the systems (eventually this will be replaced by ansible i hope). The tool returns a series of instance ids and their regions to stdout. Unfortunately the tool does not properly tag the instances which means it can’t be discovered by my dynamic inventory, nor do the output instances follow any sort of logical naming convention.

What i would like to do is to:

1. Get the metadata related to that instance id
2. Add the host to an ansible group
3. ssh into it, pull out some internal metadata about the server purpose
4. tag it correspondingly

My use case is kind of really weird and super specific. Unfortunately ☹

---

<div class="post-metadata">

**Author:** ![Frank\_Perks](https://avatars.discourse-cdn.com/v4/letter/f/90ced4/32.png) [@Frank\_Perks](https://forum.ansible.com/u/Frank_Perks)\
**Post date:** [October 6, 2015, 12:43pm UTC](https://forum.ansible.com/t/gathering-ec2-instance-facts-with-only-a-region-and-instance-id/19441/4 "2015-10-06T12:43:48Z")

</div>

I ended up just creating an ansible module. Which is here if anyone runs into this issue in the future.

[https://gist.github.com/fperks/475e3e58d60cef8fc922](https://gist.github.com/fperks/475e3e58d60cef8fc922)

Honestly i would really like this kind of functionality to be added the ec2\_remote\_facts.
