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

Posted

技术标签:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于使用 .NET Core WebApp 访问 AWS ElasticBeanstalk 自定义环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Azure 部署后 ASP.NET Core MVC webapp 错误

在 IIS 上托管的 ASP.NET Core WebApp 上提供持久配置

ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

Azure WebApp Asp.NET Core 2 错误:启动应用程序时出错

具有 Azure 应用服务身份验证的 .NET Core 应用

无法在面向 netcoreapp3.0 的 ASP.NET Core WebApp 中为特定 API 控制器启用 CORS