使用Azure App Configuration處裡微服務與容器化的配置設定
應用程式大致都會有環境變數,一般來說,我們在做網站時,除了把環境變數或是資料庫連線字串…等這些設定資訊,存放在 WebApp 的 App Config(組態設定)中,我們還有幾種不同的選擇。
Azure上獨立的App Config服務就是其中之一,中文名稱叫做『應用程式組態』。
建立『應用程式組態』服務
你可以透過 Azure Portal 建立該服務:
比起一般的config服務,從上面影片建立該服務的過程中,你也看到了,它額外具備了雲端特有的『異地備援』、『虛刪除』…等功能,讓資訊的保存更加安全可靠。
此外,它除了組態總管(Configuration Explorer),還有功能管理員(Feature Management):
你只需要透過端點(endpoint)與金鑰匙(Key)就可以存取該服務。當然,存取的過程中,需要建立類似資料庫的連線字串:
保存在該服務裡的組態資料,都是以 key-valut pair 的形式被建立的,你可以透過組態總管來建立:
撰寫程式碼抓取config資訊
建立好組態資料,接著就是在程式碼中存取。要在程式碼當中抓取存放於雲端的config資料,也相當容易,我們嘗試建立一個console app來測試:
md testappconfig
cd testappconfig
dotnet new console
dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
code .
上面這幾行CLI指令,會建立出一個 console application,並從NuGet引用’Microsoft.Extensions.Configuration.AzureAppConfiguration’套件。
然後,我們透過VS Code 開啟該專案,並且撰寫底下程式碼:
using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
namespace appConfigTest
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration("Endpoint=https://_________.azconfig.io;___;Secret=____");
var config = builder.Build();
Console.WriteLine(config["TestApp:Settings:Message"] );
}
}
}
由於我們在上面程式碼13行中,使用到了名稱為’TestApp:Settings:Message’的組態變數,因使,你只需要再透過『組態總管』,建立一個名稱為 ‘TestApp:Settings:Message’ 的索引鍵/值『索引鍵/值』,並且把上述程式碼中11行的連線字串換掉,就可以測試了。
請看底下的影片,我們展示了整個過程:
你會發現,程式碼中輕鬆地使用SDK,即可抓取雲端 Azure App Configuration 中建立好的設定,只需要透過連線字串即可。
為何需要統一管理config資訊?
你可能會疑惑,原本的 Web App 就已經有組態設定功能,若是安全性的考量,可以採用 Key Vault,那為何又需要這個Azure App Configuration 呢?
你可能猜到了,因為微服務和容器化。
過去,應用程式大多是一個大系統,系統之間合作的關聯性不是沒有,但如今當你的應用程式變成類似微服務的架構設計之後,往往比起以前更需要有一個統籌管理的組態設定後台,來進行各樣的配置。
再加上,現在的網路服務大多是全球維運環境,除了測試環境、正式環境等典型的環境差異,可能還有位於不同國家的資料中心的分散式設計,環境變數會變得比以往複雜很多,因此更需要一個統籌的管理機制。
這時候,Azure App Configuration就是一個很好的選擇。了解之後,你大概也不難理解,為何key-valut pair的組態的設定取名會變成類似底下這樣以冒號(:)的方式隔開:
TestApp:Service1:ConfigA
or
ErpApp:EastAsia:DbConnection
因為系統可能有各種不同hierarchy的設定需求。
此外,你大概也可以設想的到,透過雲端方式來儲存config資訊,若沒有處理好Cache機制,系統效能很可能會被大幅拖慢,所以Azure App Configuration整體的SDK設計,都便於建立Cache與非同步機制,以確保應用程式效能不受影響。
留言