我们在Elastic Beanstalk仪表板中设置了自定义环境变量,位于configuration => software configuration =>" Environment Properties"部分。在C#MVC 5项目中,我们可以通过使用ConfigurationManager.AppSettings查找它们来访问这些变量 - 这非常有用。
然而,在.NET核心中,我们不再使用web.config了。我们一直试图找到访问环境变量的方法,但我们发现的是一个名为AWSSDK.Extensions.NETCore.Setup的nuget包。但是,这个包似乎不能让我们访问自定义变量。
非常感谢任何帮助。
答案 0 :(得分:10)
根据我的研究和测试,这是AWS Elastic Beanstalk for ASP.NET Core 1.1应用程序的一个缺陷。刚刚遇到这个问题,解决问题的唯一方法是使用ASP.NET ConfigurationBuilder加载AWS编写的配置(如果它在那里)并解析它。
AWS应该最终解决这个问题,直到那时你可以使用我使用的方法:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile(@"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
var config = builder.Build();
builder.AddInMemoryCollection(ParseEbConfig(config));
Configuration = builder.Build();
}
private static Dictionary<string, string> ParseEbConfig(IConfiguration config)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (IConfigurationSection pair in config.GetSection("iis:env").GetChildren())
{
string[] keypair = pair.Value.Split(new[] { '=' }, 2);
dict.Add(keypair[0], keypair[1]);
}
return dict;
}
答案 1 :(得分:2)
以前,Elastic Beanstalk不支持将环境变量传递给使用部署清单[1]的.NET Core应用程序和多应用程序IIS部署。 2020年6月29日更新的Elastic Beanstalk Windows Server平台[2]现在可以解决此问题。有关详细信息,请参阅在Elastic Beanstalk控制台[3]中配置.NET环境。
[1] https://docs-aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-manifest.html
[2] https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-06-29-windows.html