2024-11: v0.4.1から更新されていない。 awsが Memo/AmazonWebServices/EC2/ec2-metadata-mock 提供しているのでこちらの方が良い。
EC2では通常 http://169.254.169.254/latest/meta-data/ にアクセスすると、EC2自身の様々な情報を取得できる。
NYTimes/mock-ec2-metadata はVM等でテストする場合のモックに使える。
"MetadataPrefixes": [ "/2008-02-01/meta-data", "/2009-04-04/meta-data", "/latest/meta-data" ],
sudo vim /etc/mock-ec2-metadata-config.json -- "hostname": "mock-hostname-test", -- # まだ変更されない curl -s http://169.254.169.254/latest/meta-data/hostname mock-hostname # 再起動 sudo service mock-ec2-metadata restart # 変更された curl -s http://169.254.169.254/latest/meta-data/hostname mock-hostname-test
sudo vim /etc/mock-ec2-metadata-config.json -- ... "MetadataValues" : { "local-ipv4": "10.1.150.123", ... -- sudo service mock-ec2-metadata restart curl -s http://169.254.169.254/latest/meta-data/local-ipv4 10.1.150.123
# install sudo wget -O /usr/local/bin/mock-ec2-metadata https://github.com/NYTimes/mock-ec2-metadata/releases/download/0.3.1/mock-ec2-metadata_0.3.1_linux_amd64 sudo chmod +x /usr/local/bin/mock-ec2-metadata sudo wget -O /etc/mock-ec2-metadata-config.json https://raw.githubusercontent.com/NYTimes/mock-ec2-metadata/master/mock-ec2-metadata-config.json # CentOS 7: systemd sudo wget -O /etc/systemd/system/mock-ec2-metadata.service https://raw.githubusercontent.com/NYTimes/mock-ec2-metadata/master/systemd/mock-ec2-metadata.service sudo systemctl daemon-reload # start sudo service mock-ec2-metadata start # 自動起動 sudo chkconfig mock-ec2-metadata on # CentOS 6: initdのサンプルが無いので直接起動 nohup /usr/local/bin/mock-ec2-metadata &
# 169.254.169.254 をloopbackにaliasとして追加 sudo vim /etc/sysconfig/network-scripts/ifcfg-lo -- IPADDR2=169.254.169.254 NETMASK2=255.255.255.255 -- sudo service network restart # CentOS7 の場合firewalldなので停止し、iptablesをインストール sudo systemctl stop firewalld sudo systemctl disable firewalld sudo yum install iptables-services # net.ipv4.ip_forward=1にする ## CentOS 7 sudo bash -c "echo net.ipv4.ip_forward = 1 > /etc/sysctl.d/ip_forward.conf" sudo sysctl --system sysctl net.ipv4.ip_forward ## CentOS 6: /etc/sysctl.d/ を作っても良いが、/etc/sysctl.conf にデフォルト値が入っているのでこちらを無効にする必要がある。 sudo perl -p -i -e "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf sudo sysctl -p # iptableでルーティングする sudo iptables -t nat -A OUTPUT -p tcp -d 169.254.169.254/32 --dport 80 -j DNAT --to-destination 169.254.169.254:8111 sudo service iptables save sudo chkconfig iptables on # /etc/sysconfig/iptables に保存される
# 追加 sudo firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -d 169.254.169.254/32 --dport 80 -j DNAT --to-destination 169.254.169.254:8111 sudo firewall-cmd --reload # 削除 sudo firewall-cmd --permanent --direct --remove-rule ipv4 nat OUTPUT 0 -p tcp -d 169.254.169.254/32 --dport 80 -j DNAT --to-destination 169.254.169.254:8111 sudo firewall-cmd --reload
curl -s http://169.254.169.254/latest/meta-data/ hostname instance-id instance-type curl -s http://169.254.169.254/latest/meta-data/hostname mock-hostname curl -s curl http://169.254.169.254/latest/meta-data/iam/security-credentials/mock-user {"AccessKeyId":"...