如何从我的AWS弹性豆茎应用程序中读取环境属性?
Configuration > Software Configuration > Environment Properties
以下方法都不起作用:
ConfigurationManager.AppSettings["MyServiceUrl"]
ConfigurationManager.AppSettings["aws:elasticbeanstalk:application:environment.MyServiceUrl"]
Environment.GetEnvironmentVariable("MyServiceUrl")
Environment.GetEnvironmentVariable("aws:elasticbeanstalk:application:environment.MyServiceUrl")
完全限定名称尝试来自AWSEB留档。
有什么想法吗?
在您的. ebExsionsions/myoptions.config
文件中:
option_settings:
- option_name: MyServiceUrl
value: change me
这将在您的EB环境属性部分添加MyServiceUrl选项(正如您已经看到的)。部署后,这将向您的Web. Config
文件添加以下内容:
<appSettings>
<add key="MyServiceUrl" value="change me" />
</appSettings>
如果您RDP到您的EC2实例中,您将看到这一点。
使用EB控制台更改属性时,将在Web. Config
文件中修改设置。
因此,您可以使用标准AppSettings
方法访问此属性:
string value = ConfigurationManager.AppSettings["MyServiceUrl"];
捕获:
您需要确保您的Web. Config
文件不包含此设置,否则EB不会替换它。如果您的Visual Studio部署包包含此设置,那么EB不会替换它,并且当您通过代码访问该属性时,您将始终收到已部署的值。
解决方案:
在您的Web. Release.config
文件中,在Visual Studio部署期间删除该设置:
<appSettings>
<add key="MyServiceUrl" xdt:Transform="Remove" xdt:Locator="Match(key)" />
</appSettings>
这将在Visual Studio部署期间从Web. Config
中删除设置,并允许EB在EB部署期间将值添加到文件中。
看起来这种行为在弹性豆茎中已经改变了。文档现在说
AWS管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中拥有默认设置,并在控制台中使用特定于环境的设置覆盖它们。
因此,您现在可以在web. config和Elastic Beanstik配置中使用相同的配置名称,Elastic Beanstik值将覆盖web.config中的任何值。看起来EB只是在web.config文件中添加新条目,因此在这两个地方定义的任何值都将有两个条目。由于EB添加的条目在文件的后面,它们优先。
确实,在AWSDoc(使用AWS弹性豆茎。NET平台)上显示:
AWS管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中拥有默认设置,并在控制台中使用特定于环境的设置覆盖它们。有关优先级和其他更改设置方法的详细信息,请参阅配置选项。
…我认为它指的是. eb扩展名配置文件,而不是app.config或web.config文件。在上面的链接中,提到了适用的“优先级”规则;它表明需要优先的是“在创建环境或更新环境期间指定的设置”,所以我理解的是部署期间设置的设置值优先(这些设置在app.config/web.config中)。
我刚刚对此进行了测试,上面的马特·豪泽回答是正确的,并且仍然有效。您必须在部署版本中删除app. config/web.config键才能看到“环境属性”被考虑在内。