Elastic Beanstalk - 在特定环境中设置.htpasswd

时间:2014-03-20 09:43:41

标签: php amazon-web-services elastic-beanstalk .htpasswd

我在Elastic Beanstalk中在两个环境,生产环境和舞台环境中配置了一个PHP网站。在每个环境中,我都有一个APPLICATION_ENV环境变量集,用于向代码标识它运行的环境。我不希望公众可以访问我的舞台网站,我想在这个环境中放置一个htpasswd,而不是在制作环境上。

为了尝试实现这一点,我在.ebextensions中创建了一个配置。整个.ebextensions文件夹有三个文件:

  1. 01stage.config

    container_commands:
      command-01:
        command: "/bin/bash .ebextensions/set_stage_htpasswd.sh"
        leader_only: true
    
  2. set_stage_htpasswd.sh

    #!/bin/bash
    if [ "$APPLICATION_ENV" == "stage" ]; then
      cp /var/app/current/.ebextensions/.htpasswd /var/app/current/ 
    fi
    
  3. htpasswd的

    my_username:my_password
    
  4. 我希望Elastic Beanstalk运行配置文件01stage.config,然后运行shell脚本set_stage_htpasswd.sh将.htpasswd文件复制到特定位置。

    但是当我尝试部署它时:

    1. 我在事件日志中收到错误消息:

      实例:i-2f795c6e模块:AWSEBAutoScalingGroup ConfigSet:null命令在实例上失败。返回码:1输出:构建期间发生错误:命令命令-01失败。

    2. Elastic Beanstalk通知我它已经部署了应用程序,并且它正在运行新版本,但它还没有实际部署新代码,并且仍在运行前一个代码。

    3. 这是尝试实现这一目标的正确方法,还是有更好的选择。

1 个答案:

答案 0 :(得分:1)

我认为command:行上的引号会给您带来麻烦。如果shell正在寻找一个非常奇怪的命令,我不会感到惊讶......但即使这样,可能更容易使用test:指令有条件地执行你想要的文件复制操作。尝试一下:

container_commands:
    command-01: cp .ebextensions/.htpasswd /var/app/current
    test: "[ .$APPLICATION_ENV. = .stage. ]"

(环境变量are available to container_commands:,但我不确定 - 您需要验证 - 它们在test:部分中也可用部分。)