簡體   English   中英

在 aws eb 上存儲 asp.net core 2 的連接字符串

[英]Store connection string for asp.net core 2 on aws eb

我在 aws eb 上部署了 .net core 2 應用程序。 我需要登台、qa 和 prod 服務器,但不知道如何處理連接字符串? 是否可以將其存儲在 eb 上的 env 變量中? 或者是否可以為這三個實例創建 env 並為每個實例創建不同的 application.json 文件?

您可以在 ASP.NET Core 中使用選項模式

例如你有這樣的 appsetting.json

"WebAppUrl": {
  "Staging": "someurl",
  "Qa": "someurl",
  "Prod": "someurl"
}

我需要定義一個這樣的模型類來存儲信息

public class WebAppUrl
{
  public string Staging { get; set; }
  public string Qa { get; set; }
  public string Prod { get; set; }
}

所以我們有配置結構。 我們需要的最后一件事是在 Startup.cs 中注冊

services.Configure(configuration.GetSection("WebAppUrl"));

所以你可以像這樣使用

private readonly IOptions<WebAppUrl> _webAppUrl;

public EmailSender(IOptions<WebAppUrl> _webAppUrl)
{
  _webAppUrl = _webAppUrl;
}

_webAppUrl.Value.Staging;
_webAppUrl.Value.Qa;
_webAppUrl.Value.Prod;

好的,這就是 Microsoft 設置多個 appsetting.json 文件的方式 你可以看看,因為它有點長

這是我如何根據環境使用 json 文件進行配置

public Startup(
            IConfiguration configuration,
            IHostingEnvironment hostingEnvironment)
        {
            _configuration = configuration;
            _hostingEnvironment = hostingEnvironment;

            var builder = new ConfigurationBuilder();

            if (_hostingEnvironment.IsDevelopment())
            {
                builder.AddUserSecrets<Startup>();
            }
            else
            {
                builder
                    .SetBasePath(hostingEnvironment.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
            }
        }

這是一種使用 ebextensions 和實例元數據的方法:

在您的應用程序啟動之前,使用ebextensions來管理服務器的自定義。

  • 您的實例應具有具有ec2:DescribeTags權限的角色。
  • 配置您的 EB 應用程序以設置環境標記
  • 您要么有一個包含每個環境的連接字符串的應用程序配置文件,要么使用 AWS Secrets manager 之類的東西(您的實例角色需要此服務的權限)來保存您的連接字符串(更好的安全性)。
  • 應用程序代碼使用環境變量從配置文件或 Secrets manager 中選擇正確的連接字符串。
  • 您部署與應用程序init.config文件中.ebextensions夾斷了根。
  • init.config 讀取實例元數據以確定環境並設置環境變量。
  • 您的應用程序啟動,讀取變量,提取連接字符串並連接到正確的數據庫。

下面的示例是帶有 powershell 的 windows 實例的 init.config,但可以適應 bash + aws cli。

第一步寫出一個powershell腳本。 該腳本讀取 Environment 標記並將值寫入機器范圍的變量以供應用程序提取。 第二步調用腳本。

files:
  "c:/cfn/init.ps1":
    content: |
      $instanceDoc = Invoke-RestMethod 'http://169.254.169.254/latest/dynamic/instance-identity/document'
      $nameTagList = Get-EC2Tag -Region ($instanceDoc.region) -Filter @{name='resource-type';value='instance'},@{name='resource-id';value=$instanceDoc.instanceId},@{name='tag:Environment';value='*'} | Select -First 1
      $envName = $nameTagList.Value
      [Environment]::SetEnvironmentVariable("APP_ENV", $envName, [EnvironmentVariableTarget]::Machine
container_commands:
  00-invoke-init:
    command: powershell.exe -nologo -noprofile -file "c:\cfn\init.ps1"

因此,為 .net 核心應用程序處理來自彈性 beantalk 的 env 變量存在問題。

這是答案(hack)如何強制應用程序獲取ASP.NET Core 1.0 中的環境變量 AWS Elastic Beanstalk 環境變量

因此,所有敏感數據(如連接字符串)都應位於彈性 beanstalk 環境變量上。 其他的可以在appsettings.Staging.jsonappsettings.Qa.json等中。

只是不要忘記在 env 變量中添加ASPNETCORE_ENVIRONMENT var。

我建議將配置放入 AWS System Manager 的 Parameter Store。 Amazon.Extensions.Configuration.SystemsManager NuGet 包將 Parameter Store 作為配置提供程序添加到 .NET 配置系統。 這是一篇博客文章以獲取更多信息。 https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM