Amazon VPC編~Natインスタンスについてパート④~

こんにちは! JQです。

前回は『 Amazon VPC編~Natインスタンスパート③~ 』ということで、テンプレートを利用せずにNatインスタンス立ち上げるまでをお話しました。

今回は『Amazon VPC編~Natインスタンスについてパート④~』と題して、

Natインスタンスの切替を試してみたいと思います。

それでは実際に、VPCのNatインスタンスの切替を試していきたいと思います。

前回に引き続き、以下の図のような簡単な冗長化を試してみます。

20130502_01_01

今回はスクリプトを利用してRouteTableを切り替えてみます。

1.NatインスタンスにAPIをインストール

まずはNatインスタンス用のSecurityGroupを変更してアクセス出来るようにします。

20130502_01_02
NatインスタンスはAmazonLinuxなので、デフォルトでAWS API Toolsがインストールされていますが、

Versionが古いためアップデートをかけます。

1yum update aws-apitools-ec2

NatインスタンスでAPIを利用できるように各種設定をしていきます。

以下の必要な変数を.bash_profileに記述します。

1export EC2_PRIVATE_KEY="${AWS_PATH}/cert/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem"2export EC2_CERT="${AWS_PATH}/cert/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem"3export EC2_URL="https://ec2.ap-northeast-1.amazonaws.com"4export AWS_CREDENTIAL_FILE="${AWS_PATH}/credential-file-path"5export EC2_REGION="ap-northeast-1"

sourceコマンド等で反映します。

1# source /root/.bash_profile

下記コマンドなどで確認しましょう。

1#ec2-describe-instances

2.切替用のRouteTablesの作成

CreateRouteTableで切替用のRouteTablesを作成します。

20130502_01_03

Failover用のNatインスタンスを設定します。

20130502_01_04

3. RouteTableの切替シェルスクリプトを構築

下記はmainのRouteTableを切り替える単純なスクリプトになります。

describeでassociation.mainで絞り込んで取得した情報の「routetableassociationid」と「routetable_id」をROUTETABLE・ASSOCIATIONの変数に格納して、

現状のroutetableidでは無い方に切り替えます。

1#!/bin/sh23rt1=rtb-xxxxxxx14rt2=rtb-xxxxxxx256eval `ec2-describe-route-tables -F association.main=true | egrep '^(ROUTETABLE|ASSOCIATION)' | awk '{print $1"="$2}'`78if [ "$ROUTETABLE" != "$rt1" ]9then10        ec2-replace-route-table-association $ASSOCIATION -r $rt111fi1213if [ "$ROUTETABLE" != "$rt2" ]14then15        ec2-replace-route-table-association $ASSOCIATION -r $rt216fi

4.切替確認

それでは実際に切替を試してみましょう。

先ずは下記コマンドで通信をしている状況を確認します。

※8.8.8.8はGoogleDNSになります。

1ping 8.8.8.82PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.364 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=5.50 ms464 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=5.81 ms564 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=5.86 ms664 bytes from 8.8.8.8: icmp_seq=4 ttl=58 time=5.57 ms764 bytes from 8.8.8.8: icmp_seq=5 ttl=58 time=5.78 ms

通信をしている途中で現在のRouteTableのNatインスタンスの宛先を削除します。

20130502_01_05

pingがうまくいかなくなった事が確認出来たら、上記スクリプトを実行してみます。

1# sh routetables_change.sh

スクリプトがうまくいった場合はpingが再度成功していると思います!

いかがでしたでしょうか?

実際にはNatインスタンスの監視や別Zoneに置くべき等、設計が必要な箇所があるかと思います。

今回の作業でイメージだけでも掴んでもらえればと思います!

次回は『 Amazon EMR編~ElasticMapReduceの使い方パート①~ 』ということで、EMRを試してみたいと思います。お楽しみに!

この記事を書いた人

aws-recipe-user