【问题标题】:Access AWS ElasticBeanstalk Custom Environment Variables with .NET Core WebApp使用 .NET Core WebApp 访问 AWS ElasticBeanstalk 自定义环境变量
【发布时间】:2017-12-04 22:40:18
【问题描述】:

我们在 Elastic Beanstalk 仪表板的配置=>软件配置=>“环境属性”部分下设置了自定义环境变量。在 C# MVC 5 项目中,我们可以通过使用 ConfigurationManager.AppSettings 查找这些变量来访问这些变量——效果很好。

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

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    根据我的研究和测试,这是针对 ASP.NET Core 1.1 应用程序的 AWS Elastic Beanstalk 的缺陷。今天刚刚遇到这个问题,解决它的唯一方法是使用 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;
        }
    

    【讨论】:

    • 谢谢谢谢谢谢!我感谢你为打破这一点所做的所有工作——它运作良好。在 AWS 更永久地解决这个问题之前,最好为人们提供一个 nuget 包来解决这个问题。
    • 有什么地方可以跟踪这个问题吗?
    • 你是什么神?
    • 只是好奇,您如何设置“env.EnvironmentName”,因为在您的示例中,这必须在您加载 AWS 配置之前可用,对吧?
    • 执行此操作后,我无法弄清楚您如何实际使用配置值(例如在控制器操作中)。
    【解决方案2】:

    以前,Elastic Beanstalk 不支持将环境变量传递给使用部署清单 [1] 的 .NET Core 应用程序和多应用程序 IIS 部署。 2020 年 6 月 29 日 [2] 的 Elastic Beanstalk Windows Server 平台更新现在弥补了这一差距。有关详细信息,请参阅在 Elastic Beanstalk 控制台中配置您的 .NET 环境 [3]。

    [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

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2021-05-26
      • 1970-01-01
      • 2016-04-24
      • 2014-01-24
      • 2012-12-13
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多