.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?