I\'m trying to use the Amazon AWS Command Line Tools to find all instances that do not have a specified tag.
Finding all instances WITH a tag is simple enough, e.g.<
I use this python3 / boto script for very large inverse tag filtering operations:
import boto3
from botocore.config import Config
# Attempts
config = Config(
retries = dict(
max_attempts = 3
)
)
# Tag(s)
my_tags = [
{
"Key": "backup",
"Value": "true"
}
]
# Owner ID Filter
owner_id = 'SOME_OWNER_ID'
# Connection
ec2 = boto3.client("ec2", config=config)
# Instances
def tag_instances():
# All Reservations [instances] (tagged or untagged)
all_reservations = ec2.describe_instances(Filters = [{'Name': 'owner-id', 'Values':[owner_id]}])
# Append each InstanceId in all_reservations to all_instances
all_instances = []
for all_reservation in all_reservations['Reservations']:
for all_instance in all_reservation['Instances']:
all_instances.append(all_instance['InstanceId'])
# Append each InstanceId with backup:true or backup:false to tagged_instances
tagged_reservations = ec2.describe_instances(Filters = [{'Name': 'owner-id', 'Values':[owner_id]},{'Name': 'tag:backup', 'Values':['true','false']}])
tagged_instances = []
for tagged_reservation in tagged_reservations['Reservations']:
for tagged_instance in tagged_reservation['Instances']:
tagged_instances.append(tagged_instance['InstanceId'])
# Append each InstanceId in all_instances and not in tagged_instances to untagged_instances
untagged_instances = [all_instance for all_instance in all_instances if all_instance not in tagged_instances]
# Print untagged InstanceId
print("untagged_instanceids:",untagged_instances)