1. 개요
describe-load-balancers를 잘 쓰면 편리하겠지만 아직 그런 능력은 없어서 bash를 통해 데이터를 가공하는 방법을 택했다.
2. 소스
문제가 있으면 직접 고쳐 쓰자...
#!/bin/bash
function init() {
CREATED=""
DNS_NAME=""
ZONE=""
SCHEMA=""
ELB_NAME=""
INSTANCE=()
LISTENER=()
AZ=()
SUBNET=()
}
function joinArray {
local IFS="$1"; shift; echo "$*";
}
function get() {
echo "$2"
}
function getElbInfo() {
if [[ "$*" == *"internal"* ]]; then
DNS_NAME=$4
ZONE=$2
CREATED=$3
ELB_NAME=$5
SCHEMA="internal"
elif [[ "$*" == *"internet-facing"* ]]; then
DNS_NAME=$2
ZONE=$3
CREATED=$4
ELB_NAME=$6
SCHEMA="internet-facing"
fi
if [[ "$IS_DNS_NAME_CONTAIN" == "true" && "$DNS_NAME" == *"$DNS_NAME_CONTAIN"* ]] || [[ "$IS_DNS_NAME_CONTAIN" == "false" ]]; then
IS_DOMAIN_MATCH=true
if [[ "$SCHEMA" == "internal" ]]; then
SCHEMA_INTERNAL=$((SCHEMA_INTERNAL + 1))
elif [[ "$SCHEMA" == "internet-facing" ]]; then
SCHEMA_INTERNET_FACING=$((SCHEMA_INTERNET_FACING + 1))
fi
else
IS_DOMAIN_MATCH=false
fi
}
function getListener() {
if [[ "$5" == "HTTPS" && "$6" != null ]]; then
CERT=`echo $6 | cut -d'/' -f2`
CERT_DOMAIN_NAME+=(`aws acm describe-certificate --certificate-arn $6 | grep DOMAINVALIDATIONOPTIONS | awk {'print $2'}`)
echo "$4($5)->$2($3)/$CERT(`joinArray \"|\" \"${CERT_DOMAIN_NAME[@]}\"`)"
else
echo "$4($5)->$2($3)"
fi
}
function printArray() {
TITLE=$1
shift
ARRAY=("${@}")
ARRAY_LENGTH=${#ARRAY[@]}
if [[ $ARRAY_LENGTH == 0 ]]; then
echo "$TITLE"
else
for (( i=0; i<${ARRAY_LENGTH}; i++ )); do
if [[ $i == 0 ]]; then
echo "$TITLE ${ARRAY[$i]}"
else
echo " ${ARRAY[$i]}"
fi
done
fi
}
function printLoadBalancer() {
if [[ "$AZ" != "" && "$IS_DOMAIN_MATCH" == "true" ]]; then
VAR=$((VAR + 1))
echo "[$VAR] $ELB_NAME"
echo " SCHEMA : $SCHEMA"
echo " ZONE : $ZONE"
echo " DNS Name : $DNS_NAME"
echo " Created : $CREATED"
printArray " Instance :" "${INSTANCE[@]}"
printArray " Listener :" "${LISTENER[@]}"
printArray " AZ :" "${AZ[@]}"
printArray " Subnet :" "${SUBNET[@]}"
echo ""
fi
init
}
SCHEMA_INTERNAL_COUNT=0
SCHEMA_INTERNAL_FACING_COUNT=0
aws elb describe-load-balancers > lb_tmp.txt
aws ec2 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /' > ec2_tmp.txt
init
if [[ "$1" != "" ]]; then
IS_DNS_NAME_CONTAIN=true
DNS_NAME_CONTAIN=$1
echo "Finding ... \"$1\" load balancer ..."
echo ""
else
IS_DNS_NAME_CONTAIN=false
echo "Finding all load balancer ..."
echo ""
fi
while read LINE; do
if [[ "$LINE" == "LOADBALANCERDESCRIPTIONS"* ]]; then
printLoadBalancer
getElbInfo $LINE
elif [[ "$LINE" == "INSTANCES"* ]]; then
INSTANCE_ID=`get $LINE`
INSTANCE_NAME=`grep $INSTANCE_ID ec2_tmp.txt | awk {'print $3'}`
INSTANCE+=("$INSTANCE_NAME($INSTANCE_ID)")
elif [[ "$LINE" == "LISTENER"* ]]; then
LISTENER+=(`getListener $LINE`)
elif [[ "$LINE" == "AVAILABILITYZONES"* ]]; then
AZ+=(`get $LINE`)
elif [[ "$LINE" == "SUBNETS"* ]]; then
SUBNET+=(`get $LINE`)
fi
done < lb_tmp.txt
printLoadBalancer
echo " ** Internal load balancer : $SCHEMA_INTERNAL"
echo " ** Internet facing load balancer : $SCHEMA_INTERNET_FACING"
echo ""
3. Release
3-1. 2017-10-26
- 일부 자잘한 버그를 수정함
- HTTPS 사용시 ACM의 인증서 정보를 함께 보여줌