1

Je crée une API Web .NET Core sur Amazon AWS, Elastic Beanstalk. Je suis en train d'ajouter une base de données, mais leur guide d'ajouter une base de données ne fonctionne pas pour .Net de base http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.rds.html.NET Core AWS RDS CONNECTION

Il dit d'obtenir les informations pertinentes en utilisant « ConfigurationManager.AppSettings; », mais ce n'est pas possible .NET Core.

Quelqu'un peut-il donner des informations sur la façon d'obtenir les informations de la base de données? ( "RDS_DB_NAME" "RDS_USERNAME" "RDS_PASSWORD" "RDS_HOSTNAME" )

MISE À JOUR J'ai essayé de lire https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration Mais je ne l'ai pas résolu le problème. Je n'arrive toujours pas à obtenir les valeurs d'AWS.

Il retourne juste ce que je mets dans mon appsettings.json Voici mon 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

Vous devriez revoir la gestion des configurations dans le noyau de dotnet à l'adresse https://docs.microsoft.com/fr-fr/aspnet/core/fundamentals/configuration –

+0

Merci Babak. Je lis dedans, mais je n'arrive pas à comprendre comment le faire fonctionner.J'ai écrit mon code dans l'OP maintenant, si vous avez le temps d'aider plus. Sinon merci. – thatname

Répondre

1

J'ai rencontré ce problème et c'était BEAUCOUP plus compliqué ed que je l'avais prévu.

Étape 1 - J'ai modifié this answer à partir d'une autre question de dépassement de pile. Mon code Startup.cs ressemblait à ceci:

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};"; 
} 

Étape 2 - Vous aurez besoin d'aller au service RDS dans la console AWS. Sélectionnez l'instance à laquelle vous souhaitez vous connecter -> Actions d'instance -> Voir les détails. Vous serez en mesure de trouver RDS_HOSTNAME (point de terminaison) et RDS_PORT (port).

RDS_DB_NAME est le nom de base de données avec lequel votre code est censé fonctionner.

RDS_USERNAME et RDS_PASSWORD sont les noms d'utilisateur et les mots de passe principaux que vous avez utilisés lors de la création de la base de données dans Elastic Beanstalk. Si vous allez à Elastic Beanstalk -> Configuration -> Data Tier -> (Cliquez sur le Gear) vous voyez votre nom d'utilisateur Master et avez la possibilité de changer votre mot de passe si vous l'avez oublié.

Étape 3 - Maintenant que vous avez toutes les données, vous devez entrer ces options comme propriétés environnementales dans Elastic Beanstalk. Allez à Elastic Beanstalk -> Configuration du logiciel -> (Cliquez sur l'engrenage). Au bas de cette page se trouvent les propriétés d'environnement. C'est ici que vous voulez entrer les noms dans votre code à partir de la première étape et les valeurs de RDS à l'étape deux.

Pour plus d'informations à ce sujet à partir de la documentation AWS, vérifiez les codes here et here.