Memo/AmazonWebServices/EC2/mock-ec2-metadata

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/EC2/mock-ec2-metadata
 

mock-ec2-metadata: ec2-metadata用のテスト

EC2では通常 http://169.254.169.254/latest/meta-data/ にアクセスすると、EC2自身の様々な情報を取得できる。
NYTimes/mock-ec2-metadata はVM等でテストする場合のモックに使える。


設定の変更と追加

  • 設定用jsonを変更した場合、mock-ec2-metadataの再起動が必要
    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
  • /latest/meta-data/local-ipv4 を追加する場合
    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

インストール

  • 環境
    • CentOS 7.x
    • mock-ec2-metadata v0.3.1
  • mock-ec2-metadata のinstall
    # 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 &
  • network, iptablesの設定
    # 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 に保存される
  • test
    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":"...

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-26 (水) 12:50:29 (26d)