Как читать свойства среды Elastic Beanstalk в.net?

Как я могу прочитать свойства среды из моего приложения 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.

Есть идеи?

2 ответа

Решение

В вашем .ebextensions/myoptions.config файл:

option_settings:
  - option_name: MyServiceUrl
    value: change me

Это добавит параметр "MyServiceUrl" в разделе "Свойства среды EB" (как вы уже видели). При развертывании это добавит следующее к вашему 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>

Это удалит настройки из Web.Config во время развертывания Visual Studio и позволит EB добавить значение в файл во время развертывания EB.

Похоже, что это поведение изменилось в Elastic Beanstalk. Документы теперь говорят

Параметры, примененные в Консоли управления AWS, переопределяют те же параметры в файлах конфигурации, если они существуют. Это позволяет вам иметь настройки по умолчанию в файлах конфигурации и заменять их настройками среды в консоли.

Таким образом, теперь вы можете использовать те же имена конфигурации в вашем файле web.config и в конфигурации Elastic Beanstalk, и значения Elastic Beanstalk будут заменять любые в вашем файле web.config. Похоже, что EB просто добавляет новые записи в файл web.config, поэтому будет две записи для любых значений, определенных в обоих местах. Поскольку записи, добавленные EB, находятся позже в файле, они имеют приоритет.

Это правда, что в AWS Doc (с использованием платформы AWS Elastic Beanstalk .NET) указано:

Параметры, примененные в Консоли управления AWS, переопределяют те же параметры в файлах конфигурации, если они существуют. Это позволяет вам иметь настройки по умолчанию в файлах конфигурации и переопределять их с настройками среды в консоли. Для получения дополнительной информации о приоритете и других методах изменения настроек см. Параметры конфигурации.

... Я думаю, что это относится к файлам конфигурации.ebextensions, а не к файлам app.config или web.config. Смотрите в ссылке, указанной выше, есть ссылка на правила " приоритета", которые применяются; указано, что приоритет имеют "Настройки, заданные во время создания среды или обновления", поэтому я понимаю, что значения настроек, установленные во время развертывания, имеют приоритет (и эти настройки находятся в app.config/web.config).

Я только что проверил это, и ответ Matt Houser выше верен и остается в силе. Вы должны удалить ключи app.config / web.config в развернутой версии, чтобы увидеть "Свойства среды".

Другие вопросы по тегам