Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET Core 1.0中的AWS Elastic Beanstalk环境变量_Asp.net Mvc_Asp.net Core_Environment Variables_Amazon Elastic Beanstalk_Asp.net Core 1.0 - Fatal编程技术网

Asp.net mvc ASP.NET Core 1.0中的AWS Elastic Beanstalk环境变量

Asp.net mvc ASP.NET Core 1.0中的AWS Elastic Beanstalk环境变量,asp.net-mvc,asp.net-core,environment-variables,amazon-elastic-beanstalk,asp.net-core-1.0,Asp.net Mvc,Asp.net Core,Environment Variables,Amazon Elastic Beanstalk,Asp.net Core 1.0,如何将环境变量从elastic beanstalk获取到asp.net核心mvc应用程序中?我添加了一个.ebextensions文件夹,其中包含app.config文件,其中包含以下内容: option_settings: - option_name: HelloWorld value: placeholder - option_name: ASPNETCORE_ENVIRONMENT value: placeholder .ebextensions文件夹包含在发布包中 在部署时,

如何将环境变量从elastic beanstalk获取到asp.net核心mvc应用程序中?我添加了一个.ebextensions文件夹,其中包含app.config文件,其中包含以下内容:

option_settings:
- option_name: HelloWorld
  value: placeholder

- option_name: ASPNETCORE_ENVIRONMENT
  value: placeholder
.ebextensions文件夹包含在发布包中

在部署时,这两个变量在aws elasticbeanstalk控制台的“配置”>“软件配置”>“环境变量”中可见

但是,当我尝试读取应用程序中的变量时,以下选项均不起作用:

Environment.GetEnvironmentVariable("HelloWorld") // In controller
Configuration["HelloWorld"] // In startup.cs

你知道我可能会错过什么吗?谢谢。

遇到同样的问题,刚刚收到AWS支持部门关于此问题的回复。显然,环境变量没有正确地注入到elastic beanstalk中的ASP.NET核心应用程序中

据我所知,他们正在努力解决这个问题

解决方法是将
C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration
解析到configuration builder中。此文件是elastic beanstalk环境的一部分,在部署项目时应该可以访问

首先添加文件:

var builder = new ConfigurationBuilder()
    .SetBasePath("C:\\Program Files\\Amazon\\ElasticBeanstalk\\config")
    .AddJsonFile("containerconfiguration", optional: true, reloadOnChange: true);
然后访问以下值:

var env = Configuration.GetSection("iis:env").GetChildren();

foreach (var envKeyValue in env)
{
    var splitKeyValue = envKeyValue.Value.Split('=');
    var envKey = splitKeyValue[0];
    var envValue = splitKeyValue[1];
    if (envKey == "HelloWorld")
    {
        // use envValue here
    }
}
承蒙 G.P.来自
Amazon Web Services

我实现了另一个答案,创建了一个方便的解决方案,将环境属性从Elastic Beanstalk直接加载到ASP.NET核心应用程序配置中

对于ASP.NET Core 2.0-编辑程序.cs

请注意,此WebHost构建来自WebHostBuilder.CreateDefaultBuilder()的源代码

