Ссылка на переменные env из файлов конфигурации Elastic Beanstalk .ebextensions
Можно ли ссылаться на свойства среды контейнера PARAM1 / PARAM2 и т. Д. Из конфигурационных файлов.ebextensions. Если так, то как? Я попытался $PARAM1, но это было пустое значение.
Я хочу, чтобы при запуске имя хоста содержало DEV, QA или PROD, которые я передаю своему контейнеру через переменную среды PARAM1.
commands:
01-set-correct-hostname:
command: hostname myappname{$PARAM1}.com
5 ответов
Оказывается, вы можете сделать это только в 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 для получения дополнительной информации.
Вот что сработало для меня. Я попробовал принятый подход, и он не дал желаемого результата (фигурные скобки были включены в вывод). Команды устранения неполадок, которые выполняются из файла.config при загрузке в Elastic Beanstalk, также представляют собой небольшую проблему (или я просто не знаю точно, где искать).
Окружающая среда AWS:
- Тип - Эластичный бобовый стебель
- Платформа - 64-битная Amazon Linux 2015.09 v2.0.4 под управлением PHP 5.6
Свойства среды Elastic 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 будет содержать следующие файлы (обратите внимание на фигурные скобки и положение $):
- нажмите ${HELLO_VARIABLE}_0_.txt, чтобы создать /tmp/test_0_.txt
- прикоснитесь к {$HELLO_VARIABLE}_1_.txt, чтобы создать / tmp/ ndomtest automotive_1_.txt
- нажмите $HELLO_VARIABLE_2_.txt, чтобы создать /tmp/.txt
Принятый ответ довольно устарел.
Теперь вы можете использовать /opt/elasticbeanstalk/support/envvars
файл, который уже является сценарием оболочки, готовым к получению:
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
Обновить:
После более глубокого расследования выясняется, что container_commands:
включить переменные среды, но commands:
не.
Чтобы сделать переменные окружения доступными на этапе команд, я анализирую их в исходный файл 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
в последующих командах.
Этот блог подробно описывает различные варианты того, как вы можете достичь этого.
https://www.onica.com/blog/how-to-call-and-export-variables-in-elastic-beanstalk/