今日も Windows Azure Web サイトを使っていて、Web サイト上のサービスから外部の IP アドレスで制限されている API を叩く時、困ったことになりました。*1
調べてもよくわからなかったので、またも Twitter で呟いてみると、河野さんから回答を頂きました。毎度毎度すいません、また帰国された際には一杯奢らせてください。
@shibayan あーworkerのアドレスは変化します。reservedの場合は、スケールいじらない間はだいたい一定です。だいたい。
— Michimune Kohno (@superriver) July 30, 2013
Web サイトの標準インスタンスを選択している場合、実際にリクエストを処理するワーカーの IP アドレスは「だいたい」変わらないらしいです。だいたいというのがミソですね。
今回は IP アドレスでのアクセス制限がかかっている API を叩きたいので、これだとまだ困った感じです。
@shibayan お金があるならIP SSL使って貰えれば固定されますよー
— Michimune Kohno (@superriver) July 30, 2013
@shibayan あ、えーとfront endの外側アドレスが固定です。workerはやはり変化する可能性があります。ご注意下さい
— Michimune Kohno (@superriver) July 30, 2013
そしてフロントエンドの IP アドレスは IP SSL を有効にすれば、課金発生しますが固定になるようです。
ちなみに、ここで指しているフロントエンドとは LB の後ろにいる ARR のことだと思います。大本となる LB の IP アドレス自体は、Web サイトでは A レコードによるドメイン設定が出来るので固定です。
@shibayan それがIPアドレス的には一番stableです。何しろfabricがいつでもインスタンス落とす可能性があるので、それに対応する必要があります。アドレス非依存なら問題ないのですが…
— Michimune Kohno (@superriver) July 30, 2013
仮想マシンやクラウドサービスでは、インスタンスを完全に停止させない限り VIP は変わらないのですが、Web サイトは LB の後ろに ARR があって、そこからワーカー*2となっているので、IP アドレスが 3 つ関係してくるみたいです。
Web サイトの詳しい仕組みについては、河野さんが Developer Camp 2012 Japan Fall で発表されたスライドを参照するのが超おすすめです。
分からないなりにまとめておくとこんな感じでしょうか。
- Azure LB の IP アドレス
- Web サイトの場合は固定(独自ドメインの為にも)
- IIS ARR の IP アドレス
- IP SSL を有効にすることで固定(実際には同じ IIS ARR が割り当てられるようになる?)
- Worker の IP アドレス
- 標準インスタンスなら「だいたい」同じ
- fabric がインスタンスを落とす可能性がある = IP アドレスが変化
Web サイトの細かい内部構造に自信が無いので、どこか間違っている気がします。間違いを見つけたら、是非教えてください。