Azure Functions からオンプレAPIに接続できない原因と解決策|Hybrid ConnectionsとVNet統合・Flex Consumptionの選び方

Azure Functions からオンプレミス API に接続しようとすると、「ローカルでは動くのに Azure にデプロイするとタイムアウトする」という相談はとても多いです。その大半はファイアウォールに送信元 IP を開けただけで「そもそもの通信経路」が用意されていないことが原因です。本記事では、その仕組みと具体的な解決パターン(Hybrid Connections / VNet 統合 + VPN・ExpressRoute / Flex Consumption)を、設計のポイントやトラブルシュートまで含めて整理します。

目次

Azure Functions からオンプレ API に接続できない典型パターン

まず、よくある問い合わせシナリオを整理します。

  • Function App(多くは Consumption プラン)から社内の HTTP(S) API に接続したい
  • オンプレ側ファイアウォールには、Function App の「送信元 IP アドレス」を許可登録済み
  • ローカル PC からは VPN 経由などで API にアクセスできる
  • しかし Azure にデプロイした Functions からは 接続タイムアウト(接続先が応答しない) になる

なぜローカルでは成功するのに Azure では失敗するのか

ポイントは次の 2 つです。

  1. ローカル PC には「社内ネットワークへの経路」がある
    例:社内 LAN に直接接続、もしくは VPN クライアントで社内ネットワークにルーティング済み。
  2. Azure Functions からオンプレへの経路はデフォルトでは存在しない
    Function App はインターネット側には出られても、「社内 IP アドレス宛の経路」は用意されていません。

つまり、「オンプレ側ファイアウォールで Function の IP を許可」したとしても、

  • Azure Functions 側にはオンプレネットワークへのルートがない
  • パケットがそもそも社内ルーター・ファイアウォールまで到達しない

という状態です。ここを理解しておくと、後の設計判断がとてもスムーズになります。

解決の基本方針:送信元 IP ホワイトリスト +「到達経路」の準備

結論を一言で言うと、次のようになります。

送信元 IP をホワイトリスト登録するだけでは不十分で、「Azure Functions からオンプレまでの到達経路(トンネル or 中継)」を作る必要があります。

Azure Functions でオンプレ API に安全に到達するための代表的な方法は次の 3 つです。

方式概要必要なプランオンプレ側準備向いているケース
Hybrid Connections
(Azure Relay)
オンプレにインストールしたエージェント(HCM)から Azure へ 443/TLS で「穴」を開けて中継Functions が Windows かつ Consumption 以外中継サーバに HCM をインストール。HCM から社内 API への疎通を確保特定の API/ポートだけを素早くつなぎたい PoC、小規模構成
VNet 統合 + VPN / ExpressRouteFunctions を VNet に参加させ、その VNet とオンプレを VPN または ER で接続Premium / Dedicated(App Service Plan) / Flex Consumption など VNet 統合対応プランサイト間 VPN ゲートウェイまたは ExpressRoute、ルート・ファイアウォール設定本番・大規模、複数サーバや DB など広く社内リソースへ接続したい場合
Flex Consumption プランLinux ベースの最新サーバーレスプラン。VNet 統合が可能で、オンプレへも VPN/ER 経由で到達Flex Consumption 対応リージョン / ランタイムVNet とオンプレ間の VPN / ExpressRoute、DNS/ルーティング「サーバーレス × プライベートネットワーク」を両立したい、Linux 関連の新規開発

以降では、それぞれをもう少し深掘りします。

Hybrid Connections(Azure Relay)でオンプレ API に接続する

仕組みのイメージ

Hybrid Connections は Azure Relay の機能で、オンプレ側から Azure へ「アウトバウンド 443/TLS」で張るトンネルを通して、Azure からオンプレ API にアクセスできるようにする仕組みです。

ざっくりとした流れは下記の通りです。

  1. Azure Portal で「Hybrid Connection」を作成(接続先のホスト名+ポートを登録)
  2. オンプレのサーバ(Windows)に Hybrid Connection Manager(HCM) をインストール
  3. HCM が Azure Relay へ 443/TLS で接続し、コネクションを維持
  4. Function App が Hybrid Connection 経由で、社内 API のホスト:ポートにアクセス

