Как передать пользовательскую переменную окружения на 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, вам просто нужно перейти к:
Конфигурация > Конфигурация программного обеспечения > Свойства среды
![введите описание изображения здесь]()