会社内のリバースプロキシサーバーをALBに置き換えた話

うちの会社、社内に開発用だったりその他諸々のサーバーが結構動いているのですが、そろそろこいつらのお世話から解放されたいので、ここ1年くらいはサーバー削減を進めています。

基本的には外部のマネージドサービスに置き換えていく方針でやっています。特に落ちると困る人がいるようなヤツは優先的にやっつけようとしています。

で、そのうちの一つがnginxで実現しているリバースプロキシサーバー。こいつは社内ローカルのVMで動いてるアプリをインターネット経由でアクセスできるようにするために利用しています。クライアントチェックだったり、https通信が必要なものだったり、そういう用途で使われることが多いかな。

上記のサーバーをAWSにお引っ越しする話。

結論から言うと、表題通りにALBにお引っ越ししました。必要なことは以下の通り。

  • 社内ローカルネットワークとVPNで接続されているAWS上のVPCネットワーク(インターネットゲートウェイを持つ必要あり)
  • 接続したいバックエンドのサーバーごとにターゲットグループ作る

まず、ALB自体がVPC内に作られる訳で、それがバックエンドのローカルサーバーに接続できるというのが大前提。ですので、社内ネットワークとAWSVPCVPN接続で相互通信できるようにしておく必要があります。

ALBは上記VPC内に作るわけですが、ALBではホスト名やリクエストパスに応じて接続するサーバーを変えることが出来ます。正確にはリクエストの条件によってターゲットグループを選ぶことができ、ターゲットグループに実際に接続されるサーバーがぶら下がっています。

現在のnginxで実現しているリバースプロキシサーバーでは、ホスト名ベースのバーチャルホストの設定で接続するサーバーを切り替えています。ALBではターゲットグループを選ぶことルールとしてHostヘッダを利用できるため、そちらを利用して実現しました。

f:id:rs_wisteria:20180412010616p:plain

図にすると、とりわけ大したことしてないな…。

あとはDNS側でリバースプロキシしたいホスト名をALBに向けたら完了です。新しくリバースプロキシの設定を追加する際は以下の作業を行います。

  • ターゲットグループを作成し、追加したいサーバーのプライベートIPを設定する
  • ALBに上記ターゲットグループを追加し、ルールとしてHostヘッダにアクセスさせたいFQDNを設定する
  • DNSに設定したい名前がALBを向くように追記する 

上記の一連の作業をスクリプト化し、自動で行えるようにしておくといいかと思います。slackのbotで実現しようかしら。

これで社内のリバースプロキシサーバーを、AWSのALBというマネージドサービスに移行することに成功しました。このサーバー、設定のデプロイがgitlab-ciで行っていたり、サーバー自体が廃止予定のストレージサーバー上に構築されていたりと、なにかとサーバー削減の障壁になっていたので、これで色々サーバー削減が進みそうです。