【问题标题】:How to read Elastic Beanstalk Environment Properties in .net?如何在 .net 中阅读 Elastic Beanstalk 环境属性?
【发布时间】:2016-02-01 11:35:29
【问题描述】:

如何从我的 AWS Elastic Beanstalk 应用程序中读取环境属性:

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")

“完全限定”名称尝试来自 AWS EB documentation

有什么想法吗?

【问题讨论】:

    标签: asp.net .net amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    在您的.ebextensions/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 部署期间将值添加到文件中。

    【讨论】:

    • 根据马特的回答,Beanstalk 称它们为“环境变量”,但对于 .Net,它们实际上是插入到 web.config 文件中,而不是 docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 的底部
    • 除此之外:AWS 中似乎存在一个错误,即使密钥被注释掉,也会导致配置文件不更新。看起来他们不是在解析文件,而是在进行字符串级别的比较以识别 web.config 中是否存在键
    • 看起来这种行为在 Elastic Beanstalk 中发生了变化。文档现在说“AWS 管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中使用默认设置,并在控制台中使用特定于环境的设置覆盖它们。”
    • 本地运行时如何读取它们?
    【解决方案2】:

    看起来这种行为在 Elastic Beanstalk 中发生了变化。文档现在说

    AWS 管理控制台中应用的设置会覆盖相同的设置 配置文件中的设置(如果存在)。这让你有 配置文件中的默认设置,并用 控制台中的环境特定设置。

    因此,您现在可以在 web.config 和 Elastic Beanstalk 配置中使用相同的配置名称,并且 Elastic Beanstalk 值将覆盖您的 web.config 中的任何值。看起来 EB 只是在 web.config 文件中添加了新条目,因此在这两个地方定义的任何值都会有两个条目。由于 EB 添加的条目在文件中较晚,因此它们具有优先权。

    【讨论】:

      【解决方案3】:

      确实在AWS Doc (Using the AWS Elastic Beanstalk .NET Platform) 上显示:

      AWS 管理控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这使您可以在配置文件中拥有默认设置,并在控制台中使用特定于环境的设置覆盖它们。有关优先级和其他更改设置的方法的详细信息,请参阅配置选项。

      ...我认为它指的是 .ebextensions 配置文件,而不是 app.config 或 web.config 文件。请参阅上面指出的链接,参考适用的“precedence”规则;表明优先的是“在创建环境或更新环境期间指定的设置”,所以我理解的是在部署期间设置的设置值优先(这些设置在 app.config/web.config 中)。

      我刚刚对此进行了测试,上面的Matt Houser 答案是正确的并且仍然有效。您必须删除已部署版本中的 app.config/web.config 键才能看到“环境属性”被考虑在内。

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 2014-09-28
        • 2018-11-04
        • 2019-08-24
        • 2020-11-03
        • 1970-01-01
        • 2019-02-19
        • 2017-08-19
        • 2023-03-07
        相关资源
        最近更新 更多