使用.NET Core WebApp访问AWS ElasticBeanstalk自定义环境变量

时间:2017-06-30 22:09:05

标签: c# .net amazon-web-services .net-core

我们在Elastic Beanstalk仪表板中设置了自定义环境变量,位于configuration => software configuration =>" Environment Properties"部分。在C#MVC 5项目中,我们可以通过使用ConfigurationManager.AppSettings查找它们来访问这些变量 - 这非常有用。

然而,在.NET核心中,我们不再使用web.config了。我们一直试图找到访问环境变量的方法,但我们发现的是一个名为AWSSDK.Extensions.NETCore.Setup的nuget包。但是,这个包似乎不能让我们访问自定义变量。

非常感谢任何帮助。

2 个答案:

答案 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

[3] https://docs-aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.container.console.html#dotnet-console