.NET Core AWS RDS 连接

Posted

技术标签:

【中文标题】.NET Core AWS RDS 连接【英文标题】:.NET Core AWS RDS CONNECTION 【发布时间】:2017-11-15 20:36:45 【问题描述】:

我正在亚马逊 AWS 上创建一个 .NET Core Web API,即 Elastic Beanstalk。 我正在尝试添加数据库,但他们的添加数据库指南不适用于 .Net Core http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.rds.html

它说使用“​​ConfigurationManager.AppSettings;”获取相关信息,但这在 .NET Core 中是不可能的。

谁能提供一些关于如何获取数据库信息的信息? ( “RDS_DB_NAME” “RDS_USERNAME” “RDS_PASSWORD” “RDS_HOSTNAME” )

更新 我试图阅读https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration 但我还没有解决问题。我似乎仍然无法从 AWS 获取值。

它只返回我在自己的 appsettings.json 中设置的任何内容 这是我的代码: 我的选项.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");
        
    

【问题讨论】:

你应该在docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration查看dotnet core中的配置管理 谢谢巴巴克。我读了它,但我不知道如何让它工作。如果您有时间提供更多帮助,我现在已经在 OP 中编写了我的代码。否则谢谢。 【参考方案1】:

我遇到了这个确切的问题,它比我预期的要复杂得多。

第 1 步 - 我从另一个 Stack Overflow 问题修改了 this answer。我在 Startup.cs 中的代码如下所示:

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

第 2 步 - 您需要转到 AWS 控制台中的 RDS 服务。选择要连接的实例 -> 实例操作 -> 查看详细信息。您将能够找到 RDS_HOSTNAME(端点)和 RDS_PORT(端口)。

RDS_DB_NAME 是您的代码要使用的数据库名称。

RDS_USERNAME 和 RDS_PASSWORD 是您在 Elastic Beanstalk 中创建数据库时使用的主用户名和密码。如果您转到 Elastic Beanstalk -> 配置 -> 数据层 ->(单击齿轮),您会看到您的主用户名,如果您忘记了密码,则可以选择更改密码。

第 3 步 - 现在您已拥有所有数据,您必须在 Elastic Beanstalk 中输入这些选项作为环境属性。转到 Elastic Beanstalk -> 软件配置 ->(单击齿轮)。此页面底部是环境属性。您可以在此处输入第一步中代码中的名称以及第二步中 RDS 中的值。

有关 AWS 文档的更多信息,请查看 here 和 here。

【讨论】:

以上是关于.NET Core AWS RDS 连接的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?

如何连接mysql数据库(AWS下的RDS实例)

AWS RDS 连接字符串

PGAdmin III 无法连接 AWS RDS

Python AWS Lambda 为每个部署旋转到 RDS 的新连接

连接 pgadmin AWS-RDS 时遇到问题