使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
运用系统反思;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.AspNetCore.Server.Kestrel.Core;
使用Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
使用Microsoft.Extensions.Configuration;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Logging;
使用Microsoft.Extensions.Options;
命名空间NightSpotAdm
{
公共课程
{
公共静态void Main(字符串[]args)
{
BuildWebHost(args.Run();
}
公共静态IWebHost BuildWebHost(字符串[]args)
{
//TEMP CONFIG BUILDER以获取弹性BEANSTALK配置中的值
IConfigurationBuilder tempConfigBuilder=新的ConfigurationBuilder();
tempConfigBuilder.AddJsonFile(
@“C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration”,
可选:true,
重载更改:true
);
IConfigurationRoot tempConfig=tempConfigBuilder.Build();
字典ebConfig=ElasticBeanstalk.GetConfig(tempConfig);
//启动WEB主机生成器
IWebHostBuilder=新的WebHostBuilder()
.UseKestrel()
.UseContentRoot(目录.GetCurrentDirectory());
//检查EBCONFIG中是否有环境密钥
//如果是这样,那么就改变构建器环境
const string envKey=“ASPNETCORE\u环境”;
if(ebConfig.ContainsKey(envKey))
{
字符串ebEnvironment=ebConfig[envKey];
建筑商使用环境(ebEnvironment);
}
//继续正常使用WEB主机生成器
builder.ConfigureAppConfiguration((hostingContext,config)=>
{
IHostingEnvironment env=hostingContext.HostingEnvironment;
//添加ELASTIC BEANSTALK配置字典
config.AddJsonFile(
“appsettings.json”,
可选:true,
重载更改:true
)
.AddJsonFile(
$“appsettings.{env.EnvironmentName}.json”,
可选:true,
重载更改:true
)
.AddInMemoryCollection(ebConfig);
if(env.IsDevelopment())
{
Assembly appAssembly=Assembly.Load(新的AssemblyName(env.ApplicationName));
如果(appAssembly!=null)
{
config.AddUserSecrets(appAssembly,可选:true);
}
}
config.AddEnvironmentVariables();
如果(args!=null)
{
config.AddCommandLine(args);
}
})
.ConfigureLogging((hostingContext,logging)=>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection(“logging”));
logging.AddConsole();
logging.AddDebug();
})
.Useii整合()
.UseDefaultServiceProvider(
(上下文,选项)=>{options.ValidateScopes=context.HostingEnvironment.IsDevelopment();})
.配置服务(
服务=>
{
services.AddTransient();
});
返回builder.UseStartup().Build();
}
}
公共静态类ElasticBeanstalk
{
公共静态字典GetConfig(IConfiguration配置)
{
返回
configuration.GetSection(“iis:env”)
.GetChildren()
.Select(pair=>pair.Value.Split(新[]{'=},2))
.ToDictionary(keypair=>keypair[0],keypair=>keypair[1]);
}
}
}
对于ASP.NET Core 1.0

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, 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(GetEbConfig(config));

        Configuration = builder.Build();
    }

    private static Dictionary<string, string> GetEbConfig(IConfiguration configuration)
    {
        Dictionary<string, string> dict = new Dictionary<string, string>();

        foreach (IConfigurationSection pair in configuration.GetSection("iis:env").GetChildren())
        {
            string[] keypair = pair.Value.Split(new [] {'='}, 2);
            dict.Add(keypair[0], keypair[1]);
        }

        return dict;
    }
公共启动(IHostingEnvironment环境)
{
var builder=new ConfigurationBuilder()
.SetBasePath(环境C
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, 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(GetEbConfig(config));

        Configuration = builder.Build();
    }

    private static Dictionary<string, string> GetEbConfig(IConfiguration configuration)
    {
        Dictionary<string, string> dict = new Dictionary<string, string>();

        foreach (IConfigurationSection pair in configuration.GetSection("iis:env").GetChildren())
        {
            string[] keypair = pair.Value.Split(new [] {'='}, 2);
            dict.Add(keypair[0], keypair[1]);
        }

        return dict;
    }
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{GetEnvVariableAWSBeansTalkHack(env)}.json", optional: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    private static string GetEnvVariableAWSBeansTalkHack(IHostingEnvironment env)
    {
        var config = new ConfigurationBuilder()
           .AddJsonFile(@"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration", optional: true, reloadOnChange: true).Build();

        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.ContainsKey("ASPNETCORE_ENVIRONMENT") 
                ? dict["ASPNETCORE_ENVIRONMENT"] 
                : env.EnvironmentName;
    }
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Linq;

namespace Microsoft.Extensions.Configuration.AWS
{
    public class AmazonEBConfigurationProvider : ConfigurationProvider
    {
        private const string ConfigurationFilename = @"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration";

        public override void Load()
        {
            if (!File.Exists(ConfigurationFilename))
                return;

            string configJson;
            try
            {
                configJson = File.ReadAllText(ConfigurationFilename);
            }
            catch
            {
                return;
            }

            var config = JObject.Parse(configJson);
            var env = (JArray)config["iis"]["env"];

            if (env.Count == 0)
                return;

            foreach (var item in env.Select(i => (string)i))
            {
                int eqIndex = item.IndexOf('=');
                Data[item.Substring(0, eqIndex)] = item.Substring(eqIndex + 1);
            }
        }
    }

    public class AmazonEBConfigurationSource : IConfigurationSource
    {
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new AmazonEBConfigurationProvider();
        }
    }

    public static class AmazonEBExtensions
    {
        public static IConfigurationBuilder AddAmazonElasticBeanstalk(this IConfigurationBuilder configurationBuilder)
        {
            configurationBuilder.Add(new AmazonEBConfigurationSource());
            return configurationBuilder;
        }
    }
}
var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", true, true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
    .AddAmazonElasticBeanstalk()    // <-- Merge with other sources
    .AddEnvironmentVariables();
private static void SetEbConfig()
{
    var tempConfigBuilder = new ConfigurationBuilder();

    tempConfigBuilder.AddJsonFile(
        @"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration",
        optional: true,
        reloadOnChange: true
    );

    var configuration = tempConfigBuilder.Build();

    var ebEnv =
        configuration.GetSection("iis:env")
            .GetChildren()
            .Select(pair => pair.Value.Split(new[] { '=' }, 2))
            .ToDictionary(keypair => keypair[0], keypair => keypair[1]);

    foreach (var keyVal in ebEnv)
    {
        Environment.SetEnvironmentVariable(keyVal.Key, keyVal.Value);
    }
}
private static void SetEbConfig()
        {
            var tempConfigBuilder = new ConfigurationBuilder();

            tempConfigBuilder.AddJsonFile(
                @"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration",
                optional: true,
                reloadOnChange: true
            );

            var configuration = tempConfigBuilder.Build();

            var ebEnv = configuration.GetSection("plugins:rds:env")
                                        .GetChildren()
                                        .ToDictionary(child => child.Key, child => child.Value);

            foreach (var keyVal in ebEnv)
            {
                Environment.SetEnvironmentVariable(keyVal.Key, keyVal.Value);
            }
        }
{
    "plugins": {
        "rds": {
            "Description": "RDS Environment variables",
            "env": {
                "RDS_PORT": "....",
                "RDS_HOSTNAME": "....",
                "RDS_USERNAME": "....",
                "RDS_DB_NAME": "....",
                "RDS_PASSWORD": "...."
            }
        }
    }
}
commands:
  set_environment: 
    command: setx ASPNETCORE_ENVIRONMENT "Development" /M
option_settings:
  aws:elasticbeanstalk:application:environment:
    MyEnvVar: SomeValue