data engineering

python get autoscaling group ip list

qkqhxla1 2020. 3. 26. 23:55

https://stackoverflow.com/questions/47558854/boto3-to-pull-all-ec2-instances-from-a-given-asg


나중에 보기 위해 코드 저장해둠. 오토 스케일링 그룹 내의 인스턴스 하나하나로 ssh로 들어가야 할 경우가 많은데 오토 스케일링 그룹 내의 인스턴스가 좀 많으면 aws콘솔에서는 하나하나 확인하기가 너무 짜증난다. 

다시 들어가서 로딩되는데 시간도 오래걸리고.. 그래서 ip리스트를 받아오는 코드가 있으면 매우 쉽게 해당 ip로 들어갈수 있는 ssh프로그램을 짤 수 있다. 

# -*- coding: utf-8 -*-

import boto3


class AwsManager:
    def __init__(self):
        self.access_key = aws access key
        self.secret_access_key = aws secret key
        self.region = 'ap-northeast-2'

    def get_asg_instance_id_list(self, asg_group):
        asg_client = boto3.client('autoscaling', verify=False,
                                  aws_access_key_id=self.access_key,
                                  aws_secret_access_key=self.secret_access_key,
                                  region_name=self.region)

        asg_response = asg_client.describe_auto_scaling_groups(AutoScalingGroupNames=[asg_group])
        instance_ids = []  # List to hold the instance-ids
        for i in asg_response['AutoScalingGroups']:
            for k in i['Instances']:
                instance_ids.append(k['InstanceId'])
        return instance_ids

    def get_instance_ip_from_id(self, instance_ids):
        ec2_client = boto3.client('ec2', verify=False,
                                  aws_access_key_id=self.access_key,
                                  aws_secret_access_key=self.secret_access_key,
                                  region_name=self.region)

        ec2_response = ec2_client.describe_instances(InstanceIds=instance_ids)
        private_ip = [] # List to hold the Private IP Address
        for instances in ec2_response['Reservations']:
            for ip in instances['Instances']:
                private_ip.append(ip['PrivateIpAddress'])

        return private_ip


if __name__ == '__main__':
    awsmanager = AwsManager()
    asg_group_name = 오토 스케일링 그룹 이름
    instance_id_list = awsmanager.get_asg_instance_id_list(asg_group_name)
    ip_list = awsmanager.get_instance_ip_from_id(instance_id_list)
    print ip_list