弹性beanstalk配置错误

时间:2014-02-03 14:05:07

标签: php shell amazon-web-services elastic-beanstalk

我正在尝试在php 5.5容器中的弹性beanstalk上启动应用程序。有3个环境开发,分期和生产。从命令行设置环境变量时,您无法区分环境,因此我使用aws支持建议的解决方法,即在部署时运行shell脚本以根据另一个变量的设置来设置变量我可以根据环境而变化< / p>

。当我部署我的应用程序时,有一个.ebextensions /中的配置文件

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

shell脚本也在.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'}

我对弹性beanstalk或shell没有任何经验,所以很容易出现语法错误,但老实说我不知道​​要看看

2 个答案:

答案 0 :(得分:2)

啊,但这就是为什么使用.ebextentions非常有趣!

从你附加的日志中,我唯一能看到的是它实际上是你的名为command01的命令失败了。完全 出错的地方通常是反复试验的谜团。

这正是在“printf() - 调试”中恢复你可能拥有的任何旧技能的地方。您从调用的脚本中回显的任何内容也将输出到同一个日志文件(/var/log/cfn-init.log)中,以便您了解正在发生的事情......

然而,看看你的脚本,我的猜测是$ PARAM1未定义。尝试将其作为参数传递到container_command中的shell脚本,如下所示:

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

然后使用Bash case语句中的第一个参数:

#!/bin/bash
case "$1" in
    ...
esac
祝你好运!


编辑:哦,还有一件事。您当然需要在AWS控制台中设置PARAM1参数。您可以在Configuration&gt;中执行此操作Software Configuration&gt; Environment Properties。万一你还没有这样做......

答案 1 :(得分:1)

调试脚本问题的一个有用技巧是将stdout / stderr重定向到文件。

commands:
  command-00:
    command: my_command args >> commands.out 2&>1