Http header + ALBで本番とステージングを同じURLで運用する
アガルートITパートナーズの大野です。
タイトル通りですが本番とステージングを同じURLで運用する方法について書いていきます。
同じURLを使うことで、
- ステージング用にサブドメインを用意
- サブドメイン用に証明書の発行・設置
辺りの作業が不要になるメリットがあります。
構成図

上記のようにリクエストヘッダーに StagingTest: True がついている場合にのみステージングにフォワードし、それ以外は全てプロダクション環境に送るようにします。
ALBでの設定
AWS ALBでの設定は非常にシンプルです。

リスナールールに Http header という項目が用意されているので、今回は StagingTest: Trueに一致した場合ステージングに飛ばすという設定を入れます。
EC2の方は本番機とステージングで同じドメインで動くよう、同一のvirtual host設定を行っておきます。
テスト時のアクセス方法
ブラウザでアクセスする際のリクエストヘッダーに `StagingTest: True` という値を付与すれば良いのですが、一番手っ取り早いのがchrome拡張を使う方法です。
それぞれの設定方法は割愛しますが、ModHeader や Requestly.io などが機能が豊富で実績もあるようです。
また、Burp Suite のようなテストツールを使っても同じことができるのでお好みの方法で良いでしょう。
注意点
インフラ構築の手間はかからず便利ではあるのですが、URLが同一なためステージングと本番の見分けが付きづらいことがあります。
その際はアプリケーション側でヘッダーの値を読み込み、 StatingTest: True なら背景色を変えるなど、一工夫入れると良いかと思います。
またステージングには別途IPなどでアクセス制限をかけることも考慮する必要があるかも知れません。