[AWS] EC2 인스턴스, ELB, Target-Group 리소스 정보 업데이트 확인 스크립트

HYEOB KIM·2022년 5월 30일
1

aws

목록 보기
20/62

해당 내용은 [shell script] 과거 이력과 비교해 변경점을 찾는 스크립트(EC2 인스턴스)을 토대로 발전된 형태입니다.

필요성

구글 시트에 계정별 EC2 리소스 정보를 업데이트할 때 육안으로 하나씩 비교하는 것이 굉장히 번거롭기 때문에 aws clishell를 이용해 변경 사항을 감지할 수 있는 스크립트를 작성했습니다.

스크립트 작성(Instance, ELB, Target Group)

  • 유효한 프로파일을 입력했을 때만 스크립트가 진행.
  • case문을 이용해서 instance, elb, target-group 리스트 선택.
  • 각 리스트 정보를 처음 보는 것이라면, mvdiff를 실행하지 않음.
  • output 형식은 json 또는 text로 해야 파일을 비교할 때 업데이트를 정확하게 비교할 수 있습니다.
#!/bin/bash

read -p "AWS Profile: " profile_name

# 유효한 프로파일이 아니라면 스크립트 실행 종료
if [[ -z $profile_name ]]
then
	echo "Please type vaild profile..."
	exit 0
fi

echo "using AWS_PROFILE '$profile_name'...\n"

# 프로파일 환경변수 지정
export AWS_PROFILE=$profile_name

echo "
########################################################
#         Choose one which you want to update	       #
########################################################

	1) ec2 instances list
	2) elb list
	3) target-group list
"

read -p "Select one: " service

case $service in
	1)		
		# 기존의 파일을 old로 변경
		old_file_path=./${profile_name}_ec2_list_update_old
		file_path=./${profile_name}_ec2_list_update
		
		# 업데이트 파일이 존재한다면 old로 바꾼다(예외처리)
		if [ -e $file_path ]
		then
			mv $file_path $old_file_path
		fi
	
		# EC2의 서버 리스트 가져오기
		aws ec2 describe-instances \
		--query "Reservations[*].Instances[*].{instance_id: InstanceId, name: Tags[?Key=='Name'] | [0].Value, public_ip: PublicIpAddress, private_ip: PrivateIpAddress, state: State.Name, access_lev: Tags[?Key=='access_lev']|[0].Value} | sort_by([], &private_ip)" > $file_path ;;
	2)
		# 기존의 파일을 old로 변경
                old_file_path=./${profile_name}_elb_list_update_old
                file_path=./${profile_name}_elb_list_update
		
		# 업데이트 파일이 존재한다면 old로 바꾼다(예외처리)
		if [ -e $file_path ]
		then
			mv $file_path $old_file_path
		fi

		# ELB 리스트 가져오기
		aws elbv2 describe-load-balancers \
		--query "LoadBalancers[*].{Name: LoadBalancerName, VPC_ID: VpcId, State: State.Code, AZ:AvailabilityZones[*].ZoneName,  Type: Type, DNS: DNSName}" > $file_path ;;
	3)
		# 기존의 파일을 old로 변경
                old_file_path=./${profile_name}_target_group_list_update_old
                file_path=./${profile_name}_target_group_list_update
		
		# 업데이트 파일이 존재한다면 old로 바꾼다(예외처리)
		if [ -e $file_path ]
		then
			mv $file_path $old_file_path
		fi

		# Target Group 리스트 가져오기
		aws elbv2 describe-target-groups \
		--query "TargetGroups[*].{Name:TargetGroupName, ARN:TargetGroupArn, Port:Port, Protocol:Protocol, TargetType:TargetType, LoadBalancerARN:LoadBalancerArns[*], VPC_ID:VpcId}" > $file_path ;;
	*) 
		echo "Bye..."
		exit 0 ;;		
esac

# 기존 파일이 존재할 경우만 old와 현재 파일을 비교
# 기존 파일(old)과 새로 생성된 파일 내용의 차이점 출력
if [ -e $old_file_path ]
then
	diff -dsu $old_file_path $file_path
fi
profile
Devops Engineer

0개의 댓글