使用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與非同步機制,以確保應用程式效能不受影響。

留言

這個網誌中的熱門文章

使用 Airtable 在小型需求上取代傳統資料庫

使用Semantic Kernel 建立自然語言請假系統

精彩(且驚人)的Semantic Kernel入門範例

在 LINE Bot 開發中使用Semantic Kernel建立自然語言請假系統

專業的價值...