https://developers.digitalocean.com/documentation/metadata/ にドキュメントがあります。
(AWS EC2 での インスタンスメタデータ です)
curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address
とすればパブリックIPアドレスが取得できます。
curl -s http://169.254.169.254/metadata/v1.json
とすれば JSON ですべて取れます。
{ "droplet_id":2756294, "hostname":"sample-droplet", "vendor_data":"#cloud-config\ndisable_root: false\nmanage_etc_hosts: true\n\ncloud_config_modules:\n - ssh\n - set_hostname\n - [ update_etc_hosts, once-per-instance ]\n\ncloud_final_modules:\n - scripts-vendor\n - scripts-per-once\n - scripts-per-boot\n - scripts-per-instance\n - scripts-user\n", "public_keys":["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcbi6cygCUmuNlB0KqzBpHXf7CFYb3VE4pDOf/RLJ8OFDjOM+fjF83a24QktSVIpQnHYpJJT2pQMBxD+ZmnhTbKv+OjwHSHwAfkBullAojgZKzz+oN35P4Ea4J78AvMrHw0zp5MknS+WKEDCA2c6iDRCq6/hZ13Mn64f6c372JK99X29lj/B4VQpKCQyG8PUSTFkb5DXTETGbzuiVft+vM6SF+0XZH9J6dQ7b4yD3sOder+M0Q7I7CJD4VpdVD/JFa2ycOS4A4dZhjKXzabLQXdkWHvYGgNPGA5lI73TcLUAueUYqdq3RrDRfaQ5Z0PEw0mDllCzhk5dQpkmmqNi0F sammy@digitalocean.com"], "region":"nyc3", "interfaces":{ "private":[ { "ipv4":{ "ip_address":"10.132.255.113", "netmask":"255.255.0.0", "gateway":"10.132.0.1" }, "mac":"04:01:2a:0f:2a:02", "type":"private" } ], "public":[ { "ipv4":{ "ip_address":"104.131.20.105", "netmask":"255.255.192.0", "gateway":"104.131.0.1" }, "ipv6":{ "ip_address":"2604:A880:0800:0010:0000:0000:017D:2001", "cidr":64, "gateway":"2604:A880:0800:0010:0000:0000:0000:0001" }, "mac":"04:01:2a:0f:2a:01", "type":"public"} ] }, "floating_ip": { "ipv4": { "active": false } }, "dns":{ "nameservers":[ "2001:4860:4860::8844", "2001:4860:4860::8888", "8.8.8.8" ] } }
169.254.169.254 という IP アドレスは DigitalOcean も EC2 も同じですが、path は全く異なります。
169.254.0.0/16 は IPv4 Link Local Addresses で RFC 3927 に規定があるみたい。
Comments
[…] 取得するスクリプトを作成します DigitalOcean なので metadata API から取得します […]