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의 인증서 정보를 함께 보여줌