Skip to content

Instantly share code, notes, and snippets.

@dastergon
Last active October 11, 2024 16:44
Show Gist options
  • Save dastergon/b4994c605f76d528d0c4 to your computer and use it in GitHub Desktop.
Save dastergon/b4994c605f76d528d0c4 to your computer and use it in GitHub Desktop.
A basic boto3 based tool for retrieving information from running EC2 instances.
from collections import defaultdict
import boto3
"""
A tool for retrieving basic information from the running EC2 instances.
"""
# Connect to EC2
ec2 = boto3.resource('ec2')
# Get information for all running instances
running_instances = ec2.instances.filter(Filters=[{
'Name': 'instance-state-name',
'Values': ['running']}])
ec2info = defaultdict()
for instance in running_instances:
for tag in instance.tags:
if 'Name'in tag['Key']:
name = tag['Value']
# Add instance info to a dictionary
ec2info[instance.id] = {
'Name': name,
'Type': instance.instance_type,
'State': instance.state['Name'],
'Private IP': instance.private_ip_address,
'Public IP': instance.public_ip_address,
'Launch Time': instance.launch_time
}
attributes = ['Name', 'Type', 'State', 'Private IP', 'Public IP', 'Launch Time']
for instance_id, instance in ec2info.items():
for key in attributes:
print("{0}: {1}".format(key, instance[key]))
print("------")
@OtmanGX
Copy link

OtmanGX commented May 17, 2021 via email

@faisalnizam
Copy link

faisalnizam commented Dec 7, 2021

you can use something like this and put in lambda. This will give you all the asg based on a name/tag you provide , list all the instance id's and then you can get things like IP/key etc on the id's

import boto3

client = boto3.client('autoscaling')
clientips=boto3.client('ec2')
paginator = client.get_paginator('describe_auto_scaling_groups')
page_iterator = paginator.paginate(
   PaginationConfig = {
      'PageSize': 100
   }
)

def lambda_handler(event, context):

   filtered_asgs = page_iterator.search(
      'AutoScalingGroups[] | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format('type', 'node')
   )

   for asg in filtered_asgs:
      print (asg['AutoScalingGroupName'])
      response = client.describe_auto_scaling_groups(
             AutoScalingGroupNames=[
        asg['AutoScalingGroupName'],
      ],
      )
      instances=response["AutoScalingGroups"][0]["Instances"]
      instanceids=[]
      for i in instances:
         instanceids.append(i["InstanceId"])
         instaneips=[]
         reservations = clientips.describe_instances(InstanceIds=[i['InstanceId']]).get("Reservations")
         for reservation in reservations:
            for instance in reservation['Instances']:
               print(instance.get("PublicIpAddress"))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment