Finding instances by name with boto in python
Posted: January 22nd, 2012 | Author: charlie | Filed under: DevOps | Tags: python, scripting | No Comments »OK, I know I need to blog more. Rather than think I don’t have anything useful to say, I’ll start adding quick entries of what-I-learned.
Random tidbits from today:
I got annoyed with EC2 failures, and having to manually terminate and redeploy instances today, so I finally worked on a script I’ve been meaning to write. One thing I had to figure out (which isn’t all that complex), is how to discover an instance by name.
If you tag an instance with the hostname you’re using in your deployment script, you don’t need to fumble in the AWS console to find an instance ID. Ever. I don’t find it acceptable to manually click around or run scripts to discover information that’s available from an API
So, to “find” the instance using python and boto (assume AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are defined in your shell environment):
import boto ec2conn = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) reservations = ec2conn.get_all_instances() instances = [i for r in reservations for i in r.instances] my_fqdn = "example.com" # trailing part of my domain
Now, ‘instances’ can be iterated over to find instances with the name you desire. I wrote a little wrapper function to do this, and it returns an instance object (which I call instance.terminate() on, for this purpose). Code:
def find_instance_by_nametag(instances, name):
# support short or full hostname usage
if not my_fqdn in name:
name = name + my_fqdn
for i in instances:
if "Name" in i.tags and name in i.tags['Name']:
return i
sys.exit("sorry, I couldn't find an instance with that name!")
Easy as that!
No Comments yet... be the first »









Leave a Reply