在 Azure Functions 中存取應用程式設置
[[academy-video-youtube({"vid": "z7w-aheVrC4", "start_time": "0", "title": "Accessing AppSettings in Console Apps Including Secrets.json", "creator": "Tim Corey", "length": "23m 53s"})]]
在當今快速演變的雲端環境中,安全且靈活地管理應用設定至關重要——尤其對於使用Azure Functions進行開發的開發者而言。 無論您是透過Azure入口網站部署函式應用,使用Azure Functions Core Tools管理配置設定,或透過Key Vault設置機密,從一開始正確構建應用配置結構是至關重要的。
在名為"Accessing AppSettings in Console Apps Including Secrets.json"的實踐課程中,Tim Corey介紹了使用.NET生態系統的最佳實踐。 雖然重點在於控制台應用,但他的概念直接應用於開發和管理Azure Functions應用的函式應用設定——尤其是在本地工作、設置專案文件或部署到App Service時。
在本文中,我們將分解Tim的結構,並將他的課程應用於現代Azure Functions開發。
為什麼應用程式設定對於Azure Functions很重要
Tim首先指出,當構建超出最基本的.NET應用程式時,應用程式設置有多麼重要。在Azure Function環境中,存取應用程式設置的需求更為顯著——因為Azure Functions運行時預期從受管儲存(如環境變數、基於JSON的local.settings.json或Azure App Configuration)中獲取配置值。
"開發人員常常想要存取設置檔案是一個常見的特點,"Tim在0:17解釋道。
無論是API密鑰、連接字串還是功能標誌,配置靈活性和安全性至關重要——尤其是當部署到像Microsoft Azure這樣的雲平台時。
使用Visual Studio建立基礎
在1:24時,Tim使用Visual Studio設置了一個名為SettingsDemoApp的控制台專案。雖然Azure開發者通常會使用Azure Functions Core Tools初始化Functions專案,但Tim的腳手架和程式碼組織方法可以無縫轉譯。 專案文件設置和程式碼結構是關鍵基礎——無論您是在控制台環境中還是以隔離工作模型構建孤立的Azure Functions應用。
安裝所需的NuGet包
從2:33開始,Tim介紹了安裝四個基本的NuGet包:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.Binder
- Microsoft.Extensions.Configuration.UserSecrets
這反映了Azure Functions的應用配置系統,該系統在後台依賴於相同的包。 Tim強調了模組化的價值:
"這其實是與冗餘相反的,"他指出,.NET Core避免了不必要的負載,讓開發者可以透過NuGet選擇使用。
對於典型的函式應用,這些包要麼是預先引用的,要麼很容易新增,以支持自定義邏輯的配置設置、依賴注入或支持Key Vault和Azure App Configuration等高級用例。
新增和配置JSON設置文件
在6:12,Tim建立了一個名為appsettings.json的新文件,模仿您在Azure Functions開發中看到的local.settings.json的結構。 他用如下的鍵值對將其填充:
{
"User": {
"FirstName": "Tim",
"LastName": "Corey"
},
"StarterCountValue": 5
}在本地函式中,開發者使用幾乎相同格式的local.settings.json,透過注入的IConfiguration將值讀入他們的應用邏輯。 Tim還強調了一個關鍵步驟:將文件的"複製到輸出目錄"設置為"如果較新則複製"——這對於確保您的配置在運行時可用至關重要。
手動構建配置管道
Tim接著編寫了手動設置配置管道的程式碼:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);雖然Azure Functions運行時會自動處理此管道,但Tim的分解說明了函式專案如何從不同來源導入值。 他對.AddJsonFile()的使用模仿了開發者如何在Azure應用中配置local.settings.json,reloadOnChange引入了在開發過程中動態刷新配置設置的概念。
以型別安全方式讀取值
Tim展示了如何在11:00使用GetValue()方法讀取設置:
int count = config.GetValue<int>("StarterCountValue");至於巢狀的設置,他使用:
string firstName = config.GetValue<string>("User:FirstName");在Azure Functions中,這些相同的語法模式適用。 Tim用冒號分隔的鍵("User:FirstName")在環境變數中以雙下劃線(__)語法直接映射:
User__FirstName=Tim這在部署到Azure App Service或透過Azure入口網站配置時特別有用,您可以使用應用設置或基於環境的覆蓋來在運行時覆蓋設置。
使用UserSecrets安全地處理機密
在15:00,Tim透過User Secrets介紹了secrets.json模式,用於儲存敏感資料,如API密鑰或連接字串,而不在源程式碼管理中暴露它們。 他展示如何使用這行程式碼將User Secrets儲存附加到您的專案:
builder.AddUserSecrets<Program>();他強調順序很重要——User Secrets會覆蓋較早的配置來源,加強了最後一個佔優的原則。 雖然Azure Functions不直接使用secrets.json,但在生產雲端環境中,您將使用Azure Key Vault,選擇使用受管理的身份驗證,以實現相同的安全覆蓋。
Tim指出,本地開發中的機密是您在生產中使用的任何安全系統的替代品:
"這個secrets.json是您用來儲存實際值的任何安全系統的替代品——無論是Key Vault還是環境設置。"
運行並驗證配置
在設置完appsettings.json和secrets.json之後,Tim運行了範例並驗證了機密覆蓋了基礎值。 這直接反映了Azure Functions如何從多個來源:local.settings.json、Azure App Configuration、環境變數或Key Vault中處理覆蓋。
無論是透過命令行使用Azure Functions Core Tools,還是透過Visual Studio進行部署,應用配置的載入順序和分層行為完全如Tim所述。
配置管理的最佳實踐
Tim在最後建議將不經常變更的配置值(例如功能標誌、頻率設置或CORS配置)留在您的JSON文件中,並將敏感資料(如連接字串和機密)放在安全儲存中。
這與現代Azure Functions的最佳實踐一致,在這裡:
開發人員在本地使用local.settings.json
團隊使用Azure入口網站進行應用設置
機密進入Key Vault
- Azure App Configuration儲存的值有助於將設置與程式碼分離
這些來源與運行時整合使用依賴注入,而不觸及應用程式二進位文件。
最後的想法
儘管Tim的影片是關於控制台應用程式的,但他教的每一項技術都能無縫擴展至Azure Functions應用——從建立配置文件、讀取密鑰、使用受管理身份,到透過依賴注入載入配置。 無論是使用Visual Studio進行部署,管理您的Azure帳戶,還是尋找完整的程式碼範例,他的見解都能直接應用於現實世界的雲端實踐。

