前言
因為需要讓使用者可以自行執行和察看 App Service 上的 WebJob 的狀態,但是又不希望還需要另外開 Azure Portal 權限給使用者,因此會需要可以透過程式來控制 WebJob,找了一下發現 Kudu 是有提供 API 的,因此就透過 API 實做出類似 Kudu 後台的 WebJob 管理介面,在這一個管理平台上可以同時管理多組 App Service 站台底下的 WebJob,後面就來說明該如何設定和使用這一個平台。
因為需要讓使用者可以自行執行和察看 App Service 上的 WebJob 的狀態,但是又不希望還需要另外開 Azure Portal 權限給使用者,因此會需要可以透過程式來控制 WebJob,找了一下發現 Kudu 是有提供 API 的,因此就透過 API 實做出類似 Kudu 後台的 WebJob 管理介面,在這一個管理平台上可以同時管理多組 App Service 站台底下的 WebJob,後面就來說明該如何設定和使用這一個平台。
在 Azure 上面要運行網站的應用程式,除了使用虛擬機器之外,就不能不提到 App Service 這一個 PAAS 服務了,可以很方便的部署和管理網站,因此第一個可以最佳化成本的服務就先來說明 App Service,本文就針對 App Service 計費方式和選擇建議等做介紹和說明。
在之前的文章「透過 Kudu API 實做 App Service WebJob 管理平台」裡透過 Kudu API 來觸發執行 WebJob ,但是在某些情境下會需要讀取參數,而且會是要每次執行的時候可以帶不一樣的參數,這樣的情境我們就不能把參數寫在 config 上,參考文件之後發現透過程式去觸發 WebJob 的時候我們可以在網址帶入參數,因此就調整了之前寫的管理平台讓它可以支援參數。
透過 App Service 上執行網站的時候,有時候可能會需要透過私有的 DNS Server 來解析特定的網址,這時候可以透過一些簡單的設定就可以完成這樣的需求,後面就來介紹兩個方式來完成這需求。
在開發的時候一定會有機會存取陣列類型的設定值,在程式裡面通常會用複雜型別來對應這樣的設定資料,那部署到 App Service 如果要透過組態來設定陣列值的話因為沒辦法像設定 appsetting.json 那樣方便,會需要採用 key 值的方式來設定,平常又是透過強型別來存取陣列設定,反而不熟悉存取陣列 key 值的方式而卡了一下,因此筆記一下設定的方式。
在開發專案的初期,除了環境設定以外,程式的參數設定會是初期需要處理的問題,不外乎是怎麼存?存哪裡?而在預設的 .NET Core 專案會是存在 appsettings.json 這一個檔案裡面,而專案越來越大或是越來越多子專案之後,就會延伸一個問題是參數的管理,可能在很多專案會用到一樣的參數,但是當這個參數要調整的時候,會需要每一個專案都記得去修改,這樣在管理上會相當的不方便,這時候就可以使用 Azure 上的 App Configuration 這一個服務來統一管理和設定參數,而最近微軟 Public Preview 一個新的功能,讓我們可以在不修改程式的情境下讓 App Service 的組態可以直接使用 App Configuration 內的參數,後面就來介紹該如何啟用這樣的功能。
最近工作上需要串接 SAP,但是因為現在專案都改用 .NET Core 了,官方的 SAP Connector for Microsoft .NET 主要是支援 .NET Framework,因此就在 NuGet 上面找了幾個套件,經過測試之後,huysentruitw/SapNwRfc
這一個套件,它的使用方式我比較喜歡,而且可以支援強型別的 Model ,使用上會比較順手,另外也需要將程式部署到 App Service 執行,因此也把可能會遇到的問題記錄一下。
前陣子微軟公告 App Service 基本定價層支援虛擬網路整合的功能 GA 了,這樣終於可以不用要到比較高的定價層才可以使用,可以節省不少費用,剛好實務上要設定,就開始了一連串的踩雷,最後終於找到解決的辦法,後面就來說明遇到的情境和提供一些解法。
在 Azure 上面執行排程程式除了 Azure Function、Logic App 等服務以外,最方便的方式還是使用 App Service 裡面的 WebJob,它可以執行很多種類型的程式,所以我們可以簡單的開發一個 Console 程式去執行我們的排程程式,而當然也要讓它可以自動化部署,在設定上會有一些細節需要注意,所以特別針對一些設定和參數來記錄一下部署的流程。
App Service 有一個很實用的功能就是預備環境 (Slot),他可以方便我們在部署程式的時候可以先佈到預備環境,測試完成之後可以直接和正式環境進行切換 (Swap),也可以在發現有沒測試到的嚴重問題的時候可以再切換一次,就可以快速的退到前一版的環境,那要結合 Azure Devops 的話就可以達到自動化的部署和切換,而且可以加上審核的關卡,測試完成之後審核完成就自動的進行切換,本文就來針對這樣得情境進行介紹如何完成這樣的自動化流程。
微軟在 Azure 上面提供了 Private Link 這一個服務,可以將 Azure 上的 Pass 變成私有的服務,僅能透過 Private Link 才可以連線到,從外部網路是無法直接連線到,如此對於資安有較大要求的情境,就可以設計出僅在特定網路下才可以連線的架構,但是在這樣的架構下也會產生額外的需求,比如說 App Service 的部署,在這個情境下就不能像之前文章「使用 Visual Studio 部署網站到 App Service」的方式直接部署上去,因為這時候是無法從外部網路直接連線到 App Service 的,而解決的辦法最簡單的方式就是建立一台跳板機 VM,設定和 Private Link 同一個虛擬網路,再透過這一台機器進行部署,但是這樣的方式就得在每次要部署時候在連到跳板機器再去部署,還是不夠方便,因此我們可以透過 Azure DevOps 自動化部署,後面文章就來說明實做設定的流程了。
實務上偶爾會發生管理資源的時候一不小心就刪除錯資源的慘劇,部分 Azure 服務是可以自助還原的,不需要再開 Ticket 請微軟 Support 協助,比如說儲存體帳戶,針對 Blob 有虛刪除功能,針對儲存體帳戶層級也有還原刪除的儲存體帳戶的功能,而針對今天要討論的主角 App Service,雖然在 Azure Portal 上面並沒有 UI 可以方便視覺化的操作,但是還是可以透過 PowerShell 指令來還原。
ASP.Net Core 內建 ILogger 介面方便我們可以實做或串接各種 Log 的套件,而當我們把程式部署到 App Service 但是又不想或不需要把 Log 記錄到 Application Insight,只是想比較單純的用文字檔來收集 Log 就好,本文就針對這樣的情境透過簡單的設定和程式碼就可以把 Log 記錄到我們指定的儲存體內。
針對 Azure 上面最多人使用的 Paas 服務之一的 App Service,我們可以很方便的手動或自動化設定多個執行個體來負擔網站的負載,但是在開啟之後會有一些延伸的議題需要處理,本文就針對這些常見問題做一些實測和確認。
上一篇我們使用到了表單辨識器範例工具來快速的使用表單辨識器這一個服務,接下來針對這一個工具來快速的把其它功能測試一下。
過去曾經針對 .NET Framework 寫了一版在 App Service 要轉換 HTML 成 PDF 檔案的可行方案,這次改成 .NET Core 版,一樣是透過 wkhtmltopdf 這個工具,然後配合找到的套件來產生 PDF,後面就是實做和測試的結果。
針對前一篇文章,針對 DefaultAzureCredential 做深入一點的探討,並且解決實做上可能遇到的情境的解決方式。
在透過程式存取 Azure 資源的時候,基於安全性考量,通常是透過在 AAD 內建立應用程式註冊,透過註冊應用程式設定必要的權限來存取 Azure 資源,但是在使用 KeyVault 的時候就是希望有更高的安全性,會將金鑰或秘密存在服務內,但是這時候又會有一組應用程式註冊的 Secret 會需要被放到程式的參數內,那如果也想在開發階段也隱藏這一個金鑰的話就得使用微軟推出的身份識別功能,透過此功能來存取資源,可以在開發階段避免直接將應用程式註冊的 Id 和 Secret 交付給開發人員或是存放在設定檔內,本文就是介紹整個開發階段和部署到 Azure App Service 時候實做存取 Key Vault 內的 Secret。
使用 Azure 的開發者應該不少是使用 Visual Studio 來開發,而目前 Visual Studio 針對 Azure 部署上已經整合的很好,本文就介紹如何部署到 Azure App Service 或 Azure Functions 的方式。