こんにちは! JQです。
前回は『Amazon VPC編~Natインスタンスパート③~』ということで、テンプレートを利用せずにNatインスタンス立ち上げるまでをお話しました。
今回は『Amazon VPC編~Natインスタンスについてパート④~』と題して、
Natインスタンスの切替を試してみたいと思います。
それでは実際に、VPCのNatインスタンスの切替を試していきたいと思います。
前回に引き続き、以下の図のような簡単な冗長化を試してみます。
今回はスクリプトを利用してRouteTableを切り替えてみます。
1.NatインスタンスにAPIをインストール
まずはNatインスタンス用のSecurityGroupを変更してアクセス出来るようにします。
NatインスタンスはAmazonLinuxなので、デフォルトでAWS API Toolsがインストールされていますが、
Versionが古いためアップデートをかけます。
1 |
yum update aws-apitools-ec2 |
NatインスタンスでAPIを利用できるように各種設定をしていきます。
以下の必要な変数を.bash_profileに記述します。
1 2 3 4 5 |
export EC2_PRIVATE_KEY="${AWS_PATH}/cert/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem" export EC2_CERT="${AWS_PATH}/cert/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem" export EC2_URL="https://ec2.ap-northeast-1.amazonaws.com" export AWS_CREDENTIAL_FILE="${AWS_PATH}/credential-file-path" export EC2_REGION="ap-northeast-1" |
sourceコマンド等で反映します。
1 |
# source /root/.bash_profile |
下記コマンドなどで確認しましょう。
1 |
#ec2-describe-instances |
2.切替用のRouteTablesの作成
CreateRouteTableで切替用のRouteTablesを作成します。
Failover用のNatインスタンスを設定します。
3. RouteTableの切替シェルスクリプトを構築
下記はmainのRouteTableを切り替える単純なスクリプトになります。
describeでassociation.mainで絞り込んで取得した情報の「route_table_association_id」と「route_table_id」をROUTETABLE・ASSOCIATIONの変数に格納して、
現状のroute_table_idでは無い方に切り替えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/sh rt1=rtb-xxxxxxx1 rt2=rtb-xxxxxxx2 eval `ec2-describe-route-tables -F association.main=true | egrep '^(ROUTETABLE|ASSOCIATION)' | awk '{print $1"="$2}'` if [ "$ROUTETABLE" != "$rt1" ] then ec2-replace-route-table-association $ASSOCIATION -r $rt1 fi if [ "$ROUTETABLE" != "$rt2" ] then ec2-replace-route-table-association $ASSOCIATION -r $rt2 fi |
4.切替確認
それでは実際に切替を試してみましょう。
先ずは下記コマンドで通信をしている状況を確認します。
※8.8.8.8はGoogleDNSになります。
1 2 3 4 5 6 7 |
ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=5.50 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=5.81 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=5.86 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=58 time=5.57 ms 64 bytes from 8.8.8.8: icmp_seq=5 ttl=58 time=5.78 ms |
通信をしている途中で現在のRouteTableのNatインスタンスの宛先を削除します。
pingがうまくいかなくなった事が確認出来たら、上記スクリプトを実行してみます。
1 |
# sh routetables_change.sh |
スクリプトがうまくいった場合はpingが再度成功していると思います!
いかがでしたでしょうか?
実際にはNatインスタンスの監視や別Zoneに置くべき等、設計が必要な箇所があるかと思います。
今回の作業でイメージだけでも掴んでもらえればと思います!
次回は『Amazon EMR編~ElasticMapReduceの使い方パート①~』ということで、EMRを試してみたいと思います。お楽しみに!