[AWS]ELBのプライベートIPアドレスを調べる

aws

Summary

VPC 内にたてた ELB(internet-facing/internal) のプライベート IP アドレスをコマンドラインツールの AWS-CLI から調べる方法をメモ。

tl;dr : EC2 DescribeNetworkInterfaces を使う

EC2 サービスには DescribeNetworkInterfaces という NIC 向けの API が存在する。この API を使うと ELB のグローバル/プライベート IP アドレスを確認できる。

NIC 一覧からお目当ての ELB を突き止めるには?

ELB インスタンスの NIC の設定は aws が裏でやっているためか、ELB のNIC は Attachment => InstanceOwnerId“amazon-elb” となっている。

また NIC の Description も aws が勝手に埋めており、“ELB “ となっている。
例えば LoadBalancerName“test-elb” の ELB は Description“ELB test-elb” となる。
※この仕様は undocumented なのでいつ変わってもおかしくない。

コマンド例

ELB の NIC 一覧を表示

$ aws ec2 describe-network-interfaces --filters Name=attachment.instance-owner-id,Values=amazon-elb

LoadBalancerName が “STG” で始まる ELB の NIC 一覧を表示

$ aws ec2 describe-network-interfaces --filters Name=description,Values='ELB STG*'

出力例

JSON 生の出力

JSON そのまま出力すると以下のようになる。
レスポンスにある"PrivateIpAddress" が文字通りプライベートIPアドレス。

$ aws ec2 describe-network-interfaces --filters Name=attachment.instance-owner-id,Values=amazon-elb
{
    "NetworkInterfaces": [
        {
            "Status": "in-use",
            "MacAddress": "dummy",
            "SourceDestCheck": true,
            "VpcId": "vpc-asdfqwer",
            "Description": "ELB TEST-Internal",
            "NetworkInterfaceId": "eni-4321",
            "PrivateIpAddresses": [
                {
                    "PrivateDnsName": "ip-10-0-18-218.ap-northeast-1.compute.internal",
                    "Primary": true,
                    "PrivateIpAddress": "10.0.18.218"
                }
            ],
            "PrivateDnsName": "ip-10-0-18-218.ap-northeast-1.compute.internal",
            "AvailabilityZone": "ap-northeast-1b",
            "Attachment": {
                "Status": "attached",
                "DeviceIndex": 1,
                "AttachTime": "2015-04-04T15:07:13.000Z",
                "DeleteOnTermination": false,
                "AttachmentId": "eni-attach-2a293b2d",
                "InstanceOwnerId": "amazon-elb"
            },
            "PrivateIpAddress": "10.0.18.218"
            ...,
        },
        {
            "Status": "in-use",
            "MacAddress": "dummy",
            "Description": "ELB TEST-Internet",
            "Association": {
                "PublicIp": "54.123.456.789",
                "PublicDnsName": "ec2-54-123-456-789.ap-northeast-1.compute.amazonaws.com",
                "IpOwnerId": "amazon-elb"
            },
            "NetworkInterfaceId": "eni-1234",
            "PrivateIpAddresses": [
                {
                    "PrivateDnsName": "ip-10-0-18-243.ap-northeast-1.compute.internal",
                    "Association": {
                        "PublicIp": "54.123.456.789",
                        "PublicDnsName": "ec2-54-123-456.789.ap-northeast-1.compute.amazonaws.com",
                        "IpOwnerId": "amazon-elb"
                    },
                    "Primary": true,
                    "PrivateIpAddress": "10.0.18.243"
                }
            ],
            "PrivateDnsName": "ip-10-0-18-243.ap-northeast-1.compute.internal",
            "Attachment": {
                "Status": "attached",
                "DeviceIndex": 1,
                "AttachTime": "2015-04-04T15:06:43.000Z",
                "DeleteOnTermination": false,
                "AttachmentId": "eni-attach-24293b23",
                "InstanceOwnerId": "amazon-elb"
            },
            "PrivateIpAddress": "10.0.18.243"
            ...,
        }
        ...
    ]
}

出力対象を絞る

LoadBalancerName が TEST で始まる ELB の NIC を対象に “Description” と “PrivateIpAddress” だけを出力すると以下のようになる。

$ aws ec2 describe-network-interfaces --filters Name=description,Values='ELB TEST*' | jq ".NetworkInterfaces[] | {Description, PrivateIpAddress}"
{
  "PrivateIpAddress": "10.0.18.218",
  "Description": "ELB TEST-Internal"
}
{
  "PrivateIpAddress": "10.0.18.243",
  "Description": "ELB TEST-Internet"
}

ELB DescribeLoadBalancers は使えないの?

Elastic Load Balancing(ELB) には DescribeLoadBalancers という API があるのでこれで完結すれば楽なのだが、レスポンスのモデル LoadBalancerDescription を見ても、プライベート IP らしきフィールドはない。

試しに出力結果に含まれる DNSName の名前を引くと

  • internet-facing の ELB はグローバグIPアドレス
  • internal の ELB はプライベートIPアドレス

がかえってきて、internet-facing の場合にプライベートIPアドレスを取得できない。

残念

Tagged with: , , ,
Posted in aws

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 1 week ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: