實做使用 App Configuration 來取用參數

  • 227
  • 0

在前面的文章「不修改程式下在 App Service 使用 App Configuration 管理參數」介紹到不修改程式的情境來套用 App Configuration,這在只有單一 App Service 時候或是沒有在其它程式也會共用參數的情境下適合,如果有同一個參數會用到多個應用程式還是建議修改程式來支援會是比較好的使用情境。另外針對參數設定上也可已設定 Lable 來區分不同的環境,本文也會介紹如何在存取的時候設定要存取的 Label。

實做

底下會用 .NET 6 的 ASP.NET MVC 專案來當作範例,建置 App Configuration 和專案過程就不再贅述了。

首先新增一個參數 Message 並且設定三個不同的 Label,分別為無標籤 (No label)、Development、Production,並且設定不同的值。

再來到 Access keys 來取得稍後會用到的連線字串。

打開 ASP.NET 的 appsettings.json 加上底下參數,並且設定好連線字串。

  "Message": "From appsettings.json",
  "ConnectionStrings": {
    "AppConfig": "{Your ConnectionString}"
  }

新增 Nuget 套件 Microsoft.Azure.AppConfiguration.AspNetCore

dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore

然後在 Program.cs 裡面設定取得連在字串參數並設定給 App Configuration,這邊順便實測設定前和設定後取得參數,可以觀察參數生效的時間點。

var connectionString = builder.Configuration.GetConnectionString("AppConfig");

var beforeConfigMessage = builder.Configuration.GetValue<string>("Message");

builder.Host.ConfigureAppConfiguration(builder =>
{
    builder.AddAzureAppConfiguration(connectionString);
});

var afterConfigMessage = builder.Configuration.GetValue<string>("Message");

執行程式之後下中斷點來觀察參數,就可以發現設定之前會讀取 appsettings.json 的參數值,設定好之後就會在取得參數時候使用 App Configuration 了。

前面我們有針對參數設定 Label,這時候就可以調整設定,底下範例就可以針對不同環境去存取環境變數當作 Label 的值,不過要注意的是後面設定的會優先使用,所以假設環境變數值是 Development 的話,就會優先使用 Label 為 Development 的參數值,如果找不到的話就會使用無標籤的,最後才是 appsettings.json。

var app = builder.Build();

builder.Host.ConfigureAppConfiguration(builder1 =>
{
    builder1.AddAzureAppConfiguration(options =>
    options
        .Connect(connectionString)
        .Select(KeyFilter.Any, LabelFilter.Null)
        .Select(KeyFilter.Any, app.Environment.EnvironmentName)
    );
});

結論

微軟針對 .NET 要使用 App Configuration,可以很方便加入套件跟設定好連線字串就可以使用 App Configuration 參數,也不需要異動態多的程式,原本存取參數的地方都還是可以維持一樣的存取方式,對於開發跟實務上就可以更方便我們統一管理參數。

參考資料