2013-05-16 4 views
32

Возможно ли ссылаться на свойства контейнера PARAM1/PARAM2 и т. Д. Из конфигурационных файлов .ebextensions. Если да, то как? Я пробовал $ PARAM1, но это казалось пустым значением.Ссылка на переменные env из файла конфигурации эластичного beanstalk .ebextensions

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

commands: 
    01-set-correct-hostname: 
    command: hostname myappname{$PARAM1}.com 
+0

Почему нет ответа для этого?!?!? Ниже описано, как это сделать с 'contaienr_comands', а не' command'. – ThomasReggi

ответ

23

Оказывается, вы можете сделать это только в разделе 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 для более подробной информации.

+0

В этой ссылке ничего не говорится об использовании переменных среды в командах контейнера. – Nate

+1

@Nate Прочитайте раздел Container_Commands, где говорится: «Они также имеют доступ к переменным среды, таким как ваши учетные данные безопасности AWS». – Kevin

+0

Не будете ли вы сталкиваться с проблемами имен хостов, если ваша конфигурация beanstalk порождает несколько экземпляров ec2? – jmelanson

8

Вот что сработало для меня. Я попробовал принятый подход и не дал желаемого результата (фигурные скобки были включены в выход). Команды устранения неполадок, которые выполняются из файла .config при загрузке в Elastic Beanstalk, также являются немного сложной задачей (или я просто точно не знаю, где искать).

AWS Окружающая среда:

  • Тип - Elastic Beanstalk
  • Платформа - 64-разрядные Amazon Linux 2015,09 v2.0.4 работает PHP 5.6

Elastic Beanstalk Environment Properties (Конфигурация -> Конфигурация программного обеспечения -> Свойства окружающей среды):

  • Название объекта - 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/{test}_1_.txt
  • касание $ HELLO_VARIABLE_2_.txt создает /TMP/.txt
+0

Причина, по которой вы не видите вывод своей команды в файлах журнала, состоит в том, что EB содержит только определенные файлы журналов. Но вы можете добавить cfn-init-cmd.log в пакет. Я объясню это здесь для Windows, но вы должны быть в состоянии выяснить, как изменить его для Linux. http://stackoverflow.com/a/37189606/674488 – tayl0rs

+0

для поиска и устранения неполадок в /var/log/eb-activity.log – denov

5

Чтобы переменные окружения были доступны на этапе команд, я разберу их в исходный файл 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 

в последующих командах.

6

Принятый ответ довольно устарел.

Теперь вы можете использовать /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 

Update:

Через некоторое глубокое исследование оказывается, что container_commands: включают среды переменные, но commands: нет.

0

This blog подробно описывает различные варианты того, как вы можете это достичь.

Смежные вопросы