Skip to content

Instantly share code, notes, and snippets.

@jburditt
Last active January 24, 2018 19:29
Show Gist options
  • Save jburditt/5054ad3797aa5de1bca7934dcb7fe8f9 to your computer and use it in GitHub Desktop.
Save jburditt/5054ad3797aa5de1bca7934dcb7fe8f9 to your computer and use it in GitHub Desktop.
Amazon Elastic Beanstalk Application Settings
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Linq;
namespace ExampleProject
{
public class AmazonConfigurationProvider : 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 AmazonConfigurationProvider();
}
}
public static class AmazonEBExtensions
{
public static IConfigurationBuilder AddAmazonElasticBeanstalk(this IConfigurationBuilder configurationBuilder)
{
configurationBuilder.Add(new AmazonEBConfigurationSource());
return configurationBuilder;
}
}
}
using Microsoft.Extensions.Configuration;
using PromoCode.Model;
using System;
using System.IO;
namespace ExampleProject
{
public static class ApplicationSettings
{
public static IConfigurationRoot Configuration { get; private set; }
public static string SolutionDirectory =
#if DEBUG
$"{Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory.Substring(0, AppContext.BaseDirectory.LastIndexOf("bin"))).ToString())}\\PromoCode.Services\\";
#else
AppDomain.CurrentDomain.BaseDirectory;
#endif
static ApplicationSettings()
{
Build();
}
public static void Build()
{
var filePath = $"{SolutionDirectory}";
//var environmentName = "Release";
var builder = new ConfigurationBuilder()
.SetBasePath(filePath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
//.AddJsonFile($"appsettings.{environmentName}.json", optional: true)
.AddAmazonElasticBeanstalk()
.AddEnvironmentVariables();
Configuration = builder.Build();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment