Как читать свойства среды 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 в развернутой версии, чтобы увидеть "Свойства среды".