1. ALBをすべて取得する
指定したリージョンに存在するApplication Load Balancer(ALB)を、名前、DNS名、スキーム、ARNの形で一覧表示します。
aws elbv2 describe-load-balancers \
--region "$AWS_REGION" \
--query 'LoadBalancers[?Type==`application`].[LoadBalancerName,DNSName,Scheme,LoadBalancerArn]' \
--output table
describe-load-balancers は、Elastic Load Balancing v2のロードバランサー情報を取得するコマンドです。--query で Type が application のものだけに絞ることで、Network Load BalancerやGateway Load Balancerを除外し、ALBだけを表示できます。
--output table を指定すると、CloudShell上で結果を読みやすい表形式で確認できます。DNS名やARNをコピーして、Route 53、CloudFront、リスナールール、ターゲットグループの調査へ続けたいときに便利です。
$AWS_REGION にはCloudShellを開いているリージョンが入ります。別リージョンを確認したい場合は、--region ap-northeast-1 のように直接指定します。2. 指定したドメインまたはパスを持つListener Ruleを全ALBから検索する
どのALBのListener Ruleに、特定のホスト名やパス条件が設定されているかを横断的に探したいときのコマンドです。そのままCloudShellへ貼れるように、検索したい値を先頭の変数で指定します。
DOMAIN="app.example.com"
PATH_KEY="sample/apps"
for LB_ARN in $(aws elbv2 describe-load-balancers \
--region "$AWS_REGION" \
--query 'LoadBalancers[?Type==`application`].LoadBalancerArn' \
--output text); do
LB_NAME=$(aws elbv2 describe-load-balancers \
--load-balancer-arns "$LB_ARN" \
--region "$AWS_REGION" \
--query 'LoadBalancers[0].LoadBalancerName' \
--output text)
for LISTENER_ARN in $(aws elbv2 describe-listeners \
--load-balancer-arn "$LB_ARN" \
--region "$AWS_REGION" \
--query 'Listeners[].ListenerArn' \
--output text); do
MATCH=$(aws elbv2 describe-rules \
--listener-arn "$LISTENER_ARN" \
--region "$AWS_REGION" \
--output json |
jq --arg domain "$DOMAIN" --arg path "$PATH_KEY" '
.Rules[]
| select(
(.Conditions | tostring | contains($domain))
or
(.Conditions | tostring | contains($path))
)
')
if [ -n "$MATCH" ]; then
echo
echo "======================================"
echo "ALB: $LB_NAME"
echo "Listener: $LISTENER_ARN"
echo "======================================"
echo "$MATCH" | jq .
fi
done
done
DOMAIN には検索したいホスト名、PATH_KEY には検索したいパスの一部を入れます。例では app.example.com または sample/apps を含むListener Ruleを探します。
処理の流れは、全ALBのARNを取得し、各ALBのListenerを取得し、さらに各ListenerのRuleを describe-rules で確認する、という順番です。jq で Conditions を文字列化し、ドメインまたはパスのどちらかを含むRuleだけを表示しています。
jq を使ってRule条件を絞り込みます。CloudShellで jq が使えない場合は、先にインストール状況を確認してください。