利用できるプランと制約

  • Functions が Windows で動作していることが必須
  • Consumption プランでは利用不可(Free/Shared/Basic/Standard/Premium/Isolated など App Service Plan 系で利用)
  • TCP ベースのプロトコルのみ対応(UDP は不可)
  • 1 Hybrid Connection = 1 ホスト+1 ポートの単位

このため、

  • Functions が Consumption プランのまま
  • Linux プランで動かしている

といったケースでは、まず Windows + Premium / Dedicated プランへの移行 を検討する必要があります。

設定手順の例

  1. Function App を Windows + Premium / Dedicated プランで作成(またはスケールアップ)
  2. Azure Portal の Function App > Networking > Hybrid connections から新規作成
    • 接続名、ターゲットホスト名(例:intra-api.example.local)、ポート(443 など)を登録
  3. オンプレの中継サーバ(できれば DMZ など)に HCM をインストールし、Azure Relay にサインイン
  4. HCM 管理画面で、先ほど作成した Hybrid Connection を紐づけ
  5. 社内から HCM 経由で対象 API にアクセスできるかを確認(telnet / curl など)
  6. Function のコードからは、通常通り https://intra-api.example.local/... へアクセス

オンプレ側ファイアウォールでは、HCM サーバから Azure Relay への 443/TLS アウトバウンド を許可するだけでよく、社内 API をインターネット公開する必要はありません。

メリット・デメリット

項目内容
メリットオンプレ側は アウトバウンド 443 のみ 開ければよい VPN や ExpressRoute のようなネットワーク設備が不要 特定 API だけをピンポイントで公開でき、構成がシンプル
デメリットTCP/特定ポートごとの設定が必要で、接続先が多いと管理が煩雑 Windows + Consumption 以外の Functions に限定される HCM を置くサーバの運用・監視が必要

VNet 統合 + VPN / ExpressRoute でオンプレに接続する

仕組みのイメージ

もう一段「ちゃんとした」ネットワーク構成を取りたい場合は、次の組み合わせが王道です。

  • Function App を Azure 仮想ネットワーク(VNet)に統合
  • その VNet とオンプレネットワークを サイト間 VPN または ExpressRoute で接続

こうすることで、Functions からオンプレのプライベート IP(10.x.x.x / 172.x.x.x / 192.168.x.x など)に、あたかも社内サーバの 1 台かのようにアクセス できます。

どのプランで VNet 統合が使えるか

現在の仕様では、Functions の VNet 統合は下記のプランで利用できます。

  • Flex Consumption プラン
  • Premium プラン(Elastic Premium)
  • Dedicated(App Service Plan)
  • Container Apps(Functions をコンテナアプリとしてホストする場合)

従来の Consumption プランには VNet 統合がありません。そのため、オンプレときちんと閉域接続したい場合は、いずれかのプランへ移行する前提で設計する必要があります。

構成のざっくり手順

  1. Functions を Premium / Dedicated / Flex Consumption のいずれかで作成
  2. Azure 側でオンプレと接続する VNet を用意
    • サブネットは Functions 統合用に、/27〜/24 程度を専用で確保(推奨サイズはプランにより異なる)
  3. その VNet とオンプレを、ExpressRoute またはサイト間 VPN で接続
    • オンプレ側 VPN ゲートウェイ / ルータのルート設定を合わせる
  4. Function App > Networking > VNet Integration から、先ほどのサブネットに統合
  5. オンプレ側ファイアウォールに、VNet のアドレスレンジや VPN のトンネルを通過するルールを設定
  6. 必要なら NAT Gateway を VNet 側に設置し、送信元 IP を固定(オンプレ側での IP ホワイトリストに利用)

メリット・デメリット

