Подтвердить что ты не робот

Доступ к переменным окружения в AWS Beanstalk ebextensions

Я пытаюсь получить доступ к переменной среды, которую я определил в конфигурации AWS Beanstalk. Мне нужно получить доступ к нему в файле конфигурации в .ebextensions или в файле, который скопирован на место в файле конфигурации. Я пробовал следующее:

container_commands:
  update_nginx_config:
    command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"

И в моем файле nginx.conf я попытался получить доступ к $MYVAR, ${MYVAR} и {$MYVAR}, некоторые из которых были предложены здесь и здесь (последний находится непосредственно в файле конфигурации).

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      $MYVAR ${MYVAR} {$MYVAR}

Это тоже не работает. Во всех случаях имена переменных просто выводятся, например, $MYVAR, поэтому Beanstalk не распознает мои переменные. Я нашел ниже в документацию AWS о container_commands:

Они также имеют доступ к переменным окружения, таким как ваш AWS учетные данные безопасности.

Это здорово, но он не говорит, как.

Как я могу получить доступ к переменной среды с помощью ebextensions, будь то в самом файле конфигурации или в отдельном файле, который скопирован на месте?

Заранее благодарю вас!

4b9b3361

Ответ 1

Я обратился в службу технической поддержки Amazon за ответом на этот вопрос, и вот их ответ:


К сожалению, переменные не доступны в расширениях напрямую. Лучший вариант сделать это - создать скрипт, который затем будет запускаться из команд контейнера:

files:
  "/home/ec2-user/setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      # Commands that will be run on container_commmands
      # Here the container variables will be visible as environment variables.

container_commands:
  set_up:
    command: /home/ec2-user/setup.sh

Итак, если вы создадите сценарий оболочки и вызовете его с помощью команды контейнера, то у вас будет доступ к переменным среды внутри сценария оболочки следующим образом: $ENVIRONMENT_VARIABLE. Я проверил это, и это работает.

Если у вас возникли проблемы с запуском скрипта от имени пользователя root и невозможностью чтения настроенных переменных среды, попробуйте добавить следующее в начало вашего скрипта.

. /opt/elasticbeanstalk/support/envvars

В зависимости от вашего варианта использования вам, возможно, придется немного изменить свой подход (по крайней мере, я), но это рабочее решение. Я надеюсь, что это помогает кому-то!

Ответ 2

Из этого ответа: fooobar.com/info/2426742/...

Вы можете использовать функцию GetOptionSetting, описанную здесь: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

Например, если вы устанавливаете переменную worker_processes, она может выглядеть следующим образом:

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      worker_processes '{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}';

Обратите внимание на пометки '' в вызове функции.