Ссылка на переменные 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/

Другие вопросы по тегам