I'm trying to find instances that DONT have a certain tag.
For instance I want all instances that don't have the Foo tag. I also want instances that don't have the Foo value equal to Bar.
This is what I'm doing now:
import boto3
def aws_get_instances_by_name(name):
"""Get EC2 instances by name"""
ec2 = boto3.resource('ec2')
instance_iterator = ec2.instances.filter(
Filters=[
{
'Name': 'tag:Name',
'Values': [
name,
]
},
{
'Name': 'tag:Foo',
'Values': [
]
},
]
)
return instance_iterator
This is returning nothing.
What is the correct way?
Tags enable you to categorize your AWS resources in different ways, for example, by purpose, owner, or environment. For example, you could define a set of tags for your account's Amazon EC2 instances that helps you track each instance's owner and stack level.
You can do this very easily using the boto3 library. all you need is to create a list of ids of all the ec2 instances you wish to terminate. Then using the filter method pass in that list of ids as a keyworded argument named InstanceIds and call the terminate method on the returned value and you are done.
Here's some code that will display the instance_id
for instances without a particular tag:
import boto3
instances = [i for i in boto3.resource('ec2', region_name='ap-southeast-2').instances.all()]
# Print instance_id of instances that do not have a Tag of Key='Foo'
for i in instances:
if i.tags is not None and 'Foo' not in [t['Key'] for t in i.tags]:
print i.instance_id
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With