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

Амазонка с эластичным бобовым глазом говорит:

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

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

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

Ответ 1

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

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

Environment Properties

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

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

Ответ 2

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

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

Ответ 3

В 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 установлено.

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

Ответ 4

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

enter image description here

Ответ 5

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

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

`{ "Ref" : "AWSEBEnvironmentName" }`

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

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

Ответ 6

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

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

Чтобы просмотреть переменные среды: eb printenv

Ответ 7

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

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

CMD eval `cat /tmp/envs/env_file$`; <base image CMD goes here>;

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 deploy и ваша ENVS должна быть доступна в вашем контейнере докеров

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

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

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

Ответ 8

Если вы используете AWS Management Console, вам просто нужно перейти к:

Конфигурация > Конфигурация программного обеспечения > Свойства среды

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