項目内容
メリットFunctions 以外の Azure リソース(VM、App Service、PaaS など)も同じ VNet からオンプレにアクセス可能 オンプレ DB・AP・ファイルサーバなど、複数の社内リソースに一括で到達 ネットワークチームの運用プロセス(ルータ/ファイアウォール/監査など)に乗せやすい
デメリットVPN/ExpressRoute の構築コスト・運用コストがかかる ルート表、NSG、オンプレ側ルータの設定など、ネットワーク設計の難易度が上がる Consumption プランのままでは利用できないため、プラン移行が前提になる

Flex Consumption プランで「サーバーレス × プライベートネットワーク」を両立する

Flex Consumption プランとは

Flex Consumption は Linux ベースの Azure Functions ホスティングプランで、従来の Consumption と同じ「使った分だけ課金・スケール to ゼロ」を維持しつつ、

  • VNet 統合によるプライベートネットワーク対応
  • インスタンスメモリサイズの選択
  • 高速なスケールアウトと Always-ready インスタンスによるコールドスタートの軽減

などを追加した、より高度なサーバーレス実行環境です。

また、最近のドキュメントでは 「推奨されるサーバーレスプラン」 として Flex Consumption が案内されており、特に Linux Functions は今後 Flex Consumption への移行が強く推奨されています。

Flex Consumption と VNet 統合

Flex Consumption では、前述の VNet 統合機能が利用でき、下記のようなことが可能です。

  • VNet 統合を通じて、VNet 内の Azure サービスや Private Endpoint へアクセス
  • その VNet が VPN や ExpressRoute でオンプレと接続されていれば、オンプレ API にも到達
  • NSG / UDR / Azure Firewall などのネットワーク制御を活用しつつ、サーバーレスらしいスケール特性を維持

「サーバーレスでありながら社内ネットワークの一員として動かす」には、Flex Consumption が最もバランスの良い選択肢になりつつあります。

Flex Consumption を使ったオンプレ接続の進め方

  1. Flex Consumption プランが利用可能なリージョン・ランタイムか確認(Azure CLI の az functionapp list-flexconsumption-locations など)
  2. VNet とオンプレを VPN/ExpressRoute で接続(既存のハイブリッドネットワークがあればそれを利用)
  3. Flex Consumption の Function App を作成し、VNet 統合を有効化
  4. DNS・ルート表・NSG を適切に設定
  5. Functions からオンプレのホスト名 / IP へ接続テスト

既に Linux Consumption プランで運用中の Functions があり、今後もサーバーレスでオンプレ接続を続けたい場合は、Flex Consumption への移行を強く検討する価値があります。

プラン別にできるネットワーク機能の早見表

プランVNet 統合Hybrid ConnectionsPrivate Endpoint(Functions 自身)オンプレ接続の推奨パターン
Consumption(Windows)不可不可不可基本的に「直接オンプレ」は難しい。Premium/Flex などへの移行を検討
Consumption(Linux)不可(今後 Flex へ移行推奨)不可不可Flex Consumption への移行を前提に設計
Flex Consumption(Linux)可(Regional VNet Integration)不可(Linux 非対応)可VNet 統合 + VPN/ExpressRoute 経由でオンプレに到達
Premium(Elastic Premium)可可(Windows のみ)可VNet 統合 + VPN/ER、または Hybrid Connections
Dedicated(App Service Plan)可可(Windows のみ)可VNet 統合 + VPN/ER、または Hybrid Connections

この表からもわかる通り、「オンプレにちゃんとつなぎたい」= Consumption のままでは厳しく、Flex / Premium / Dedicated への移行がほぼ必須 という構図です。

導入前チェックリスト:ここを押さえておくとハマりにくい

1. Function の実行プランと OS

  • 現在のプラン(Consumption / Premium / Dedicated / Flex Consumption)
  • 実行 OS(Windows / Linux)

ここで分かること:

  • Hybrid Connections が選べるかどうか(Windows かつ Consumption 以外)
  • VNet 統合が選べるかどうか(Flex / Premium / Dedicated など)

