[英]Store connection string for asp.net core 2 on aws eb
我在 aws eb 上部署了 .net core 2 應用程序。 我需要登台、qa 和 prod 服務器,但不知道如何處理連接字符串? 是否可以將其存儲在 eb 上的 env 變量中? 或者是否可以為這三個實例創建 env 並為每個實例創建不同的 application.json 文件?
您可以在 ASP.NET Core 中使用選項模式
例如你有這樣的 appsetting.json
"WebAppUrl": {
"Staging": "someurl",
"Qa": "someurl",
"Prod": "someurl"
}
我需要定義一個這樣的模型類來存儲信息
public class WebAppUrl
{
public string Staging { get; set; }
public string Qa { get; set; }
public string Prod { get; set; }
}
所以我們有配置結構。 我們需要的最后一件事是在 Startup.cs 中注冊
services.Configure(configuration.GetSection("WebAppUrl"));
所以你可以像這樣使用
private readonly IOptions<WebAppUrl> _webAppUrl;
public EmailSender(IOptions<WebAppUrl> _webAppUrl)
{
_webAppUrl = _webAppUrl;
}
_webAppUrl.Value.Staging;
_webAppUrl.Value.Qa;
_webAppUrl.Value.Prod;
好的,這就是 Microsoft 設置多個 appsetting.json 文件的方式。 你可以看看,因為它有點長
這是我如何根據環境使用 json 文件進行配置
public Startup(
IConfiguration configuration,
IHostingEnvironment hostingEnvironment)
{
_configuration = configuration;
_hostingEnvironment = hostingEnvironment;
var builder = new ConfigurationBuilder();
if (_hostingEnvironment.IsDevelopment())
{
builder.AddUserSecrets<Startup>();
}
else
{
builder
.SetBasePath(hostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
}
}
這是一種使用 ebextensions 和實例元數據的方法:
在您的應用程序啟動之前,使用ebextensions來管理服務器的自定義。
ec2:DescribeTags
權限的角色。init.config
文件中.ebextensions
夾斷了根。下面的示例是帶有 powershell 的 windows 實例的 init.config,但可以適應 bash + aws cli。
第一步寫出一個powershell腳本。 該腳本讀取 Environment 標記並將值寫入機器范圍的變量以供應用程序提取。 第二步調用腳本。
files:
"c:/cfn/init.ps1":
content: |
$instanceDoc = Invoke-RestMethod 'http://169.254.169.254/latest/dynamic/instance-identity/document'
$nameTagList = Get-EC2Tag -Region ($instanceDoc.region) -Filter @{name='resource-type';value='instance'},@{name='resource-id';value=$instanceDoc.instanceId},@{name='tag:Environment';value='*'} | Select -First 1
$envName = $nameTagList.Value
[Environment]::SetEnvironmentVariable("APP_ENV", $envName, [EnvironmentVariableTarget]::Machine
container_commands:
00-invoke-init:
command: powershell.exe -nologo -noprofile -file "c:\cfn\init.ps1"
因此,為 .net 核心應用程序處理來自彈性 beantalk 的 env 變量存在問題。
這是答案(hack)如何強制應用程序獲取ASP.NET Core 1.0 中的環境變量 AWS Elastic Beanstalk 環境變量
因此,所有敏感數據(如連接字符串)都應位於彈性 beanstalk 環境變量上。 其他的可以在appsettings.Staging.json
、 appsettings.Qa.json
等中。
只是不要忘記在 env 變量中添加ASPNETCORE_ENVIRONMENT
var。
我建議將配置放入 AWS System Manager 的 Parameter Store。 Amazon.Extensions.Configuration.SystemsManager NuGet 包將 Parameter Store 作為配置提供程序添加到 .NET 配置系統。 這是一篇博客文章以獲取更多信息。 https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.