[英]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.