2. Azure~オンプレ間の経路

  • 既に ExpressRoute / サイト間 VPN があるか
  • ある場合、その VNet は新しい Functions と同じリージョン・サブスクリプションで使えるか
  • ルート表、オンプレ側ルータ / ファイアウォールに、Azure 側ネットワークの経路が登録されているか

3. DNS 解決

オンプレ API が intra-api.example.local のような内部ホスト名の場合、下記のいずれかが必要です。

  • VNet の DNS サーバをオンプレ DNS に向ける(フォワーダ設定など)
  • Azure 内に DNS フォワーダ(DNS Server VM や Azure DNS Private Resolver)を立ててオンプレ DNS に転送
  • どうしても DNS 構成が難しい場合は、一時的に /etc/hosts への静的登録も検討(ただし運用は大変)

VNet 統合した Functions は、VNet の DNS 設定をそのまま利用するため、DNS の設計ミスが原因でタイムアウトするケースが非常に多い 点にも注意が必要です。

4. ポート・ファイアウォール

  • Hybrid Connections の場合
    • HCM から Azure Relay(インターネット)への 443/TLS アウトバウンドが許可されているか
    • HCM から社内 API までの経路(TCP:443 など)が空いているか
  • VNet 統合(VPN/ExpressRoute)の場合
    • Functions 統合サブネット(または NAT Gateway の IP)からオンプレ API へのポートが許可されているか
    • オンプレから Azure への戻り経路が正しくルーティングされているか

5. 送信元 IP の安定化が必要か

オンプレ側ファイアウォールが「特定の送信元 IP からのみ許可」というポリシーであれば、

  • VNet 統合 + NAT Gateway で、Azure 側の送信元 IP を固定
  • オンプレのファイアウォールに、その NAT の public IP を登録

という構成がよく使われます。

ユースケース別:最短ルートの選び方

「まずは素早く動かしたい」場合

次の条件に当てはまれば、Hybrid Connections が最短です。

  • Functions を Windows + Premium / Dedicated で動かしても問題ない
  • 接続したい API/ポートが限定的(例:社内 REST API が数本程度)
  • VPN/ExpressRoute を新設するほどの規模ではない

手順も比較的シンプルで、「HCM を 1 台立てて Hybrid Connection を紐づけるだけ」で動くため、PoC や短期プロジェクトと相性が良いです。

「本番運用で、広範囲な社内リソースにアクセスしたい」場合

DB、AP、ファイルサーバなど、オンプレリソースに幅広くアクセスしたい場合は、VNet 統合 + VPN/ExpressRoute が王道です。

  • 既に ExpressRoute / VPN がある → そこに乗せるだけなので特におすすめ
  • 今後も Azure へのシステム移行が続く → ハイブリッドネットワークの基盤としても有効

一度 VNet~オンプレの閉域接続を作っておけば、Functions 以外にも VM や PaaS から同じ経路で社内にアクセスできます。

「サーバーレス志向を維持したい・Linux 中心」な場合

Linux Functions をサーバーレスで運用しつつ、プライベートネットワークとの連携も重視したい場合は、Flex Consumption が第一候補になります。

  • 今から新規で Linux Functions を作る
  • 既存の Linux Consumption Functions を、今後も長く運用したい

といったケースでは、Flex Consumption を前提に設計した方が、将来のサポートや機能面で有利です。

トラブルシュートの要点

1. Kudu / SSH コンソールから L4 疎通を確認

「アプリからタイムアウト」とだけ見ると原因が分かりづらいので、まずは Functions 実行環境から L4 レベルの疎通を確認します。

  • Windows(App Service on Windows)の場合 tcpping <host> <port>
  • Linux(Flex / Linux Premium など)の場合 nc -vz <host> <port>

ここで接続できない場合は、アプリコードではなくネットワーク構成(VNet 統合、VPN/ExpressRoute、ファイアウォール、NSG、ルート表)の問題と切り分けできます。

2. DNS 解決を確認

ホスト名でアクセスしている場合は、下記も合わせてチェックします。

  • Windows:nslookup intra-api.example.local
  • Linux:dig intra-api.example.local または nslookup

