Azure App Service のレイヤー構成について

レイヤー構成図

f:id:poke_dev:20181030001230p:plain

赤枠は同一 App Service で 2 インスタンス使用している時の例

各レイヤーに関連する項目

  • スロット
    • Azure ストレージ上の永続ストレージ (= デプロイしたアプリ) (d:\home) (スワップ対象) (*2)
    • アプリ設定 (スワップ対象。スロット固定可)
    • IP 制限 (スワップ対象)
    • カスタムドメイン (スロット固定)
    • IIS ワーカープロセス (再起動とかもこの単位)
  • Apps
    • Web Apps、Functions などのアプリ
  • App Service (インスタンス毎)
    • VM インスタンスはこの単位 (スケールアップ、スケールアウトもこの単位) (*3)
    • 課金もこの単位 (動作しているインスタンス分発生)
    • プラン毎の利用可能メモリなどもこの単位
    • 各スロット毎に用意された VM インスタンス上の一時ストレージ (d:\local)
  • App Service (全インスタンス共通)
    • 各スロット毎に用意された Azure ストレージ上の永続ストレージ (d:\home) (*4)
    • SSL 証明書アップロード
  • スタンプ
    • 受信 IP (1 つ)、送信 IP (4 つ)
    • App Service Environment はこのスタンプ毎占有する
(*1) Functions は今のところデプロイ スロットは正式サポートしていない。ここでは常に既定スロットが使用される想定。
(*2, 4) 同じ項目の注釈をスロットと App Service の両方に記載しているので分かりづらいが、永続ストレージはスロット毎に固有の領域が Azure ストレージ上に用意され、全 App Service インスタンスから共有される方式をとる。App Service とは別の Azure リソースを使用しているためここのレイヤー説明に記載するのは微妙だが、App Service が自動で作成して使用する仕様のため、考慮が必要な項目として記載した。
(*3) スタンプ上に配置される App Service インスタンスは、他のテナントの App Service インスタンスも含まれる事に注意。スタンプを共有するインスタンスは、IP も共有する。

その他考慮事項

  • App Service インスタンスは、スケールアウト時も同一スタンプ上にインスタンスが作成される (= 同じ App Service プランのインスタンスであれば、使用する IP は同じ)
  • App Service のプランを変更しない限り、基本的には最初に配置されたスタンプが使用され続ける (= IP は変わらない)。但し、Azure の大規模メンテナンス等が発生した場合、配置されるスタンプが変わる事があり、その場合は結果的に IP も変わる (= 基本的に固定されるが、固定は保証されていない)
  • スケールアウトを考慮しない場合は、単純に一つの App Service インスタンスに複数スロット、複数 Web Apps を詰め込めるだけ詰め込んでも良いが、スケールアウトを考慮する場合、当該 App Service 状に積んでいる Web Apps、スロットがその状態のままスケールアウトする事になるので、注意
  • (参考情報) Functions の従量課金プランは App Service プランとは異なり、関数実行時に都度デプロイされるが、デプロイ先の VM インスタンスが常に同一スタンプ上のインスタンスとは限らない。前回と異なるスタンプ上のインスタンスにデプロイされた場合、IP も変わってしまう (= IP は固定できない)。

参考ドキュメント