[Azure] - 如何在 App Service for Windows 中測試對外連線請求

若提到 ASP.NET 網站託管的 PaaS 服務,Azure App Service 絕對會是首選!它整合了佈署、憑證管理、及日誌等功能,大幅降低了維運成本。

雖然看似簡單,但還是有許多的眉眉角角!最近在管理 App Service 的實務上,就遇到了一些對外連線測試的需求,在幾經摸索後找到了幾個可行的做法,特此記錄一下。

貼心提醒:本文章僅適合 App Service for Windows,若為 Linux based OS 則不適用本文提及方式。

在 App Service for Windows 中要測試對外連線,有幾種方式:

  1. Network Troubleshooter
  2. Invoke-WebRequest
  3. tcpping

本文將針對它們的使用方式及適用情境做說明。

1. Network Troubleshooter

預設可以使用診斷工具中的 Network Troubleshooter 來測試 App Service 與目標連線的能力,在測試內網連線 ( private connectivity ) 時相當好用。

從 App Service 左側清單依序點選 Diagnose and solve problems → Network Troubleshooter → Connection issues 即可找到。

不過這個功能必須要啟用虛擬網路整合 ( VNet Integration ) 後才能使用,否則就會出現以下錯誤:

如果你的 App Service 有啟用虛擬網路整合,就可以輸入想測試的 Endpoint。

這邊輸入 https://www.google.com 作為測試,可以看到回傳的內容僅有一些簡單的資訊,其中 Is private 可以輔助我們測試內網連線是否正常。

如果你仔細看,可以發現查詢結果又分為 Ip analysis ( 下圖紅框處 ) 及 Connecting result ( 下圖黃框處 ) 兩個部分。

因為在內網的串接過程中,很可能會遇到 private dns zone 解析成功 ( 看的到 ),但網路是走不過去 ( 打不到 ) 的現象。

所以官方這樣分開的設計會更有助於我們釐清目前的連線問題到底是哪一段。

如果連接對象為內網可通連的服務,那麼查詢結果即可看到私有的 IP,而且 Is private 也會變成 true

2. Invoke-WebRequest

接下來介紹第二種測試連線的方式 - Invoke-WebRequest

Invoke-WebRequest 是 Powershell 中叫用 HTTP 連線的方式,你可以從 Advanced Tools 叫出 Kudu,接著點選 Powershell 開啟指令列模式。

接著使用 Invoke-WebRequest 來測試,你會發現拋出了一個錯誤 -  Win32 internal error "The handle is invalid" 0x6 occurred while reading the console output buffer.

錯誤原因是因為 powershell 預設在呼叫請求時會在上方顯示進度條,而這個行為在 Kudu 中是不被允許的

這部分我們可以透過修改 $ProgressPreference="SilentlyContinue"繞過去,調整後再測試一次,即可成功呼叫。

完整指令範例:

# Set ProgressPreference
$ProgressPreference="SilentlyContinue"

# Send Request
Invoke-WebRequest -Uri "https://ipinfo.io" -UseBasicParsing

3. tcpping

接下來這個指令一樣是要在 Advanced Tools ( Kudu ) 下操作。

一般我們想測試網路之間的連線狀況,第一個會想到 ping 這個指令。

不過在 App Service 中這個指令是無法使用的,但我們可以使用另外一個 tcpping 的指令來測試服務本身到目標主機的延遲程度。

這邊一樣以 google 為例做示範,從測試回傳結果可以看到連線所耗用的時間,很適合拿來當作延遲時間的評比依據。

結語

本次介紹了幾種在 App Service 中測試連線的方式,每種方式都有其適用的場景。

以下整理是我自己實務上比較常使用的情境:

  1. Network Troubleshooter:測試服務內通連狀況,通常測試對象會是 Azure 本身的服務,在內網情境下推薦使用。
  2. Invoke-WebRequest:測試對外呼叫的 API 結果、測試對外 IP ( NAT Gateway )
  3. tcpping:測試服務站台之間延遲度

 

本文的內容就到這邊,如果有其他更好用的測試方法,也歡迎留言分享。

以上內容如有勘誤,再麻煩不吝告知。