ここで期待する IP が返ってこなければ、DNS 設定(VNet の DNS サーバ、フォワーダ、Private DNS Zone など)を見直してください。

3. Hybrid Connection Manager(HCM)のログ

Hybrid Connections 利用時は、HCM 側の状態も重要です。

  • Azure Relay への接続が「Connected」になっているか
  • エラーが出ていないか(証明書エラー、プロキシエラーなど)
  • オンプレ API 宛の接続要求が届いているか

HCM が Azure 側に接続できていない場合、Function 側からは常にタイムアウトになります。

4. VPN/ExpressRoute 経路・ルート表の確認

VNet 統合 + VPN/ExpressRoute で接続している場合、ルート周りでよくハマります。

  • VNet のルート表(UDR)で、オンプレ宛 IP が VPN/ER ゲートウェイに向いているか
  • オンプレ側のルータ・ゲートウェイで、Azure VNet 宛の戻り経路が設定されているか
  • BGP を使っている場合、経路がフィルタされていないか

片方向だけルートが通っている(行きは行けるが戻って来られない)と、タイムアウトとして現れます。

5. タイムアウト設定とリトライ戦略

ネットワーク構成が整っていても、

  • オンプレ API 側の応答までに時間がかかる
  • 一時的なネットワーク輻輳でレスポンスが遅くなる

といった理由で、Functions 側でタイムアウトするケースがあります。

  • HTTP クライアントのタイムアウト値を適切に設定
  • ポリシーライブラリ(Polly など)を使い、一定回数のリトライやサーキットブレーカーを実装
  • ログから、どのリクエストがどれだけ時間がかかっているのかを可視化

単純に「Functions の実行時間上限」だけを伸ばすのではなく、アプリケーション側のリトライ戦略もセットで設計することが重要です。

よくある勘違いとアンチパターン

「Consumption でも Hybrid Connections が使える」は誤り

Hybrid Connections は Windows Functions かつ Consumption 以外のプラン でのみ利用可能です。Linux Functions や Consumption プランでは使えません。

Consumption でオンプレ接続を実現したい場合は、

  • Premium / Dedicated / Flex Consumption へのプラン移行
  • もしくは Functions を Azure Container Apps や AKS に移し、そちらで VNet 統合

といった方針を検討してください。

「Private Endpoint を作ればオンプレに直接つながる」は誤り

Private Endpoint は、Azure PaaS(Storage, SQL, Service Bus など)を VNet 内からプライベートアクセスするための仕組み です。オンプレのサーバそのものに Private Endpoint を張ることはできません。

オンプレ資産への接続には、

  • Hybrid Connections
  • VNet 統合 + VPN / ExpressRoute

のいずれかを選択する必要があります。

「送信元 IP さえ分かればなんとかなる」は半分だけ正しい

オンプレ側ファイアウォールで「送信元 IP をホワイトリスト登録」すること自体は正しいのですが、

  • IP アドレスは VNet 統合 + NAT Gateway などでコントロールする
  • その前に そもそものネットワーク経路を作る(Hybrid Connections or VPN/ExpressRoute)

というステップが欠けていると、いつまでたっても疎通しません。

まとめ

Function App からオンプレ API に接続したいとき、「IP を開けたのに繋がらない」 状態のほとんどは、

  • Azure Functions からオンプレまでの 到達経路が用意されていない
  • 利用中のプランで本来サポートされていないネットワーク機能を前提にしている

ことが原因です。

改めて、解決の選択肢を整理すると次の通りです。

  • Hybrid Connections:Windows + Premium/Dedicated で、特定 API への最短ルート
  • VNet 統合 + VPN/ExpressRoute:本番・大規模向けの王道構成
  • Flex Consumption:サーバーレスを維持しつつ VNet / オンプレ接続を実現する最新プラン

「まずはどのプランで Functions を動かしているか」「自社に既に VPN/ExpressRoute があるか」の 2 点を起点に、最適なネットワーク統合方式を検討してみてください。

参考リンク(公式ドキュメント)

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次