ошибка конфигурации эластичного бобового стебля

Я пытаюсь запустить приложение на эластичном бобовом стебле в контейнере php 5.5. Есть 3 среды разработки, постановки и производства. Вы не можете различать среды при установке переменных среды из командной строки, поэтому я использую обходной путь, предложенный службой поддержки aws, который заключается в запуске сценария оболочки при развертывании для установки переменных в зависимости от наличия другой переменной, которую я могу варьировать в зависимости от среды

. Когда я развертываю свое приложение, в .ebextensions / есть файл конфигурации.

container_commands:
  command01:
    command: "./.ebextensions/setEnvVars.sh"

сценарий оболочки также находится в расширении .ebextensions и выглядит так

#!/bin/bash
case "$PARAM1" in
        "development")
                echo -e "SetEnv APP_ENV development\n
                         SetEnv DB_HOST *******\n
                         SetEnv DB_NAME *******\n
                         SetEnv DB_USERNAME *******\n
                         SetEnv DB_PASSWORD *******\n" > .htaccess
                ;;
        "production")
                echo -e "SetEnv APP_ENV production\n
                         SetEnv DB_HOST *******\n
                         SetEnv DB_NAME *******\n
                         SetEnv DB_USERNAME *******\n
                         SetEnv DB_PASSWORD *******\n" > .htaccess
                ;;
        "staging")
                echo -e "SetEnv APP_ENV staging\n
                         SetEnv DB_HOST *******\n
                         SetEnv DB_NAME *******\n
                         SetEnv DB_USERNAME *******\n
                         SetEnv DB_PASSWORD *******\n" > .htaccess
                ;;
esac

if [ -f .htaccess ]; then
        chmod 644 .htaccess
fi

когда приложение развертывается, я получаю эту ошибку

[Instance: i-400fc60f Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command command01 failed .

и это то, что я думаю, это соответствующий ecert из журналов

2014-02-03 12:54:25,531 [INFO] (1923 MainThread) [command.py-130] [root command execute] Command returned: (code: 1, stdout: Error occurred during build: Command command01 failed
, stderr: None)
2014-02-03 12:54:25,533 [DEBUG] (1923 MainThread) [commandWrapper.py-60] [root commandWrapper main] Command result: {'status': 'FAILURE', 'results': [{'status': 'FAILURE', 'config_sets': ['Infra-WriteRuntimeConfig', 'Infra-WriteApplication1', 'Infra-WriteApplication2', 'Infra-EmbeddedPreBuild', 'Hook-PreAppDeploy', 'Infra-EmbeddedPostBuild', 'Hook-EnactAppDeploy', 'Hook-PostAppDeploy'], 'returncode': 1, 'events': [], 'msg': 'Error occurred during build: Command command01 failed\n'}], 'api_version': '1.0'}

У меня нет опыта работы с эластичным бобовым стеблем или оболочкой, поэтому легко может быть синтаксическая ошибка, но я, честно говоря, не знаю, нужно было смотреть


person Mark    schedule 03.02.2014    source источник


Ответы (2)


Ах, но именно поэтому работать с .ebextentions так весело!

Из добавленного вами журнала единственное, что я могу видеть, это то, что на самом деле ваша команда с именем command01 не удалась. Что пошло не так, как правило, загадка методом проб и ошибок.

Это как раз то место, где можно вернуть любые старые навыки, которые у вас могут быть в "printf () - отладке". Все, что вы повторяете из вызываемых вами скриптов, также будет выведено в тот же файл журнала (/var/log/cfn-init.log), что позволит вам понять, что происходит ...

Однако, глядя на ваши скрипты, я предполагаю, что $ PARAM1 не определен. Попробуйте передать его в качестве параметра сценария оболочки в вашем container_command, например так:

container_commands:
    command01:
        command: "./.ebextensions/setEnvVars.sh" ${PARAM1}

А затем используйте первый аргумент в инструкции Bash case:

#!/bin/bash
case "$1" in
    ...
esac

Удачи!


Изменить: О, еще одна вещь. Конечно, вам нужно будет установить параметр PARAM1 в консоли AWS. Вы делаете это в Configuration> Software Configuration> Environment Properties. На всякий случай, если вы еще этого не сделали ...

person joker    schedule 03.02.2014

Полезный прием для устранения проблем со сценариями - перенаправить stdout / stderr в файл.

commands:
  command-00:
    command: my_command args >> commands.out 2&>1
person Jim Flanagan    schedule 06.02.2014