C# AWS参数存储-配置未加载.Net 6中的SystemManagerConfiguration

nzrxty8p  于 2023-02-06  发布在  .NET
关注(0)|答案(5)|浏览(130)

应用程序无法与.NET 6中的AWS参数存储区通信。它始终与appsettings.json通信。
我尝试在本地调试,仍然是相同的行为。在配置列表下找不到SystemManagerConfiguration。

var builder = WebApplication.CreateBuilder();
var connectionString = builder.Configuration.GetConnectionString("OrderTrackerDatabase");

使用的 Package

库源代码:https://github.com/aws/aws-dotnet-extensions-configuration
影像

jdzmm42g

jdzmm42g1#

我也遇到了同样的问题,最后解决了这个问题。https://github.com/aws/aws-dotnet-extensions-configuration中的示例代码在调用.Net 6中的“AddSystemsManager”方法后缺少了一行,如下所示。

builder.Services.Configure<Settings>(builder.Configuration.GetSection($"common:settings"));

添加以上行后,我就可以在使用设置时从AWS参数存储中获得正确的值。
我还在GitHub中创建了一个问题,如下所示-https://github.com/aws/aws-dotnet-extensions-configuration/issues/114

fkaflof6

fkaflof62#

我认为问题可能是“/OrderTracking/"后面的尾随斜杠,请尝试“/OrderTracking”代替。

ou6hu8tu

ou6hu8tu3#

CreateBuilder()将创建新的示例,并且不会继承SystemManager配置。
而是通过构造函数DI使用IConfiguration示例。

var connectionString = _configuration.GetConnectionString("OrderTrackerDatabase");
rmbxnbpk

rmbxnbpk4#

在我的例子中,这个扩展方法在我的lambda处返回null:

private static IConfiguration InitializeConfiguration() => new ConfigurationBuilder()
        .AddSystemsManager($"/my-data", true, TimeSpan.FromMinutes(5))
        .Build();

因为lambda的角色没有读取该资源SSM的权限。
用户:无权执行:ssm:资源上的按路径获取参数
因此,只需将lambda角色的必要权限(ssm:GetParametersByPath)添加到System Manager中的资源。

gblwokeq

gblwokeq5#

在我的例子中,我使用的是lambda serverless,所以IConfig在传递给控制器时总是null。
我通过将Controller构造函数中的IOptions<Settings> settings更改为IConfiguration settings,然后按名称(如_settings.GetValue<string>("ParameterName"))访问参数来解决此问题
稍微少了一点“面向对象”,但看起来比this complex solution容易得多

相关问题