3

在我的 CreateWebHostBuilder() 方法中,我添加了 AWS Systems Manager Parameter Store 作为 Configuration Builder 的附加源:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration(builder =>
                  {
                      builder.AddSystemsManager("/ConfigureStoreName/");
                  })
                  .UseStartup<Startup>();
    }
}

而不是硬编码“/ConfigureStoreName/ ”,我想让它成为一个配置值。

当我打电话.ConfigureAppConfiguration()时,我可以访问使用的appsettings.json中的配置值.CreateDefaultBuilder()吗?如果是这样,我将如何更新我的代码来调用它?如果不是,那么避免在方法中使用静态值的最佳方法是CreateWebHostBuilder()什么?

4

2 回答 2

3

使用该信息预加载设置文件。

例如,如果设置文件包含

{
  //...

  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2",
    "ConfigureSource": {
      "Path": "/ConfigureStoreName/"
    }
  }

  //...
}

将其加载到配置中以提取值。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) {

    var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json") //<-- or whichever file has that information
        .Build();

    string path = configuration.GetValue<string>("AWS:ConfigureSource:Path");
    //Or a strongly typed model with aws options

    return WebHost.CreateDefaultBuilder(args)
              .ConfigureAppConfiguration(builder =>
              {
                  builder.AddSystemsManager(path);
              })
              .UseStartup<Startup>();
}
于 2019-06-02T18:16:42.163 回答
2

我最终采用的解决方案是使用环境变量:

public class Program
{
    private static string _parameterStoreNamePath;

    public static void Main(string[] args)
    {
        _parameterStoreNamePath = Environment.GetEnvironmentVariable("AWS_PARAMETER_STORE_NAME");
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration(builder =>
                  {
                      builder.AddSystemsManager(_parameterStoreNamePath); 
                  })
                  .UseStartup<Startup>();
    }
}

笔记:

  1. 在 Visual Studio 项目中,创建一个名为 AWS_PARAMETER_STORE_NAME 的环境变量。
  2. 对于已部署的实例,AWS_PARAMETER_STORE_NAME 需要在 serverless.template 中设置或通过控制台直接添加到 Lambda。
于 2019-06-03T18:40:03.383 回答