AWSのリージョン間でconsulを使用

チケイ株式会社改め株式会社BONXのスケーター齊藤です。
(社名が株式会社BONXに変わりました)
バックサイドディザスターはメイク出来てませんが、猛暑とゲリラ豪雨の隙を突いてスケート業務に勤しんでおります。

f:id:bonx:20160818193729g:plain

前回から大分時間が空いてますが、今回はconsulをAWSのリージョン間で繋いだ話を書きます。
弊社でのconsulの使いどころに関しては前回の記事を参照して下さい。

背景

  • BONXのUSでのサービス展開に備えてVoIPサーバを遅延対策の一つとしてUSリージョンにも構築することにしました。
  • APIサーバからVoIPサーバの検出にconsulを使用しておりVoIPサーバとconsulサーバ間で通信が必要なため、そこだけVPC間の接続が必要となり通信方法を検討。
  • リージョン間のVPCピア接続がオフィシャルでは未だサポートされてなくVPN接続で対応をすることにしました。

USのリージョン選定

VPN接続をするルーターの選定

  • 最初オフィスのルーターを使おうかとか冗談で話していたのですが、AWSで動かしている実績があるソフトウェアルータのVyOSを採用することにしました。

VyOS

  • 詳細はこちらを参照して頂くとして、設定などはログインしてゴリゴリとコマンドで実施する感じです。
  • AWS マーケットプレイスのものを使用してインスタンス起動をしましたが、v1.1.0には不具合がありv1.1.6にupgradeして使っております。
  • バージョンアップは以下の方法で実施しました。
vyos@VyOS-AMI:~$ add system image http://packages.vyos.net/iso/release/1.1.6/vyos-1.1.6-amd64.iso
vyos@VyOS-AMI:~$ reboot

その他EIPの付与やsource dest checkの無効化などを実施して準備は完了です。

構成

  • USリージョン以外にもリージョンを増やす可能性があり、その都度リージョンにVyOSを構築するのは運用が煩雑になるためTokyoリージョンをシステム構成的にはカスタマーゲートウェイとしてVyOSを構築することにしました(TokyoをRootにしたツリー型)。
  • 障害等でVPNが切断された場合はTokyoリージョンのVoIPサーバのみ検出するようにしているのでVPN切断してもサービス停止とは成らない仕組みとなっております。

構築時に気を付けたポイントなど

  • ap-northeast-1とus-west-2のVPCを繋ぐのに同一のCIDRは指定出来ないので、ap-northeast-1は172.16.0.0/16としus-west-2は172.17.0.0/16VPCを構築。
  • us-west-2のセキュリティグループで8301(TCP/UDP)を172.16.0.0/16から許可する
    consulが通信で使用するポートでこれだけ開けておけば要件を満たせる(満たせた)
  • VyOSにVPNの設定を反映するのに、vyos_config.pyスクリプトを使用することで手作業の負荷を軽減させました。

雑感

  • たまにVPNが落ちるので(BGPで冗長化しているのに同時に落ちたりする)クリティカルなサービスやトラフィックがあるサービスには使いたくないが、consulでのサーバ検出程度であれば十分に役立っております。
  • VyOSを冗長化する方法を検討しておりますが、今現在は手動対応可能な範囲なので当面はアラートが飛ぶ仕組みだけ作り運用をする様にしております。
    VyOSのtask-schedulerにダウン検知したらrestart vpnコマンドを走らせる簡単なスクリプトを仕込んでみたが、上手く起動しないことがあり時間を見て対応したいと考えております。
  • AWSが早くリージョン間のVPCピア接続を対応してくれればなーー

最後に

現在、世界的クラウドファンディングサイト「Indiegogo」で実施中のBONXのキャンペーンに、たくさんのご支援をいただき、ありがとうございます。
キャンペーンは引き続き進行中です!!
https://www.indiegogo.com/projects/bonx-outdoor-sports-group-talk-technology/x/14601326#/