해당 내용은 [shell script] 과거 이력과 비교해 변경점을 찾는 스크립트(EC2 인스턴스)을 토대로 발전된 형태입니다.
구글 시트에 계정별 EC2 리소스 정보를 업데이트할 때 육안으로 하나씩 비교하는 것이 굉장히 번거롭기 때문에 aws cli
와 shell
를 이용해 변경 사항을 감지할 수 있는 스크립트를 작성했습니다.
유효한 프로파일
을 입력했을 때만 스크립트가 진행.case
문을 이용해서 instance
, elb
, target-group
리스트 선택.mv
와 diff
를 실행하지 않음.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