継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

可変になっている ALB の IP を AWS CLI で確認する方法

タダです.

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 コマンド例を紹介します.

f:id:sadayoshi_tada:20200124232837p:plain

AWS CLI での ENI および IP アドレス情報の確認

今回使うのが describe-network-interfaces コマンドです.これは ENI 情報を参照することが可能なコマンドになっています.

docs.aws.amazon.com

--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 の出番が多く助けられます.