Ссылка на переменные env из конфигурационных файлов Elast Beanstalk.ebextensions
Возможно ли ссылаться на свойства контейнера PARAM1/PARAM2 и т.д. из конфигурационных файлов .ebextensions. Если да, то как? Я пробовал $PARAM1, но это казалось пустым значением.
Я хочу, чтобы имя хоста при запуске содержало DEV, QA или PROD, которые я передаю в свой контейнер через переменную среды PARAM1.
commands:
01-set-correct-hostname:
command: hostname myappname{$PARAM1}.com
Ответы
Ответ 1
Оказывается, вы можете сделать это только в разделе container_commands
, а не в разделе commands
.
Это работает:
container_commands:
01-set-correct-hostname:
command: "hostname myappname{$PARAM1}.com"
Подробнее см. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands.
Ответ 2
Вот что сработало для меня. Я попробовал принятый подход и не дал желаемого результата (фигурные скобки были включены в выход). Команды устранения неполадок, которые выполняются из файла .config при загрузке в Elastic Beanstalk, также являются немного сложной задачей (или я просто точно не знаю, где искать).
Окружение AWS:
- Тип - эластичный бобовый стебель
- Платформа - 64-битная версия Amazon Linux 2015.09 v2.0.4 с запуском PHP 5.6
Эластичные свойства среды Beanstalk (Конфигурация → Конфигурация программного обеспечения → Свойства среды):
- Название свойства - HELLO_VARIABLE
- Значение свойства - тест
Пример .config Файл, включенный в папку .ebextensions в артефакте развертывания:
container_commands:
0_test-variable:
cwd: /tmp
command: "touch ${HELLO_VARIABLE}_0_.txt"
1_test-variable:
cwd: /tmp
command: "touch {$HELLO_VARIABLE}_1_.txt"
2_test-variable:
cwd: /tmp
command: "touch $HELLO_VARIABLE_2_.txt"
После того, как артефакт был развернут с использованием Elastic Beanstalk, каталог /tmp в экземпляре EC2 будет содержать следующие файлы (обратите внимание на фигурные скобки и позицию $):
- touch ${HELLO_VARIABLE} _0_.txt создает /tmp/test _0_.txt
- touch {$ HELLO_VARIABLE} _1_.txt создает /tmp/ {test} _1_.txt
- touch $HELLO_VARIABLE_2_.txt создает /tmp/.txt
Ответ 3
Чтобы сделать переменные среды доступными на этапе команд, выполните их анализ в bash исходный файл.
000001.envvars.config
...
commands:
000001_envvars_to_bash_source_file:
command: |
# source our elastic beanstalk environment variables
/opt/elasticbeanstalk/bin/get-config --output YAML environment|perl -ne "/^\w/ or next; s/: /=/; print qq|\$_|" > /var/tmp/envvars
chmod 400 /var/tmp/envvars
...
Затем я использую: -
source /var/tmp/envvars
в последующих командах.
Ответ 4
Принятый ответ довольно устарел.
Теперь вы можете использовать /opt/elasticbeanstalk/support/envvars
файл, который уже является оболочкой script, готовой к отправке:
commands:
01_update_composer:
command: |
. /opt/elasticbeanstalk/support/envvars
/usr/bin/composer.phar self-update
container_commands:
01_run_composer:
command: |
composer.phar install --no-scripts --no-dev # already has user-specified env variables
Update:
После некоторого более глубокого исследования выяснится, что container_commands:
включает переменные среды, но commands:
not.
Ответ 5
В этом блоге подробно описаны различные варианты того, как вы можете это достичь.