如何使用AWS和Azure的配置存储服务保存读取配置
原文:Want to yank configuration values from your .NET Core apps?
作者:pauljwheeler
譯文:https://www.cnblogs.com/lwqlun/p/10508748.html
譯者:Lamond Lu
示例源代碼:https://github.com/lamondlu/LoadConfigurationFromCloud
背景
我們創建的大部分.NET Core應用都會使用配置文件。如果你了解過12 Factor理論(https://12factor.net/zh_cn/), 你可能會希望將配置文件與代碼隔離。這就意味你不能將應用配置存在appsetting.json文件中或者硬編碼在程序中。
這時候我們可以使用環境變量來完成以上的需求,但這并不是很好的選擇,這種方案有2個缺點
- 沒有版本控制
- 沒有訪問權限控制
今天我就給大家介紹一下AWS和Azure中提供的配置服務。
AWS
AWS的AWS Systems Manager服務中,提供了一個名為Parameter Store的子服務。此服務可以用來維護項目中使用的配置數據。 據我所知,它可以免費使用。
使用配置服務添加配置
首先,我們訪問了AWS控制臺,找到了Systems Manager服務,并從左側菜單中選擇了Parameter Store。 從這里,我們可以編輯或刪除現有參數,并創建新參數。
每個參數都有一個名稱和值。 對于名稱,我們使用“/”來定義層次結構(例如:/lamond/project1/config1)。 參數類型可以是字符串,字符串列表或加密字符串。
整個UI的功能非常智能,這里當輸入參數名稱的時候,它會自動匹配已有的參數名稱
為了演示效果,這里我添加了2個配置,一個名為/lamond/project1/config1,值是"Hello world", 另外一個名為/lamond/project1/config2, 值為"We love Cloud".
好的,以上我們就完成在AWS控制臺中的配置,下面讓我們看一下如何在一個.NET Core Web應用中讀取這個配置。
如何從代碼中讀取配置
這里首先我們創建創建一個ASP.NET Core MVC項目,并添加程序集
Amazon.Extensions.Configuration.SystemsManager然后,我們創建一個簡單的Setting類, 用來存儲從AWS Parameter Store中拉取的配置值
public class Settings {public string Config1 { get; set; }public string Config2 { get; set; } }然后,我們需要在appsettings.json文件中配置AWS配置服務的region和profile.
{"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","AWS": {"Profile": "default","Region": "us-west-2"} }下一步,我們需要修改Program.cs文件,啟用從AWS Systems Manager中讀取配置, 這里我是從/lamond中讀取配置
public class Program {public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration(builder =>{builder.AddSystemsManager("/lamond");}).UseStartup<Startup>();}接下來,和一般的強類型配置綁定一樣,我們還需要在Startup.cs的ConfigureService方法中,綁定配置。
public void ConfigureServices(IServiceCollection services) {services.Configure<Settings>(Configuration.GetSection("properties"));services.Configure<CookiePolicyOptions>(options =>{options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None;}); }最后,我們就可以在控制器中注入強配型配置, 并讀取配置了
private readonly Settings _settings;public HomeController(IOptions<Settings> settings){_settings = settings.Value;}public IActionResult Index(){ViewData["configval"] = _settings.Config1;ViewData["configval2"] = _settings.Config2;return View();}最終效果
注意: 這里啟動項目的時候如果出現未授權錯誤,你需要安裝AWS CLI配置本地使用Access Key ID和Access Secret, 或者只用環境變量來設置Access Key ID和Access Secret。
其他優點
AWS的Parameter Store除了免費之外,還提供了一個歷史記錄功能。你可以每個版本配置的更改內容和操作人。
另外AWS團隊還編寫一個針對.NET Core的擴展,使用這個擴展,當你的配置發生變化的時候,.NET Core應用可以自動刷新配置信息。
Azure
微軟近期剛剛推出了Azure App Configuration服務的預覽版。這個服務可以幫助你集中你的配置。這是一個全新的服務,下面讓我們看一看如何使用它。
使用配置服務添加配置
首先,我們可以通過Azure管理站點,搜索configuration服務, 圖中的App Configuration就是我們所需的服務。
下一步,我們來創建一個配置組,這里我將配置組命名為lamond-config
添加完成之后,我們就可以在Key-Value Explorer面板中為當前配置組添加配置信息了
和前面AWS的例子一樣,我們添加2個配置值。
這樣配置工作就完成了,接下來我們編寫代碼使用.NET Core讀取App Configuration服務中的配置。
如何從代碼中讀取配置
這里我重新創建了一個新的ASP.NET Core API站點,并添加程序集
Microsoft.Extensions.Configuration.AzureAppConfiguration項目創建成功后,我們首先添加一個Settings類
public class Settings {public string Config1 { get; set; }public string Config2 { get; set; } }下一步,我們需要更新Program.cs文件,啟動Azure App Configuration
public class Program{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext, config) =>{var settings = config.Build();config.AddAzureAppConfiguration("[xxx]");}).UseStartup<Startup>();}這里我們需要將Azure App Configuration的連接字符串放在這里。
第三步,我們依然要在ConfigureServices方法中進行強類型配置綁定
public void ConfigureServices(IServiceCollection services){services.Configure<Settings>(Configuration.GetSection("lamond-config"));services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);}最后,我們就可以在API中讀取強類型配置了
[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{private Settings _settings;public ValuesController(IOptions<Settings> settingsAccessor){_settings = settingsAccessor.Value;}// GET api/values[HttpGet]public ActionResult<IEnumerable<string>> Get(){return new List<string> { _settings.Config1, _settings.Config2 };}}最終效果
啟動項目后,配置從Azure App Configuration中正確讀取了。
其他優點
與AWS Parameter Store類似,Azure App Configuration也提供了配置的審計功能,你可以查看每個配置的歷史記錄和修改人。除此之外,Azure App Configuration還提供了一個Label功能,使用該功能可以為同一個配置設置不同環境下的值。
例如下圖中,我添加了一個lamond-config:config3的配置項,當運行環境是qa的時候讀取的值是1,當運行環境是dev的時候值是2
總結
今天給大家分享了一下,如何使用AWS Parameter Store和Azure App Configuration來存儲配置信息,并且給出了如何使用.NET Core加載配置服務中的配置項。其實原文中還介紹了Spring Cloud Config, 有興趣的同學也可以去試一下。
轉載于:https://www.cnblogs.com/lwqlun/p/10508748.html
總結
以上是生活随笔為你收集整理的如何使用AWS和Azure的配置存储服务保存读取配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java ---- java io /
- 下一篇: HTTPS加密那点事--轻松秒懂HTTP