タダです.
ALB の IP アドレスは固定ではなく、可変になっています.そのため,現在の ALB の IP アドレスを知りたい場合は都度確認する必要があります.業務で ALB の IP アドレスを確認する機会があったので確認方法をまとめておきます.
ALB の IP アドレスの仕組み
ALB の IP アドレスは ENI(仮想 NIC)で付与されます.ALB の NIC 情報は ENI の説明タブ Attachment owner
の欄にamazon-elb
となっているのがの特徴です.ENI の画面から確認したい対象の ALB 名を検索窓に入れれば IP アドレスを確認できますが,GUI ではなくすぐ手元で確認したい!なんてこともあると思います.そんな時向けの AWS CLI コマンド例を紹介します.
AWS CLI での ENI および IP アドレス情報の確認
今回使うのが describe-network-interfaces
コマンドです.これは ENI 情報を参照することが可能なコマンドになっています.
--filters
で ALB の NIC のみに絞り込んだ出力結果が以下になります.IP アドレス以外にもたくさんの情報が含まれているため IP アドレス情報のみに絞り込んでみます.
aws ec2 describe-network-interfaces --filters Name=attachment.instance-owner-id,Values=amazon-elb { "NetworkInterfaces": [ { "Status": "in-use", "MacAddress": "0a:9f:c3:f3:55:f4", "SourceDestCheck": true, "VpcId": "vpc-XXXX", "Description": "ELB app/test/1e507bac7c2472cb", "Association": { "PublicIp": "52.197.170.100", "PublicDnsName": "ec2-52-197-170-100.ap-northeast-1.compute.amazonaws.com", "IpOwnerId": "amazon-elb" }, "NetworkInterfaceId": "eni-XXXX", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-172-31-15-188.ap-northeast-1.compute.internal", "Association": { "PublicIp": "52.197.170.100", "PublicDnsName": "ec2-52-197-170-100.ap-northeast-1.compute.amazonaws.com", "IpOwnerId": "amazon-elb" }, "Primary": true, "PrivateIpAddress": "172.31.15.188" } ], "RequesterManaged": true, "Groups": [ { "GroupName": "XXXX", "GroupId": "sg-XXXX" } ], "PrivateDnsName": "ip-172-31-15-188.ap-northeast-1.compute.internal", "AvailabilityZone": "ap-northeast-1c", "InterfaceType": "interface", "Attachment": { "Status": "attached", "DeviceIndex": 1, "AttachTime": "2020-01-23T18:39:10.000Z", "DeleteOnTermination": false, "AttachmentId": "eni-attach-XXXX", "InstanceOwnerId": "amazon-elb" }, "RequesterId": "amazon-elb", "Ipv6Addresses": [], "SubnetId": "subnet-XXXX", "OwnerId": "XXXXXXXXXXXXXXXX, "TagSet": [], "PrivateIpAddress": "172.31.15.188" } ] }
取得したい IP アドレス別のコマンド実行例
パブリック IP アドレスとプライベート IP アドレスそれぞれ確認するコマンド例は以下の通りです.
パブリックIPアドレスを特定
aws ec2 describe-network-interfaces --filters Name=description,Values="ELB <ロードバランサー ID>" --query 'NetworkInterfaces[*].Association.PublicIp' --output text 52.197.170.100
プライベートIPアドレスを特定
aws ec2 describe-network-interfaces --filters Name=description,Values="ELB <ロードバランサー ID>" --query 'NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' --output text 172.31.15.188
なお,ロードバランサー ID は describe-load-balancers
コマンドで確認することが可能です.ALB の場合は app/ロードバランサー名/乱数
になっているので,awk
コマンドと組み合わせてロードバランサー ID のみ抽出したのが以下になります.
aws elbv2 describe-load-balancers --names <ロードバランサー名> --query 'LoadBalancers[*].LoadBalancerArn' --output text | awk '{print substr($0,index($0, "app"))}' app/test/1e507bac7c2472cb
何度も確認することがありそうならシェルスクリプト化してしまうと良いでしょう.ALB 名を引数に与えればプライベート IP アドレスを出力するスクリプトも最後に書いてみました.
#!/bin/sh ALB_NAME=$1 ELB_ID=`aws elbv2 describe-load-balancers --names $ELB_NAME --query 'LoadBalancers[*].LoadBalancerArn' --output text | awk '{print substr($0,index($0, "app"))}'` aws ec2 describe-network-interfaces --filters Name=description,Values="ELB ${ELB_ID}" --query 'NetworkInterfaces[*].PrivateIpAddresses[*].PrivateIpAddress' --output text
スクリプトを実行してみると,以下のような結果が返ってきます.
./スクリプト名.sh <ロードバランサー名> 172.31.15.188
まとめ
AWS CLI による ALB の IP アドレスを確認する手法を書きました.dig
コマンドでも IP アドレスを確認できますが,パブリックのアドレスのみでプライベートのアドレスは返してくれないので AWS CLI であれば素早く情報を得られます.運用において AWS CLI の出番が多く助けられます.