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を使いますこのコマンドは jq を使ってRule条件を絞り込みます。CloudShellで jq が使えない場合は、先にインストール状況を確認してください。