Skip to content

Instantly share code, notes, and snippets.

@atheiman
Created September 8, 2020 22:59
Show Gist options
  • Save atheiman/1f8cadf3434a0e7b47e044dd9c646dcf to your computer and use it in GitHub Desktop.
Save atheiman/1f8cadf3434a0e7b47e044dd9c646dcf to your computer and use it in GitHub Desktop.
Dump EC2 instances that do not have SSM PingStatus of 'Online'
import boto3
import json
region = "us-gov-west-1"
all_instance_ids = [
i.id for i in boto3.resource("ec2", region_name=region).instances.all()
]
ssm_inst_paginator = boto3.client("ssm", region_name=region).get_paginator(
"describe_instance_information"
)
ssm_paginate_params = {
"InstanceInformationFilterList": [{"key": "PingStatus", "valueSet": ["Online"]}]
}
["InstanceInformationList"]
online_instance_ids = []
for page in ssm_inst_paginator.paginate(**ssm_paginate_params):
online_instance_ids += [i["InstanceId"] for i in page["InstanceInformationList"]]
offline_instance_ids = list(set(all_instance_ids) - set(online_instance_ids))
ec2_inst_paginator = boto3.client("ec2", region_name=region).get_paginator(
"describe_instances"
)
offline_instance_details = []
for page in ec2_inst_paginator.paginate(InstanceIds=offline_instance_ids):
for r in page["Reservations"]:
offline_instance_details += r["Instances"]
print(
json.dumps(
{
"all_instance_ids": all_instance_ids,
"online_instance_ids": online_instance_ids,
"offline_instance_ids": offline_instance_ids,
"offline_instance_details": offline_instance_details,
},
indent=2,
default=str,
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment