• VPC上でPrivateIPアドレスを付け替える

    こんにちは。小宮です。
    ちょっと前にAWSのVPC上でVIP(VirtualIPアドレス)を移動させる需要があって検証したのですが、
    個人的にメモってただけだったのと、質問される機会が数回ありましたので簡単にですが投稿しておきます。

    なんらかのクラスタ構成をVPC上で扱う際、VPC上でPrivateIPアドレスを付け替える必要が生じた場合、
    awsなので切替スクリプトをAPI使うように修正しないと内部はともかく外部から打ったPINGへの応答が帰ってこない。
    つまりVIPが移動したことになりません。

    つまり、以下のような感じになります
    落とすときは、IF落としてかつCLIも実行する
    [shell]ifconfig eth0:1 down ec2-unassign-private-addresses –network-interface eni-4b649*** –secondary-private-ip-address 10.0.0.96[/shell] ※ec2-unassign-private-addressesの短縮バージョンはec2upip
    起動するときも、IF起動かつCLI実行する
    [shell]ifconfig eth0:1 up ec2-assign-private-ip-addresses –network-interface eni-70609*** –secondary-private-ip-address 10.0.0.96[/shell] ※ec2-assign-private-ip-addressesの短縮バージョンはec2apip

    切替元のENI:eni-4b649***
    切替先のENI:eni-70609***

    参考:
    VPC 内の EC2 インスタンス に複数EIPを付与する
    ec2-assign-private-ip-addresses - Amazon Elastic Compute Cloud
    ec2-unassign-private-ip-addresses - Amazon Elastic Compute Cloud

    もし、EIPが紐づいてるENIをデタッチ、アタッチしたい場合、以下のような感じ。(たぶん(自分で試してないです))
    [shell]ec2-detach-network-interface ${eni_attach_id} ec2-attach-network-interface ${ENI_ID} –instance ${target_instance_id} –device-index ${TARGET_DEVICE_INDEX}[/shell]
    加えて、ifupしてip route処理をするといいらしい。
    [shell]ifconfig eth${TARGET_DEVICE_INDEX} up

    ...