Как передать пользовательскую переменную окружения на Amazon Elastic Beanstalk (AWS EBS)?

В Amazon Elastic Beanstalk говорится:

Elastic Beanstalk позволяет вам «открыть капот» и сохранить полный контроль … даже передавать переменные среды через консоль Elastic Beanstalk.

http://aws.amazon.com/elasticbeanstalk/

Как передать другие переменные среды помимо того, что в конфигурации Elastic Beanstalk?

    Как хедз к любому, кто использует .ebextensions/*.config : теперь вы можете добавлять, редактировать и удалять переменные среды в веб-интерфейсе Elastic Beanstalk.

    Переменные находятся в разделе Конфигурация → Конфигурация программного обеспечения:

    Свойства среды

    Создание vars в .ebextensions как в ответе Onema, по- прежнему работает.

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

    Только 5 значений ограничены, или вы можете захотеть иметь имя переменной пользовательской среды. Вы можете сделать это, используя файлы конфигурации. Создайте каталог в корне вашего проекта под названием

    .ebextensions /

    Затем создайте файл с именем environment.config (этот файл можно назвать чем угодно, но он должен иметь расширение .config) и добавить следующие значения

     option_settings: - option_name: CUSTOM_ENV value: staging 

    После развертывания приложения вы увидите это новое значение в разделе «Детали среды» -> «Изменить конфигурацию» -> «Контейнер»

    для получения дополнительной информации проверьте документацию здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options

    Обновить

    Чтобы предотвратить фиксацию значений вашего хранилища, таких как ключи API, секреты и т. Д., Вы можете поместить значение placeholder.

     option_settings: - option_name: SOME_API_KEY value: placeholder-value-change-me 

    Позже вы можете перейти на панель управления AWS (Environment Details -> Edit Configuration -> Container) и обновить там значения. По моему опыту эти значения не меняются после последующих развертываний.

    Обновление 2 Как пояснил @Benjamin в своем комментарии, поскольку новый внешний вид был выпущен 18 июля 2013 года, можно определить любое количество переменных окружения непосредственно из консоли:

    Configuration > Software Configuration > Environment Properties

    В 2016 году Java8 Tomcat8 AMI ElasticBeanstalk не может установить переменные среды из веб-конфигурации. Они действительно устанавливают свойства jvm -D.

    – «Следующие свойства передаются в приложение как переменные среды. Подробнее …».

    Это утверждение неверно для Java Tomcat ami. Amazon не устанавливает их как переменные среды. Они заданы как свойства System, переданные в командной строке Tomcat как свойство -D для jvm. Метод в Java для получения переменных окружения не является тем же самым для получения свойства. System.getenv vs System.getProperty

    Я ssh’d в поле и проверил, что переменная окружения никогда не была установлена. Однако в журналах tomcat я вижу, что свойство -D установлено.

    Я изменил свой код, чтобы проверить оба места сейчас как обходной путь.

    AWS будет интерпретировать строки шаблона CloudFormation в переменных среды. Вы можете использовать это для доступа к информации о своей среде EB в своем приложении:

    В веб-интерфейсе AWS следующее будет оцениваться как имя вашей среды (обратите внимание на обратные тики):

     `{ "Ref" : "AWSEBEnvironmentName" }` 

    Или вы можете использовать .ebextensions/*.config и обернуть шаблон CloudFormation в обратные тики (`):

     { "option_settings": [ { "namespace": "aws:elasticbeanstalk:application:environment", "option_name": "ENVIRONMENT_NAME", "value": "`{ \"Ref\" : \"AWSEBEnvironmentName\" }`" } ] } 

    Сведения об окружающей среде -> Изменить конфигурацию -> Контейнер

    введите описание изображения здесь

    В качестве альтернативы вы можете использовать CLI Elastic Beanstalk для установки переменных окружения.

    Чтобы установить переменную среды: eb setenv FOO=bar

    Просмотр переменных среды: eb printenv

    Кажется, это единственный способ установить ENV с динамическими значениями в beanstalk. Я придумал обходное решение, которое работает для моей настройки нескольких dockerов:

    1) Добавьте это в свой файл Docker перед созданием + загрузкой в ​​ваш repository ECS:

     CMD eval `cat /tmp/envs/env_file$`; ; 

    2) В файле Dockerrun.aws.json создайте том:

     { "name": "env-file", "host": { "sourcePath": "/var/app/current/envs" } } 

    3) Установите громкость в контейнер

     { "sourceVolume": "env-file", "containerPath": "/tmp/envs", "readOnly": true } 

    4) В файле .ebextensions / options.config добавьте блок container_commands следующим образом:

     container_commands: 01_create_mount: command: "mkdir -p envs/" 02_create_env_file: command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME=" , { "Ref", "RESOURCE" }, ';" > envs/env_file;' ] ] } 

    5) развертывание eb и ваша ENVS должны быть доступны в вашем контейнере dockerов

    Вы можете добавить дополнительные ENV, добавив больше таких команд:

      02_create_env_file_2: command: { "Fn::Join" : [ "", [ 'echo "', "export ENVIRONMENT_NAME_2=" , { "Ref", "RESOURCE2" }, ';" >> envs/env_file;' \] \] } 

    Надеюсь это поможет!

    Давайте будем гением компьютера.