1

Ich erstelle eine .NET Core Web API auf Amazons AWS, Elastic Beanstalk. Ich versuche, eine Datenbank hinzufügen, aber ihre Führung eine Datenbank hinzuzufügen funktioniert nicht für .Net-Core http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.rds.html.NET Core AWS RDS-Verbindung

Er sagt, die relevanten Informationen erhalten mit „ConfigurationManager.AppSettings;“, aber dies ist nicht möglich .NET-Kern

Kann jemand eine Information geben, wie man die Datenbankinformationen erhält? ( "RDS_DB_NAME" "RDS_USERNAME" "RDS_PASSWORD" "RDS_HOSTNAME" )

UPDATE Ich habe versucht, auf https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration zu lesen, aber ich habe das Problem nicht behoben. Ich kann immer noch nicht die Werte von AWS bekommen.

Es ist einfach zurück, was ich in meinem eigenen appsettings.json gesetzt Hier ist mein Code: MyOptions.cs

public class MyOptions 
{ 
    public MyOptions() 
    { 
     // Set default value. 
    } 
    public string RDS_HOSTNAME { get; set; } 
    public string RDS_PORT { get; set; } 
    public string RDS_DB_NAME { get; set; } 
    public string RDS_USERNAME { get; set; } 
    public string RDS_PASSWORD { get; set; } 
} 

StartUp.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    // Register the IConfiguration instance which MyOptions binds against. 
    services.Configure<MyOptions>(Configuration); 
    // Add framework services. 
    services.AddApplicationInsightsTelemetry(Configuration); 

    services.AddMvc(); 
} 

HomeController.cs

namespace WebApplication2.Controllers 
{ 
    [Route("")] 
    public class HomeController : Controller 
    { 
     private readonly MyOptions _options; 

     public HomeController(IOptions<MyOptions> optionsAccessor) 
     { 
      _options = optionsAccessor.Value; 
     } 

     [HttpGet] 
     public IActionResult Index() 
     { 
      var RDS_DB_NAME = _options.RDS_DB_NAME; 
      var RDS_HOSTNAME = _options.RDS_HOSTNAME; 
      var RDS_PASSWORD = _options.RDS_PASSWORD; 
      var RDS_PORT = _options.RDS_PORT; 
      var RDS_USERNAME = _options.RDS_USERNAME; 
      return Content($"RDS_DB_NAME = {RDS_DB_NAME}, RDS_HOSTNAME = {RDS_HOSTNAME}, RDS_PASSWORD = { RDS_PASSWORD}, RDS_PORT = {RDS_PORT}, RDS_USERNAME = { RDS_USERNAME}"); 
     } 
    } 
} 
+0

Sie sollten Konfigurations-Management in Dotnet-Core überprüfen unter https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration –

+0

Dank Babak. Ich lese hinein, aber ich kann mir nicht vorstellen, wie ich es zur Arbeit bringen soll.Ich habe meinen Code jetzt im OP geschrieben, wenn Sie Zeit haben, mehr zu helfen. Ansonsten danke. – thatname

Antwort

1

Ich stieß auf dieses genaue Problem und es war VIEL komplizierter ed als ich es erwartet hatte.

Schritt 1 - Ich modifizierte this answer von einer anderen Stack Overflow Frage. Mein Code in Startup.cs sah wie folgt aus:

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, reloadOnChange: true) 
     .AddJsonFile(@"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration", optional: true, reloadOnChange: true) 
     .AddEnvironmentVariables(); 

    // This adds EB environment variables. 
    builder.AddInMemoryCollection(GetAwsDbConfig(builder.Build())); 

    Configuration = builder.Build(); 
} 

private Dictionary<string, string> GetAwsDbConfig(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; 
    } 

private string GetRdsConnectionString() 
{ 
    string hostname = Configuration.GetValue<string>("RDS_HOSTNAME"); 
    string port = Configuration.GetValue<string>("RDS_PORT"); 
    string dbname = Configuration.GetValue<string>("RDS_DB_NAME"); 
    string username = Configuration.GetValue<string>("RDS_USERNAME"); 
    string password = Configuration.GetValue<string>("RDS_PASSWORD"); 

    return $"Data Source={hostname},{port};Initial Catalog={dbname};User ID={username};Password={password};"; 
} 

Schritt 2 - Sie werden in der AWS-Konsole mit dem RDS-Service gehen müssen. Wählen Sie die Instanz, mit der Sie eine Verbindung herstellen möchten -> Exemplaraktionen -> Details anzeigen. Sie können RDS_HOSTNAME (Endpunkt) und RDS_PORT (Port) finden.

RDS_DB_NAME ist der Name der Datenbank, mit der der Code arbeiten soll.

RDS_USERNAME und RDS_PASSWORD sind die Benutzernamen und Kennwörter, die Sie beim Erstellen der Datenbank in Elastic Beanstalk verwendet haben. Wenn Sie zu Elastic Beanstalk gehen -> Konfiguration -> Daten Tier -> (Klicken Sie auf die Ausrüstung), sehen Sie Ihren Master-Benutzernamen und haben die Möglichkeit, Ihr Passwort zu ändern, wenn Sie es vergessen haben.

Schritt 3 - Jetzt, da Sie alle Daten haben, müssen Sie diese Optionen als Umgebungseigenschaften in Elastic Beanstalk eingeben. Gehe zu Elastic Beanstalk -> Software Konfiguration -> (Klick auf das Zahnrad). Am Ende dieser Seite befinden sich die Umgebungseigenschaften. Hier müssen Sie die Namen in Ihrem Code von Schritt eins und die Werte von RDS in Schritt zwei eingeben.

Weitere Informationen hierzu finden Sie in der AWS-Dokumentation unter here und here.