Azure Storage Emulatorにコンテナ内からつなごうとして、結局リバースプロキシを立てた話

 クラウドのファイル置き場、AWSでいうところのS3が、Azureにもある。その開発環境のためのツールとして、Azure Storage Emulator(以下エミュレータ)というのがある。これをDockerコンテナに入れたアプリから使おうとしたけどなかなか手間がかかった。
 まずエミュレータはWindows上で動くものしかまだないというのと、ローカルで使うことしか考えられていない。公式ドキュメントを見ると、本番用のホストか、ローカルを指すIPである127.0.0.1しか使われていない。
Azure ストレージ エミュレーターを使用した開発とテスト

 これじゃコンテナの中にあるアプリからエミュレータにつなぐことができない。どうにかならんかなーと調べていたら、「リバースプロキシ立てたわ」というのが見つかった。
How to access Azure Storage Emulator (Local) over wifi?

 Dockerコンテナ内からエミュレータにアクセスしたい。そんなわけで、リバースプロキシを立てることにした。IISのARRでいこうと思ったが、Fiddlerを使うのが思いのほか簡単だったので、Fiddlerでいった。
 Fiddlerが動いていないとリバースプロキシが効かないという欠点はあるが、逆に言えばFiddler落とせばポートも閉じるってことはいいことかなと。
 ただTravisCIみたいなところのCIサイクルにこのテストを持っていくのは難しそう。まあコマンドラインからでもFiddlerは使えるのでがんばればどうにかなりそうではあるが。
 Fiddlerのリバースプロキシ設定をする。公式に丁寧な説明があるので詳しくはそっち参照。
http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy

 Fiddlerでの設定をざっくり書くと、
・「Tools」→「Telerik Fiddler Options」とたどる
・「Connections」タブでFiddlerの待ち受けポートを設定、リモートコンピュータからのアクセスをありに
・メイン画面にもどって「Rules」→「Customize Rules」
・Fiddlerの挙動をいじれるスクリプトが出てくるので、メソッドOnBeforeRequestの最終行あたりにでも下記コードを入れる。IPやポートは任意。
if (oSession.host.toLowerCase() == "192.168.2.10:9999")

{
oSession.host = "127.0.0.1:10000";
}

・Fiddlerを立ち上げなおす

 上記をやることで、

このリクエストは門前払いや!から…

エミュレータがレスポンスを返してくれるようになる。

 あとはアプリにエミュレータへの接続を入れてゴリゴリ書いていくだけのはず…。
comment: 0