以前、@c9katayamaさんが、VPCでアベイラビリティゾーン越しにプライベートIPを共有するの記事でVPCのルーティングを変更することでAZをまたいだFloating IPパターンのようなフェイルオーバーを実現する方法を紹介してくれました。
上記のブログでは、ルーティングテーブルの変更を手動(AWS Management Console)で行なっていましたが、最終的にはHeatbeat(Pacemaker)等で自動化したいと考えるはずなので、ルーティングを変更するPHPスクリプトを作成してみました。
#!/usr/bin/php require_once("/opt/aws/php/default/sdk.class.php"); define("TABLE", "rtb-6cd63105"); define("CIDR" , "0.0.0.0/0"); define("NAT" , "i-c149d1c1"); $ec2 = new AmazonEC2(array( "key" => "ACCESS KEY", "secret" => "SECRET KEY" )); $ec2->set_region(AmazonEC2::REGION_APAC_NE1); $response = $ec2->replace_route(TABLE, CIDR, array("InstanceId" => NAT)); if(!$response->isOK()) { error_log("[" . $response->body->Errors->Error->Code . "] " . $response->body->Errors->Error->Message); exit(1); } exit(0); ?>
これのポイントは、replace_route関数を使っているところになります。
下記のようにNATインスタンスが設定されている状態で上記のPHPスクリプトを実行します。
# ./replace-nat
そうすると、次のようにルーティング先のNATインスタンスが変更されていることがわかります。
Heartbeat(Pacemaker)でEIPの付け替えの記事と同じ要領で、Hearbeat(Pacemaker)と連動させることも容易にできるはずです。